Class: Tessa::Model::Field

Inherits:
Object
  • Object
show all
Defined in:
lib/tessa/model/field.rb

Instance Method Summary collapse

Instance Method Details

#apply(set, on:) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/tessa/model/field.rb', line 23

def apply(set, on:)
  ids = ids(on: on)

  set.scoped_changes.each do |change|
    if change.add?
      ids << change.id
    elsif change.remove?
      ids.delete change.id
    end
  end

  if multiple?
    on.public_send(id_field_writer, ids)
  else
    on.public_send(id_field_writer, ids.first)
  end
end

#change_set_for(value) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/tessa/model/field.rb', line 41

def change_set_for(value)
  case value
  when AssetChangeSet
    value
  when Array
    value.map { |item| change_set_for(item) }.reduce(:+)
  when Asset
    AssetChangeSet.new.tap { |set| set.add(value) }
  else
    AssetChangeSet.new
  end
end

#difference_change_set(subtrahend_ids, on:) ⇒ Object



54
55
56
57
58
59
60
# File 'lib/tessa/model/field.rb', line 54

def difference_change_set(subtrahend_ids, on:)
  AssetChangeSet.new.tap do |change_set|
    (ids(on: on) - subtrahend_ids).each do |id|
      change_set.remove(id)
    end
  end
end

#id(on:) ⇒ Object



19
20
21
# File 'lib/tessa/model/field.rb', line 19

def id(on:)
  on.public_send(id_field)
end

#id_fieldObject



11
12
13
# File 'lib/tessa/model/field.rb', line 11

def id_field
  super || "#{name}#{default_id_field_suffix}"
end

#ids(on:) ⇒ Object



15
16
17
# File 'lib/tessa/model/field.rb', line 15

def ids(on:)
  [*id(on: on)]
end