module Rulezilla::DSL
Public Class Methods
create_klass(parent_klass)
click to toggle source
# File lib/rulezilla/dsl.rb, line 18 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 begin include Object.const_get("#{klass_name}Support") rescue StandardError NameError end 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)
click to toggle source
# File lib/rulezilla/dsl.rb, line 14 def self.demodulize_klass_name(klass_name) klass_name.split('::').last end
get_super(klass)
click to toggle source
# File lib/rulezilla/dsl.rb, line 10 def self.get_super(klass) Object.const_get (['Object'] + klass.name.split('::'))[0..-2].join('::') end
included(base)
click to toggle source
# File lib/rulezilla/dsl.rb, line 5 def self.included(base) base.extend ClassMethods create_klass(base) end