Sha256: 32d24dee999017ef4b9762ce49bfabd2ef08a7c5b01e4758f746bb7e94a64bea

Contents?: true

Size: 1.11 KB

Versions: 1

Compression:

Stored size: 1.11 KB

Contents

require 'pathname'

require 'rom/support/constants'
require 'rom/support/inflector'
require 'rom/support/options'

module ROM
  class AutoRegistration
    include Options

    option :namespace, reader: true, type: [TrueClass, FalseClass], default: true

    attr_reader :globs, :directory

    def initialize(directory, options = EMPTY_HASH)
      super
      @directory = Pathname(directory)
      @globs = Hash[[:relations, :commands, :mappers].map { |name|
        [name, @directory.join("#{name}/**/*.rb")]
      }]
    end

    def relations
      load_entities(:relations)
    end

    def commands
      load_entities(:commands)
    end

    def mappers
      load_entities(:mappers)
    end

    private

    def load_entities(entity)
      Dir[globs[entity]].map do |file|
        require file
        Inflector.constantize(const_name(entity, file))
      end
    end

    def const_name(entity, file)
      name =
        if namespace
          file.gsub("#{directory.dirname}/", '')
        else
          file.gsub("#{directory}/#{entity}/", '')
        end.gsub('.rb', '')

      Inflector.camelize(name)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rom-2.0.0 lib/rom/setup/auto_registration.rb