Module: Amfetamine::Relationships::ClassMethods
- Defined in:
- lib/amfetamine/relationships.rb
Instance Method Summary collapse
- #_relationship_children ⇒ Object
- #_relationship_parents ⇒ Object
- #belongs_to_resource(resource_name, opts = {}) ⇒ Object
-
#has_many_resources(resource_name, opts = {}) ⇒ Object
has_many_resources :pupils, class_name: ‘Child’, foreign_key: ‘dummy_id’.
Instance Method Details
#_relationship_children ⇒ Object
66 67 68 |
# File 'lib/amfetamine/relationships.rb', line 66 def _relationship_children @_relationship_children end |
#_relationship_parents ⇒ Object
83 84 85 |
# File 'lib/amfetamine/relationships.rb', line 83 def _relationship_parents @_relationship_parents end |
#belongs_to_resource(resource_name, opts = {}) ⇒ Object
70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/amfetamine/relationships.rb', line 70 def belongs_to_resource(resource_name, opts = {}) self.class_eval do class_name = opts.delete(:class_name) { resource_name } foreign_key = opts.delete(:foreign_key) { resource_name.to_s.downcase.gsub('/', '_') + "_id" } attr_reader resource_name attr_reader class_name @_relationship_parents ||= [] @_relationship_parents << { resource_name: resource_name, class_name: class_name, foreign_key: foreign_key } end end |
#has_many_resources(resource_name, opts = {}) ⇒ Object
has_many_resources :pupils, class_name: ‘Child’, foreign_key: ‘dummy_id’
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/amfetamine/relationships.rb', line 42 def has_many_resources(resource_name, opts = {}) self.class_eval do class_name = opts.delete(:class_name) { resource_name } foreign_key = opts.delete(:foreign_key) { self.name.to_s.downcase.gsub('/', '_').singularize + "_id" } attr_reader resource_name attr_reader class_name @_relationship_children ||= [] @_relationship_children << { resource_name: resource_name, class_name: class_name, foreign_key: foreign_key } define_method("build_#{resource_name.to_s.downcase.gsub('/', '_').singularize}") do |*args| args = args.shift || {} # "my_module/my_companies" => "MyModule::MyCompany" Amfetamine.parent.const_get(class_name.to_s.singularize.split('/').map { |s| s.split('_').map(&:capitalize).join }.join('::')).new(args.merge(foreign_key => self.id)) end define_method("create_#{resource_name.to_s.downcase.gsub('/', '_').singularize}") do |*args| args = args.shift || {} Amfetamine.parent.const_get(class_name.to_s.singularize.split('/').map { |s| s.split('_').map(&:capitalize).join }.join('::')).create(args.merge(foreign_key => self.id)) end end end |