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,