Module: Intermodal::Models::HasParentResource::ClassMethods

Includes:
Accountability::Get
Included in:
ResourceLinking::ClassMethods
Defined in:
lib/intermodal/concerns/models/has_parent_resource.rb

Instance Method Summary collapse

Methods included from Accountability::Get

#get

Instance Method Details

#build_get_query(_query, opts) ⇒ Object



36
37
38
39
40
41
# File 'lib/intermodal/concerns/models/has_parent_resource.rb', line 36

def build_get_query(_query, opts)
  _query = super(_query, opts)
  _query = _query.by_parent(opts[:parent]) if opts[:parent]
  _query = _query.by_parent_id(opts[:parent_id]) if opts[:parent_id]
  return _query
end

#parent_resource(resource, options = {}) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/intermodal/concerns/models/has_parent_resource.rb', line 13

def parent_resource(resource, options = {})
  parent_resource_scope = "by_#{resource}_id"
  parent_table_name = options[:parent_table_name] || resource.to_s.pluralize

  instance_eval do
    if options[:class_name]
      belongs_to resource, :class_name => options[:class_name]
    else
      belongs_to resource
    end

    validates_presence_of resource

    scope parent_resource_scope, lambda { |id| where("#{resource}_id" => id) }
    scope "by_#{resource}", lambda { |parent| send(parent_resource_scope, parent.id) }
    scope "by_parent_id", lambda { |id| send(parent_resource_scope, id) }
    scope :by_parent, lambda { |parent| by_parent_id(parent.id) }

    scope :by_account_id, lambda { |a_id| joins(resource).where( parent_table_name => { :account_id => a_id } ) }
    scope :by_account, lambda { |a| (a.id) }
  end
end