rom-repository 1.1.0 → 1.2.0

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: 14c56e0b7faccfcb4ed7d1b7b8506e3f5adc6384
4
- data.tar.gz: 2c9e669ae2e2e863a033c9bc9169589d98200d87
3
+ metadata.gz: 1d1abbcf0ab779840aaf19b899c6e5b725c8621e
4
+ data.tar.gz: b4cfd46194e94c7509c920c21f54e4d317ace881
5
5
  SHA512:
6
- metadata.gz: ac27d7fd92fe6385817f18063573da18f98f710d391d2dcf369cfc0fd07b4540582d6190aadd2d7cfd39b89a073541c7aa2defcb2d5c03e896238a405c6f8d27
7
- data.tar.gz: 6e6af0a5a553888023c7d1164ab9e864572a9c3ac659f76b9220e484e8e9db06dae704c7fda3e244c8cef87fe050722891307fcc6379f26fecd0ac1936b2c105
6
+ metadata.gz: d96d070cf7eaf2729c8ebd1b78ed8cc9aebfc128d01c81211eca941fd53ad3f84d6be86ab2ba62e6ef9d1cbf97d4c1eaf299906bb7f0aac26842c070ac9f8c69
7
+ data.tar.gz: b82756a5892e7d62c5ce822372f51bd2b8af2e76d28b0e8dde4b01a9e798460bafac9b23ce511fbe761350c598b240024a0f6203e4946f784cb595d0df917c0d
data/CHANGELOG.md CHANGED
@@ -1,3 +1,16 @@
1
+ # v1.2.0 2017-03-01
2
+
3
+ ### Fixed
4
+
5
+ * Support for `#read` in rom-sql was restored via mapping to `ROM::OpenStruct` (solnic)
6
+ * Using `#nodes` no longer executes redundant query with deeply nested aggregates (solnic)
7
+
8
+ ### Changed
9
+
10
+ * Depends on rom >= 3.0.4 now as it provides `Relation::Graph#with_nodes` which is needed here (solnic)
11
+
12
+ [Compare v1.1.0...v1.2.0](https://github.com/rom-rb/rom-repository/compare/v1.1.0...v1.2.0)
13
+
1
14
  # v1.1.0 2017-02-16
2
15
 
3
16
  ### Added
data/Gemfile CHANGED
@@ -11,6 +11,7 @@ group :development do
11
11
  end
12
12
 
13
13
  group :test do
14
+ gem 'rom', git: 'https://github.com/rom-rb/rom.git', branch: 'master'
14
15
  gem 'rom-sql', git: 'https://github.com/rom-rb/rom-sql.git', branch: 'master'
15
16
  gem 'rspec'
16
17
  gem 'dry-struct'
@@ -0,0 +1,35 @@
1
+ module ROM
2
+ # ROM's open structs are used for relations with empty schemas.
3
+ # Such relations may exist in cases like using raw SQL strings
4
+ # where schema was not explicitly defined using `view` DSL.
5
+ #
6
+ # @api public
7
+ class OpenStruct
8
+ IVAR = -> v { :"@#{v}" }
9
+
10
+ # @api private
11
+ def initialize(attributes)
12
+ attributes.each do |key, value|
13
+ instance_variable_set(IVAR[key], value)
14
+ end
15
+ end
16
+
17
+ # @api private
18
+ def respond_to_missing?(meth, include_private = false)
19
+ super || instance_variables.include?(IVAR[meth])
20
+ end
21
+
22
+ private
23
+
24
+ # @api private
25
+ def method_missing(meth, *args, &block)
26
+ ivar = IVAR[meth]
27
+
28
+ if instance_variables.include?(ivar)
29
+ instance_variable_get(ivar)
30
+ else
31
+ super
32
+ end
33
+ end
34
+ end
35
+ end
@@ -215,17 +215,6 @@ module ROM
215
215
  end
216
216
  end
217
217
 
218
- # TODO: add a proper interface to `Relation::Graph` and `Relation::Curried` to rom core
219
- #
220
- # @api private
221
- def with_nodes(nodes)
222
- if relation.curried?
223
- __new__(relation.send(:__new__, relation.relation.class.new(relation.root, nodes)))
224
- else
225
- __new__(relation.class.new(relation.root, nodes))
226
- end
227
- end
228
-
229
218
  # @api private
230
219
  def respond_to_missing?(meth, _include_private = false)
231
220
  relation.respond_to?(meth) || super
@@ -3,6 +3,7 @@ require 'dry/core/cache'
3
3
  require 'dry/core/class_builder'
4
4
 
5
5
  require 'rom/struct'
6
+ require 'rom/open_struct'
6
7
  require 'rom/schema/attribute'
7
8
 
8
9
  module ROM
@@ -16,9 +17,13 @@ module ROM
16
17
  name, header = args
17
18
  attributes = visit(header).compact
18
19
 
19
- build_class(name, ROM::Struct) do |klass|
20
- attributes.each do |(name, type)|
21
- klass.attribute(name, type)
20
+ if attributes.empty?
21
+ ROM::OpenStruct
22
+ else
23
+ build_class(name, ROM::Struct) do |klass|
24
+ attributes.each do |(name, type)|
25
+ klass.attribute(name, type)
26
+ end
22
27
  end
23
28
  end
24
29
  end
@@ -1,5 +1,5 @@
1
1
  module ROM
2
2
  class Repository
3
- VERSION = '1.1.0'.freeze
3
+ VERSION = '1.2.0'.freeze
4
4
  end
5
5
  end
@@ -15,7 +15,7 @@ Gem::Specification.new do |gem|
15
15
  gem.test_files = `git ls-files -- {spec}/*`.split("\n")
16
16
  gem.license = 'MIT'
17
17
 
18
- gem.add_runtime_dependency 'rom', '~> 3.0'
18
+ gem.add_runtime_dependency 'rom', '~> 3.1'
19
19
  gem.add_runtime_dependency 'rom-mapper', '~> 0.5'
20
20
  gem.add_runtime_dependency 'dry-core', '~> 0.2', '>= 0.2.1'
21
21
  gem.add_runtime_dependency 'dry-struct', '~> 0.1'
@@ -336,4 +336,10 @@ RSpec.describe 'ROM repository' do
336
336
  expect(jane.post.body).to eql('Jane Post')
337
337
  end
338
338
  end
339
+
340
+ it 'loads structs using plain SQL' do
341
+ jane = repo.users.read("SELECT name FROM users WHERE name = 'Jane'").one
342
+
343
+ expect(jane.name).to eql('Jane')
344
+ end
339
345
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rom-repository
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piotr Solnica
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-16 00:00:00.000000000 Z
11
+ date: 2017-03-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rom
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '3.0'
19
+ version: '3.1'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '3.0'
26
+ version: '3.1'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rom-mapper
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -117,6 +117,7 @@ files:
117
117
  - README.md
118
118
  - Rakefile
119
119
  - lib/rom-repository.rb
120
+ - lib/rom/open_struct.rb
120
121
  - lib/rom/repository.rb
121
122
  - lib/rom/repository/changeset.rb
122
123
  - lib/rom/repository/changeset/associated.rb