Module: Flapjack::Data::Extensions::Associations::ClassMethods

Defined in:
lib/flapjack/data/extensions/associations.rb

Instance Method Summary collapse

Instance Method Details

#jsonapi_lock_method(http_method, locks = nil, &block) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/flapjack/data/extensions/associations.rb', line 21

def jsonapi_lock_method(http_method, locks = nil, &block)
  locks ||= []

  if :delete.eql?(http_method)
    # all associations, not just the ones exposed via JSONAPI
    self.send(:with_association_data) do |assoc_data|
      assoc_data.each_pair do |name, data|
        locks |= [data.data_klass] + data.related_klasses
      end
    end

    locks |= jsonapi_associations.values.select {|a|
      !a.type.nil?
    }.map(&:lock_klasses).reduce([], :|)
  end

  if locks.empty?
    self.lock(&block)
  else
    locks.sort_by!(&:name)
    self.lock(*locks, &block)
  end
end

#populate_association_data(jsonapi_assoc) ⇒ Object



45
46
47
48
49
50
51
52
53
54
# File 'lib/flapjack/data/extensions/associations.rb', line 45

def populate_association_data(jsonapi_assoc)
  # SMELL mucking about with a zermelo protected method...
  self.send(:with_association_data) do |assoc_data|
    assoc_data.each_pair do |name, data|
      ja = jsonapi_assoc[name.to_sym]
      next if ja.nil?
      ja.association_data = data
    end
  end
end