Sha256: 7c2f56d0ab5989c5827983c9126eb8b28290189bc5d64a63b070fa2788caefad

Contents?: true

Size: 940 Bytes

Versions: 5

Compression:

Stored size: 940 Bytes

Contents

class Association < Field
  def json_action(action, value, record)
    store = record.get_raw(name)
    
    case action
    when 'set'
      clear(store, record)
      process_json_items(value, record, store, :associate)
    when 'add'
      process_json_items(value, record, store, :associate)
    when 'remove'
      process_json_items(value, record, store, :unassociate)
    when 'clear'
      clear(store, record)
    end
    
    record.changed!(name)
  end
  
  def from_json(value, record)
    store = record.get_raw(name)
    clear(store, record)
    process_json_items(value, record, store, :associate)
    record.get(name)
  end
  
  
  private
    def process_json_items(items, record, store, method)
      items = [items] unless items.is_a?(Array)
      items.each do |raw_item|
        item = process_json_item(raw_item, store, record)
        next if item.nil?
        send(method, item, store, record)
      end
    end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
yodel-0.0.7 lib/yodel/models/core/associations/association.rb
yodel-0.0.4 lib/yodel/models/core/associations/association.rb
yodel-0.0.3 lib/yodel/models/core/associations/association.rb
yodel-0.0.2 lib/yodel/models/core/associations/association.rb
yodel-0.0.1 lib/yodel/models/core/associations/association.rb