1

以下を考えると:

module RESTable
  BASE_URL  = "http://url.domain/api/rest"
  LOGIN_URL = "#{BASE_URL}/login"
  LOGOUT_URL = "#{BASE_URL}/logout"

  def request_url
    "#{BASE_URL}/mbo/#{@@object_resource}/_format=json"
  rescue NameError
    p "@@object_resource was not defined"
  end
end

class ServiceRequests
  include RESTable
  @@object_resource = "sr"

  def initialize
    binding.pry
  end
end

pry セッションで request_url を呼び出すと、次の結果が得られます。

"@@object_resource was not defined"

ただし、@@object_resource は "sr" として設定されます。

アイデアは、各クラスに RESTable モジュールをインクルードするだけで、request_url を呼び出すと、インクルード元のクラスの @@object_resource に基づいて適切な URL が得られるというものです。

より一般的には、モジュール内からクラス変数を呼び出すにはどうすればよいですか?

4

1 に答える 1

0

モジュールで @@object_resource を宣言することでこれを解決し、@@object_resource が変更されていない (つまり、空白の) 場合はエラーを発生させます。

更新されたモジュールは次のとおりです。

module RESTable
  BASE_URL  = "http://url.domain/api/rest"
  LOGIN_URL = "#{BASE_URL}/login"
  LOGOUT_URL = "#{BASE_URL}/logout"
  @@object_resource = ""

  def request_url
    raise StandardError, "@@object_resource can't be blank" if @@object_resource == ""
    "#{BASE_URL}/mbo/#{@@object_resource}/_format=json"
  rescue NameError
    p "@@object_resource was not defined"
  end
end
于 2013-08-12T10:08:03.327 に答える