Module: Amfetamine::Relationships::ClassMethods

Defined in:
lib/amfetamine/relationships.rb

Instance Method Summary collapse

Instance Method Details

#_relationship_childrenObject



66
67
68
# File 'lib/amfetamine/relationships.rb', line 66

def _relationship_children
  @_relationship_children
end

#_relationship_parentsObject



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