rom 0.9.0 → 0.9.1

Sign up to get free protection for your applications and to get access to all the features.
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