Sha256: 9cbf428a811962613f2859c076de789074099387d6b2685b4867fa1888ed0cf8
Contents?: true
Size: 1.37 KB
Versions: 4
Compression:
Stored size: 1.37 KB
Contents
# frozen_string_literal: true # Class for syncing fields and object # # @attr_reader [Object] object Form objecy # @attr_reader [Ciesta::FieldList] fields Field list class Ciesta::Syncer # Constructor # # @api private # @param [Object] object Form object # @param [Ciesta::FieldList] fields Field list def initialize(object, fields) @object = object @fields = fields end # Sync attributes with object # # @param [Block] block Block which will be yielded after syncing # # @return [Booelan] def sync return if object.nil? fields.each do |field| begin save_to_object(field) rescue StandardError nil end end yield(object) if block_given? true end # Sync attributes with object # # @param [Block] block Block which will be yielded after syncing # # @raise Ciesta::ModelNotPresent # @raise Ciesta::AttributeNotDefined # @return [Booelan] def sync! raise Ciesta::ModelNotPresent, "Cannot sync without model" if object.nil? fields.each { |field| save_to_object(field) } yield(object) if block_given? true end private attr_reader :object, :fields def save_to_object(field) object.send("#{field.name}=", field.value) unless field.virtual? rescue NoMethodError raise Ciesta::AttributeNotDefined, "Attribute #{field.name} is not defined on model" end end
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
ciesta-0.3.2 | lib/ciesta/syncer.rb |
ciesta-0.3.1 | lib/ciesta/syncer.rb |
ciesta-0.2.5 | lib/ciesta/syncer.rb |
ciesta-0.2.4 | lib/ciesta/syncer.rb |