class Frigate::Form::Synchronizer::Contract

Synchronizes form properties with model properties

Public Instance Methods

sync_properties_with_model_or_params() click to toggle source

Synchronizes given model's attributes with form properties and associations:properties

# File lib/frigate/form/synchronizer/contract.rb, line 8
def sync_properties_with_model_or_params
        #
        # sync model properties with form properties
        #
        form.properties.each do |_prop|
                if form.model.respond_to?(_prop.name.to_sym)
                        _prop.value = form.model.send(_prop.name.to_sym)
                else
                        raise StandardError.new('form model does not have %s property' % [_prop.name])
                end
        end
        #
        # sync model associations' properties with form associations' properties
        #
        form.associations.each do |_a|
                if form.model.respond_to?(_a.name.to_sym) and !form.model.send(_a.name.to_sym).nil?
                        _a.properties.each do |_p|
                                if form.model.send(_a.name.to_sym).respond_to?(_p.name.to_sym)
                                        _p.value = form.model.send(_a.name.to_sym).send(_p.name.to_sym)
                                else
                                        _err_msg = 'form model %s association does not have %s property' % [_a.name, _p.name]
                                        raise StandardError.new(_err_msg)
                                end
                        end
                else
                        if form.model.respond_to?(_a.name.to_sym)
                                _err_msg = 'form model %s association is nil' % [_a.name]
                                raise StandardError.new(_err_msg)
                        else
                                _err_msg = 'form model does not have %s association' % [_a.name]
                                raise StandardError.new(_err_msg)
                        end
                end
        end
end