Sha256: 3ab1b862c60f8aeec48399257bc53ca5f157bb9609690f8bf6a3fa974e502028

Contents?: true

Size: 1.57 KB

Versions: 11

Compression:

Stored size: 1.57 KB

Contents

require "object_attorney/orm_handlers/smooth_operator"

module ObjectAttorney
  module ORM
  
    def new_record?
      try_or_return(@represented_object, :new_record?, true)
    end

    def persisted?
      try_or_return(@represented_object, :persisted?, false)
    end

    def save
      save!(:save)
    end

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

    def destroy
      return true if @represented_object.blank?
      evoke_method_on_object(@represented_object, :destroy)
    end

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

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

    def before_save; end
    def after_save; end

    def save_after_validations(save_method)
      return true if @represented_object.blank?
      evoke_method_on_object(@represented_object, save_method)
    end

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

    def check_if_marked_for_destruction?(object)
      object.respond_to?(:marked_for_destruction?) ? object.marked_for_destruction? : false
    end

    def evoke_method_on_object(object, method)
      object.send(method)
    end

  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
object_attorney-1.0.2 lib/object_attorney/orm.rb
object_attorney-1.0.1 lib/object_attorney/orm.rb
object_attorney-1.0.0 lib/object_attorney/orm.rb
object_attorney-0.0.17 lib/object_attorney/orm.rb
object_attorney-0.0.16 lib/object_attorney/orm.rb
object_attorney-0.0.15 lib/object_attorney/orm.rb
object_attorney-0.0.14 lib/object_attorney/orm.rb
object_attorney-0.0.12 lib/object_attorney/orm.rb
object_attorney-0.0.11 lib/object_attorney/orm.rb
object_attorney-0.0.10 lib/object_attorney/orm.rb
object_attorney-0.0.9 lib/object_attorney/orm.rb