Sha256: 796dc6d6a551df42e6ba5cf6a3bee97bc8113a8f0f03f23b2b2121bcbd60c11d

Contents?: true

Size: 1.24 KB

Versions: 17

Compression:

Stored size: 1.24 KB

Contents

module Houston
  module Adapters
    class << self

      def each
        constants.each do |name|
          yield name, name_to_path(name)
        end
      end

      alias :[] :const_get

      def define_adapter_namespace(name)
        namespace = ::Module.new
        const_set name, namespace

        pathname = name_to_path(name)
        adapters_paths = File.join(File.dirname(__FILE__), "adapters/#{pathname}/*_adapter.rb")
        Dir[adapters_paths].each(&method(:require))

        def namespace.adapters
          constants
            .select { |sym| sym =~ /Adapter$/ }
            .map { |sym| sym[/^.*(?=Adapter)/] }
            .sort_by { |name| name == "None" ? "" : name }
        end

        def namespace.adapter(name)
          const_get "#{name}Adapter"
        end

        def namespace.adapter?(name)
          adapters.map(&:downcase).member?(name.to_s.downcase)
        end
      end

    private

      def name_to_path(name)
        # Copied and simplified from ActiveSupport::Inflector.underscore
        name.to_s
          .gsub(/([A-Z\d]+)([A-Z][a-z])/,'\1_\2')
          .gsub(/([a-z\d])([A-Z])/,'\1_\2')
          .downcase
      end

    end
  end
end

Dir[File.join(File.dirname(__FILE__), "adapters/*.rb")].each(&method(:require))

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
houston-core-0.8.0.pre app/adapters/houston/adapters.rb
houston-core-0.7.0 app/adapters/houston/adapters.rb
houston-core-0.7.0.beta4 app/adapters/houston/adapters.rb
houston-core-0.7.0.beta3 app/adapters/houston/adapters.rb
houston-core-0.7.0.beta2 app/adapters/houston/adapters.rb
houston-core-0.7.0.beta app/adapters/houston/adapters.rb
houston-core-0.6.3 app/adapters/houston/adapters.rb
houston-core-0.6.2 app/adapters/houston/adapters.rb
houston-core-0.6.1 app/adapters/houston/adapters.rb
houston-core-0.6.0 app/adapters/houston/adapters.rb
houston-core-0.5.6 app/adapters/houston/adapters.rb
houston-core-0.5.5 app/adapters/houston/adapters.rb
houston-core-0.5.4 app/adapters/houston/adapters.rb
houston-core-0.5.3 app/adapters/houston/adapters.rb
houston-core-0.5.2 app/adapters/houston/adapters.rb
houston-core-0.5.1 app/adapters/houston/adapters.rb
houston-core-0.5.0 app/adapters/houston/adapters.rb