lib/trax/model.rb in trax_model-0.0.92 vs lib/trax/model.rb in trax_model-0.0.93
- old
+ new
@@ -1,20 +1,25 @@
require 'active_record'
require 'default_value_for'
require 'hashie/dash'
require 'hashie/mash'
+require 'hashie/trash'
+require 'hashie/extensions/dash/indifferent_access'
require 'simple_enum'
require_relative './string'
require_relative './validators/boolean_validator'
require_relative './validators/email_validator'
-require_relative './validators/enum_validator'
require_relative './validators/frozen_validator'
require_relative './validators/future_validator'
-require_relative './validators/json_attribute_validator'
require_relative './validators/subdomain_validator'
require_relative './validators/url_validator'
+#trax attribute specific validators
+require_relative './validators/enum_attribute_validator'
+require_relative './validators/json_attribute_validator'
+require_relative './validators/string_attribute_validator'
+
module Trax
module Model
extend ::ActiveSupport::Concern
extend ::ActiveSupport::Autoload
@@ -27,25 +32,34 @@
autoload :UUID
autoload :UUIDPrefix
autoload :UniqueId
autoload :Matchable
autoload :Mixin
+ autoload :Mixins
autoload :MTI
autoload :Restorable
autoload :Railtie
autoload :STI
autoload :Struct
autoload :Validators
include ::Trax::Model::Matchable
include ::ActiveModel::Dirty
+ include ::Trax::Core::InheritanceHooks
define_configuration_options! do
option :auto_include, :default => false
option :auto_include_mixins, :default => []
end
+ #like reverse merge, only assigns attributes which have not yet been assigned
+ def reverse_assign_attributes(attributes_hash)
+ attributes_to_assign = attributes_hash.keys.reject{|_attribute_name| attribute_present?(_attribute_name) }
+
+ assign_attributes(attributes_hash.slice(attributes_to_assign))
+ end
+
class << self
attr_accessor :mixin_registry
end
@mixin_registry = {}
@@ -65,14 +79,21 @@
::Trax::Model::Attributes::Mixin
::Trax::Model::Enum
::Trax::Model::Freezable
::Trax::Model::Restorable
::Trax::Model::UniqueId
+ ::Trax::Model::Mixins::FieldScopes
+ ::Trax::Model::Mixins::IdScopes
+ ::Trax::Model::Mixins::SortByScopes
end
eager_autoload_mixins!
+ def self.find_by_uuid(uuid)
+ ::Trax::Model::UUID.new(uuid).record
+ end
+
included do
class_attribute :registered_mixins
self.registered_mixins = {}
@@ -83,36 +104,9 @@
delegate :register_trax_model, :to => "::Trax::Model::Registry"
delegate :[], :to => :find
def after_inherited(&block)
instance_variable_set(:@_after_inherited_block, block)
- end
-
- #the tracepoint stuff is to ensure that we call the after_inherited block not
- #right after the class is defined, but rather, after the class is defined and
- #evaluated. i.e. this allows us to do stuff like set class attributes
- # class_attribute :messages_class
- #
- # after_inherited do
- # has_many :computed_subtype_messages, :class_name => message_class
- # end
- # - Then in subklass
- # self.messages_class = "MySubtypeSpecifcModel"
-
- def inherited(subklass)
- super(subklass)
-
- if self.instance_variable_defined?(:@_after_inherited_block)
- trace = ::TracePoint.new(:end) do |tracepoint|
- if tracepoint.self == subklass
- trace.disable
-
- subklass.instance_eval(&self.instance_variable_get(:@_after_inherited_block))
- end
- end
-
- trace.enable
- end
end
def mixin(key, options = {})
raise ::Trax::Model::Errors::MixinNotRegistered.new(
model: self.name,