rom 0.9.1 → 1.0.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_todo.yml +30 -12
- data/.travis.yml +1 -1
- data/CHANGELOG.md +24 -0
- data/Gemfile +7 -3
- data/README.md +24 -11
- data/lib/rom.rb +9 -26
- data/lib/rom/command.rb +113 -75
- data/lib/rom/commands/class_interface.rb +115 -0
- data/lib/rom/commands/graph.rb +17 -23
- data/lib/rom/commands/graph/builder.rb +176 -0
- data/lib/rom/commands/graph/class_interface.rb +8 -2
- data/lib/rom/commands/graph/input_evaluator.rb +13 -9
- data/lib/rom/commands/lazy.rb +23 -17
- data/lib/rom/commands/lazy/create.rb +23 -0
- data/lib/rom/commands/lazy/delete.rb +27 -0
- data/lib/rom/commands/lazy/update.rb +34 -0
- data/lib/rom/commands/result.rb +14 -0
- data/lib/rom/commands/update.rb +0 -4
- data/lib/rom/configuration.rb +86 -0
- data/lib/rom/{setup_dsl/setup.rb → configuration_dsl.rb} +9 -7
- data/lib/rom/configuration_dsl/command.rb +43 -0
- data/lib/rom/{setup_dsl → configuration_dsl}/command_dsl.rb +5 -4
- data/lib/rom/configuration_dsl/mapper.rb +37 -0
- data/lib/rom/{setup_dsl → configuration_dsl}/mapper_dsl.rb +11 -5
- data/lib/rom/configuration_dsl/relation.rb +26 -0
- data/lib/rom/configuration_plugin.rb +17 -0
- data/lib/rom/constants.rb +5 -12
- data/lib/rom/container.rb +11 -8
- data/lib/rom/create_container.rb +61 -0
- data/lib/rom/environment.rb +27 -241
- data/lib/rom/gateway.rb +18 -2
- data/lib/rom/global.rb +24 -0
- data/lib/rom/global/plugin_dsl.rb +2 -0
- data/lib/rom/lint/spec.rb +0 -12
- data/lib/rom/lint/test.rb +0 -31
- data/lib/rom/memory/commands.rb +2 -2
- data/lib/rom/memory/gateway.rb +2 -0
- data/lib/rom/pipeline.rb +1 -1
- data/lib/rom/plugin_base.rb +1 -1
- data/lib/rom/plugin_registry.rb +12 -10
- data/lib/rom/plugins/configuration/configuration_dsl.rb +16 -0
- data/lib/rom/plugins/relation/key_inference.rb +31 -0
- data/lib/rom/plugins/relation/view.rb +90 -0
- data/lib/rom/plugins/relation/view/dsl.rb +32 -0
- data/lib/rom/relation.rb +1 -11
- data/lib/rom/relation/class_interface.rb +37 -50
- data/lib/rom/setup.rb +13 -104
- data/lib/rom/setup/auto_registration.rb +55 -0
- data/lib/rom/setup/finalize.rb +113 -127
- data/lib/rom/setup/finalize/commands.rb +67 -0
- data/lib/rom/setup/finalize/mappers.rb +36 -0
- data/lib/rom/setup/finalize/relations.rb +53 -0
- data/lib/rom/support/configurable.rb +21 -7
- data/lib/rom/version.rb +1 -1
- data/rakelib/mutant.rake +4 -1
- data/rom.gemspec +3 -4
- data/spec/fixtures/app/commands/create_user.rb +2 -0
- data/spec/fixtures/app/mappers/user_list.rb +2 -0
- data/spec/fixtures/app/relations/users.rb +2 -0
- data/spec/fixtures/lib/persistence/commands/create_user.rb +6 -0
- data/spec/fixtures/lib/persistence/mappers/user_list.rb +6 -0
- data/spec/fixtures/lib/persistence/relations/users.rb +6 -0
- data/spec/{unit/rom → integration}/command_registry_spec.rb +8 -9
- data/spec/integration/commands/create_spec.rb +17 -13
- data/spec/integration/commands/delete_spec.rb +12 -11
- data/spec/integration/commands/error_handling_spec.rb +5 -4
- data/spec/integration/commands/graph_builder_spec.rb +213 -0
- data/spec/integration/commands/graph_spec.rb +112 -49
- data/spec/integration/commands/update_spec.rb +14 -11
- data/spec/integration/commands_spec.rb +60 -0
- data/spec/integration/mappers/combine_spec.rb +7 -6
- data/spec/integration/mappers/deep_embedded_spec.rb +5 -6
- data/spec/integration/mappers/definition_dsl_spec.rb +19 -18
- data/spec/integration/mappers/embedded_spec.rb +11 -12
- data/spec/integration/mappers/exclude_spec.rb +5 -6
- data/spec/integration/mappers/fold_spec.rb +8 -7
- data/spec/integration/mappers/group_spec.rb +16 -15
- data/spec/integration/mappers/overwrite_attributes_value_spec.rb +5 -5
- data/spec/integration/mappers/prefix_separator_spec.rb +5 -7
- data/spec/integration/mappers/prefix_spec.rb +5 -7
- data/spec/integration/mappers/prefixing_attributes_spec.rb +7 -7
- data/spec/integration/mappers/registering_custom_mappers_spec.rb +4 -5
- data/spec/integration/mappers/renaming_attributes_spec.rb +18 -18
- data/spec/integration/mappers/step_spec.rb +11 -12
- data/spec/integration/mappers/symbolizing_attributes_spec.rb +11 -8
- data/spec/integration/mappers/unfold_spec.rb +9 -10
- data/spec/integration/mappers/ungroup_spec.rb +10 -11
- data/spec/integration/mappers/unwrap_spec.rb +10 -15
- data/spec/integration/mappers/wrap_spec.rb +16 -15
- data/spec/{unit/rom → integration}/memory/commands/create_spec.rb +7 -5
- data/spec/{unit/rom → integration}/memory/commands/delete_spec.rb +7 -5
- data/spec/{unit/rom → integration}/memory/commands/update_spec.rb +7 -5
- data/spec/integration/multi_env_spec.rb +16 -124
- data/spec/integration/multi_repo_spec.rb +9 -9
- data/spec/integration/relations/default_dataset_spec.rb +15 -0
- data/spec/integration/relations/inheritance_spec.rb +5 -7
- data/spec/integration/relations/reading_spec.rb +32 -65
- data/spec/integration/relations/registry_dsl_spec.rb +5 -4
- data/spec/integration/repositories/extending_relations_spec.rb +6 -7
- data/spec/integration/repositories/setting_logger_spec.rb +5 -7
- data/spec/integration/setup_spec.rb +49 -61
- data/spec/shared/command_graph.rb +50 -0
- data/spec/shared/container.rb +9 -0
- data/spec/shared/gateway_only.rb +6 -0
- data/spec/shared/no_container.rb +16 -0
- data/spec/shared/one_behavior.rb +4 -4
- data/spec/shared/users_and_tasks.rb +5 -17
- data/spec/spec_helper.rb +5 -3
- data/spec/test/memory_repository_lint_test.rb +1 -1
- data/spec/unit/rom/auto_registration_spec.rb +54 -0
- data/spec/unit/rom/commands/graph_spec.rb +18 -44
- data/spec/unit/rom/commands/lazy_spec.rb +246 -35
- data/spec/unit/rom/commands/result_spec.rb +56 -0
- data/spec/unit/rom/commands_spec.rb +9 -73
- data/spec/unit/rom/configurable_spec.rb +49 -0
- data/spec/unit/rom/configuration_spec.rb +61 -0
- data/spec/unit/rom/container_spec.rb +39 -33
- data/spec/unit/rom/create_container_spec.rb +151 -0
- data/spec/unit/rom/environment_spec.rb +123 -0
- data/spec/unit/rom/gateway_spec.rb +58 -2
- data/spec/unit/rom/global_spec.rb +10 -7
- data/spec/unit/rom/plugin_spec.rb +44 -25
- data/spec/unit/rom/plugins/relation/key_inference_spec.rb +27 -0
- data/spec/unit/rom/plugins/relation/view_spec.rb +47 -0
- data/spec/unit/rom/relation/composite_spec.rb +20 -20
- data/spec/unit/rom/relation/curried_spec.rb +10 -11
- data/spec/unit/rom/relation/graph_spec.rb +27 -27
- data/spec/unit/rom/relation/lazy/combine_spec.rb +26 -20
- data/spec/unit/rom/relation/lazy_spec.rb +38 -38
- data/spec/unit/rom/relation/loaded_spec.rb +2 -3
- data/spec/unit/rom/relation_spec.rb +39 -2
- metadata +58 -66
- data/lib/rom/commands/abstract.rb +0 -184
- data/lib/rom/environment_plugin.rb +0 -17
- data/lib/rom/environment_plugins/auto_registration.rb +0 -38
- data/lib/rom/repository.rb +0 -16
- data/lib/rom/setup_dsl/command.rb +0 -36
- data/lib/rom/setup_dsl/mapper.rb +0 -32
- data/lib/rom/setup_dsl/relation.rb +0 -30
- data/spec/integration/inline_setup_spec.rb +0 -65
- data/spec/unit/rom/repository_spec.rb +0 -12
- data/spec/unit/rom/setup_spec.rb +0 -253
| @@ -1,11 +1,10 @@ | |
| 1 1 | 
             
            require 'spec_helper'
         | 
| 2 2 |  | 
| 3 3 | 
             
            describe ROM::Relation::Loaded do
         | 
| 4 | 
            +
              include_context 'no container'
         | 
| 4 5 | 
             
              include_context 'users and tasks'
         | 
| 5 6 |  | 
| 6 | 
            -
              subject(:users) { ROM::Relation::Loaded.new( | 
| 7 | 
            -
             | 
| 8 | 
            -
              before { setup.relation(:users) }
         | 
| 7 | 
            +
              subject(:users) { ROM::Relation::Loaded.new(users_relation) }
         | 
| 9 8 |  | 
| 10 9 | 
             
              describe '#each' do
         | 
| 11 10 | 
             
                it 'yields tuples from relation' do
         | 
| @@ -12,6 +12,16 @@ describe ROM::Relation do | |
| 12 12 | 
             
              describe '.[]' do
         | 
| 13 13 | 
             
                before do
         | 
| 14 14 | 
             
                  module Test::TestAdapter
         | 
| 15 | 
            +
                    class Relation < ROM::Relation
         | 
| 16 | 
            +
                      adapter :test
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                      def test_relation?
         | 
| 19 | 
            +
                        true
         | 
| 20 | 
            +
                      end
         | 
| 21 | 
            +
                    end
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                  module Test::BrokenAdapter
         | 
| 15 25 | 
             
                    class Relation < ROM::Relation
         | 
| 16 26 | 
             
                      def test_relation?
         | 
| 17 27 | 
             
                        true
         | 
| @@ -20,13 +30,30 @@ describe ROM::Relation do | |
| 20 30 | 
             
                  end
         | 
| 21 31 |  | 
| 22 32 | 
             
                  ROM.register_adapter(:test, Test::TestAdapter)
         | 
| 33 | 
            +
                  ROM.register_adapter(:broken, Test::BrokenAdapter)
         | 
| 23 34 | 
             
                end
         | 
| 24 35 |  | 
| 25 36 | 
             
                it 'returns relation subclass from the registered adapter' do
         | 
| 26 | 
            -
                   | 
| 37 | 
            +
                  subclass = Class.new(ROM::Relation[:test])
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                  relation = subclass.new([])
         | 
| 27 40 |  | 
| 28 41 | 
             
                  expect(relation).to be_test_relation
         | 
| 29 42 | 
             
                end
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                it 'raises error when adapter relation has no identifier' do
         | 
| 45 | 
            +
                  expect {
         | 
| 46 | 
            +
                    Class.new(ROM::Relation[:broken])
         | 
| 47 | 
            +
                  }.to raise_error(ROM::MissingAdapterIdentifierError, /Test::BrokenAdapter::Relation/)
         | 
| 48 | 
            +
                end
         | 
| 49 | 
            +
              end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
              describe ".dataset" do
         | 
| 52 | 
            +
                it 'allows setting dataset name' do
         | 
| 53 | 
            +
                  rel_class = Class.new(ROM::Relation[:memory]) { dataset :users }
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                  expect(rel_class.dataset).to be(:users)
         | 
| 56 | 
            +
                end
         | 
| 30 57 | 
             
              end
         | 
| 31 58 |  | 
| 32 59 | 
             
              describe ".register_as" do
         | 
| @@ -54,7 +81,7 @@ describe ROM::Relation do | |
| 54 81 | 
             
                    dataset :users
         | 
| 55 82 | 
             
                  end
         | 
| 56 83 |  | 
| 57 | 
            -
                  class Test::DescendantUsers < Test::SuperUsers;end
         | 
| 84 | 
            +
                  class Test::DescendantUsers < Test::SuperUsers; end
         | 
| 58 85 |  | 
| 59 86 | 
             
                  expect(Test::DescendantUsers.register_as).to eq(:test_descendant_users)
         | 
| 60 87 | 
             
                end
         | 
| @@ -153,4 +180,14 @@ describe ROM::Relation do | |
| 153 180 | 
             
                  expect(relation.to_a).to eql([jane, joe])
         | 
| 154 181 | 
             
                end
         | 
| 155 182 | 
             
              end
         | 
| 183 | 
            +
             | 
| 184 | 
            +
              describe "#with" do
         | 
| 185 | 
            +
                it "returns a new instance with the original dataset and given custom options" do
         | 
| 186 | 
            +
                  custom_opts = { mappers: "Custom Mapper Registry" }
         | 
| 187 | 
            +
                  new_relation = relation.with(custom_opts)
         | 
| 188 | 
            +
             | 
| 189 | 
            +
                  expect(new_relation.dataset).to be(relation.dataset)
         | 
| 190 | 
            +
                  expect(new_relation.options).to include(custom_opts)
         | 
| 191 | 
            +
                end
         | 
| 192 | 
            +
              end
         | 
| 156 193 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,95 +1,57 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: rom
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 1.0.0.beta1
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Piotr Solnica
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2015- | 
| 11 | 
            +
            date: 2015-11-23 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 | 
            -
              name:  | 
| 14 | 
            +
              name: dry-equalizer
         | 
| 15 15 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 16 16 | 
             
                requirements:
         | 
| 17 17 | 
             
                - - "~>"
         | 
| 18 18 | 
             
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            -
                    version: '0. | 
| 20 | 
            -
                - - ">="
         | 
| 21 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 22 | 
            -
                    version: 0.3.0
         | 
| 23 | 
            -
              type: :runtime
         | 
| 24 | 
            -
              prerelease: false
         | 
| 25 | 
            -
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 26 | 
            -
                requirements:
         | 
| 27 | 
            -
                - - "~>"
         | 
| 28 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 29 | 
            -
                    version: '0.3'
         | 
| 30 | 
            -
                - - ">="
         | 
| 31 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 32 | 
            -
                    version: 0.3.0
         | 
| 33 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 34 | 
            -
              name: equalizer
         | 
| 35 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 36 | 
            -
                requirements:
         | 
| 37 | 
            -
                - - "~>"
         | 
| 38 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 39 | 
            -
                    version: '0.0'
         | 
| 40 | 
            -
                - - ">="
         | 
| 41 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 42 | 
            -
                    version: 0.0.9
         | 
| 19 | 
            +
                    version: '0.2'
         | 
| 43 20 | 
             
              type: :runtime
         | 
| 44 21 | 
             
              prerelease: false
         | 
| 45 22 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 46 23 | 
             
                requirements:
         | 
| 47 24 | 
             
                - - "~>"
         | 
| 48 25 | 
             
                  - !ruby/object:Gem::Version
         | 
| 49 | 
            -
                    version: '0. | 
| 50 | 
            -
                - - ">="
         | 
| 51 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 52 | 
            -
                    version: 0.0.9
         | 
| 26 | 
            +
                    version: '0.2'
         | 
| 53 27 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 54 28 | 
             
              name: rom-support
         | 
| 55 29 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 56 30 | 
             
                requirements:
         | 
| 57 31 | 
             
                - - "~>"
         | 
| 58 32 | 
             
                  - !ruby/object:Gem::Version
         | 
| 59 | 
            -
                    version:  | 
| 60 | 
            -
                - - ">="
         | 
| 61 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 62 | 
            -
                    version: 0.1.0
         | 
| 33 | 
            +
                    version: 1.0.0.beta1
         | 
| 63 34 | 
             
              type: :runtime
         | 
| 64 35 | 
             
              prerelease: false
         | 
| 65 36 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 66 37 | 
             
                requirements:
         | 
| 67 38 | 
             
                - - "~>"
         | 
| 68 39 | 
             
                  - !ruby/object:Gem::Version
         | 
| 69 | 
            -
                    version:  | 
| 70 | 
            -
                - - ">="
         | 
| 71 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 72 | 
            -
                    version: 0.1.0
         | 
| 40 | 
            +
                    version: 1.0.0.beta1
         | 
| 73 41 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 74 42 | 
             
              name: rom-mapper
         | 
| 75 43 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 76 44 | 
             
                requirements:
         | 
| 77 45 | 
             
                - - "~>"
         | 
| 78 46 | 
             
                  - !ruby/object:Gem::Version
         | 
| 79 | 
            -
                    version:  | 
| 80 | 
            -
                - - ">="
         | 
| 81 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 82 | 
            -
                    version: 0.2.0
         | 
| 47 | 
            +
                    version: 0.3.0.beta1
         | 
| 83 48 | 
             
              type: :runtime
         | 
| 84 49 | 
             
              prerelease: false
         | 
| 85 50 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 86 51 | 
             
                requirements:
         | 
| 87 52 | 
             
                - - "~>"
         | 
| 88 53 | 
             
                  - !ruby/object:Gem::Version
         | 
| 89 | 
            -
                    version:  | 
| 90 | 
            -
                - - ">="
         | 
| 91 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 92 | 
            -
                    version: 0.2.0
         | 
| 54 | 
            +
                    version: 0.3.0.beta1
         | 
| 93 55 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 94 56 | 
             
              name: rake
         | 
| 95 57 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -141,21 +103,32 @@ files: | |
| 141 103 | 
             
            - lib/rom/command.rb
         | 
| 142 104 | 
             
            - lib/rom/command_registry.rb
         | 
| 143 105 | 
             
            - lib/rom/commands.rb
         | 
| 144 | 
            -
            - lib/rom/commands/ | 
| 106 | 
            +
            - lib/rom/commands/class_interface.rb
         | 
| 145 107 | 
             
            - lib/rom/commands/composite.rb
         | 
| 146 108 | 
             
            - lib/rom/commands/create.rb
         | 
| 147 109 | 
             
            - lib/rom/commands/delete.rb
         | 
| 148 110 | 
             
            - lib/rom/commands/graph.rb
         | 
| 111 | 
            +
            - lib/rom/commands/graph/builder.rb
         | 
| 149 112 | 
             
            - lib/rom/commands/graph/class_interface.rb
         | 
| 150 113 | 
             
            - lib/rom/commands/graph/input_evaluator.rb
         | 
| 151 114 | 
             
            - lib/rom/commands/lazy.rb
         | 
| 115 | 
            +
            - lib/rom/commands/lazy/create.rb
         | 
| 116 | 
            +
            - lib/rom/commands/lazy/delete.rb
         | 
| 117 | 
            +
            - lib/rom/commands/lazy/update.rb
         | 
| 152 118 | 
             
            - lib/rom/commands/result.rb
         | 
| 153 119 | 
             
            - lib/rom/commands/update.rb
         | 
| 120 | 
            +
            - lib/rom/configuration.rb
         | 
| 121 | 
            +
            - lib/rom/configuration_dsl.rb
         | 
| 122 | 
            +
            - lib/rom/configuration_dsl/command.rb
         | 
| 123 | 
            +
            - lib/rom/configuration_dsl/command_dsl.rb
         | 
| 124 | 
            +
            - lib/rom/configuration_dsl/mapper.rb
         | 
| 125 | 
            +
            - lib/rom/configuration_dsl/mapper_dsl.rb
         | 
| 126 | 
            +
            - lib/rom/configuration_dsl/relation.rb
         | 
| 127 | 
            +
            - lib/rom/configuration_plugin.rb
         | 
| 154 128 | 
             
            - lib/rom/constants.rb
         | 
| 155 129 | 
             
            - lib/rom/container.rb
         | 
| 130 | 
            +
            - lib/rom/create_container.rb
         | 
| 156 131 | 
             
            - lib/rom/environment.rb
         | 
| 157 | 
            -
            - lib/rom/environment_plugin.rb
         | 
| 158 | 
            -
            - lib/rom/environment_plugins/auto_registration.rb
         | 
| 159 132 | 
             
            - lib/rom/gateway.rb
         | 
| 160 133 | 
             
            - lib/rom/global.rb
         | 
| 161 134 | 
             
            - lib/rom/global/plugin_dsl.rb
         | 
| @@ -175,7 +148,11 @@ files: | |
| 175 148 | 
             
            - lib/rom/plugin.rb
         | 
| 176 149 | 
             
            - lib/rom/plugin_base.rb
         | 
| 177 150 | 
             
            - lib/rom/plugin_registry.rb
         | 
| 151 | 
            +
            - lib/rom/plugins/configuration/configuration_dsl.rb
         | 
| 152 | 
            +
            - lib/rom/plugins/relation/key_inference.rb
         | 
| 178 153 | 
             
            - lib/rom/plugins/relation/registry_reader.rb
         | 
| 154 | 
            +
            - lib/rom/plugins/relation/view.rb
         | 
| 155 | 
            +
            - lib/rom/plugins/relation/view/dsl.rb
         | 
| 179 156 | 
             
            - lib/rom/relation.rb
         | 
| 180 157 | 
             
            - lib/rom/relation/class_interface.rb
         | 
| 181 158 | 
             
            - lib/rom/relation/composite.rb
         | 
| @@ -184,27 +161,32 @@ files: | |
| 184 161 | 
             
            - lib/rom/relation/loaded.rb
         | 
| 185 162 | 
             
            - lib/rom/relation/materializable.rb
         | 
| 186 163 | 
             
            - lib/rom/relation_registry.rb
         | 
| 187 | 
            -
            - lib/rom/repository.rb
         | 
| 188 164 | 
             
            - lib/rom/setup.rb
         | 
| 165 | 
            +
            - lib/rom/setup/auto_registration.rb
         | 
| 189 166 | 
             
            - lib/rom/setup/finalize.rb
         | 
| 190 | 
            -
            - lib/rom/ | 
| 191 | 
            -
            - lib/rom/ | 
| 192 | 
            -
            - lib/rom/ | 
| 193 | 
            -
            - lib/rom/setup_dsl/mapper_dsl.rb
         | 
| 194 | 
            -
            - lib/rom/setup_dsl/relation.rb
         | 
| 195 | 
            -
            - lib/rom/setup_dsl/setup.rb
         | 
| 167 | 
            +
            - lib/rom/setup/finalize/commands.rb
         | 
| 168 | 
            +
            - lib/rom/setup/finalize/mappers.rb
         | 
| 169 | 
            +
            - lib/rom/setup/finalize/relations.rb
         | 
| 196 170 | 
             
            - lib/rom/support/configurable.rb
         | 
| 197 171 | 
             
            - lib/rom/version.rb
         | 
| 198 172 | 
             
            - rakelib/benchmark.rake
         | 
| 199 173 | 
             
            - rakelib/mutant.rake
         | 
| 200 174 | 
             
            - rakelib/rubocop.rake
         | 
| 201 175 | 
             
            - rom.gemspec
         | 
| 176 | 
            +
            - spec/fixtures/app/commands/create_user.rb
         | 
| 177 | 
            +
            - spec/fixtures/app/mappers/user_list.rb
         | 
| 178 | 
            +
            - spec/fixtures/app/relations/users.rb
         | 
| 179 | 
            +
            - spec/fixtures/lib/persistence/commands/create_user.rb
         | 
| 180 | 
            +
            - spec/fixtures/lib/persistence/mappers/user_list.rb
         | 
| 181 | 
            +
            - spec/fixtures/lib/persistence/relations/users.rb
         | 
| 182 | 
            +
            - spec/integration/command_registry_spec.rb
         | 
| 202 183 | 
             
            - spec/integration/commands/create_spec.rb
         | 
| 203 184 | 
             
            - spec/integration/commands/delete_spec.rb
         | 
| 204 185 | 
             
            - spec/integration/commands/error_handling_spec.rb
         | 
| 186 | 
            +
            - spec/integration/commands/graph_builder_spec.rb
         | 
| 205 187 | 
             
            - spec/integration/commands/graph_spec.rb
         | 
| 206 188 | 
             
            - spec/integration/commands/update_spec.rb
         | 
| 207 | 
            -
            - spec/integration/ | 
| 189 | 
            +
            - spec/integration/commands_spec.rb
         | 
| 208 190 | 
             
            - spec/integration/mappers/combine_spec.rb
         | 
| 209 191 | 
             
            - spec/integration/mappers/deep_embedded_spec.rb
         | 
| 210 192 | 
             
            - spec/integration/mappers/definition_dsl_spec.rb
         | 
| @@ -225,8 +207,12 @@ files: | |
| 225 207 | 
             
            - spec/integration/mappers/ungroup_spec.rb
         | 
| 226 208 | 
             
            - spec/integration/mappers/unwrap_spec.rb
         | 
| 227 209 | 
             
            - spec/integration/mappers/wrap_spec.rb
         | 
| 210 | 
            +
            - spec/integration/memory/commands/create_spec.rb
         | 
| 211 | 
            +
            - spec/integration/memory/commands/delete_spec.rb
         | 
| 212 | 
            +
            - spec/integration/memory/commands/update_spec.rb
         | 
| 228 213 | 
             
            - spec/integration/multi_env_spec.rb
         | 
| 229 214 | 
             
            - spec/integration/multi_repo_spec.rb
         | 
| 215 | 
            +
            - spec/integration/relations/default_dataset_spec.rb
         | 
| 230 216 | 
             
            - spec/integration/relations/inheritance_spec.rb
         | 
| 231 217 | 
             
            - spec/integration/relations/reading_spec.rb
         | 
| 232 218 | 
             
            - spec/integration/relations/registry_dsl_spec.rb
         | 
| @@ -234,8 +220,12 @@ files: | |
| 234 220 | 
             
            - spec/integration/repositories/setting_logger_spec.rb
         | 
| 235 221 | 
             
            - spec/integration/setup_spec.rb
         | 
| 236 222 | 
             
            - spec/shared/command_behavior.rb
         | 
| 223 | 
            +
            - spec/shared/command_graph.rb
         | 
| 224 | 
            +
            - spec/shared/container.rb
         | 
| 237 225 | 
             
            - spec/shared/enumerable_dataset.rb
         | 
| 226 | 
            +
            - spec/shared/gateway_only.rb
         | 
| 238 227 | 
             
            - spec/shared/materializable.rb
         | 
| 228 | 
            +
            - spec/shared/no_container.rb
         | 
| 239 229 | 
             
            - spec/shared/one_behavior.rb
         | 
| 240 230 | 
             
            - spec/shared/proxy.rb
         | 
| 241 231 | 
             
            - spec/shared/users_and_tasks.rb
         | 
| @@ -243,23 +233,26 @@ files: | |
| 243 233 | 
             
            - spec/support/constant_leak_finder.rb
         | 
| 244 234 | 
             
            - spec/support/mutant.rb
         | 
| 245 235 | 
             
            - spec/test/memory_repository_lint_test.rb
         | 
| 246 | 
            -
            - spec/unit/rom/ | 
| 236 | 
            +
            - spec/unit/rom/auto_registration_spec.rb
         | 
| 247 237 | 
             
            - spec/unit/rom/commands/graph_spec.rb
         | 
| 248 238 | 
             
            - spec/unit/rom/commands/lazy_spec.rb
         | 
| 249 239 | 
             
            - spec/unit/rom/commands/result_spec.rb
         | 
| 250 240 | 
             
            - spec/unit/rom/commands_spec.rb
         | 
| 241 | 
            +
            - spec/unit/rom/configurable_spec.rb
         | 
| 242 | 
            +
            - spec/unit/rom/configuration_spec.rb
         | 
| 251 243 | 
             
            - spec/unit/rom/container_spec.rb
         | 
| 244 | 
            +
            - spec/unit/rom/create_container_spec.rb
         | 
| 245 | 
            +
            - spec/unit/rom/environment_spec.rb
         | 
| 252 246 | 
             
            - spec/unit/rom/gateway_spec.rb
         | 
| 253 247 | 
             
            - spec/unit/rom/global_spec.rb
         | 
| 254 248 | 
             
            - spec/unit/rom/mapper_registry_spec.rb
         | 
| 255 | 
            -
            - spec/unit/rom/memory/commands/create_spec.rb
         | 
| 256 | 
            -
            - spec/unit/rom/memory/commands/delete_spec.rb
         | 
| 257 | 
            -
            - spec/unit/rom/memory/commands/update_spec.rb
         | 
| 258 249 | 
             
            - spec/unit/rom/memory/dataset_spec.rb
         | 
| 259 250 | 
             
            - spec/unit/rom/memory/relation_spec.rb
         | 
| 260 251 | 
             
            - spec/unit/rom/memory/repository_spec.rb
         | 
| 261 252 | 
             
            - spec/unit/rom/memory/storage_spec.rb
         | 
| 262 253 | 
             
            - spec/unit/rom/plugin_spec.rb
         | 
| 254 | 
            +
            - spec/unit/rom/plugins/relation/key_inference_spec.rb
         | 
| 255 | 
            +
            - spec/unit/rom/plugins/relation/view_spec.rb
         | 
| 263 256 | 
             
            - spec/unit/rom/registry_spec.rb
         | 
| 264 257 | 
             
            - spec/unit/rom/relation/composite_spec.rb
         | 
| 265 258 | 
             
            - spec/unit/rom/relation/curried_spec.rb
         | 
| @@ -268,8 +261,6 @@ files: | |
| 268 261 | 
             
            - spec/unit/rom/relation/lazy_spec.rb
         | 
| 269 262 | 
             
            - spec/unit/rom/relation/loaded_spec.rb
         | 
| 270 263 | 
             
            - spec/unit/rom/relation_spec.rb
         | 
| 271 | 
            -
            - spec/unit/rom/repository_spec.rb
         | 
| 272 | 
            -
            - spec/unit/rom/setup_spec.rb
         | 
| 273 264 | 
             
            homepage: http://rom-rb.org
         | 
| 274 265 | 
             
            licenses:
         | 
| 275 266 | 
             
            - MIT
         | 
| @@ -285,9 +276,9 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 285 276 | 
             
                  version: '0'
         | 
| 286 277 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 287 278 | 
             
              requirements:
         | 
| 288 | 
            -
              - - " | 
| 279 | 
            +
              - - ">"
         | 
| 289 280 | 
             
                - !ruby/object:Gem::Version
         | 
| 290 | 
            -
                  version:  | 
| 281 | 
            +
                  version: 1.3.1
         | 
| 291 282 | 
             
            requirements: []
         | 
| 292 283 | 
             
            rubyforge_project: 
         | 
| 293 284 | 
             
            rubygems_version: 2.4.5
         | 
| @@ -295,3 +286,4 @@ signing_key: | |
| 295 286 | 
             
            specification_version: 4
         | 
| 296 287 | 
             
            summary: Ruby Object Mapper
         | 
| 297 288 | 
             
            test_files: []
         | 
| 289 | 
            +
            has_rdoc: 
         | 
| @@ -1,184 +0,0 @@ | |
| 1 | 
            -
            require 'rom/support/options'
         | 
| 2 | 
            -
            require 'rom/support/deprecations'
         | 
| 3 | 
            -
             | 
| 4 | 
            -
            require 'rom/commands/composite'
         | 
| 5 | 
            -
            require 'rom/commands/graph'
         | 
| 6 | 
            -
            require 'rom/commands/lazy'
         | 
| 7 | 
            -
             | 
| 8 | 
            -
            module ROM
         | 
| 9 | 
            -
              module Commands
         | 
| 10 | 
            -
                # Abstract command class
         | 
| 11 | 
            -
                #
         | 
| 12 | 
            -
                # Provides a constructor accepting relation with options and basic behavior
         | 
| 13 | 
            -
                # for calling, currying and composing commands.
         | 
| 14 | 
            -
                #
         | 
| 15 | 
            -
                # Typically command subclasses should inherit from specialized
         | 
| 16 | 
            -
                # Create/Update/Delete, not this one.
         | 
| 17 | 
            -
                #
         | 
| 18 | 
            -
                # @abstract
         | 
| 19 | 
            -
                #
         | 
| 20 | 
            -
                # @private
         | 
| 21 | 
            -
                class Abstract
         | 
| 22 | 
            -
                  include Options
         | 
| 23 | 
            -
                  extend Deprecations
         | 
| 24 | 
            -
             | 
| 25 | 
            -
                  option :type, allow: [:create, :update, :delete]
         | 
| 26 | 
            -
                  option :source, reader: true
         | 
| 27 | 
            -
                  option :result, reader: true, allow: [:one, :many]
         | 
| 28 | 
            -
                  option :validator, reader: true
         | 
| 29 | 
            -
                  option :input, reader: true
         | 
| 30 | 
            -
                  option :curry_args, type: Array, reader: true, default: EMPTY_ARRAY
         | 
| 31 | 
            -
             | 
| 32 | 
            -
                  # @attr_reader [Relation] relation The command's relation
         | 
| 33 | 
            -
                  attr_reader :relation
         | 
| 34 | 
            -
             | 
| 35 | 
            -
                  deprecate :target, :relation,
         | 
| 36 | 
            -
                    'Source relation is now available as `Command#source`'
         | 
| 37 | 
            -
             | 
| 38 | 
            -
                  # @api private
         | 
| 39 | 
            -
                  def initialize(relation, options = EMPTY_HASH)
         | 
| 40 | 
            -
                    super
         | 
| 41 | 
            -
                    @relation = relation
         | 
| 42 | 
            -
                    @source = options[:source] || relation
         | 
| 43 | 
            -
                  end
         | 
| 44 | 
            -
             | 
| 45 | 
            -
                  # Execute the command
         | 
| 46 | 
            -
                  #
         | 
| 47 | 
            -
                  # @abstract
         | 
| 48 | 
            -
                  #
         | 
| 49 | 
            -
                  # @return [Array] an array with inserted tuples
         | 
| 50 | 
            -
                  #
         | 
| 51 | 
            -
                  # @api private
         | 
| 52 | 
            -
                  def execute(*)
         | 
| 53 | 
            -
                    raise(
         | 
| 54 | 
            -
                      NotImplementedError,
         | 
| 55 | 
            -
                      "#{self.class}##{__method__} must be implemented"
         | 
| 56 | 
            -
                    )
         | 
| 57 | 
            -
                  end
         | 
| 58 | 
            -
             | 
| 59 | 
            -
                  # Call the command and return one or many tuples
         | 
| 60 | 
            -
                  #
         | 
| 61 | 
            -
                  # @api public
         | 
| 62 | 
            -
                  def call(*args)
         | 
| 63 | 
            -
                    tuples = execute(*(curry_args + args))
         | 
| 64 | 
            -
             | 
| 65 | 
            -
                    if one?
         | 
| 66 | 
            -
                      tuples.first
         | 
| 67 | 
            -
                    else
         | 
| 68 | 
            -
                      tuples
         | 
| 69 | 
            -
                    end
         | 
| 70 | 
            -
                  end
         | 
| 71 | 
            -
                  alias_method :[], :call
         | 
| 72 | 
            -
             | 
| 73 | 
            -
                  # Curry this command with provided args
         | 
| 74 | 
            -
                  #
         | 
| 75 | 
            -
                  # Curried command can be called without args
         | 
| 76 | 
            -
                  #
         | 
| 77 | 
            -
                  # @return [Command]
         | 
| 78 | 
            -
                  #
         | 
| 79 | 
            -
                  # @api public
         | 
| 80 | 
            -
                  def curry(*args)
         | 
| 81 | 
            -
                    if curry_args.empty? && args.first.is_a?(Graph::InputEvaluator)
         | 
| 82 | 
            -
                      Lazy.new(self, args.first)
         | 
| 83 | 
            -
                    else
         | 
| 84 | 
            -
                      self.class.build(relation, options.merge(curry_args: args))
         | 
| 85 | 
            -
                    end
         | 
| 86 | 
            -
                  end
         | 
| 87 | 
            -
                  alias_method :with, :curry
         | 
| 88 | 
            -
             | 
| 89 | 
            -
                  # Compose a command with another one
         | 
| 90 | 
            -
                  #
         | 
| 91 | 
            -
                  # The other one will be called with the result from the first one
         | 
| 92 | 
            -
                  #
         | 
| 93 | 
            -
                  # @example
         | 
| 94 | 
            -
                  #
         | 
| 95 | 
            -
                  #   command = users.create.curry(name: 'Jane')
         | 
| 96 | 
            -
                  #   command >>= tasks.create.curry(title: 'Task One')
         | 
| 97 | 
            -
                  #
         | 
| 98 | 
            -
                  #   command.call # creates user, passes it to tasks and creates task
         | 
| 99 | 
            -
                  #
         | 
| 100 | 
            -
                  # @return [Composite]
         | 
| 101 | 
            -
                  #
         | 
| 102 | 
            -
                  # @api public
         | 
| 103 | 
            -
                  def >>(other)
         | 
| 104 | 
            -
                    Composite.new(self, other)
         | 
| 105 | 
            -
                  end
         | 
| 106 | 
            -
             | 
| 107 | 
            -
                  # @api public
         | 
| 108 | 
            -
                  def combine(*others)
         | 
| 109 | 
            -
                    Graph.new(self, others)
         | 
| 110 | 
            -
                  end
         | 
| 111 | 
            -
             | 
| 112 | 
            -
                  # @api private
         | 
| 113 | 
            -
                  def lazy?
         | 
| 114 | 
            -
                    false
         | 
| 115 | 
            -
                  end
         | 
| 116 | 
            -
             | 
| 117 | 
            -
                  # @api private
         | 
| 118 | 
            -
                  def graph?
         | 
| 119 | 
            -
                    false
         | 
| 120 | 
            -
                  end
         | 
| 121 | 
            -
             | 
| 122 | 
            -
                  # @api private
         | 
| 123 | 
            -
                  def one?
         | 
| 124 | 
            -
                    result.equal?(:one)
         | 
| 125 | 
            -
                  end
         | 
| 126 | 
            -
             | 
| 127 | 
            -
                  # @api private
         | 
| 128 | 
            -
                  def many?
         | 
| 129 | 
            -
                    result.equal?(:many)
         | 
| 130 | 
            -
                  end
         | 
| 131 | 
            -
             | 
| 132 | 
            -
                  # Assert that tuple count in the relation corresponds to :result
         | 
| 133 | 
            -
                  # setting
         | 
| 134 | 
            -
                  #
         | 
| 135 | 
            -
                  # @raise TupleCountMismatchError
         | 
| 136 | 
            -
                  #
         | 
| 137 | 
            -
                  # @api private
         | 
| 138 | 
            -
                  def assert_tuple_count
         | 
| 139 | 
            -
                    if one? && tuple_count > 1
         | 
| 140 | 
            -
                      raise TupleCountMismatchError, "#{inspect} expects one tuple"
         | 
| 141 | 
            -
                    end
         | 
| 142 | 
            -
                  end
         | 
| 143 | 
            -
             | 
| 144 | 
            -
                  # Return number of tuples in the relation relation
         | 
| 145 | 
            -
                  #
         | 
| 146 | 
            -
                  # This should be overridden by gateways when `#count` is not available
         | 
| 147 | 
            -
                  # in the relation objects
         | 
| 148 | 
            -
                  #
         | 
| 149 | 
            -
                  # @return [Fixnum]
         | 
| 150 | 
            -
                  #
         | 
| 151 | 
            -
                  # @api private
         | 
| 152 | 
            -
                  def tuple_count
         | 
| 153 | 
            -
                    relation.count
         | 
| 154 | 
            -
                  end
         | 
| 155 | 
            -
             | 
| 156 | 
            -
                  # @api private
         | 
| 157 | 
            -
                  def respond_to_missing?(name, _include_private = false)
         | 
| 158 | 
            -
                    relation.respond_to?(name) || super
         | 
| 159 | 
            -
                  end
         | 
| 160 | 
            -
             | 
| 161 | 
            -
                  # @api private
         | 
| 162 | 
            -
                  def new(new_relation)
         | 
| 163 | 
            -
                    self.class.build(new_relation, options.merge(source: relation))
         | 
| 164 | 
            -
                  end
         | 
| 165 | 
            -
             | 
| 166 | 
            -
                  private
         | 
| 167 | 
            -
             | 
| 168 | 
            -
                  # @api private
         | 
| 169 | 
            -
                  def method_missing(name, *args, &block)
         | 
| 170 | 
            -
                    if relation.respond_to?(name)
         | 
| 171 | 
            -
                      response = relation.public_send(name, *args, &block)
         | 
| 172 | 
            -
             | 
| 173 | 
            -
                      if response.instance_of?(relation.class)
         | 
| 174 | 
            -
                        new(response)
         | 
| 175 | 
            -
                      else
         | 
| 176 | 
            -
                        response
         | 
| 177 | 
            -
                      end
         | 
| 178 | 
            -
                    else
         | 
| 179 | 
            -
                      super
         | 
| 180 | 
            -
                    end
         | 
| 181 | 
            -
                  end
         | 
| 182 | 
            -
                end
         | 
| 183 | 
            -
              end
         | 
| 184 | 
            -
            end
         |