ree_lib 1.0.121 → 1.0.123

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
  SHA256:
3
- metadata.gz: 381666058a003165d365519531e3341ecc42c2b4756be1152651914bdd4f0419
4
- data.tar.gz: 9e1648ebd630847fbbe7acd75bac9e5c876cfeb8cfcb065d80a85ac798442eb7
3
+ metadata.gz: 20fb3c9d6a6bc6f163de981a7591c4ba13e07a4077bd81741073e83e6346cdc6
4
+ data.tar.gz: c03d78b30e2f347f2aa54c1c3dcaa964a84bfa921eb63295cdba0604e0932850
5
5
  SHA512:
6
- metadata.gz: 3138793f0e16c9e8dbb7152685d1aacaa411f8eb9c8c95b0ff571b609c3297a583361cfa3571e8a732206be323c9ea70e4df7c34b2c88f705f0af4ef5effacbe
7
- data.tar.gz: 554d74d6c446a0628a803275e1841d35ad78bf192ba1a35bcd7105995185a244a5f14be0eab17d81484242e20d329414370c78b819afe2c0ff7a3c71dcd8a1a9
6
+ metadata.gz: 809b66804d318edd659bf8d3c80f4fe881518ab692b9e7887af1c5e790b3d73475f02fb542b4520f8beb60cfcfd7176a7a1283ae50cc071e69cfa2a70a738a86
7
+ data.tar.gz: 37c8769871641038cb8f17e8773a5ae4f025e87467334cdc5d2286776b37aa2f072457ff0d098d7e207b9f8f8124a15e99c8f13724806fa9d4219ad82da38182
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ree_lib (1.0.121)
4
+ ree_lib (1.0.123)
5
5
  bigdecimal (~> 3.1.6)
6
6
  binding_of_caller (~> 1.0.0)
7
7
  i18n (~> 1.14.1)
@@ -20,11 +20,11 @@ GEM
20
20
  bigdecimal (3.1.8)
21
21
  binding_of_caller (1.0.1)
22
22
  debug_inspector (>= 1.2.0)
23
- bootsnap (1.18.3)
23
+ bootsnap (1.18.4)
24
24
  msgpack (~> 1.2)
25
25
  commander (5.0.0)
26
26
  highline (~> 3.0.0)
27
- concurrent-ruby (1.3.3)
27
+ concurrent-ruby (1.3.4)
28
28
  crack (1.0.0)
29
29
  bigdecimal
30
30
  rexml
@@ -33,7 +33,7 @@ GEM
33
33
  diff-lcs (1.5.1)
34
34
  faker (3.4.2)
35
35
  i18n (>= 1.8.11, < 2)
36
- hashdiff (1.1.0)
36
+ hashdiff (1.1.1)
37
37
  highline (3.0.1)
38
38
  i18n (1.14.5)
39
39
  concurrent-ruby (~> 1.0)
@@ -45,19 +45,21 @@ GEM
45
45
  racc (~> 1.4)
46
46
  nokogiri (1.16.7-x86_64-linux)
47
47
  racc (~> 1.4)
48
- oj (3.16.4)
48
+ oj (3.16.5)
49
49
  bigdecimal (>= 3.0)
50
+ ostruct (>= 0.2)
51
+ ostruct (0.6.0)
50
52
  pg (1.5.7)
51
53
  public_suffix (6.0.1)
52
- racc (1.8.0)
54
+ racc (1.8.1)
53
55
  rack (3.1.7)
54
56
  rack-test (2.1.0)
55
57
  rack (>= 1.3)
56
58
  rainbow (3.1.1)
57
59
  rake (13.2.1)
58
- ree (1.0.43)
60
+ ree (1.0.45)
59
61
  commander (~> 5.0.0)
60
- rexml (3.3.2)
62
+ rexml (3.3.6)
61
63
  strscan
62
64
  roda (3.76.0)
63
65
  rack
@@ -68,7 +70,7 @@ GEM
68
70
  rspec-mocks (~> 3.13.0)
69
71
  rspec-core (3.13.0)
70
72
  rspec-support (~> 3.13.0)
71
- rspec-expectations (3.13.1)
73
+ rspec-expectations (3.13.2)
72
74
  diff-lcs (>= 1.2.0, < 2.0)
73
75
  rspec-support (~> 3.13.0)
74
76
  rspec-mocks (3.13.1)
@@ -233,7 +233,7 @@ module ReeDao
233
233
  foreign_key = foreign_key_from_dao(parent_dao)
234
234
  end
235
235
 
236
- root_ids = list.map(&:"#{primary_key}")
236
+ root_ids = list.map(&primary_key)
237
237
 
238
238
  scope ||= assoc_dao
239
239
  scope = scope.where(foreign_key => root_ids)
@@ -278,9 +278,12 @@ module ReeDao
278
278
  assoc_setter = if setter
279
279
  setter
280
280
  else
281
- "set_#{assoc_name}"
281
+ "#{assoc_name}="
282
282
  end
283
283
 
284
+ fallback_assoc_setter = nil
285
+ fallback_fk = nil
286
+
284
287
  list.each do |item|
285
288
  if setter && setter.is_a?(Proc)
286
289
  if to_dto
@@ -305,7 +308,7 @@ module ReeDao
305
308
  if reverse
306
309
  primary_key
307
310
  else
308
- foreign_key ? foreign_key : "#{assoc_name}_id"
311
+ foreign_key ? foreign_key : (fallback_fk ||= "#{assoc_name}_id")
309
312
  end
310
313
  end
311
314
 
@@ -321,10 +324,13 @@ module ReeDao
321
324
 
322
325
  value = [] if value.nil? && multiple
323
326
 
324
- begin
327
+ if item.respond_to?(assoc_setter)
325
328
  item.send(assoc_setter, value)
326
- rescue NoMethodError
327
- item.send("#{assoc_name}=", value)
329
+ else
330
+ item.send(
331
+ fallback_assoc_setter ||= "set_#{assoc_name}",
332
+ value
333
+ )
328
334
  end
329
335
  end
330
336
  end
@@ -13,14 +13,12 @@ RSpec.describe :agg do
13
13
  before :all do
14
14
  connection = build_pg_connection(ReeDaoAggTest::Db::DB_CONFIG)
15
15
 
16
- connection.drop_table(:organizations, cascade: true) if connection.table_exists?(:organizations)
17
- connection.drop_table(:users, cascade: true) if connection.table_exists?(:users)
18
- connection.drop_table(:user_passports, cascade: true) if connection.table_exists?(:user_passports)
19
- connection.drop_table(:books, cascade: true) if connection.table_exists?(:books)
20
- connection.drop_table(:chapters, cascade: true) if connection.table_exists?(:chapters)
21
- connection.drop_table(:avtorki, cascade: true) if connection.table_exists?(:avtorki)
22
- connection.drop_table(:reviews, cascade: true) if connection.table_exists?(:reviews)
23
- connection.drop_table(:review_authors, cascade: true) if connection.table_exists?(:review_authors)
16
+ [
17
+ :organizations, :users, :user_passports, :books, :chapters, :avtorki,
18
+ :reviews, :review_authors
19
+ ].each do |table|
20
+ connection.drop_table(table, cascade: true) if connection.table_exists?(table)
21
+ end
24
22
 
25
23
  connection.create_table :organizations do
26
24
  primary_key :id
@@ -866,7 +864,7 @@ RSpec.describe :agg do
866
864
 
867
865
  u = res[0]
868
866
  expect(u.books).to_not eq(nil)
869
- expect(u.books[0].chapters).to eq(nil)
867
+ expect(u.books[0].chapters).to eq([])
870
868
  expect(u.books[0].author).to eq(nil)
871
869
  expect(u.books[0].reviews).to_not eq(nil)
872
870
  expect(u.books[0].reviews[0].review_author).to_not eq(nil)
@@ -994,4 +992,4 @@ RSpec.describe :agg do
994
992
  ENV.delete('REE_DAO_SYNC_ASSOCIATIONS')
995
993
  }
996
994
  end
997
- end
995
+ end
@@ -44,31 +44,10 @@ class ReeDaoAggTest::Book
44
44
  field :user_id, Integer
45
45
  field :title, Nilor[String], default: nil
46
46
 
47
- field :author, Any
48
- end
49
-
50
- def set_chapters(chapters)
51
- @chapters = chapters; nil
52
- end
53
-
54
- def chapters
55
- @chapters
56
- end
57
-
58
- def set_author(author)
59
- @author = author
60
- end
47
+ field :author, Any, default: nil
61
48
 
62
- def author
63
- @author
64
- end
65
-
66
- def set_reviews(reviews)
67
- @reviews = reviews; nil
68
- end
69
-
70
- def reviews
71
- @reviews
49
+ collection :chapters, Any
50
+ collection :reviews, Any
72
51
  end
73
52
  end
74
53
 
@@ -87,7 +66,7 @@ class ReeDaoAggTest::User
87
66
  field :organization, Any, default: nil
88
67
  field :passport, Any, default: nil
89
68
  field :custom_field, Any, default: nil
90
-
69
+
91
70
  collection :movies, Any
92
71
  collection :videogames, Any
93
72
  collection :hobbies, Any
@@ -100,7 +79,7 @@ class ReeDaoAggTest::User
100
79
  end
101
80
 
102
81
  [
103
-
82
+
104
83
  ].each do |attr|
105
84
  define_method("set_#{attr}") do |*args|
106
85
  instance_variable_set("@#{attr}", *args)
@@ -509,4 +488,4 @@ class ReeDaoAggTest::ReviewAuthors
509
488
  integer :review_id
510
489
  string :name
511
490
  end
512
- end
491
+ end
@@ -1,6 +1,8 @@
1
1
  require_relative "./field_meta"
2
2
  require "date"
3
3
 
4
+ package_require("ree_object/functions/deep_dup")
5
+
4
6
  module ReeDto::DtoInstanceMethods
5
7
  include Ree::Contracts::Core
6
8
  include Ree::Contracts::ArgContracts
@@ -56,6 +58,11 @@ module ReeDto::DtoInstanceMethods
56
58
  @_attrs
57
59
  end
58
60
 
61
+ contract None => Hash
62
+ def to_h
63
+ each_field.to_h
64
+ end
65
+
59
66
  contract Symbol, Any => Any
60
67
  def set_attr(name, val)
61
68
  @_attrs[name] = val
@@ -129,6 +136,22 @@ module ReeDto::DtoInstanceMethods
129
136
  end
130
137
  end
131
138
 
139
+ def initialize_copy(_other)
140
+ deep_dupper = ReeObject::DeepDup.new
141
+ @_attrs = deep_dupper.call(@_attrs)
142
+ @collections = deep_dupper.call(@collections) if defined?(@collections)
143
+ end
144
+
145
+ def initialize_dup(_other)
146
+ super
147
+ @changed_fields = nil
148
+ end
149
+
150
+ def initialize_clone(_other)
151
+ super
152
+ @changed_fields = @changed_fields.dup if defined?(@changed_fields)
153
+ end
154
+
132
155
  private
133
156
 
134
157
  def inspect_value(v)
@@ -175,4 +175,70 @@ RSpec.describe ReeDto::DSL do
175
175
  )
176
176
  }
177
177
  end
178
+
179
+ describe "#to_h" do
180
+ it {
181
+ dto = ReeDto::DtoClass.new(string: "str")
182
+ expect(dto.to_h).to eq({ string: "str", with_default: 1 })
183
+ }
184
+ end
185
+
186
+ describe "#dup" do
187
+ it {
188
+ dto = ReeDto::DtoClass.new(string: "str")
189
+ dto.string = +"changed"
190
+ expect(dto.changed_fields).to eq([:string])
191
+
192
+ dto.numbers = [1]
193
+
194
+ dup = dto.dup
195
+ expect(dup).to eq(dto)
196
+ expect(dup.object_id).not_to eq(dto.object_id)
197
+ expect(dup.changed_fields).to eq([])
198
+ expect(dup.numbers).to eq([1])
199
+
200
+ dup.numbers << 2
201
+ expect(dto.numbers).to eq([1])
202
+
203
+ dup.string.concat("2")
204
+ expect(dto.string).to eq("changed")
205
+
206
+ dup.string = "changed3"
207
+ expect(dto.string).to eq("changed")
208
+
209
+ dto.freeze
210
+ expect(dto.dup.frozen?).to eq(false)
211
+ }
212
+ end
213
+
214
+ describe "#clone" do
215
+ it {
216
+ dto = ReeDto::DtoClass.new(string: "str")
217
+ dto.string = "changed"
218
+ expect(dto.changed_fields).to eq([:string])
219
+
220
+ dto.numbers = [1]
221
+
222
+ clone = dto.clone
223
+ expect(clone).to eq(dto)
224
+ expect(clone.object_id).not_to eq(dto.object_id)
225
+ expect(clone.changed_fields).to eq([:string])
226
+ expect(clone.numbers).to eq([1])
227
+
228
+ clone.numbers << 2
229
+ expect(dto.numbers).to eq([1])
230
+
231
+ clone.string.concat("2")
232
+ expect(dto.string).to eq("changed")
233
+
234
+ clone.string = "changed3"
235
+ expect(dto.string).to eq("changed")
236
+
237
+ clone.with_default = 2
238
+ expect(dto.changed_fields).to eq([:string])
239
+
240
+ dto.freeze
241
+ expect(dto.clone.frozen?).to eq(true)
242
+ }
243
+ end
178
244
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ReeLib
4
- VERSION = "1.0.121"
4
+ VERSION = "1.0.123"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ree_lib
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.121
4
+ version: 1.0.123
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ruslan Gatiyatov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-08-22 00:00:00.000000000 Z
11
+ date: 2024-08-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ree