Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module SingleTableInheritance
- def self.included(klass)
- klass.extend ClassMethods
- end
- def class_type=(value)
- self[:type] = value
- end
- def class_type
- return self[:type]
- end
- def after_initialize
- self.class_type = self.name if self.class_type.nil?
- end
- module ClassMethods
- def factory(params = {})
- class_name = params[:type]
- class_name ||= self.name
- if defined? class_name.constantize
- o = class_name.constantize.new(params)
- else
- o = self.new(params)
- end
- o.class_type = class_name if o.class_type.nil?
- o
- end
- def factory!(params = {})
- o = factory params
- o.save!
- o
- end
- def call_class_method(class_name, method_name, *args)
- class_name ||= self.name
- if defined? class_name.constantize
- class_name.constantize.method(method_name).call(*args)
- else
- self.method(method_name).call(*args)
- end
- end
- end
- end
Add Comment
Please, Sign In to add comment