hanami-model 1.1.0.rc1 → 1.1.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: ac1d93bb8d958c05f22b8a5f14e0072c0c7df823
4
- data.tar.gz: 369794a0d62a1e06d55181564bc15693e4b0ab46
3
+ metadata.gz: baa67e9dd75be68366898314a21f009c72516403
4
+ data.tar.gz: 25c3f3892d14131966a71dbe18a9339b5b3c1b69
5
5
  SHA512:
6
- metadata.gz: e01d7c581d03cecc7eeee81cef39abd574581e015d677ce623ddf0339a336b98f434995583b6008a9fabd275fe41a764ea4c872309c66b2148ff6aef134a102e
7
- data.tar.gz: '08df89ae8621493379cd07cd7c5f78d7ac380319b7312d33d8f26d57eaa5065549773ed6bf5cbbb965838235fc93c2d9b41cac96c98124e9fbd74ad1157c6815'
6
+ metadata.gz: 9244838d4936d70bd1a24d4e8cce9944b91527d96999dee94eb0d5a2bf8d39b62350197cd4ff8f0bd0d10e154687850401b2c92aa89ae54d1a506aa6d069a8f3
7
+ data.tar.gz: 80b5cef9d91ea29db8312eae0a7659b03333cf49a34a35d0b5e08086af020f1ea0a49f29aa8517aac5716c252edea6ad35f1ad23b0dd1fec0c0e5b1a3945234d
data/CHANGELOG.md CHANGED
@@ -1,6 +1,10 @@
1
1
  # Hanami::Model
2
2
  A persistence layer for Hanami
3
3
 
4
+ ## v1.1.0 - 2017-10-25
5
+ ### Fixed
6
+ - [Luca Guidi] Ensure associations to always accept objects that are serializable into `::Hash`
7
+
4
8
  ## v1.1.0.rc1 - 2017-10-16
5
9
  ### Added
6
10
  - [Marcello Rocha] Added support for associations aliasing via `:as` option (`has_many :users, through: :comments, as: :authors`)
@@ -28,7 +32,7 @@ A persistence layer for Hanami
28
32
 
29
33
  ## v1.0.4 - 2017-10-14
30
34
  ### Fixed
31
- - [Nikita Shilnikov] Keep the dependency on `dry-sql` at `~> 1.3`, which is compatible with `dry-types` `~> 0.11.0`
35
+ - [Nikita Shilnikov] Keep the dependency on `rom-sql` at `~> 1.3`, which is compatible with `dry-types` `~> 0.11.0`
32
36
  - [Nikita Shilnikov] Ensure to write Postgres JSON (`PGJSON`) type for nested associated records
33
37
  - [Nikita Shilnikov] Ensure `Repository#select` to work with `Hanami::Model::MappedRelation`
34
38
 
data/hanami-model.gemspec CHANGED
@@ -18,8 +18,8 @@ Gem::Specification.new do |spec|
18
18
  spec.require_paths = ['lib']
19
19
  spec.required_ruby_version = '>= 2.3.0'
20
20
 
21
- spec.add_runtime_dependency 'hanami-utils', '1.1.0.rc1'
22
- spec.add_runtime_dependency 'rom', '~> 3.3', '>= 3.3.2'
21
+ spec.add_runtime_dependency 'hanami-utils', '~> 1.1'
22
+ spec.add_runtime_dependency 'rom', '~> 3.3', '>= 3.3.3'
23
23
  spec.add_runtime_dependency 'rom-sql', '~> 1.3', '>= 1.3.5'
24
24
  spec.add_runtime_dependency 'rom-repository', '~> 1.4'
25
25
  spec.add_runtime_dependency 'dry-types', '~> 0.11.0'
@@ -27,5 +27,5 @@ Gem::Specification.new do |spec|
27
27
 
28
28
  spec.add_development_dependency 'bundler'
29
29
  spec.add_development_dependency 'rake', '~> 12'
30
- spec.add_development_dependency 'rspec', '~> 3.6'
30
+ spec.add_development_dependency 'rspec', '~> 3.7'
31
31
  end
@@ -50,7 +50,7 @@ module Hanami
50
50
  # @api private
51
51
  def create(data)
52
52
  entity.new(command(:create, aggregate(target), use: [:timestamps])
53
- .call(data))
53
+ .call(serialize(data)))
54
54
  rescue => e
55
55
  raise Hanami::Model::Error.for(e)
56
56
  end
@@ -59,7 +59,7 @@ module Hanami
59
59
  # @api private
60
60
  def add(data)
61
61
  command(:create, relation(target), use: [:timestamps])
62
- .call(associate(data))
62
+ .call(associate(serialize(data)))
63
63
  rescue => e
64
64
  raise Hanami::Model::Error.for(e)
65
65
  end
@@ -202,6 +202,10 @@ module Hanami
202
202
  def __new__(new_scope)
203
203
  self.class.new(repository, source, target, subject, new_scope)
204
204
  end
205
+
206
+ def serialize(data)
207
+ Utils::Hash.deep_serialize(data)
208
+ end
205
209
  end
206
210
  end
207
211
  end
@@ -1,3 +1,5 @@
1
+ require "hanami/utils/hash"
2
+
1
3
  module Hanami
2
4
  module Model
3
5
  module Associations
@@ -49,14 +51,14 @@ module Hanami
49
51
 
50
52
  def create(data)
51
53
  entity.new(
52
- command(:create, aggregate(target), use: [:timestamps]).call(data)
54
+ command(:create, aggregate(target), use: [:timestamps]).call(serialize(data))
53
55
  )
54
56
  rescue => e
55
57
  raise Hanami::Model::Error.for(e)
56
58
  end
57
59
 
58
60
  def add(data)
59
- command(:create, relation(target), use: [:timestamps]).call(associate(data))
61
+ command(:create, relation(target), use: [:timestamps]).call(associate(serialize(data)))
60
62
  rescue => e
61
63
  raise Hanami::Model::Error.for(e)
62
64
  end
@@ -65,7 +67,7 @@ module Hanami
65
67
  command(:update, relation(target), use: [:timestamps])
66
68
  .by_pk(
67
69
  one.public_send(relation(target).primary_key)
68
- ).call(data)
70
+ ).call(serialize(data))
69
71
  rescue => e
70
72
  raise Hanami::Model::Error.for(e)
71
73
  end
@@ -78,7 +80,7 @@ module Hanami
78
80
  def replace(data)
79
81
  repository.transaction do
80
82
  delete
81
- add(data)
83
+ add(serialize(data))
82
84
  end
83
85
  end
84
86
 
@@ -151,6 +153,12 @@ module Hanami
151
153
  result = result.where(foreign_key => subject.fetch(primary_key)) unless subject.nil?
152
154
  result.as(Model::MappedRelation.mapper_name)
153
155
  end
156
+
157
+ # @since 1.1.0
158
+ # @api private
159
+ def serialize(data)
160
+ Utils::Hash.deep_serialize(data)
161
+ end
154
162
  end
155
163
  end
156
164
  end
@@ -1,3 +1,5 @@
1
+ require "hanami/utils/hash"
2
+
1
3
  module Hanami
2
4
  module Model
3
5
  module Associations
@@ -5,7 +7,7 @@ module Hanami
5
7
  #
6
8
  # @since 0.7.0
7
9
  # @api private
8
- class ManyToMany
10
+ class ManyToMany # rubocop:disable Metrics/ClassLength
9
11
  # @since 0.7.0
10
12
  # @api private
11
13
  def self.schema_type(entity)
@@ -67,12 +69,13 @@ module Hanami
67
69
  __new__(scope.where(condition))
68
70
  end
69
71
 
72
+ # Return the association table object. Would need an aditional query to return the entity
73
+ #
70
74
  # @since 1.1.0
71
75
  # @api private
72
- # Return the association table object. Would need an aditional query to return the entity
73
76
  def add(*data)
74
77
  command(:create, relation(through), use: [:timestamps])
75
- .call(associate(data.map(&:to_h)))
78
+ .call(associate(serialize(data)))
76
79
  rescue => e
77
80
  raise Hanami::Model::Error.for(e)
78
81
  end
@@ -186,6 +189,14 @@ module Hanami
186
189
  def __new__(new_scope)
187
190
  self.class.new(repository, source, target, subject, new_scope)
188
191
  end
192
+
193
+ # @since 1.1.0
194
+ # @api private
195
+ def serialize(data)
196
+ data.map do |d|
197
+ Utils::Hash.deep_serialize(d)
198
+ end
199
+ end
189
200
  end
190
201
  end
191
202
  end
@@ -3,6 +3,6 @@ module Hanami
3
3
  # Defines the version
4
4
  #
5
5
  # @since 0.1.0
6
- VERSION = '1.1.0.rc1'.freeze
6
+ VERSION = '1.1.0'.freeze
7
7
  end
8
8
  end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hanami-model
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0.rc1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luca Guidi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-16 00:00:00.000000000 Z
11
+ date: 2017-10-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hanami-utils
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '='
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 1.1.0.rc1
19
+ version: '1.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: 1.1.0.rc1
26
+ version: '1.1'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rom
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -33,7 +33,7 @@ dependencies:
33
33
  version: '3.3'
34
34
  - - ">="
35
35
  - !ruby/object:Gem::Version
36
- version: 3.3.2
36
+ version: 3.3.3
37
37
  type: :runtime
38
38
  prerelease: false
39
39
  version_requirements: !ruby/object:Gem::Requirement
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: '3.3'
44
44
  - - ">="
45
45
  - !ruby/object:Gem::Version
46
- version: 3.3.2
46
+ version: 3.3.3
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rom-sql
49
49
  requirement: !ruby/object:Gem::Requirement
@@ -140,14 +140,14 @@ dependencies:
140
140
  requirements:
141
141
  - - "~>"
142
142
  - !ruby/object:Gem::Version
143
- version: '3.6'
143
+ version: '3.7'
144
144
  type: :development
145
145
  prerelease: false
146
146
  version_requirements: !ruby/object:Gem::Requirement
147
147
  requirements:
148
148
  - - "~>"
149
149
  - !ruby/object:Gem::Version
150
- version: '3.6'
150
+ version: '3.7'
151
151
  description: A persistence framework with entities and repositories
152
152
  email:
153
153
  - me@lucaguidi.com
@@ -215,9 +215,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
215
215
  version: 2.3.0
216
216
  required_rubygems_version: !ruby/object:Gem::Requirement
217
217
  requirements:
218
- - - ">"
218
+ - - ">="
219
219
  - !ruby/object:Gem::Version
220
- version: 1.3.1
220
+ version: '0'
221
221
  requirements: []
222
222
  rubyforge_project:
223
223
  rubygems_version: 2.6.13