Module: Rulezilla::DSL
- Included in:
- RuleBuilder::ConditionValueEvaluateRule, RuleBuilder::GherkinToConditionRule, RuleBuilder::GherkinToResultRule
- Defined in:
- lib/rulezilla/dsl.rb
Defined Under Namespace
Modules: ClassMethods
Class Method Summary collapse
- .create_klass(parent_klass) ⇒ Object
- .demodulize_klass_name(klass_name) ⇒ Object
- .get_super(klass) ⇒ Object
- .included(base) ⇒ Object
Class Method Details
.create_klass(parent_klass) ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/rulezilla/dsl.rb', line 16 def self.create_klass(parent_klass) klass_name = parent_klass.name klass = get_super(parent_klass).const_set("#{demodulize_klass_name(klass_name)}Record", Class.new) klass.class_eval do include Rulezilla::BasicSupport include Object.const_get("#{klass_name}Support") rescue NameError attr_reader :record define_method(:initialize) do |record| record = OpenStruct.new(record) if record.is_a?(Hash) instance_variable_set('@record', record) end define_method(:method_missing) do |meth, *args, &block| record.send(meth, *args, &block) end end private_class_method :create_klass, :get_super, :demodulize_klass_name end |
.demodulize_klass_name(klass_name) ⇒ Object
12 13 14 |
# File 'lib/rulezilla/dsl.rb', line 12 def self.demodulize_klass_name(klass_name) klass_name.split('::').last end |
.get_super(klass) ⇒ Object
8 9 10 |
# File 'lib/rulezilla/dsl.rb', line 8 def self.get_super(klass) Object.const_get (['Object'] + klass.name.split('::'))[0..-2].join('::') end |
.included(base) ⇒ Object
3 4 5 6 |
# File 'lib/rulezilla/dsl.rb', line 3 def self.included(base) base.extend ClassMethods create_klass(base) end |