Sha256: b7857fee56f40e0d0356bd4f6857cc2b5339ea5b04772240d1e594a060a1eea0

Contents?: true

Size: 1.16 KB

Versions: 10

Compression:

Stored size: 1.16 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(caller[0]), "#{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

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
houston-core-0.9.2 lib/houston/adapters.rb
houston-core-0.9.1 lib/houston/adapters.rb
houston-core-0.9.0 lib/houston/adapters.rb
houston-core-0.9.0.rc1 lib/houston/adapters.rb
houston-core-0.8.4 lib/houston/adapters.rb
houston-core-0.8.3 lib/houston/adapters.rb
houston-core-0.8.2 lib/houston/adapters.rb
houston-core-0.8.1 lib/houston/adapters.rb
houston-core-0.8.0 lib/houston/adapters.rb
houston-core-0.8.0.pre2 lib/houston/adapters.rb