Class: Tessa::Model::Field
- Inherits:
-
Object
- Object
- Tessa::Model::Field
- Defined in:
- lib/tessa/model/field.rb
Instance Method Summary collapse
- #apply(set, on:) ⇒ Object
- #change_set_for(value) ⇒ Object
- #difference_change_set(subtrahend_ids, on:) ⇒ Object
- #id(on:) ⇒ Object
- #id_field ⇒ Object
- #ids(on:) ⇒ Object
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_field ⇒ Object
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 |