ree_lib 1.0.49 → 1.0.50
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 +4 -4
- data/Gemfile.lock +4 -3
- data/lib/ree_lib/Packages.schema.json +4 -0
- data/lib/ree_lib/packages/ree_actions/spec/ree_actions/dsl_spec.rb +17 -10
- data/lib/ree_lib/packages/ree_dao/Package.schema.json +10 -0
- data/lib/ree_lib/packages/ree_dao/package/ree_dao/aggregate_dsl.rb +26 -0
- data/lib/ree_lib/packages/ree_dao/package/ree_dao/association.rb +311 -0
- data/lib/ree_lib/packages/ree_dao/package/ree_dao/associations.rb +148 -0
- data/lib/ree_lib/packages/ree_dao/package/ree_dao/beans/dao_cache.rb +40 -19
- data/lib/ree_lib/packages/ree_dao/package/ree_dao/contract/dao_dataset_contract.rb +15 -0
- data/lib/ree_lib/packages/ree_dao/package/ree_dao/contract/entity_contract.rb +15 -0
- data/lib/ree_lib/packages/ree_dao/package/ree_dao/dataset_extensions.rb +4 -0
- data/lib/ree_lib/packages/ree_dao/package/ree_dao/dsl.rb +1 -1
- data/lib/ree_lib/packages/ree_dao/package/ree_dao/functions/build_pg_connection.rb +1 -0
- data/lib/ree_lib/packages/ree_dao/package/ree_dao/functions/build_sqlite_connection.rb +1 -0
- data/lib/ree_lib/packages/ree_dao/package/ree_dao/functions/drop_cache.rb +1 -1
- data/lib/ree_lib/packages/ree_dao/package/ree_dao/functions/init_cache.rb +1 -1
- data/lib/ree_lib/packages/ree_dao/package/ree_dao/functions/load_agg.rb +63 -0
- data/lib/ree_lib/packages/ree_dao/package/ree_dao/thread_parents.rb +40 -0
- data/lib/ree_lib/packages/ree_dao/package/ree_dao.rb +9 -0
- data/lib/ree_lib/packages/ree_dao/schemas/ree_dao/functions/build_pg_connection.schema.json +1 -1
- data/lib/ree_lib/packages/ree_dao/schemas/ree_dao/functions/build_sqlite_connection.schema.json +1 -1
- data/lib/ree_lib/packages/ree_dao/schemas/ree_dao/functions/load_agg.schema.json +43 -0
- data/lib/ree_lib/packages/ree_dao/spec/ree_dao/functions/load_agg/load_agg_benchmark_spec.rb +414 -0
- data/lib/ree_lib/packages/ree_dao/spec/ree_dao/functions/load_agg/load_agg_spec.rb +605 -0
- data/lib/ree_lib/packages/ree_dao/spec/ree_dao/functions/load_agg/ree_dao_load_agg_test.rb +524 -0
- data/lib/ree_lib/packages/ree_logger/package/ree_logger/multi_logger.rb +19 -10
- data/lib/ree_lib/packages/ree_logger/spec/ree_logger/multi_logger_spec.rb +10 -0
- data/lib/ree_lib/packages/ree_mapper/package/ree_mapper/mapper_factory_proxy.rb +6 -3
- data/lib/ree_lib/packages/ree_std/.gitignore +0 -0
- data/lib/ree_lib/packages/ree_std/.rspec +2 -0
- data/lib/ree_lib/packages/ree_std/Package.schema.json +24 -0
- data/lib/ree_lib/packages/ree_std/bin/console +5 -0
- data/lib/ree_lib/packages/ree_std/package/ree_std/functions/retry_on_fail.rb +46 -0
- data/lib/ree_lib/packages/ree_std/package/ree_std/retry.rb +67 -0
- data/lib/ree_lib/packages/ree_std/package/ree_std.rb +6 -0
- data/lib/ree_lib/packages/ree_std/schemas/ree_std/functions/retry_on_fail.schema.json +38 -0
- data/lib/ree_lib/packages/ree_std/spec/package_schema_spec.rb +14 -0
- data/lib/ree_lib/packages/ree_std/spec/ree_std/functions/retry_on_fail_spec.rb +97 -0
- data/lib/ree_lib/packages/ree_std/spec/spec_helper.rb +3 -0
- data/lib/ree_lib/packages/ree_swagger/package/ree_swagger/functions/build_request_body_schema.rb +5 -0
- data/lib/ree_lib/packages/ree_swagger/package/ree_swagger/functions/build_serializer_schema.rb +5 -0
- data/lib/ree_lib/packages/ree_swagger/spec/functions/build_endpoint_schema_spec.rb +4 -2
- data/lib/ree_lib/packages/ree_swagger/spec/functions/build_request_body_spec.rb +4 -2
- data/lib/ree_lib/version.rb +1 -1
- metadata +38 -2
@@ -0,0 +1,524 @@
|
|
1
|
+
Ree.enable_irb_mode
|
2
|
+
|
3
|
+
module ReeDaoLoadAggTest
|
4
|
+
include Ree::PackageDSL
|
5
|
+
|
6
|
+
package do
|
7
|
+
depends_on :ree_dao
|
8
|
+
depends_on :ree_array
|
9
|
+
depends_on :ree_string
|
10
|
+
depends_on :ree_hash
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class ReeDaoLoadAggTest::Db
|
15
|
+
include Ree::BeanDSL
|
16
|
+
|
17
|
+
DB_CONFIG = {
|
18
|
+
host: "localhost",
|
19
|
+
user: "postgres",
|
20
|
+
database: "postgres",
|
21
|
+
password: "password",
|
22
|
+
adapter: "postgres",
|
23
|
+
max_connections: 100
|
24
|
+
}.freeze
|
25
|
+
|
26
|
+
bean :db do
|
27
|
+
singleton
|
28
|
+
factory :build
|
29
|
+
|
30
|
+
link :build_pg_connection, from: :ree_dao
|
31
|
+
end
|
32
|
+
|
33
|
+
def build
|
34
|
+
build_pg_connection(DB_CONFIG)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
class ReeDaoLoadAggTest::Organization
|
39
|
+
include ReeDto::EntityDSL
|
40
|
+
|
41
|
+
properties(
|
42
|
+
id: Nilor[Integer],
|
43
|
+
name: String
|
44
|
+
)
|
45
|
+
|
46
|
+
def set_users(users)
|
47
|
+
@users = users
|
48
|
+
end
|
49
|
+
|
50
|
+
def users
|
51
|
+
@users ||= []
|
52
|
+
end
|
53
|
+
|
54
|
+
attr_accessor :name
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
class ReeDaoLoadAggTest::User
|
59
|
+
include ReeDto::EntityDSL
|
60
|
+
|
61
|
+
properties(
|
62
|
+
id: Nilor[Integer],
|
63
|
+
name: String,
|
64
|
+
age: Integer,
|
65
|
+
organization_id: Integer
|
66
|
+
)
|
67
|
+
|
68
|
+
def set_organization(org)
|
69
|
+
@organization = org
|
70
|
+
end
|
71
|
+
|
72
|
+
def organization
|
73
|
+
@organization
|
74
|
+
end
|
75
|
+
|
76
|
+
def set_passport(passport)
|
77
|
+
@passport = passport
|
78
|
+
end
|
79
|
+
|
80
|
+
def passport
|
81
|
+
@passport
|
82
|
+
end
|
83
|
+
|
84
|
+
[
|
85
|
+
:organization,
|
86
|
+
:passport,
|
87
|
+
:books,
|
88
|
+
:movies,
|
89
|
+
:videogames,
|
90
|
+
:hobbies,
|
91
|
+
:vinyls,
|
92
|
+
:pets,
|
93
|
+
:skills,
|
94
|
+
:dreams,
|
95
|
+
:custom_field
|
96
|
+
].each do |attr|
|
97
|
+
define_method("set_#{attr}") do |*args|
|
98
|
+
instance_variable_set("@#{attr}", *args)
|
99
|
+
end
|
100
|
+
|
101
|
+
define_method("#{attr}") do
|
102
|
+
instance_variable_get("@#{attr}")
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
attr_accessor :name, :age, :organization_id
|
107
|
+
end
|
108
|
+
|
109
|
+
|
110
|
+
class ReeDaoLoadAggTest::UserPassport
|
111
|
+
include ReeDto::EntityDSL
|
112
|
+
|
113
|
+
properties(
|
114
|
+
id: Nilor[Integer],
|
115
|
+
user_id: Integer,
|
116
|
+
info: Nilor[String]
|
117
|
+
)
|
118
|
+
|
119
|
+
attr_accessor :info, :user_id
|
120
|
+
end
|
121
|
+
|
122
|
+
class ReeDaoLoadAggTest::Movie
|
123
|
+
include ReeDto::EntityDSL
|
124
|
+
|
125
|
+
properties(
|
126
|
+
id: Nilor[Integer],
|
127
|
+
user_id: Integer,
|
128
|
+
title: Nilor[String]
|
129
|
+
)
|
130
|
+
end
|
131
|
+
|
132
|
+
class ReeDaoLoadAggTest::Videogame
|
133
|
+
include ReeDto::EntityDSL
|
134
|
+
|
135
|
+
properties(
|
136
|
+
id: Nilor[Integer],
|
137
|
+
user_id: Integer,
|
138
|
+
title: Nilor[String]
|
139
|
+
)
|
140
|
+
end
|
141
|
+
|
142
|
+
class ReeDaoLoadAggTest::Hobby
|
143
|
+
include ReeDto::EntityDSL
|
144
|
+
|
145
|
+
properties(
|
146
|
+
id: Nilor[Integer],
|
147
|
+
user_id: Integer,
|
148
|
+
title: Nilor[String]
|
149
|
+
)
|
150
|
+
end
|
151
|
+
|
152
|
+
class ReeDaoLoadAggTest::Vinyl
|
153
|
+
include ReeDto::EntityDSL
|
154
|
+
|
155
|
+
properties(
|
156
|
+
id: Nilor[Integer],
|
157
|
+
user_id: Integer,
|
158
|
+
title: Nilor[String]
|
159
|
+
)
|
160
|
+
end
|
161
|
+
|
162
|
+
class ReeDaoLoadAggTest::Pet
|
163
|
+
include ReeDto::EntityDSL
|
164
|
+
|
165
|
+
properties(
|
166
|
+
id: Nilor[Integer],
|
167
|
+
user_id: Integer,
|
168
|
+
name: Nilor[String]
|
169
|
+
)
|
170
|
+
end
|
171
|
+
|
172
|
+
class ReeDaoLoadAggTest::Skill
|
173
|
+
include ReeDto::EntityDSL
|
174
|
+
|
175
|
+
properties(
|
176
|
+
id: Nilor[Integer],
|
177
|
+
user_id: Integer,
|
178
|
+
title: Nilor[String]
|
179
|
+
)
|
180
|
+
end
|
181
|
+
|
182
|
+
class ReeDaoLoadAggTest::Dream
|
183
|
+
include ReeDto::EntityDSL
|
184
|
+
|
185
|
+
properties(
|
186
|
+
id: Nilor[Integer],
|
187
|
+
user_id: Integer,
|
188
|
+
description: Nilor[String]
|
189
|
+
)
|
190
|
+
end
|
191
|
+
|
192
|
+
class ReeDaoLoadAggTest::Book
|
193
|
+
include ReeDto::EntityDSL
|
194
|
+
|
195
|
+
properties(
|
196
|
+
id: Nilor[Integer],
|
197
|
+
user_id: Integer,
|
198
|
+
title: Nilor[String]
|
199
|
+
)
|
200
|
+
|
201
|
+
def set_chapters(chapters)
|
202
|
+
@chapters = chapters; nil
|
203
|
+
end
|
204
|
+
|
205
|
+
def chapters
|
206
|
+
@chapters
|
207
|
+
end
|
208
|
+
|
209
|
+
def set_author(author)
|
210
|
+
@author = author
|
211
|
+
end
|
212
|
+
|
213
|
+
def author
|
214
|
+
@author
|
215
|
+
end
|
216
|
+
|
217
|
+
def set_reviews(reviews)
|
218
|
+
@reviews = reviews; nil
|
219
|
+
end
|
220
|
+
|
221
|
+
def reviews
|
222
|
+
@reviews
|
223
|
+
end
|
224
|
+
|
225
|
+
attr_accessor :title, :user_id
|
226
|
+
end
|
227
|
+
|
228
|
+
class ReeDaoLoadAggTest::Chapter
|
229
|
+
include ReeDto::EntityDSL
|
230
|
+
|
231
|
+
properties(
|
232
|
+
id: Nilor[Integer],
|
233
|
+
book_id: Integer,
|
234
|
+
title: Nilor[String]
|
235
|
+
)
|
236
|
+
|
237
|
+
attr_accessor :title, :book_id
|
238
|
+
end
|
239
|
+
|
240
|
+
class ReeDaoLoadAggTest::Author
|
241
|
+
include ReeDto::EntityDSL
|
242
|
+
|
243
|
+
properties(
|
244
|
+
id: Nilor[Integer],
|
245
|
+
book_id: Integer,
|
246
|
+
name: Nilor[String]
|
247
|
+
)
|
248
|
+
|
249
|
+
attr_accessor :name, :book_id
|
250
|
+
end
|
251
|
+
|
252
|
+
class ReeDaoLoadAggTest::Review
|
253
|
+
include ReeDto::EntityDSL
|
254
|
+
|
255
|
+
properties(
|
256
|
+
id: Nilor[Integer],
|
257
|
+
book_id: Integer,
|
258
|
+
rating: Nilor[Integer]
|
259
|
+
)
|
260
|
+
|
261
|
+
def set_review_author(review_author)
|
262
|
+
@review_author = review_author
|
263
|
+
end
|
264
|
+
|
265
|
+
def review_author
|
266
|
+
@review_author
|
267
|
+
end
|
268
|
+
|
269
|
+
attr_accessor :rating, :book_id
|
270
|
+
end
|
271
|
+
|
272
|
+
class ReeDaoLoadAggTest::ReviewAuthor
|
273
|
+
include ReeDto::EntityDSL
|
274
|
+
|
275
|
+
properties(
|
276
|
+
id: Nilor[Integer],
|
277
|
+
review_id: Integer,
|
278
|
+
name: String
|
279
|
+
)
|
280
|
+
end
|
281
|
+
|
282
|
+
class ReeDaoLoadAggTest::Users
|
283
|
+
include ReeDao::DSL
|
284
|
+
|
285
|
+
dao :users do
|
286
|
+
link :db
|
287
|
+
end
|
288
|
+
|
289
|
+
table :users
|
290
|
+
|
291
|
+
schema ReeDaoLoadAggTest::User do
|
292
|
+
integer :id, null: true
|
293
|
+
integer :organization_id
|
294
|
+
string :name
|
295
|
+
integer :age
|
296
|
+
end
|
297
|
+
|
298
|
+
filter :by_name, -> (name) { where(name: name) }
|
299
|
+
end
|
300
|
+
|
301
|
+
class ReeDaoLoadAggTest::Organizations
|
302
|
+
include ReeDao::DSL
|
303
|
+
|
304
|
+
dao :organizations do
|
305
|
+
link :db
|
306
|
+
end
|
307
|
+
|
308
|
+
table :organizations
|
309
|
+
|
310
|
+
schema ReeDaoLoadAggTest::Organization do
|
311
|
+
integer :id, null: true
|
312
|
+
string :name
|
313
|
+
end
|
314
|
+
|
315
|
+
filter :by_name, -> (name) { where(name: name) }
|
316
|
+
end
|
317
|
+
|
318
|
+
class ReeDaoLoadAggTest::UserPassports
|
319
|
+
include ReeDao::DSL
|
320
|
+
|
321
|
+
dao :user_passports do
|
322
|
+
link :db
|
323
|
+
end
|
324
|
+
|
325
|
+
table :user_passports
|
326
|
+
|
327
|
+
schema ReeDaoLoadAggTest::UserPassport do
|
328
|
+
integer :id, null: true
|
329
|
+
integer :user_id
|
330
|
+
string :info
|
331
|
+
end
|
332
|
+
end
|
333
|
+
|
334
|
+
class ReeDaoLoadAggTest::Movies
|
335
|
+
include ReeDao::DSL
|
336
|
+
|
337
|
+
dao :movies do
|
338
|
+
link :db
|
339
|
+
end
|
340
|
+
|
341
|
+
table :movies
|
342
|
+
|
343
|
+
schema ReeDaoLoadAggTest::Movie do
|
344
|
+
integer :id, null: true
|
345
|
+
integer :user_id
|
346
|
+
string :title
|
347
|
+
end
|
348
|
+
end
|
349
|
+
|
350
|
+
class ReeDaoLoadAggTest::Videogames
|
351
|
+
include ReeDao::DSL
|
352
|
+
|
353
|
+
dao :videogames do
|
354
|
+
link :db
|
355
|
+
end
|
356
|
+
|
357
|
+
table :videogames
|
358
|
+
|
359
|
+
schema ReeDaoLoadAggTest::Videogame do
|
360
|
+
integer :id, null: true
|
361
|
+
integer :user_id
|
362
|
+
string :title
|
363
|
+
end
|
364
|
+
end
|
365
|
+
|
366
|
+
class ReeDaoLoadAggTest::Hobbies
|
367
|
+
include ReeDao::DSL
|
368
|
+
|
369
|
+
dao :hobbies do
|
370
|
+
link :db
|
371
|
+
end
|
372
|
+
|
373
|
+
table :hobbies
|
374
|
+
|
375
|
+
schema ReeDaoLoadAggTest::Hobby do
|
376
|
+
integer :id, null: true
|
377
|
+
integer :user_id
|
378
|
+
string :title
|
379
|
+
end
|
380
|
+
end
|
381
|
+
|
382
|
+
class ReeDaoLoadAggTest::Vinyls
|
383
|
+
include ReeDao::DSL
|
384
|
+
|
385
|
+
dao :vinyls do
|
386
|
+
link :db
|
387
|
+
end
|
388
|
+
|
389
|
+
table :vinyls
|
390
|
+
|
391
|
+
schema ReeDaoLoadAggTest::Vinyl do
|
392
|
+
integer :id, null: true
|
393
|
+
integer :user_id
|
394
|
+
string :title
|
395
|
+
end
|
396
|
+
end
|
397
|
+
|
398
|
+
class ReeDaoLoadAggTest::Pets
|
399
|
+
include ReeDao::DSL
|
400
|
+
|
401
|
+
dao :pets do
|
402
|
+
link :db
|
403
|
+
end
|
404
|
+
|
405
|
+
table :pets
|
406
|
+
|
407
|
+
schema ReeDaoLoadAggTest::Pet do
|
408
|
+
integer :id, null: true
|
409
|
+
integer :user_id
|
410
|
+
string :name
|
411
|
+
end
|
412
|
+
end
|
413
|
+
|
414
|
+
class ReeDaoLoadAggTest::Skills
|
415
|
+
include ReeDao::DSL
|
416
|
+
|
417
|
+
dao :skills do
|
418
|
+
link :db
|
419
|
+
end
|
420
|
+
|
421
|
+
table :skills
|
422
|
+
|
423
|
+
schema ReeDaoLoadAggTest::Skill do
|
424
|
+
integer :id, null: true
|
425
|
+
integer :user_id
|
426
|
+
string :title
|
427
|
+
end
|
428
|
+
end
|
429
|
+
|
430
|
+
class ReeDaoLoadAggTest::Dreams
|
431
|
+
include ReeDao::DSL
|
432
|
+
|
433
|
+
dao :dreams do
|
434
|
+
link :db
|
435
|
+
end
|
436
|
+
|
437
|
+
table :dreams
|
438
|
+
|
439
|
+
schema ReeDaoLoadAggTest::Dream do
|
440
|
+
integer :id, null: true
|
441
|
+
integer :user_id
|
442
|
+
string :description
|
443
|
+
end
|
444
|
+
end
|
445
|
+
|
446
|
+
class ReeDaoLoadAggTest::Books
|
447
|
+
include ReeDao::DSL
|
448
|
+
|
449
|
+
dao :books do
|
450
|
+
link :db
|
451
|
+
end
|
452
|
+
|
453
|
+
table :books
|
454
|
+
|
455
|
+
schema ReeDaoLoadAggTest::Book do
|
456
|
+
integer :id, null: true
|
457
|
+
integer :user_id
|
458
|
+
string :title
|
459
|
+
end
|
460
|
+
end
|
461
|
+
|
462
|
+
class ReeDaoLoadAggTest::Chapters
|
463
|
+
include ReeDao::DSL
|
464
|
+
|
465
|
+
dao :chapters do
|
466
|
+
link :db
|
467
|
+
end
|
468
|
+
|
469
|
+
table :chapters
|
470
|
+
|
471
|
+
schema ReeDaoLoadAggTest::Chapter do
|
472
|
+
integer :id, null: true
|
473
|
+
integer :book_id
|
474
|
+
string :title
|
475
|
+
end
|
476
|
+
end
|
477
|
+
|
478
|
+
class ReeDaoLoadAggTest::Authors
|
479
|
+
include ReeDao::DSL
|
480
|
+
|
481
|
+
dao :authors do
|
482
|
+
link :db
|
483
|
+
end
|
484
|
+
|
485
|
+
table :authors
|
486
|
+
|
487
|
+
schema ReeDaoLoadAggTest::Author do
|
488
|
+
integer :id, null: true
|
489
|
+
integer :book_id
|
490
|
+
string :name
|
491
|
+
end
|
492
|
+
end
|
493
|
+
|
494
|
+
class ReeDaoLoadAggTest::Reviews
|
495
|
+
include ReeDao::DSL
|
496
|
+
|
497
|
+
dao :reviews do
|
498
|
+
link :db
|
499
|
+
end
|
500
|
+
|
501
|
+
table :reviews
|
502
|
+
|
503
|
+
schema ReeDaoLoadAggTest::Review do
|
504
|
+
integer :id, null: true
|
505
|
+
integer :book_id
|
506
|
+
integer :rating
|
507
|
+
end
|
508
|
+
end
|
509
|
+
|
510
|
+
class ReeDaoLoadAggTest::ReviewAuthors
|
511
|
+
include ReeDao::DSL
|
512
|
+
|
513
|
+
dao :review_authors do
|
514
|
+
link :db
|
515
|
+
end
|
516
|
+
|
517
|
+
table :review_authors
|
518
|
+
|
519
|
+
schema ReeDaoLoadAggTest::ReviewAuthor do
|
520
|
+
integer :id, null: true
|
521
|
+
integer :review_id
|
522
|
+
string :name
|
523
|
+
end
|
524
|
+
end
|
@@ -60,7 +60,7 @@ class ReeLogger::MultiLogger < Logger
|
|
60
60
|
contract(Nilor[String], Hash, Nilor[Exception], Bool, Nilor[String], Optblock => nil)
|
61
61
|
def debug(message = nil, parameters = {}, exception = nil, log_args = false, progname = nil, &block)
|
62
62
|
if block_given?
|
63
|
-
|
63
|
+
log_block(:debug, parameters, log_args, yield)
|
64
64
|
else
|
65
65
|
msg = get_message(message)
|
66
66
|
log(:debug, msg, parameters, nil, log_args)
|
@@ -68,9 +68,9 @@ class ReeLogger::MultiLogger < Logger
|
|
68
68
|
end
|
69
69
|
|
70
70
|
contract(Nilor[String], Hash, Nilor[Exception], Bool, Nilor[String], Optblock => nil)
|
71
|
-
def info(message = nil, parameters = {}, exception = nil, log_args = false, progname = nil,
|
71
|
+
def info(message = nil, parameters = {}, exception = nil, log_args = false, progname = nil, &block)
|
72
72
|
if block_given?
|
73
|
-
|
73
|
+
log_block(:info, parameters, log_args, yield)
|
74
74
|
else
|
75
75
|
msg = get_message(message)
|
76
76
|
log(:info, msg, parameters, nil)
|
@@ -78,9 +78,9 @@ class ReeLogger::MultiLogger < Logger
|
|
78
78
|
end
|
79
79
|
|
80
80
|
contract(Nilor[String], Hash, Nilor[Exception], Bool, Nilor[String], Optblock => nil)
|
81
|
-
def warn(message = nil, parameters = {}, exception = nil, log_args = false, progname = nil,
|
81
|
+
def warn(message = nil, parameters = {}, exception = nil, log_args = false, progname = nil, &block)
|
82
82
|
if block_given?
|
83
|
-
|
83
|
+
log_block(:warn, parameters, log_args, yield)
|
84
84
|
else
|
85
85
|
msg = get_message(message)
|
86
86
|
log(:warn, msg, parameters, nil)
|
@@ -90,7 +90,7 @@ class ReeLogger::MultiLogger < Logger
|
|
90
90
|
contract(Nilor[String], Hash, Nilor[Exception], Bool, Nilor[String], Optblock => nil)
|
91
91
|
def error(message = nil, parameters = {}, exception = nil, log_args = true, progname = nil, &block)
|
92
92
|
if block_given?
|
93
|
-
|
93
|
+
log_block(:error, parameters, log_args, yield)
|
94
94
|
else
|
95
95
|
msg = get_message(message)
|
96
96
|
log(:error, msg, parameters, exception, log_args)
|
@@ -98,25 +98,34 @@ class ReeLogger::MultiLogger < Logger
|
|
98
98
|
end
|
99
99
|
|
100
100
|
contract(Nilor[String], Hash, Nilor[Exception], Bool, Nilor[String], Optblock => nil)
|
101
|
-
def fatal(message = nil, parameters = {}, exception = nil, log_args = true, progname = nil,
|
101
|
+
def fatal(message = nil, parameters = {}, exception = nil, log_args = true, progname = nil, &block)
|
102
102
|
if block_given?
|
103
|
-
|
103
|
+
log_block(:fatal, parameters, log_args, yield)
|
104
104
|
else
|
105
105
|
msg = get_message(message)
|
106
|
-
log(:
|
106
|
+
log(:fatal, msg, parameters, exception, log_args)
|
107
107
|
end
|
108
108
|
end
|
109
109
|
|
110
110
|
contract(Nilor[String], Hash, Nilor[Exception], Bool, Nilor[String], Optblock => nil)
|
111
111
|
def unknown(message = nil, parameters = {}, exception = nil, log_args = true, progname = nil, &block)
|
112
112
|
if block_given?
|
113
|
-
|
113
|
+
log_block(:unknown, parameters, log_args, yield)
|
114
114
|
else
|
115
115
|
msg = get_message(message)
|
116
116
|
log(:unknown, msg, parameters, exception, log_args)
|
117
117
|
end
|
118
118
|
end
|
119
119
|
|
120
|
+
contract(Symbol, Hash, Bool, Or[Hash, String] => nil)
|
121
|
+
def log_block(error, parameters, log_args, block_parameters)
|
122
|
+
if block_parameters.is_a?(Hash)
|
123
|
+
log(error, "", block_parameters.merge(parameters), nil, log_args)
|
124
|
+
else
|
125
|
+
log(error, block_parameters, parameters, nil, log_args)
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
120
129
|
contract(Symbol, String, Hash, Nilor[Exception], Bool => nil)
|
121
130
|
def log(level, message, parameters = {}, exception = nil, log_args = false)
|
122
131
|
if @rate_limiter
|
@@ -142,4 +142,14 @@ RSpec.describe ReeLogger::MultiLogger do
|
|
142
142
|
end
|
143
143
|
}.to_not output.to_stdout
|
144
144
|
}
|
145
|
+
|
146
|
+
it {
|
147
|
+
expect {
|
148
|
+
logger_with_appenders.info("some info message", { email: 'some@email.com }'}) do
|
149
|
+
{
|
150
|
+
name: "John"
|
151
|
+
}
|
152
|
+
end
|
153
|
+
}.to output(/John/).to_stdout
|
154
|
+
}
|
145
155
|
end
|
@@ -33,9 +33,12 @@ class ReeMapper::MapperFactoryProxy
|
|
33
33
|
return self unless blk
|
34
34
|
|
35
35
|
mapper = ReeMapper::Mapper.build(strategies)
|
36
|
-
|
37
|
-
|
38
|
-
|
36
|
+
|
37
|
+
if register_as
|
38
|
+
mapper_factory.register_mapper(register_as, mapper)
|
39
|
+
mapper = mapper_factory.types.fetch(register_as).last
|
40
|
+
end
|
41
|
+
|
39
42
|
mapper_factory.new(mapper).instance_exec(&blk)
|
40
43
|
mapper.prepare_dto
|
41
44
|
|
File without changes
|
@@ -0,0 +1,24 @@
|
|
1
|
+
{
|
2
|
+
"schema_type": "package",
|
3
|
+
"schema_version": "1.1",
|
4
|
+
"name": "ree_std",
|
5
|
+
"entry_path": "packages/ree_std/package/ree_std.rb",
|
6
|
+
"tags": [
|
7
|
+
"ree_std"
|
8
|
+
],
|
9
|
+
"depends_on": [
|
10
|
+
|
11
|
+
],
|
12
|
+
"env_vars": [
|
13
|
+
|
14
|
+
],
|
15
|
+
"objects": [
|
16
|
+
{
|
17
|
+
"name": "retry_on_fail",
|
18
|
+
"schema": "packages/ree_std/schemas/ree_std/functions/retry_on_fail.schema.json",
|
19
|
+
"tags": [
|
20
|
+
"fn"
|
21
|
+
]
|
22
|
+
}
|
23
|
+
]
|
24
|
+
}
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class ReeStd::RetryOnFail
|
4
|
+
include Ree::FnDSL
|
5
|
+
|
6
|
+
fn :retry_on_fail do
|
7
|
+
link "ree_std/retry", -> { Retry }
|
8
|
+
end
|
9
|
+
|
10
|
+
doc(<<~DOC)
|
11
|
+
## **Ruby Function: retry_on_fail**
|
12
|
+
|
13
|
+
This function allows you to execute a provided block of code and automatically retry it in case a specific exception occurs.
|
14
|
+
|
15
|
+
rubyCopy code
|
16
|
+
|
17
|
+
`x = 0 retry_on_fail(max: 2, retry_block: ->(attempt, e) { x += 1 } ) { 1 / x }`
|
18
|
+
|
19
|
+
## **Parameters**
|
20
|
+
|
21
|
+
* **max** (Integer, required): Specifies the maximum number of retry attempts.
|
22
|
+
* **interval** (Integer, optional, default: 1): Sets the base delay between retry attempts in seconds.
|
23
|
+
* **max_interval** (Integer, optional, default: Float::INFINITY): Defines the upper limit for the delay between retry attempts.
|
24
|
+
* **backoff_factor** (Integer, optional, default: 1): Determines the increasing factor for the delay based on the attempt number.
|
25
|
+
* **exceptions** (StandardError[], optional, default: [StandardError]): Specifies a list of exceptions that should trigger a retry.
|
26
|
+
* **retry_block** (Proc, optional, default: **Proc.new {|attempt_number, exception|}**): Allows you to provide a custom block of code to be executed after a failed attempt.
|
27
|
+
* **retry_if** (Proc, optional, default: **Proc.new { |exception| true }**): Provides an additional condition that must be satisfied before initiating a new retry attempt.
|
28
|
+
DOC
|
29
|
+
contract(
|
30
|
+
Kwargs[
|
31
|
+
max: Integer,
|
32
|
+
],
|
33
|
+
Ksplat[
|
34
|
+
interval?: Integer,
|
35
|
+
max_interval?: Integer,
|
36
|
+
backoff_factor?: Integer,
|
37
|
+
exceptions?: ArrayOf[SubclassOf[StandardError]],
|
38
|
+
retry_block?: Proc,
|
39
|
+
retry_if?: Proc,
|
40
|
+
],
|
41
|
+
Block => nil
|
42
|
+
)
|
43
|
+
def call(max:, **opts, &block)
|
44
|
+
Retry.new(max: max, **opts).call(&block)
|
45
|
+
end
|
46
|
+
end
|