Как я могу изменить этот класс, чтобы использовать шаблон синглтона, например, activemodel? - PullRequest
1 голос
/ 02 марта 2012

У меня есть «модель» httparty, которую я использую примерно так:

myRest = RestModel.new
myRest.someGetResquest()
myRest.somePostRequest()

Как бы я изменил ее так, чтобы она работала аналогично активной модели, например, так?

RestModel.someGetRequest()
RestModel.somePostRequest()

В этом сообщении в блоге показано, как включить одноэлементный модуль, но он по-прежнему обращается к экземпляру следующим образом: RestModel.instance.someGetRequest()

вот мой код:

class Managementdb
    include HTTParty

    base_uri "http://localhost:7001/management/"

    def initialise(authToken)
        self.authToken = authToken
    end

    def login()
        response = self.class.get("/testLogin")
        if response.success?
          self.authToken = response["authToken"]
        else
          # this just raises the net/http response that was raised
          raise response.response    
        end
    end

    attr_accessor :authToken

    ...
end

Скажитемне, что я все делаю неправильно (покажи мне свет)

1 Ответ

3 голосов
/ 02 марта 2012

Вы хотите использовать extend вместо include, что добавит методы в синглтон класса, а не сделает их доступными в экземплярах.

class Managementdb
  extend HTTParty
end

более длинный пример, иллюстрирующий это:

module Bar
  def hello
    "Bar!"
  end
end
module Baz
  def hello
    "Baz!"
  end
end
class Foo
  include Bar
  extend Baz
end

Foo.hello     # => "Baz!"
Foo.new.hello # => "Bar!"
...