Guest User

Untitled

a guest
Jul 20th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.27 KB | None | 0 0
  1. class Parent
  2. include Mongoid::Document
  3.  
  4. field :name
  5. end
  6.  
  7. module Adoptable
  8. def self.included(base)
  9. base_name_symbol = base.name.pluralize.underscore
  10. base.field :cost, :type => Integer, :default => 0
  11.  
  12. # ChildGroup
  13. class_name = base.name + 'Group'
  14. # :child_groups
  15. class_name_symbol = class_name.pluralize.underscore.to_sym
  16. klass = Object.const_set(class_name,Class.new)
  17. klass.class_eval do
  18. include Mongoid::Document
  19. field :quantity, :type => Integer, :default => 0
  20. embedded_in :parent, :inverse_of => class_name_symbol
  21. referenced_in :resource, :class_name => base.name, :inverse_of => class_name_symbol
  22. end
  23.  
  24. # child has many child_groups, though this side of the association is never used
  25. base.references_many class_name_symbol
  26.  
  27. Parent.embeds_many class_name_symbol
  28. # the following code creates the convenient accessor user.children
  29. Parent.class_eval do
  30. define_method(base_name_symbol) do
  31. send(class_name_symbol).map { |resource_group| resource_group.resource }
  32. end
  33. end
  34. end
  35. end
  36.  
  37. class Child
  38. include Mongoid::Document
  39. include Adoptable
  40.  
  41. field :name
  42. end
Add Comment
Please, Sign In to add comment