jwaldrip/memory_model

View on GitHub
lib/memory_model/base.rb

Summary

Maintainability
A
0 mins
Test Coverage
require 'concerned_inheritance'
require 'active_support/core_ext/object'
require 'active_support/core_ext/hash'
require 'active_support/dependencies/autoload'
require 'active_model'

module MemoryModel

  class InvalidCollectionError < Error ; end

  class Base
    extend ActiveSupport::Autoload
    extend ConcernedInheritance

    autoload :Fields
    autoload :Collectible
    autoload :Actions
    autoload :Attributes
    autoload :Persistence
    autoload :Operations
    autoload :Conversion
    autoload :AutoIncrement

    # Active Model Additions
    extend ActiveModel::Callbacks
    extend ActiveModel::Naming
    extend ActiveModel::Translation
    include ActiveModel::Conversion
    include ActiveModel::Serialization
    include ActiveModel::Validations

    # 3.2 Only Active Model Additions
    if ActiveModel::VERSION::MAJOR < 4 || (ActiveModel::VERSION::MAJOR == 3 && ActiveModel::VERSION::MINOR > 2)
      include ActiveModel::MassAssignmentSecurity
      include ActiveModel::Observing
    end

    # Memory Model Additions
    include Fields
    include Collectible
    include Operations::Comparisons
    include Actions
    include Attributes
    include Persistence
    include Conversion
    include AutoIncrement

    # Active Model Callbacks
    define_model_callbacks :initialize, only: [:after]

    def initialize(attributes={})
      unless self.class.collection.is_a? MemoryModel::Collection
        raise MemoryModel::InvalidCollectionError, "#{self.class} does not have an assigned collection"
      end
      fields.set_default_values(self, attributes)
      run_callbacks :initialize
    end

    def initialize_dup(other)
      @attributes = other.attributes.dup
      reset_incremented_fields!
    end

  end
end