Guest User

Untitled

a guest
Jan 23rd, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.95 KB | None | 0 0
  1. module SingleTableInheritance
  2.  
  3. def self.included(klass)
  4. klass.extend ClassMethods
  5. end
  6.  
  7. def class_type=(value)
  8. self[:type] = value
  9. end
  10.  
  11. def class_type
  12. return self[:type]
  13. end
  14.  
  15. def after_initialize
  16. self.class_type = self.name if self.class_type.nil?
  17. end
  18.  
  19. module ClassMethods
  20. def factory(params = {})
  21. class_name = params[:type]
  22. class_name ||= self.name
  23. if defined? class_name.constantize
  24. o = class_name.constantize.new(params)
  25. else
  26. o = self.new(params)
  27. end
  28. o.class_type = class_name if o.class_type.nil?
  29. o
  30. end
  31.  
  32. def factory!(params = {})
  33. o = factory params
  34. o.save!
  35. o
  36. end
  37.  
  38. def call_class_method(class_name, method_name, *args)
  39. class_name ||= self.name
  40. if defined? class_name.constantize
  41. class_name.constantize.method(method_name).call(*args)
  42. else
  43. self.method(method_name).call(*args)
  44. end
  45. end
  46. end
  47. end
Add Comment
Please, Sign In to add comment