Почему методы верхнего уровня, определенные в config.ru, не доступны для Sinatra :: Application? - PullRequest
1 голос
/ 09 мая 2011

Если у меня есть файл config.ru, подобный этому:

def my_method
  1+2
end

require 'my_sinatra_app'

run Sinatra::Application

Вызов my_method из my_sinatra_app.rb возвращает " неопределенный метод` my_method "для main: Object ".

Как метод верхнего уровня, он должен быть доступен отовсюду;почему my_method недоступен из my_sinatra_app.rb?

Ответы [ 2 ]

3 голосов
/ 09 мая 2011

config.ru равно instance_eval в Rack::Builder, поэтому определяемые вами методы не входят в область действия верхнего уровня. Если вы хотите использовать их в качестве методов верхнего уровня, вы можете попробовать поместить их в другой файл и require извлекать их из config.ru.

ex config.ru

p self # => #<Rack::Builder:0x1234123412 @ins=[]>

run lambda {|e|[200,{},[""]]}
1 голос
/ 09 мая 2011

Я думаю, вы могли бы определить его как модуль:

module MyMethodsModule

  def self.my_method
    #Method body
  end

end

А затем вызвать его методы:

::MyMethodsModule.my_method
...