Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Parent
- include Mongoid::Document
- field :name
- end
- module Adoptable
- def self.included(base)
- base_name_symbol = base.name.pluralize.underscore
- base.field :cost, :type => Integer, :default => 0
- # ChildGroup
- class_name = base.name + 'Group'
- # :child_groups
- class_name_symbol = class_name.pluralize.underscore.to_sym
- klass = Object.const_set(class_name,Class.new)
- klass.class_eval do
- include Mongoid::Document
- field :quantity, :type => Integer, :default => 0
- embedded_in :parent, :inverse_of => class_name_symbol
- referenced_in :resource, :class_name => base.name, :inverse_of => class_name_symbol
- end
- # child has many child_groups, though this side of the association is never used
- base.references_many class_name_symbol
- Parent.embeds_many class_name_symbol
- # the following code creates the convenient accessor user.children
- Parent.class_eval do
- define_method(base_name_symbol) do
- send(class_name_symbol).map { |resource_group| resource_group.resource }
- end
- end
- end
- end
- class Child
- include Mongoid::Document
- include Adoptable
- field :name
- end
Add Comment
Please, Sign In to add comment