rom 0.5.0 → 0.6.0.beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +19 -15
- data/.rubocop_todo.yml +28 -0
- data/.travis.yml +8 -1
- data/CHANGELOG.md +40 -0
- data/Gemfile +10 -2
- data/Guardfile +12 -10
- data/README.md +42 -43
- data/Rakefile +13 -23
- data/lib/rom.rb +19 -27
- data/lib/rom/command.rb +118 -0
- data/lib/rom/command_registry.rb +13 -27
- data/lib/rom/commands.rb +1 -59
- data/lib/rom/commands/abstract.rb +147 -0
- data/lib/rom/commands/composite.rb +47 -0
- data/lib/rom/commands/create.rb +2 -17
- data/lib/rom/commands/delete.rb +5 -25
- data/lib/rom/commands/result.rb +5 -5
- data/lib/rom/commands/update.rb +3 -27
- data/lib/rom/constants.rb +19 -0
- data/lib/rom/env.rb +85 -35
- data/lib/rom/global.rb +173 -42
- data/lib/rom/header.rb +5 -5
- data/lib/rom/header/attribute.rb +2 -2
- data/lib/rom/lint/enumerable_dataset.rb +52 -0
- data/lib/rom/lint/linter.rb +64 -0
- data/lib/rom/lint/repository.rb +78 -0
- data/lib/rom/lint/spec.rb +20 -0
- data/lib/rom/lint/test.rb +98 -0
- data/lib/rom/mapper.rb +32 -5
- data/lib/rom/mapper/attribute_dsl.rb +240 -0
- data/lib/rom/mapper/dsl.rb +100 -0
- data/lib/rom/mapper/model_dsl.rb +55 -0
- data/lib/rom/mapper_registry.rb +8 -1
- data/lib/rom/memory.rb +4 -0
- data/lib/rom/memory/commands.rb +46 -0
- data/lib/rom/memory/dataset.rb +72 -0
- data/lib/rom/memory/relation.rb +44 -0
- data/lib/rom/memory/repository.rb +62 -0
- data/lib/rom/memory/storage.rb +57 -0
- data/lib/rom/model_builder.rb +44 -5
- data/lib/rom/processor.rb +1 -1
- data/lib/rom/processor/transproc.rb +109 -16
- data/lib/rom/reader.rb +91 -39
- data/lib/rom/relation.rb +165 -26
- data/lib/rom/relation/composite.rb +132 -0
- data/lib/rom/relation/curried.rb +48 -0
- data/lib/rom/relation/lazy.rb +173 -0
- data/lib/rom/relation/loaded.rb +75 -0
- data/lib/rom/relation/registry_reader.rb +23 -0
- data/lib/rom/repository.rb +93 -34
- data/lib/rom/setup.rb +54 -98
- data/lib/rom/setup/finalize.rb +85 -76
- data/lib/rom/setup_dsl/command.rb +36 -0
- data/lib/rom/setup_dsl/command_dsl.rb +34 -0
- data/lib/rom/setup_dsl/mapper.rb +32 -0
- data/lib/rom/setup_dsl/mapper_dsl.rb +30 -0
- data/lib/rom/setup_dsl/relation.rb +21 -0
- data/lib/rom/setup_dsl/setup.rb +75 -0
- data/lib/rom/support/array_dataset.rb +38 -0
- data/lib/rom/support/class_builder.rb +44 -0
- data/lib/rom/support/class_macros.rb +56 -0
- data/lib/rom/support/data_proxy.rb +102 -0
- data/lib/rom/support/enumerable_dataset.rb +58 -0
- data/lib/rom/support/inflector.rb +73 -0
- data/lib/rom/support/options.rb +188 -0
- data/lib/rom/support/registry.rb +4 -8
- data/lib/rom/version.rb +1 -1
- data/rakelib/benchmark.rake +13 -0
- data/rakelib/mutant.rake +16 -0
- data/rakelib/rubocop.rake +18 -0
- data/rom.gemspec +4 -7
- data/spec/integration/commands/create_spec.rb +32 -24
- data/spec/integration/commands/delete_spec.rb +15 -7
- data/spec/integration/commands/update_spec.rb +13 -11
- data/spec/integration/mappers/deep_embedded_spec.rb +4 -11
- data/spec/integration/mappers/definition_dsl_spec.rb +31 -44
- data/spec/integration/mappers/embedded_spec.rb +9 -24
- data/spec/integration/mappers/group_spec.rb +22 -30
- data/spec/integration/mappers/prefixing_attributes_spec.rb +18 -23
- data/spec/integration/mappers/renaming_attributes_spec.rb +23 -38
- data/spec/integration/mappers/symbolizing_attributes_spec.rb +18 -24
- data/spec/integration/mappers/wrap_spec.rb +22 -30
- data/spec/integration/multi_repo_spec.rb +15 -37
- data/spec/integration/relations/reading_spec.rb +82 -14
- data/spec/integration/repositories/extending_relations_spec.rb +50 -0
- data/spec/integration/{adapters → repositories}/setting_logger_spec.rb +6 -5
- data/spec/integration/setup_spec.rb +59 -62
- data/spec/shared/enumerable_dataset.rb +49 -0
- data/spec/shared/one_behavior.rb +26 -0
- data/spec/shared/users_and_tasks.rb +11 -23
- data/spec/spec_helper.rb +16 -7
- data/spec/support/constant_leak_finder.rb +14 -0
- data/spec/test/memory_repository_lint_test.rb +27 -0
- data/spec/unit/rom/command_registry_spec.rb +44 -0
- data/spec/unit/rom/commands/result_spec.rb +14 -0
- data/spec/unit/rom/commands_spec.rb +174 -0
- data/spec/unit/rom/env_spec.rb +40 -7
- data/spec/unit/rom/global_spec.rb +14 -0
- data/spec/unit/rom/{mapper_builder_spec.rb → mapper/dsl_spec.rb} +52 -38
- data/spec/unit/rom/mapper_spec.rb +51 -10
- data/spec/unit/rom/{adapter/memory → memory}/dataset_spec.rb +6 -4
- data/spec/unit/rom/memory/repository_spec.rb +12 -0
- data/spec/unit/rom/memory/storage_spec.rb +45 -0
- data/spec/unit/rom/model_builder_spec.rb +4 -3
- data/spec/unit/rom/processor/transproc_spec.rb +1 -0
- data/spec/unit/rom/reader_spec.rb +97 -24
- data/spec/unit/rom/relation/composite_spec.rb +65 -0
- data/spec/unit/rom/relation/lazy_spec.rb +145 -0
- data/spec/unit/rom/relation/loaded_spec.rb +28 -0
- data/spec/unit/rom/relation_spec.rb +111 -6
- data/spec/unit/rom/repository_spec.rb +59 -9
- data/spec/unit/rom/setup_spec.rb +99 -11
- data/spec/unit/rom/support/array_dataset_spec.rb +59 -0
- data/spec/unit/rom/support/class_builder_spec.rb +42 -0
- data/spec/unit/rom/support/enumerable_dataset_spec.rb +17 -0
- data/spec/unit/rom/support/inflector_spec.rb +89 -0
- data/spec/unit/rom/support/options_spec.rb +119 -0
- metadata +74 -112
- data/lib/rom/adapter.rb +0 -191
- data/lib/rom/adapter/memory.rb +0 -32
- data/lib/rom/adapter/memory/commands.rb +0 -31
- data/lib/rom/adapter/memory/dataset.rb +0 -67
- data/lib/rom/adapter/memory/storage.rb +0 -26
- data/lib/rom/commands/with_options.rb +0 -18
- data/lib/rom/config.rb +0 -70
- data/lib/rom/mapper_builder.rb +0 -52
- data/lib/rom/mapper_builder/mapper_dsl.rb +0 -114
- data/lib/rom/mapper_builder/model_dsl.rb +0 -29
- data/lib/rom/reader_builder.rb +0 -48
- data/lib/rom/relation_builder.rb +0 -62
- data/lib/rom/setup/base_relation_dsl.rb +0 -46
- data/lib/rom/setup/command_dsl.rb +0 -46
- data/lib/rom/setup/mapper_dsl.rb +0 -19
- data/lib/rom/setup/relation_dsl.rb +0 -20
- data/lib/rom/setup/schema_dsl.rb +0 -33
- data/spec/integration/adapters/extending_relations_spec.rb +0 -41
- data/spec/integration/commands/try_spec.rb +0 -27
- data/spec/integration/schema_spec.rb +0 -77
- data/spec/unit/config_spec.rb +0 -60
- data/spec/unit/rom/adapter_spec.rb +0 -79
- data/spec/unit/rom_spec.rb +0 -14
| @@ -1,114 +0,0 @@ | |
| 1 | 
            -
            require 'rom/mapper_builder/model_dsl'
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            module ROM
         | 
| 4 | 
            -
              class MapperBuilder
         | 
| 5 | 
            -
                # @api private
         | 
| 6 | 
            -
                class MapperDSL
         | 
| 7 | 
            -
                  include ModelDSL
         | 
| 8 | 
            -
             | 
| 9 | 
            -
                  attr_reader :attributes, :options, :symbolize_keys, :prefix
         | 
| 10 | 
            -
             | 
| 11 | 
            -
                  def initialize(attributes, options)
         | 
| 12 | 
            -
                    @attributes = attributes
         | 
| 13 | 
            -
                    @options = options
         | 
| 14 | 
            -
                    @symbolize_keys = options[:symbolize_keys]
         | 
| 15 | 
            -
                    @prefix = options[:prefix]
         | 
| 16 | 
            -
                  end
         | 
| 17 | 
            -
             | 
| 18 | 
            -
                  def attribute(name, options = EMPTY_HASH)
         | 
| 19 | 
            -
                    with_attr_options(name, options) do |attr_options|
         | 
| 20 | 
            -
                      add_attribute(name, attr_options)
         | 
| 21 | 
            -
                    end
         | 
| 22 | 
            -
                  end
         | 
| 23 | 
            -
             | 
| 24 | 
            -
                  def exclude(*names)
         | 
| 25 | 
            -
                    names.each { |name| attributes.delete([name]) }
         | 
| 26 | 
            -
                  end
         | 
| 27 | 
            -
             | 
| 28 | 
            -
                  def embedded(name, options, &block)
         | 
| 29 | 
            -
                    with_attr_options(name) do |attr_options|
         | 
| 30 | 
            -
                      dsl = new(options, &block)
         | 
| 31 | 
            -
             | 
| 32 | 
            -
                      attr_options.update(options)
         | 
| 33 | 
            -
             | 
| 34 | 
            -
                      add_attribute(
         | 
| 35 | 
            -
                        name, { header: dsl.header, type: :array }.update(attr_options)
         | 
| 36 | 
            -
                      )
         | 
| 37 | 
            -
                    end
         | 
| 38 | 
            -
                  end
         | 
| 39 | 
            -
             | 
| 40 | 
            -
                  def wrap(*args, &block)
         | 
| 41 | 
            -
                    with_name_or_options(*args) do |name, options|
         | 
| 42 | 
            -
                      dsl(name, { type: :hash, wrap: true }.update(options), &block)
         | 
| 43 | 
            -
                    end
         | 
| 44 | 
            -
                  end
         | 
| 45 | 
            -
             | 
| 46 | 
            -
                  def group(*args, &block)
         | 
| 47 | 
            -
                    with_name_or_options(*args) do |name, options|
         | 
| 48 | 
            -
                      dsl(name, { type: :array, group: true }.update(options), &block)
         | 
| 49 | 
            -
                    end
         | 
| 50 | 
            -
                  end
         | 
| 51 | 
            -
             | 
| 52 | 
            -
                  def header
         | 
| 53 | 
            -
                    Header.coerce(attributes, model)
         | 
| 54 | 
            -
                  end
         | 
| 55 | 
            -
             | 
| 56 | 
            -
                  private
         | 
| 57 | 
            -
             | 
| 58 | 
            -
                  def with_attr_options(name, options = EMPTY_HASH)
         | 
| 59 | 
            -
                    attr_options = options.dup
         | 
| 60 | 
            -
             | 
| 61 | 
            -
                    attr_options[:from] ||= :"#{prefix}_#{name}" if prefix
         | 
| 62 | 
            -
             | 
| 63 | 
            -
                    if symbolize_keys
         | 
| 64 | 
            -
                      attr_options.update(from: attr_options.fetch(:from) { name }.to_s)
         | 
| 65 | 
            -
                    end
         | 
| 66 | 
            -
             | 
| 67 | 
            -
                    yield(attr_options)
         | 
| 68 | 
            -
                  end
         | 
| 69 | 
            -
             | 
| 70 | 
            -
                  def with_name_or_options(*args)
         | 
| 71 | 
            -
                    name, options =
         | 
| 72 | 
            -
                      if args.size > 1
         | 
| 73 | 
            -
                        args
         | 
| 74 | 
            -
                      else
         | 
| 75 | 
            -
                        [args.first, {}]
         | 
| 76 | 
            -
                      end
         | 
| 77 | 
            -
             | 
| 78 | 
            -
                    yield(name, options)
         | 
| 79 | 
            -
                  end
         | 
| 80 | 
            -
             | 
| 81 | 
            -
                  def dsl(name_or_attrs, options, &block)
         | 
| 82 | 
            -
                    if block
         | 
| 83 | 
            -
                      attributes_from_block(name_or_attrs, options, &block)
         | 
| 84 | 
            -
                    else
         | 
| 85 | 
            -
                      attributes_from_hash(name_or_attrs, options)
         | 
| 86 | 
            -
                    end
         | 
| 87 | 
            -
                  end
         | 
| 88 | 
            -
             | 
| 89 | 
            -
                  def attributes_from_block(name, options, &block)
         | 
| 90 | 
            -
                    dsl = new(options, &block)
         | 
| 91 | 
            -
                    add_attribute(name, options.update(header: dsl.header))
         | 
| 92 | 
            -
                  end
         | 
| 93 | 
            -
             | 
| 94 | 
            -
                  def attributes_from_hash(hash, options)
         | 
| 95 | 
            -
                    hash.each do |name, header|
         | 
| 96 | 
            -
                      with_attr_options(name, options) do |attr_options|
         | 
| 97 | 
            -
                        add_attribute(name, attr_options.update(header: header.zip))
         | 
| 98 | 
            -
                      end
         | 
| 99 | 
            -
                    end
         | 
| 100 | 
            -
                  end
         | 
| 101 | 
            -
             | 
| 102 | 
            -
                  def add_attribute(name, options)
         | 
| 103 | 
            -
                    exclude(name, name.to_s)
         | 
| 104 | 
            -
                    attributes << [name, options]
         | 
| 105 | 
            -
                  end
         | 
| 106 | 
            -
             | 
| 107 | 
            -
                  def new(options, &block)
         | 
| 108 | 
            -
                    dsl = self.class.new([], @options.merge(options))
         | 
| 109 | 
            -
                    dsl.instance_exec(&block)
         | 
| 110 | 
            -
                    dsl
         | 
| 111 | 
            -
                  end
         | 
| 112 | 
            -
                end
         | 
| 113 | 
            -
              end
         | 
| 114 | 
            -
            end
         | 
| @@ -1,29 +0,0 @@ | |
| 1 | 
            -
            require 'rom/model_builder'
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            module ROM
         | 
| 4 | 
            -
              class MapperBuilder
         | 
| 5 | 
            -
                module ModelDSL
         | 
| 6 | 
            -
                  attr_reader :attributes, :builder, :klass
         | 
| 7 | 
            -
             | 
| 8 | 
            -
                  DEFAULT_TYPE = :poro
         | 
| 9 | 
            -
             | 
| 10 | 
            -
                  def model(options = nil)
         | 
| 11 | 
            -
                    if options.is_a?(Class)
         | 
| 12 | 
            -
                      @klass = options
         | 
| 13 | 
            -
                    elsif options
         | 
| 14 | 
            -
                      type = options.fetch(:type) { DEFAULT_TYPE }
         | 
| 15 | 
            -
                      @builder = ModelBuilder[type].new(options)
         | 
| 16 | 
            -
                    end
         | 
| 17 | 
            -
             | 
| 18 | 
            -
                    build_class unless options
         | 
| 19 | 
            -
                  end
         | 
| 20 | 
            -
             | 
| 21 | 
            -
                  private
         | 
| 22 | 
            -
             | 
| 23 | 
            -
                  def build_class
         | 
| 24 | 
            -
                    return klass if klass
         | 
| 25 | 
            -
                    return builder.call(attributes.map(&:first)) if builder
         | 
| 26 | 
            -
                  end
         | 
| 27 | 
            -
                end
         | 
| 28 | 
            -
              end
         | 
| 29 | 
            -
            end
         | 
    
        data/lib/rom/reader_builder.rb
    DELETED
    
    | @@ -1,48 +0,0 @@ | |
| 1 | 
            -
            require 'rom/mapper_registry'
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            module ROM
         | 
| 4 | 
            -
              # @api private
         | 
| 5 | 
            -
              class ReaderBuilder
         | 
| 6 | 
            -
                DEFAULT_OPTIONS = { inherit_header: true }.freeze
         | 
| 7 | 
            -
             | 
| 8 | 
            -
                attr_reader :relations, :readers
         | 
| 9 | 
            -
             | 
| 10 | 
            -
                # @api private
         | 
| 11 | 
            -
                def initialize(relations)
         | 
| 12 | 
            -
                  @relations = relations
         | 
| 13 | 
            -
                  @readers = {}
         | 
| 14 | 
            -
                end
         | 
| 15 | 
            -
             | 
| 16 | 
            -
                # @api private
         | 
| 17 | 
            -
                def call(name, input_options = {}, &block)
         | 
| 18 | 
            -
                  with_options(input_options) do |options|
         | 
| 19 | 
            -
                    parent = relations[options.fetch(:parent) { name }]
         | 
| 20 | 
            -
             | 
| 21 | 
            -
                    builder = MapperBuilder.new(name, parent, options)
         | 
| 22 | 
            -
                    builder.instance_exec(&block) if block
         | 
| 23 | 
            -
                    mapper = builder.call
         | 
| 24 | 
            -
             | 
| 25 | 
            -
                    mappers =
         | 
| 26 | 
            -
                      if options[:parent]
         | 
| 27 | 
            -
                        readers.fetch(parent.name).mappers
         | 
| 28 | 
            -
                      else
         | 
| 29 | 
            -
                        MapperRegistry.new
         | 
| 30 | 
            -
                      end
         | 
| 31 | 
            -
             | 
| 32 | 
            -
                    mappers[name] = mapper
         | 
| 33 | 
            -
             | 
| 34 | 
            -
                    unless options[:parent]
         | 
| 35 | 
            -
                      readers[name] = Reader.build(
         | 
| 36 | 
            -
                        name, parent, mappers, parent.class.relation_methods
         | 
| 37 | 
            -
                      )
         | 
| 38 | 
            -
                    end
         | 
| 39 | 
            -
                  end
         | 
| 40 | 
            -
                end
         | 
| 41 | 
            -
             | 
| 42 | 
            -
                private
         | 
| 43 | 
            -
             | 
| 44 | 
            -
                def with_options(options)
         | 
| 45 | 
            -
                  yield(DEFAULT_OPTIONS.merge(options))
         | 
| 46 | 
            -
                end
         | 
| 47 | 
            -
              end
         | 
| 48 | 
            -
            end
         | 
    
        data/lib/rom/relation_builder.rb
    DELETED
    
    | @@ -1,62 +0,0 @@ | |
| 1 | 
            -
            module ROM
         | 
| 2 | 
            -
              # @api private
         | 
| 3 | 
            -
              class RelationBuilder
         | 
| 4 | 
            -
                attr_reader :schema, :mod
         | 
| 5 | 
            -
             | 
| 6 | 
            -
                # @api private
         | 
| 7 | 
            -
                def initialize(schema, relations)
         | 
| 8 | 
            -
                  @schema = schema
         | 
| 9 | 
            -
             | 
| 10 | 
            -
                  @mod = Module.new
         | 
| 11 | 
            -
             | 
| 12 | 
            -
                  @mod.module_exec do
         | 
| 13 | 
            -
                    define_method(:__relations__) { relations }
         | 
| 14 | 
            -
                  end
         | 
| 15 | 
            -
                end
         | 
| 16 | 
            -
             | 
| 17 | 
            -
                # @api private
         | 
| 18 | 
            -
                def call(name)
         | 
| 19 | 
            -
                  schema_relation = schema[name]
         | 
| 20 | 
            -
             | 
| 21 | 
            -
                  klass = Class.new(Relation)
         | 
| 22 | 
            -
             | 
| 23 | 
            -
                  klass.class_eval <<-RUBY, __FILE__, __LINE__ + 1
         | 
| 24 | 
            -
                    def self.name
         | 
| 25 | 
            -
                      "#{Relation.name}[#{Inflecto.camelize(name)}]"
         | 
| 26 | 
            -
                    end
         | 
| 27 | 
            -
             | 
| 28 | 
            -
                    def self.inspect
         | 
| 29 | 
            -
                      name
         | 
| 30 | 
            -
                    end
         | 
| 31 | 
            -
             | 
| 32 | 
            -
                    def self.to_s
         | 
| 33 | 
            -
                      name
         | 
| 34 | 
            -
                    end
         | 
| 35 | 
            -
             | 
| 36 | 
            -
                    def name
         | 
| 37 | 
            -
                      #{name.inspect}
         | 
| 38 | 
            -
                    end
         | 
| 39 | 
            -
             | 
| 40 | 
            -
                    def respond_to_missing?(name, _include_private = false)
         | 
| 41 | 
            -
                      __relations__.key?(name) || super
         | 
| 42 | 
            -
                    end
         | 
| 43 | 
            -
             | 
| 44 | 
            -
                    private
         | 
| 45 | 
            -
             | 
| 46 | 
            -
                    def method_missing(name, *args, &block)
         | 
| 47 | 
            -
                      if __relations__.key?(name)
         | 
| 48 | 
            -
                        __relations__[name]
         | 
| 49 | 
            -
                      else
         | 
| 50 | 
            -
                        super
         | 
| 51 | 
            -
                      end
         | 
| 52 | 
            -
                    end
         | 
| 53 | 
            -
                  RUBY
         | 
| 54 | 
            -
             | 
| 55 | 
            -
                  klass.send(:include, mod)
         | 
| 56 | 
            -
             | 
| 57 | 
            -
                  yield(klass)
         | 
| 58 | 
            -
             | 
| 59 | 
            -
                  klass.new(schema_relation.dataset, schema_relation.header)
         | 
| 60 | 
            -
                end
         | 
| 61 | 
            -
              end
         | 
| 62 | 
            -
            end
         | 
| @@ -1,46 +0,0 @@ | |
| 1 | 
            -
            module ROM
         | 
| 2 | 
            -
              class Setup
         | 
| 3 | 
            -
                class BaseRelationDSL
         | 
| 4 | 
            -
                  attr_reader :env, :name, :header
         | 
| 5 | 
            -
             | 
| 6 | 
            -
                  def initialize(env, name, &block)
         | 
| 7 | 
            -
                    @env = env
         | 
| 8 | 
            -
                    @name = name
         | 
| 9 | 
            -
                    @header = []
         | 
| 10 | 
            -
                    @repository = nil
         | 
| 11 | 
            -
                    instance_exec(&block)
         | 
| 12 | 
            -
                  end
         | 
| 13 | 
            -
             | 
| 14 | 
            -
                  def repository(name = nil)
         | 
| 15 | 
            -
                    if @repository
         | 
| 16 | 
            -
                      @repository
         | 
| 17 | 
            -
                    else
         | 
| 18 | 
            -
                      @repository = env[name]
         | 
| 19 | 
            -
                    end
         | 
| 20 | 
            -
                  end
         | 
| 21 | 
            -
             | 
| 22 | 
            -
                  def attribute(name)
         | 
| 23 | 
            -
                    header << name
         | 
| 24 | 
            -
                  end
         | 
| 25 | 
            -
             | 
| 26 | 
            -
                  def call
         | 
| 27 | 
            -
                    dataset =
         | 
| 28 | 
            -
                      if adapter.respond_to?(:dataset)
         | 
| 29 | 
            -
                        adapter.dataset(name, header)
         | 
| 30 | 
            -
                      else
         | 
| 31 | 
            -
                        adapter[name]
         | 
| 32 | 
            -
                      end
         | 
| 33 | 
            -
             | 
| 34 | 
            -
                    base_header = dataset.respond_to?(:header) ? dataset.header : header
         | 
| 35 | 
            -
             | 
| 36 | 
            -
                    [name, dataset, base_header]
         | 
| 37 | 
            -
                  end
         | 
| 38 | 
            -
             | 
| 39 | 
            -
                  private
         | 
| 40 | 
            -
             | 
| 41 | 
            -
                  def adapter
         | 
| 42 | 
            -
                    repository.adapter
         | 
| 43 | 
            -
                  end
         | 
| 44 | 
            -
                end
         | 
| 45 | 
            -
              end
         | 
| 46 | 
            -
            end
         | 
| @@ -1,46 +0,0 @@ | |
| 1 | 
            -
            require 'rom/mapper_builder'
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            module ROM
         | 
| 4 | 
            -
              class Setup
         | 
| 5 | 
            -
                class CommandDSL
         | 
| 6 | 
            -
                  attr_reader :commands
         | 
| 7 | 
            -
             | 
| 8 | 
            -
                  class CommandDefinition
         | 
| 9 | 
            -
                    attr_reader :options
         | 
| 10 | 
            -
             | 
| 11 | 
            -
                    def initialize(options, &block)
         | 
| 12 | 
            -
                      @options = options
         | 
| 13 | 
            -
                      instance_exec(&block) if block
         | 
| 14 | 
            -
                    end
         | 
| 15 | 
            -
             | 
| 16 | 
            -
                    def to_h
         | 
| 17 | 
            -
                      options
         | 
| 18 | 
            -
                    end
         | 
| 19 | 
            -
             | 
| 20 | 
            -
                    def type
         | 
| 21 | 
            -
                      options[:type]
         | 
| 22 | 
            -
                    end
         | 
| 23 | 
            -
             | 
| 24 | 
            -
                    private
         | 
| 25 | 
            -
             | 
| 26 | 
            -
                    def method_missing(name, *args, &block)
         | 
| 27 | 
            -
                      if args.size == 1
         | 
| 28 | 
            -
                        options[name] = args.first
         | 
| 29 | 
            -
                      else
         | 
| 30 | 
            -
                        super
         | 
| 31 | 
            -
                      end
         | 
| 32 | 
            -
                    end
         | 
| 33 | 
            -
                  end
         | 
| 34 | 
            -
             | 
| 35 | 
            -
                  def initialize(&block)
         | 
| 36 | 
            -
                    @commands = {}
         | 
| 37 | 
            -
                    instance_exec(&block)
         | 
| 38 | 
            -
                  end
         | 
| 39 | 
            -
             | 
| 40 | 
            -
                  def define(name, options = {}, &block)
         | 
| 41 | 
            -
                    commands[name] = CommandDefinition.new(options, &block)
         | 
| 42 | 
            -
                    self
         | 
| 43 | 
            -
                  end
         | 
| 44 | 
            -
                end
         | 
| 45 | 
            -
              end
         | 
| 46 | 
            -
            end
         | 
    
        data/lib/rom/setup/mapper_dsl.rb
    DELETED
    
    | @@ -1,19 +0,0 @@ | |
| 1 | 
            -
            require 'rom/mapper_builder'
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            module ROM
         | 
| 4 | 
            -
              class Setup
         | 
| 5 | 
            -
                class MapperDSL
         | 
| 6 | 
            -
                  attr_reader :mappers
         | 
| 7 | 
            -
             | 
| 8 | 
            -
                  def initialize(&block)
         | 
| 9 | 
            -
                    @mappers = []
         | 
| 10 | 
            -
                    instance_exec(&block)
         | 
| 11 | 
            -
                  end
         | 
| 12 | 
            -
             | 
| 13 | 
            -
                  def define(name, options = {}, &block)
         | 
| 14 | 
            -
                    mappers << [name, options, block]
         | 
| 15 | 
            -
                    self
         | 
| 16 | 
            -
                  end
         | 
| 17 | 
            -
                end
         | 
| 18 | 
            -
              end
         | 
| 19 | 
            -
            end
         | 
| @@ -1,20 +0,0 @@ | |
| 1 | 
            -
            module ROM
         | 
| 2 | 
            -
              class Setup
         | 
| 3 | 
            -
                class RelationDSL
         | 
| 4 | 
            -
                  attr_reader :schema, :relations
         | 
| 5 | 
            -
             | 
| 6 | 
            -
                  def initialize(schema, relations)
         | 
| 7 | 
            -
                    @schema = schema
         | 
| 8 | 
            -
                    @relations = relations
         | 
| 9 | 
            -
                  end
         | 
| 10 | 
            -
             | 
| 11 | 
            -
                  def register(name, &block)
         | 
| 12 | 
            -
                    relations[name] = [block]
         | 
| 13 | 
            -
                  end
         | 
| 14 | 
            -
             | 
| 15 | 
            -
                  def call
         | 
| 16 | 
            -
                    relations
         | 
| 17 | 
            -
                  end
         | 
| 18 | 
            -
                end
         | 
| 19 | 
            -
              end
         | 
| 20 | 
            -
            end
         | 
    
        data/lib/rom/setup/schema_dsl.rb
    DELETED
    
    | @@ -1,33 +0,0 @@ | |
| 1 | 
            -
            require 'rom/setup/base_relation_dsl'
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            module ROM
         | 
| 4 | 
            -
              class Setup
         | 
| 5 | 
            -
                # @private
         | 
| 6 | 
            -
                class SchemaDSL
         | 
| 7 | 
            -
                  attr_reader :env, :schema
         | 
| 8 | 
            -
             | 
| 9 | 
            -
                  # @api private
         | 
| 10 | 
            -
                  def initialize(env, schema, &block)
         | 
| 11 | 
            -
                    @env = env
         | 
| 12 | 
            -
                    @schema = schema
         | 
| 13 | 
            -
                    initialize_schema
         | 
| 14 | 
            -
                    instance_exec(&block)
         | 
| 15 | 
            -
                  end
         | 
| 16 | 
            -
             | 
| 17 | 
            -
                  # @api public
         | 
| 18 | 
            -
                  def base_relation(name, &block)
         | 
| 19 | 
            -
                    dsl = BaseRelationDSL.new(env, name, &block)
         | 
| 20 | 
            -
                    schema[dsl.repository] << dsl.call
         | 
| 21 | 
            -
                  end
         | 
| 22 | 
            -
             | 
| 23 | 
            -
                  private
         | 
| 24 | 
            -
             | 
| 25 | 
            -
                  # @api private
         | 
| 26 | 
            -
                  def initialize_schema
         | 
| 27 | 
            -
                    env.repositories.each_value do |repository|
         | 
| 28 | 
            -
                      schema[repository] ||= []
         | 
| 29 | 
            -
                    end
         | 
| 30 | 
            -
                  end
         | 
| 31 | 
            -
                end
         | 
| 32 | 
            -
              end
         | 
| 33 | 
            -
            end
         | 
| @@ -1,41 +0,0 @@ | |
| 1 | 
            -
            require "spec_helper"
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            describe "Adapter" do
         | 
| 4 | 
            -
              include_context "users and tasks" do
         | 
| 5 | 
            -
                before(:all) do
         | 
| 6 | 
            -
                  Class.new(ROM::Adapter::Memory) do
         | 
| 7 | 
            -
                    def self.schemes
         | 
| 8 | 
            -
                      [:memory]
         | 
| 9 | 
            -
                    end
         | 
| 10 | 
            -
             | 
| 11 | 
            -
                    def extend_relation_class(klass)
         | 
| 12 | 
            -
                      klass.class_eval do
         | 
| 13 | 
            -
                        def self.freaking_awesome?
         | 
| 14 | 
            -
                          true
         | 
| 15 | 
            -
                        end
         | 
| 16 | 
            -
                      end
         | 
| 17 | 
            -
                    end
         | 
| 18 | 
            -
             | 
| 19 | 
            -
                    def extend_relation_instance(relation)
         | 
| 20 | 
            -
                      relation.instance_eval do
         | 
| 21 | 
            -
                        def freaking_cool?
         | 
| 22 | 
            -
                          true
         | 
| 23 | 
            -
                        end
         | 
| 24 | 
            -
                      end
         | 
| 25 | 
            -
                    end
         | 
| 26 | 
            -
                  end
         | 
| 27 | 
            -
                end
         | 
| 28 | 
            -
              end
         | 
| 29 | 
            -
             | 
| 30 | 
            -
              before do
         | 
| 31 | 
            -
                setup.relation(:users)
         | 
| 32 | 
            -
              end
         | 
| 33 | 
            -
             | 
| 34 | 
            -
              it "can extend relation class" do
         | 
| 35 | 
            -
                expect(rom.relations.users.class).to be_freaking_awesome
         | 
| 36 | 
            -
              end
         | 
| 37 | 
            -
             | 
| 38 | 
            -
              it "can extend relation instance" do
         | 
| 39 | 
            -
                expect(rom.relations.users).to be_freaking_cool
         | 
| 40 | 
            -
              end
         | 
| 41 | 
            -
            end
         |