Sha256: 3033c438b3ab193c1f908125215a298d1e5d0399a2e7fb8f86cc2e61534c38ba

Contents?: true

Size: 1.42 KB

Versions: 1

Compression:

Stored size: 1.42 KB

Contents

module ObjectAttorney
  module OrmHandlers

    module SmoothOperator

      def save(options = {})
        save!(options, :save)
      end

      def save!(options = {}, save_method = :save!)
        before_save
        save_result = valid? ? save_after_validations(save_method, options) : false
        after_save if valid? && save_result
        save_result
      end

      def destroy(options = {})
        return true if represented_object.blank?
        evoke_method_on_object(represented_object, :destroy, options)
      end

      def call_save_or_destroy(object, save_method, options = {})
        if object == self || object == represented_object
          represented_object.present? ? evoke_method_on_object(represented_object, save_method, options) : true
        else
          save_method = :destroy if check_if_marked_for_destruction?(object)
          evoke_method_on_object(object, save_method, options)
        end
      end

      protected #################### PROTECTED METHODS DOWN BELOW ######################

      def save_after_validations(save_method, options = {})
        return true if represented_object.blank?
        evoke_method_on_object(represented_object, save_method, options).ok?
      end

      private #################### PRIVATE METHODS DOWN BELOW ######################

      def evoke_method_on_object(object, method, options = {})
        object.send(method, options)
      end

    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
object_attorney-1.1.1 lib/object_attorney/orm_handlers/smooth_operator.rb