Sha256: 97860923a946d989d609a3ff4167a219e1bb1afa5a0923f80d678e9ad98664ad

Contents?: true

Size: 1.47 KB

Versions: 14

Compression:

Stored size: 1.47 KB

Contents

module Trax
  module Core
    module HasMixins
      module ClassMethods
        def register_mixin(mixin_klass, key = nil)
          mixin_key = mixin_klass.respond_to?(:mixin_registry_key) ? mixin_klass.mixin_registry_key : (key || mixin_klass.name.demodulize.underscore.to_sym)

          return if mixin_registry.key?(mixin_key)
          mixin_registry[mixin_key] = mixin_klass
        end
      end

      def self.extended(base)
        base.module_attribute(:mixin_registry) { Hash.new }
        base.extend(ClassMethods)

        base.define_configuration_options! do
          option :auto_include, :default => false
          option :auto_include_mixins, :default => []
        end

        mixin_module = base.const_set("Mixin", ::Module.new)
        mixin_module.module_attribute(:mixin_namespace) { base }
        mixin_module.extend(::Trax::Core::Mixin)

        mixin_module.module_eval do
          def self.extended(base)
            base.extend(Trax::Core::Mixin)
            super(base)
            mixin_namespace.register_mixin(base)
          end
        end

        mixable_module = base.const_set("Mixable", ::Module.new)
        mixable_module.module_attribute(:mixin_namespace) { base }
        mixable_module.extend(::ActiveSupport::Concern)

        mixable_module.included do
          class_attribute :mixin_namespace
          self.mixin_namespace = base
        end

        mixable_module.include(::Trax::Core::Mixable)

        super(base)
      end
    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
trax_core-0.0.84 lib/trax/core/has_mixins.rb
trax_core-0.0.83 lib/trax/core/has_mixins.rb
trax_core-0.0.82 lib/trax/core/has_mixins.rb
trax_core-0.0.81 lib/trax/core/has_mixins.rb
trax_core-0.0.80 lib/trax/core/has_mixins.rb
trax_core-0.0.79 lib/trax/core/has_mixins.rb
trax_core-0.0.78 lib/trax/core/has_mixins.rb
trax_core-0.0.77 lib/trax/core/has_mixins.rb
trax_core-0.0.76 lib/trax/core/has_mixins.rb
trax_core-0.0.74 lib/trax/core/has_mixins.rb
trax_core-0.0.73 lib/trax/core/has_mixins.rb
trax_core-0.0.72 lib/trax/core/has_mixins.rb
trax_core-0.0.71 lib/trax/core/has_mixins.rb
trax_core-0.0.7 lib/trax/core/has_mixins.rb