Sha256: d7367eeaa259c79f02a5ffafb4f9c407a58226827b2ea56bf79f5a923d251146

Contents?: true

Size: 1.85 KB

Versions: 3

Compression:

Stored size: 1.85 KB

Contents

# Mixin module for all model classes.
#
module Model
  extend ActiveSupport::Concern

  def self.redefined_field_types
    @redefined_field_types ||= {}
  end

  def self.define_field_type( type, method_name )
    redefined_field_types[type] = method_name.to_sym
  end

  module ClassMethods

    # Finds document by id.
    # Raises error if document is not found.
    #
    def find!( *args )
      raise_not_found_error_was = Mongoid.raise_not_found_error
      begin
        Mongoid.raise_not_found_error = true
        self.find( *args )
      ensure
        Mongoid.raise_not_found_error = raise_not_found_error_was
      end
    end

    # ...
    # other class methods can be defined inside Model::ClassMethods by aerogel modules
    # ...

  end # module ClassMethods

  included do
    include Mongoid::Document

    class << self
      alias_method :define_field_mongoid, :field
    end

    # Defines native Mongoid field or calls field type handler
    # in case of redefined field types.
    #
    def self.field( name, opts = {} )
      if opts[:type] && Model.redefined_field_types.key?( opts[:type] )
        self.send Model.redefined_field_types[opts[:type]], name, opts
      else
        self.define_field_mongoid( name, opts )
      end
    end

    extend ClassMethods
  end

  module NonPersistent
    extend ActiveSupport::Concern
    included do
      include Mongoid::Document
      before_save do
        raise "Attempt to save non-persistent model"
      end
    end
  end # module NonPersistent

  module Timestamps
    extend ActiveSupport::Concern
    included do
      include Mongoid::Timestamps
    end
  end # module Timestamps

  module OrderedTree
    extend ActiveSupport::Concern
    included do
      include Mongoid::Tree
      include Mongoid::Tree::Ordering
      include Mongoid::Tree::Traversal
    end
  end # module OrderedTree

end # module Model

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
aerogel-core-1.4.12 lib/aerogel/core/db/model.rb
aerogel-core-1.4.11 lib/aerogel/core/db/model.rb
aerogel-core-1.4.10 lib/aerogel/core/db/model.rb