0

I'm trying to call one class within another class which is in a different module.

require 'json'
require 'pry'

module Parsers
  class JiraParser
    def initialize(event)
      @event = JSON.parse(event)
    end

    def call
      reporter_email = parse_reporter_email
      ::Slack::GetUserId.new(reporter_email).call
    end

    private

    attr_reader :event

    def parse_reporter_email
      event.dig('issue', 'reporter', 'emailAddress')
    end
  end
end

Parsers::JiraParser.new(event).call

code structure:

source__
       |-parsers__
       |          |_ jira_parser.rb
       |
       |-slack____
                  |_ get_user_id.rb

When I'm trying to call this class in the console I'm getting an error:

uninitialized constant Slack (NameError)

So I thought I just need to add require "slack/get_user_id" but I've received another error instead:

require': cannot load such file -- slack/get_user_id (LoadError)

Did I missed something?

EDIT:

$LOAD_PATH

=> ["/Users/usr/.rvm/rubies/ruby-2.5.0/lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib",
 "/Users/usr/.rvm/gems/ruby-2.5.0/gems/coderay-1.1.2/lib",
 "/Users/usr/.rvm/gems/ruby-2.5.0/gems/method_source-0.9.2/lib",
 "/Users/usr/.rvm/gems/ruby-2.5.0/gems/pry-0.12.2/lib",
 "/Users/usr/.rvm/gems/ruby-2.5.0/gems/json-2.2.0/lib",
 "/Users/usr/.rvm/gems/ruby-2.5.0/extensions/x86_64-darwin-18/2.6.0-static/json-2.2.0",
 "/Users/usr/.rvm/gems/ruby-2.5.0/gems/pry-rails-0.3.9/lib",
 "/Users/usr/.rbenv/versions/2.6.1/lib/ruby/site_ruby/2.6.0",
 "/Users/usr/.rbenv/versions/2.6.1/lib/ruby/site_ruby/2.6.0/x86_64-darwin18",
 "/Users/usr/.rbenv/versions/2.6.1/lib/ruby/site_ruby",
 "/Users/usr/.rbenv/versions/2.6.1/lib/ruby/vendor_ruby/2.6.0",
 "/Users/usr/.rbenv/versions/2.6.1/lib/ruby/vendor_ruby/2.6.0/x86_64-darwin18",
 "/Users/usr/.rbenv/versions/2.6.1/lib/ruby/vendor_ruby",
 "/Users/usr/.rbenv/versions/2.6.1/lib/ruby/2.6.0",
 "/Users/usr/.rbenv/versions/2.6.1/lib/ruby/2.6.0/x86_64-darwin18"]
mr_muscle
  • 2,536
  • 18
  • 61

1 Answers1

0

If you are running this as a single ruby script, you must require the files needed to run your code. You will need to make sure each file had been required before you can call the classes or methods defined within them. There are many ways to go about this depending on your code structure. But you simply cannot execute any code until it has been defined at runtime. See this answer for more ideas.

Best way to require all files from a directory in ruby?

lacostenycoder
  • 10,623
  • 4
  • 31
  • 48