rom 0.9.0 → 0.9.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e37b5bfee7aba0349fc7072c15a936d86b5d64da
4
- data.tar.gz: 960446e1976fcfbe3d13d7bafb25a83ce7912626
3
+ metadata.gz: d5eaa5117425dbec0243b42bfc8e5cd2a246ee67
4
+ data.tar.gz: b4d0c29e7025e62a7e8cf8660913a1a5c5c9a65a
5
5
  SHA512:
6
- metadata.gz: 9c251e5659fb72fc73cfca473a1667d4da46a4ca58ed68f31eb2b74f275139ca86ffdf49c93f2b87a194420baa5911655e26927e5d923239ead79ca2bc910cda
7
- data.tar.gz: 6c35bbee777498703f1a386ea4ce2f91d96b0860c7a664800ffe05f58ba1ce18199279f088f9ae3dac2b3b0ce6d11fc6aa718d10afbb7db01192b08500012674
6
+ metadata.gz: fd50b8d43492c960dffcb3782cf0068138bacfaa05791266a8d407fe8938b5cf758360372b88be8a26f98c391fa2c857502a9547574d2e635c76ccad581f8f30
7
+ data.tar.gz: 45c454986d7b9aa01b06bc1210b75733b9daedb25a13208e7726bbe11e2000039ce0d057c94f11bd3f31adea46bfb08a8a92115abf998b58ffd79af98d1d5b09
@@ -1,3 +1,23 @@
1
+ ## v0.9.1 2015-08-21
2
+
3
+ This is a small bug-fix release which addresses a couple of issues for inline
4
+ setup DSL and multi-environments.
5
+
6
+ ### Fixed
7
+
8
+ - Multi-env setup for adapters with schema-inferration support won't crash (solnic)
9
+ - Default adapter is set correctly when many adapters are configured and one is
10
+ registered under `:default` name (solnic)
11
+ - When defining a relation using inline DSL with custom dataset name the relation
12
+ name will be correctly set as `register_as` setting (solnic)
13
+
14
+ ### Changed
15
+
16
+ - When using inline-setup for env the auto_registration mechanism will be turned
17
+ on by default (solnic)
18
+
19
+ [Compare v0.9.0...v0.9.1](https://github.com/rom-rb/rom/compare/v0.9.0...v0.9.1)
20
+
1
21
  ## v0.9.0 2015-08-19
2
22
 
3
23
  ### Added
@@ -1,3 +1,4 @@
1
+ require 'rom/support/options'
1
2
  require 'rom/support/deprecations'
2
3
 
3
4
  require 'rom/commands/composite'
@@ -1,3 +1,5 @@
1
+ require 'rom/pipeline'
2
+
1
3
  module ROM
2
4
  module Commands
3
5
  # Composite command that consists of left and right commands
@@ -114,7 +114,16 @@ module ROM
114
114
  # @api public
115
115
  def setup(*args, &block)
116
116
  config = setup_config(*args)
117
- @boot = Setup.new(setup_gateways(config), adapters.keys.first)
117
+ configured_gateways = setup_gateways(config)
118
+
119
+ default_adapter = gateways.fetch(
120
+ configured_gateways[:default], adapters.keys.first
121
+ )
122
+
123
+ @boot = Setup.new(configured_gateways,
124
+ gateway_map: gateways,
125
+ default_adapter: default_adapter
126
+ )
118
127
 
119
128
  config.each do |name, config_args|
120
129
  options = config_args.is_a?(Array) && config_args.last
@@ -122,13 +131,21 @@ module ROM
122
131
  end
123
132
 
124
133
  if block
134
+ use :auto_registration unless auto_registration?
125
135
  @boot.instance_exec(&block)
126
- @boot.finalize
136
+ finalize.container
127
137
  else
128
138
  @boot
129
139
  end
130
140
  end
131
141
 
142
+ # Check if auto-registration is enabled for this environment
143
+ #
144
+ # @api private
145
+ def auto_registration?
146
+ false
147
+ end
148
+
132
149
  # Global relation setup DSL
133
150
  #
134
151
  # @example
@@ -6,8 +6,19 @@ module ROM
6
6
  #
7
7
  # @api public
8
8
  module AutoRegistration
9
+ # Say "yes" for envs that have this plugin enabled
10
+ #
11
+ # By default it says "no" in Environment#auto_registration?
12
+ #
13
+ # @api private
14
+ def auto_registration?
15
+ true
16
+ end
17
+
9
18
  # @api private
10
19
  def self.apply(environment, options = {})
20
+ environment.extend(AutoRegistration)
21
+
11
22
  if_proc = options.fetch(:if, ->(*args) { true })
12
23
 
13
24
  ROM::Relation.on(:inherited) do |relation|
@@ -1,3 +1,4 @@
1
+ require 'rom/support/options' # FIXME: this shouldn't be required, fix needed in rom-support
1
2
  require 'rom/support/array_dataset'
2
3
 
3
4
  module ROM
@@ -18,6 +18,11 @@ module ROM
18
18
  # @api private
19
19
  attr_reader :gateways
20
20
 
21
+ # @attr_reader [Hash<Gateway=>Symbol>] gateway_map Environment gateway map
22
+ #
23
+ # @api private
24
+ attr_reader :gateway_map
25
+
21
26
  # Deprecated accessor for gateways.
22
27
  #
23
28
  # @see gateways
@@ -50,12 +55,15 @@ module ROM
50
55
  alias_method :env, :container
51
56
 
52
57
  # @api private
53
- def initialize(gateways, default_adapter = nil)
58
+ def initialize(gateways, options = {})
54
59
  @gateways = gateways
55
- @default_adapter = default_adapter
60
+
61
+ @gateway_map = options.fetch(:gateway_map, {})
62
+ @default_adapter = options.fetch(:default_adapter, nil)
63
+
56
64
  @relation_classes = []
57
- @mapper_classes = []
58
65
  @command_classes = []
66
+ @mapper_classes = []
59
67
  @container = nil
60
68
  end
61
69
 
@@ -76,7 +84,12 @@ module ROM
76
84
  end
77
85
 
78
86
  finalize = Finalize.new(
79
- gateways, relation_classes, mapper_classes, command_classes, config.freeze
87
+ gateways: gateways,
88
+ gateway_map: gateway_map,
89
+ relation_classes: relation_classes,
90
+ command_classes: command_classes,
91
+ mappers: mapper_classes,
92
+ config: config.freeze
80
93
  )
81
94
 
82
95
  @container = finalize.run!
@@ -16,18 +16,23 @@ module ROM
16
16
  #
17
17
  # @private
18
18
  class Finalize
19
- attr_reader :gateways, :repo_adapter, :datasets,
20
- :relation_classes, :mapper_classes, :mappers, :command_classes, :config
19
+ attr_reader :gateways, :repo_adapter, :datasets, :gateway_map,
20
+ :relation_classes, :mapper_classes, :mapper_objects, :command_classes, :config
21
21
 
22
22
  # @api private
23
- def initialize(gateways, relation_classes, mappers, command_classes, config)
24
- @gateways = gateways
25
- @repo_adapter_map = ROM.gateways
26
- @relation_classes = relation_classes
23
+ def initialize(options)
24
+ @gateways = options.fetch(:gateways)
25
+ @gateway_map = options.fetch(:gateway_map)
26
+
27
+ @relation_classes = options.fetch(:relation_classes)
28
+ @command_classes = options.fetch(:command_classes)
29
+
30
+ mappers = options.fetch(:mappers, [])
27
31
  @mapper_classes = mappers.select { |mapper| mapper.is_a?(Class) }
28
- @mappers = (mappers - @mapper_classes).reduce(:merge) || {}
29
- @command_classes = command_classes
30
- @config = config
32
+ @mapper_objects = (mappers - @mapper_classes).reduce(:merge) || {}
33
+
34
+ @config = options.fetch(:config)
35
+
31
36
  initialize_datasets
32
37
  end
33
38
 
@@ -37,7 +42,7 @@ module ROM
37
42
  #
38
43
  # @api private
39
44
  def adapter_for(gateway)
40
- @repo_adapter_map.fetch(gateways[gateway])
45
+ @gateway_map.fetch(gateways[gateway])
41
46
  end
42
47
 
43
48
  # Run the finalization process
@@ -90,7 +95,7 @@ module ROM
90
95
  h[relation] = MapperRegistry.new(mappers)
91
96
  }
92
97
 
93
- mappers.each do |relation, mappers|
98
+ mapper_objects.each do |relation, mappers|
94
99
  if registry_hash.key?(relation)
95
100
  mappers.each { |name, mapper| registry[name] = mapper }
96
101
  else
@@ -22,6 +22,7 @@ module ROM
22
22
  def relation(name, options = EMPTY_HASH, &block)
23
23
  klass_opts = { adapter: default_adapter }.merge(options)
24
24
  klass = Relation.build_class(name, klass_opts)
25
+ klass.register_as(name)
25
26
  klass.class_eval(&block) if block
26
27
  klass
27
28
  end
@@ -1,3 +1,3 @@
1
1
  module ROM
2
- VERSION = '0.9.0'.freeze
2
+ VERSION = '0.9.1'.freeze
3
3
  end
@@ -0,0 +1,65 @@
1
+ require 'spec_helper'
2
+ require 'rom/memory'
3
+
4
+ RSpec.describe 'Inline setup' do
5
+ before do
6
+ module Test
7
+ module Dummy
8
+ class Gateway < ROM::Memory::Gateway
9
+ def schema
10
+ [:users, :tasks]
11
+ end
12
+ end
13
+
14
+ class Relation < ROM::Relation
15
+ adapter :dummy
16
+ end
17
+ end
18
+ end
19
+
20
+ ROM.register_adapter :dummy, Test::Dummy
21
+ end
22
+
23
+ context 'using global env' do
24
+ it 'auto-registers components' do
25
+ rom = ROM.setup(:dummy) do
26
+ relation(:users)
27
+ end
28
+
29
+ users = rom.relation(:users)
30
+
31
+ expect(users).to be_kind_of(Test::Dummy::Relation)
32
+ end
33
+ end
34
+
35
+ context 'using local env' do
36
+ it 'auto-registers components' do
37
+ env = ROM::Environment.new
38
+
39
+ rom = env.setup(:dummy) do
40
+ relation(:users)
41
+ end
42
+
43
+ users = rom.relation(:users)
44
+
45
+ expect(users).to be_kind_of(Test::Dummy::Relation)
46
+ end
47
+ end
48
+
49
+ context 'defining a relation with custom dataset name' do
50
+ it 'registers under provided name and uses custom dataset' do
51
+ env = ROM::Environment.new
52
+
53
+ rom = env.setup(:dummy) do
54
+ relation(:super_users) do
55
+ dataset :users
56
+ end
57
+ end
58
+
59
+ users = rom.relation(:super_users)
60
+
61
+ expect(users).to be_kind_of(Test::Dummy::Relation)
62
+ expect(users.dataset).to be(rom.gateways[:default].dataset(:users))
63
+ end
64
+ end
65
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rom
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.9.1
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-08-19 00:00:00.000000000 Z
11
+ date: 2015-08-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: transproc
@@ -204,6 +204,7 @@ files:
204
204
  - spec/integration/commands/error_handling_spec.rb
205
205
  - spec/integration/commands/graph_spec.rb
206
206
  - spec/integration/commands/update_spec.rb
207
+ - spec/integration/inline_setup_spec.rb
207
208
  - spec/integration/mappers/combine_spec.rb
208
209
  - spec/integration/mappers/deep_embedded_spec.rb
209
210
  - spec/integration/mappers/definition_dsl_spec.rb