Module: Disposable::Twin::Sync
- Includes:
- SyncOptions, ToNestedHash, Writeable
- Defined in:
- lib/disposable/twin/sync.rb
Defined Under Namespace
Modules: SkipGetter, SkipUnchanged, SyncOptions, ToNestedHash, Writeable Classes: Options
Class Method Summary collapse
-
.hash_representer(twin_class, &block) ⇒ Object
Creates a fresh copy of the internal representer and adds Representable::Hash.
Instance Method Summary collapse
-
#sync!(options) ⇒ Object
Sync all scalar attributes, call sync! on nested and return model.
- #sync_models(options = {}) ⇒ Object (also: #sync)
Methods included from Writeable
Methods included from SyncOptions
Methods included from ToNestedHash
#nested_hash_source, #to_nested_hash
Class Method Details
.hash_representer(twin_class, &block) ⇒ Object
Creates a fresh copy of the internal representer and adds Representable::Hash. This is used wherever a hash transformation is needed.
22 23 24 25 26 27 28 29 30 31 |
# File 'lib/disposable/twin/sync.rb', line 22 def self.hash_representer(twin_class, &block) Disposable::Rescheme.from(twin_class, recursive: false, definitions_from: lambda { |twin_klass| twin_klass.definitions }, superclass: Representable::Decorator, include: Representable::Hash, exclude_options: [:default], # TODO: TEST IN default_test. &block ) end |
Instance Method Details
#sync!(options) ⇒ Object
Sync all scalar attributes, call sync! on nested and return model.
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/disposable/twin/sync.rb', line 41 def sync!() # semi-public. # TODO: merge this into Sync::Run or something and use in Struct, too, so we don't # need the representer anymore? = (Options[]) schema.each() do |dfn| property_value = sync_read(dfn) # unless dfn[:nested] mapper.send(dfn.setter, property_value) # always sync the property next end # First, call sync! on nested model(s). nested_model = PropertyProcessor.new(dfn, self, property_value).() { |twin| twin.sync!({}) } next if nested_model.nil? # Then, write nested model to parent model, e.g. model.songs = [<Song>] mapper.send(dfn.setter, nested_model) # @model.artist = <Artist> end model end |
#sync_models(options = {}) ⇒ Object Also known as: sync
33 34 35 36 37 |
# File 'lib/disposable/twin/sync.rb', line 33 def sync_models(={}) return yield to_nested_hash if block_given? sync!() end |