Sha256: 9f735317ba0536fc5e7bc0126f49d0491ecbb21c69a33cc9728fc1cda034ebe7

Contents?: true

Size: 1.67 KB

Versions: 34

Compression:

Stored size: 1.67 KB

Contents

module Stringex
  module Configuration
    class Base
      attr_accessor :settings

      def initialize(local_options = {})
        current_settings = default_settings.merge(system_wide_customizations)
        current_settings.merge! local_options

        @settings = OpenStruct.new(current_settings)
      end

      # NOTE: This does not cache itself so that instance and class can be cached on the adapter
      # without worrying about thread safety or race conditions
      def adapter
        adapter_name = settings.adapter || Stringex::ActsAsUrl::Adapter.first_available
        case adapter_name
        when Class
          adapter_name.send :new, self
        when :active_record
          Stringex::ActsAsUrl::Adapter::ActiveRecord.new self
        when :mongoid
          Stringex::ActsAsUrl::Adapter::Mongoid.new self
        else
          raise ArgumentError, "#{adapter_name} is not a defined ActsAsUrl adapter. Please feel free to implement your own and submit it back upstream."
        end
      end

      def self.configure(&block)
        configurator = Stringex::Configuration::Configurator.new(self)
        yield configurator
      end

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

      def self.unconfigure!
        @system_wide_customizations = {}
      end

    private

      def default_settings
        raise ArgumentError, "You shouldn't have hit default_settings on Stringex::Configuration::Base. Check your code."
      end

      def system_wide_customizations
        self.class.system_wide_customizations
      end

      def self.valid_configuration_details
        default_settings.keys
      end
    end
  end
end

Version data entries

34 entries across 34 versions & 1 rubygems

Version Path
stringex-2.8.6 lib/stringex/configuration/base.rb
stringex-2.8.5 lib/stringex/configuration/base.rb
stringex-2.8.4 lib/stringex/configuration/base.rb
stringex-2.8.3 lib/stringex/configuration/base.rb
stringex-2.8.2 lib/stringex/configuration/base.rb
stringex-2.8.1 lib/stringex/configuration/base.rb
stringex-2.7.1 lib/stringex/configuration/base.rb
stringex-2.7.0 lib/stringex/configuration/base.rb
stringex-2.6.1 lib/stringex/configuration/base.rb
stringex-2.6.0 lib/stringex/configuration/base.rb
stringex-2.5.2 lib/stringex/configuration/base.rb
stringex-2.5.1 lib/stringex/configuration/base.rb
stringex-2.5.0 lib/stringex/configuration/base.rb
stringex-2.4.2 lib/stringex/configuration/base.rb
stringex-2.4.1 lib/stringex/configuration/base.rb
stringex-2.3.0 lib/stringex/configuration/base.rb
stringex-2.2.2 lib/stringex/configuration/base.rb
stringex-2.2.1 lib/stringex/configuration/base.rb
stringex-2.2.0 lib/stringex/configuration/base.rb
stringex-2.1.2 lib/stringex/configuration/base.rb