У меня есть модуль в app/misc/dsl/builder.rb
, который имеет этот кодRails 4: Неопределенный метод на модуле
module Dsl
class Builder
def initialize(context, &block)
return if not block_given?
parent_context = block.binding.eval "self"
parent_context.extend Proxy
parent_context.object = context
parent_context.instance_eval &block
end
end
def self.set_context(context, &block)
Dsl::Builder.new(context, &block)
end
end
Примечание: этот каталог misc
поджат в application.rb
config.autoload_paths += Dir[Rails.root.join('app', 'models', '{**/}'),
Rails.root.join('app', 'misc', '{**/}')
]
Затем, где-то в тексте (скажем, на foo.rb
) У меня есть этот код:
Dsl.set_context(obj) do
#some code with obj receiving messages
end
Используемый тестовый стек состоит из Zeus + Guard + Rspec. Теперь, позволяет сказать, что я переписать код, чтобы что-то не работает
Dsl.set_context(obj) do
asdqwe #this message does not exists
end
Со времен до времени, я получаю это озадачивает сообщение
1) SomeOtherClass search_hash receiving keywords params should query for those keywords
Failure/Error: subject.search_hash
NoMethodError:
undefined method `set_context' for Dsl:Module
# ./app/misc/product_query.rb:116:in `base_search_hash'
# ./app/misc/product_query.rb:25:in `search_hash'
# ./spec/misc/product_query_spec.rb:78:in `block (4 levels) in <top (required)>'
# -e:1:in `<main>'
вместо правильного сообщения, которое должно быть в отношении undefined method asdqwe
Есть ли какие-нибудь подсказки об этом?
вы перезапустите сервер? мотыга вы предварительно загружаете в application.rb? похоже, что это не груз. вы могли бы попробовать приложение «requrie»/misc/dsl/builder.rb''? – lalo
@lalo только что обновил вопрос. Я попробовал 'require_relative 'app/misc/dsl/builder.rb'', а затем да, он загружается. Это проблема загрузки, но не может понять, что происходит. – geekazoid