Sha256: ca0efd050a4dcf0e2c86e3683eb677cddd27efa56a17d8c23e11df76d115ff7a
Contents?: true
Size: 1.47 KB
Versions: 1
Compression:
Stored size: 1.47 KB
Contents
# frozen_string_literal: true module YAAF # Parent class for form objects class Form include ::ActiveModel::Model include ::ActiveModel::Validations::Callbacks include ::ActiveRecord::Transactions define_model_callbacks :save delegate :transaction, to: ::ActiveRecord::Base validate :validate_models def save(options = {}) save_form(options) rescue ActiveRecord::RecordInvalid, ActiveRecord::RecordNotSaved, ActiveModel::ValidationError false end def save!(options = {}) save_form(options) end private attr_accessor :models def save_form(options) validate! unless options[:validate] == false run_callbacks :commit do save_in_transaction(options) end true end def save_in_transaction(options) transaction do run_callbacks :save do save_models(options) end end rescue Exception => e handle_transaction_rollback(e) end def save_models(options) options.merge!(validate: false) models.map do |model| model.marked_for_destruction? ? model.destroy! : model.save!(**options) end end def validate_models models.each { |model| promote_errors(model) if model.invalid? } end def promote_errors(model) errors.merge!(model.errors) end def handle_transaction_rollback(exception) run_callbacks :rollback raise exception end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
yaaf-3.0.0 | lib/yaaf/form.rb |