Sha256: 135932e2fc137142cd38c45c2241d56e0965991f2682f4b7d52c5f01b9b97269

Contents?: true

Size: 1.73 KB

Versions: 2

Compression:

Stored size: 1.73 KB

Contents

require 'slf4r'
module Ixtlan
  module Core
    module Configuration
      module Module
        def self.included(model)
          raise "configuration class must have instance method" unless model.respond_to? :instance
          model.class_eval do
            class << self
              alias :instance_old :instance
              def instance
                Thread.current[:ixtlan_configuration] ||= instance_old
              end
              def clear_instance
                Thread.current[:ixtlan_configuration] = nil
              end
            end
          end
        end
      end
      
      class Manager

        include Slf4r::Logger

        private

        def self.registry
          @registry ||= {}
        end
        
        def registry
          self.class.registry
        end

        def model
          unless @model
            if @model_name
              @model = @model_name.constantize
            else
              @model = (::Configuration rescue nil)
            end
            @model.send :include, Module unless @model.respond_to? :clear_instance if @model
          end
          @model
        end

        public

        def setup(model_name)
          if model_name
            @model_name = model_name.to_s.classify
          end
        end

        def register(name, &block)
          raise "need block" unless block
          logger.info{"register config for: #{name}"}
          registry[name.to_sym] = block
        end
        
        def cleanup
          model.clear_instance if @model
        end

        def configure
          registry.each do |name, callback|
            logger.debug{ "configure #{name}" }
            callback.call(model.instance)
          end
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ixtlan-core-0.7.2 lib/ixtlan/core/configuration_manager.rb
ixtlan-core-0.7.1 lib/ixtlan/core/configuration_manager.rb