lib/rom/relation_builder.rb in rom-0.4.2 vs lib/rom/relation_builder.rb in rom-0.5.0
- old
+ new
@@ -1,16 +1,18 @@
module ROM
-
# @api private
class RelationBuilder
attr_reader :schema, :mod
# @api private
- def initialize(schema)
+ def initialize(schema, relations)
@schema = schema
- @mod = schema.each_with_object(Module.new) do |(name, relation), m|
- m.send(:define_method, name) { relation.dataset }
+
+ @mod = Module.new
+
+ @mod.module_exec do
+ define_method(:__relations__) { relations }
end
end
# @api private
def call(name)
@@ -32,17 +34,29 @@
end
def name
#{name.inspect}
end
+
+ def respond_to_missing?(name, _include_private = false)
+ __relations__.key?(name) || super
+ end
+
+ private
+
+ def method_missing(name, *args, &block)
+ if __relations__.key?(name)
+ __relations__[name]
+ else
+ super
+ end
+ end
RUBY
klass.send(:include, mod)
yield(klass)
klass.new(schema_relation.dataset, schema_relation.header)
end
-
end
-
end