user
user

Reputation: 1381

Rails/ruby undefined method

I have simple class with class's and private's methods

class XmlConnection

 def self.guitarmania
    request = HTTParty.get(site_url)
    handle_errors(request)
  end

 private

  def handle_errors(request)
    if request.code == 200
      request
    else
      raise 'Connection error'
    end
  end



end

when i call XmlConnection.guitarmania i get

NoMethodError: undefined method 'handle_errors' for XmlConnection:Class

How i can fix it?

Upvotes: 1

Views: 66

Answers (2)

kriskova
kriskova

Reputation: 578

You have to define handle_errors on the class as well:

def self.handle_errors(request)

Upvotes: 1

RichardAE
RichardAE

Reputation: 2970

When you're using a self. for a class method, all private methods also need to use self to be accessed from within it. The following will work:

class XmlConnection

 def self.guitarmania
    request = HTTParty.get(site_url)
    handle_errors(request)
  end

 private

  def self.handle_errors(request)
    if request.code == 200
      request
    else
      raise 'Connection error'
    end
  end
end

If all your methods will be class methods, you could wrap them all in a self to make it a bit more readable. This works exactly as above:

class XmlConnection
   class << self
     def guitarmania
        request = HTTParty.get(site_url)
        handle_errors(request)
      end

     private

      def handle_errors(request)
        if request.code == 200
          request
        else
          raise 'Connection error'
        end
      end
    end
end

Upvotes: 2

Related Questions