module ROM::ClassMacros
Internal support module for class-level settings
@private
Public Instance Methods
defines(*args)
click to toggle source
Specify what macros a class will use
@example
class MyClass extend ROM::ClassMacros defines :one, :two one 1 two 2 end class OtherClass < MyClass two 'two' end MyClass.one # => 1 MyClass.two # => 2 OtherClass.one # => 1 OtherClass.two # => 'two'
@api private
# File lib/rom/support/class_macros.rb, line 29 def defines(*args) mod = Module.new args.each do |name| mod.module_eval <<-RUBY, __FILE__, __LINE__ + 1 def #{name}(value = Undefined) if value == Undefined defined?(@#{name}) && @#{name} else @#{name} = value end end RUBY end delegates = args.map { |name| "klass.#{name}(#{name})" }.join("\n") mod.module_eval <<-RUBY, __FILE__, __LINE__ + 1 def inherited(klass) super #{delegates} end RUBY extend(mod) end