tins 1.38.0 → 1.51.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.
Files changed (118) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES.md +159 -0
  3. data/README.md +158 -6
  4. data/Rakefile +28 -18
  5. data/examples/let.rb +8 -40
  6. data/examples/mail.rb +0 -1
  7. data/examples/turing.rb +3 -1
  8. data/lib/tins/alias.rb +1 -0
  9. data/lib/tins/annotate.rb +37 -27
  10. data/lib/tins/ask_and_send.rb +41 -0
  11. data/lib/tins/attempt.rb +39 -0
  12. data/lib/tins/bijection.rb +34 -0
  13. data/lib/tins/case_predicate.rb +21 -0
  14. data/lib/tins/complete.rb +16 -0
  15. data/lib/tins/concern.rb +64 -0
  16. data/lib/tins/date_dummy.rb +36 -4
  17. data/lib/tins/date_time_dummy.rb +34 -2
  18. data/lib/tins/deep_dup.rb +9 -2
  19. data/lib/tins/deprecate.rb +12 -0
  20. data/lib/tins/dslkit.rb +563 -59
  21. data/lib/tins/duration.rb +120 -5
  22. data/lib/tins/expose.rb +54 -5
  23. data/lib/tins/extract_last_argument_options.rb +9 -0
  24. data/lib/tins/file_binary.rb +104 -21
  25. data/lib/tins/find.rb +114 -11
  26. data/lib/tins/generator.rb +10 -2
  27. data/lib/tins/go.rb +78 -14
  28. data/lib/tins/hash_bfs.rb +4 -2
  29. data/lib/tins/hash_symbolize_keys_recursive.rb +62 -4
  30. data/lib/tins/hash_union.rb +47 -2
  31. data/lib/tins/if_predicate.rb +31 -0
  32. data/lib/tins/implement.rb +50 -0
  33. data/lib/tins/limited.rb +63 -12
  34. data/lib/tins/lines_file.rb +81 -2
  35. data/lib/tins/lru_cache.rb +54 -17
  36. data/lib/tins/memoize.rb +86 -58
  37. data/lib/tins/method_description.rb +87 -4
  38. data/lib/tins/minimize.rb +39 -11
  39. data/lib/tins/module_group.rb +27 -2
  40. data/lib/tins/named_set.rb +20 -0
  41. data/lib/tins/null.rb +86 -15
  42. data/lib/tins/once.rb +61 -4
  43. data/lib/tins/p.rb +44 -8
  44. data/lib/tins/partial_application.rb +66 -7
  45. data/lib/tins/proc_compose.rb +58 -1
  46. data/lib/tins/proc_prelude.rb +97 -10
  47. data/lib/tins/range_plus.rb +30 -2
  48. data/lib/tins/require_maybe.rb +36 -0
  49. data/lib/tins/responding.rb +39 -0
  50. data/lib/tins/secure_write.rb +24 -4
  51. data/lib/tins/sexy_singleton.rb +45 -48
  52. data/lib/tins/string_byte_order_mark.rb +33 -2
  53. data/lib/tins/string_camelize.rb +31 -2
  54. data/lib/tins/string_named_placeholders.rb +70 -0
  55. data/lib/tins/string_underscore.rb +33 -2
  56. data/lib/tins/string_version.rb +190 -12
  57. data/lib/tins/subhash.rb +35 -10
  58. data/lib/tins/temp_io.rb +7 -0
  59. data/lib/tins/temp_io_enum.rb +19 -0
  60. data/lib/tins/terminal.rb +31 -9
  61. data/lib/tins/thread_local.rb +67 -5
  62. data/lib/tins/time_dummy.rb +46 -21
  63. data/lib/tins/to.rb +15 -0
  64. data/lib/tins/to_proc.rb +17 -4
  65. data/lib/tins/token.rb +74 -2
  66. data/lib/tins/unit.rb +304 -149
  67. data/lib/tins/version.rb +1 -1
  68. data/lib/tins/write.rb +14 -3
  69. data/lib/tins/xt/blank.rb +81 -2
  70. data/lib/tins/xt/concern.rb +51 -0
  71. data/lib/tins/xt/deep_dup.rb +4 -2
  72. data/lib/tins/xt/full.rb +56 -11
  73. data/lib/tins/xt/irb.rb +46 -2
  74. data/lib/tins/xt/method_description.rb +0 -12
  75. data/lib/tins/xt/minimize.rb +7 -0
  76. data/lib/tins/xt/named.rb +71 -16
  77. data/lib/tins/xt/proc_compose.rb +4 -0
  78. data/lib/tins/xt/secure_write.rb +0 -4
  79. data/lib/tins/xt/string.rb +1 -0
  80. data/lib/tins/xt/string_camelize.rb +4 -2
  81. data/lib/tins/xt/string_named_placeholders.rb +7 -0
  82. data/lib/tins/xt/string_underscore.rb +4 -2
  83. data/lib/tins/xt/subhash.rb +11 -0
  84. data/lib/tins/xt/time_freezer.rb +43 -6
  85. data/lib/tins/xt/write.rb +0 -4
  86. data/lib/tins/xt.rb +1 -3
  87. data/lib/tins.rb +17 -3
  88. data/tests/dslkit_test.rb +15 -0
  89. data/tests/duration_test.rb +4 -0
  90. data/tests/from_module_test.rb +30 -2
  91. data/tests/go_test.rb +4 -2
  92. data/tests/implement_test.rb +6 -8
  93. data/tests/limited_test.rb +1 -1
  94. data/tests/lines_file_test.rb +2 -0
  95. data/tests/lru_cache_test.rb +12 -0
  96. data/tests/method_description_test.rb +14 -20
  97. data/tests/partial_application_test.rb +4 -0
  98. data/tests/proc_prelude_test.rb +1 -1
  99. data/tests/scope_test.rb +1 -1
  100. data/tests/string_named_placeholders.rb +109 -0
  101. data/tests/string_version_test.rb +15 -0
  102. data/tests/test_helper.rb +4 -5
  103. data/tests/to_test.rb +6 -6
  104. data/tests/token_test.rb +32 -1
  105. data/tests/unit_test.rb +18 -0
  106. data/tins.gemspec +13 -11
  107. metadata +49 -33
  108. data/lib/tins/count_by.rb +0 -21
  109. data/lib/tins/deep_const_get.rb +0 -64
  110. data/lib/tins/timed_cache.rb +0 -51
  111. data/lib/tins/uniq_by.rb +0 -23
  112. data/lib/tins/xt/count_by.rb +0 -7
  113. data/lib/tins/xt/deep_const_get.rb +0 -7
  114. data/lib/tins/xt/uniq_by.rb +0 -25
  115. data/tests/count_by_test.rb +0 -17
  116. data/tests/deep_const_get_test.rb +0 -37
  117. data/tests/uniq_by_test.rb +0 -31
  118. /data/{COPYING → LICENSE} +0 -0
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tins
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.38.0
4
+ version: 1.51.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Florian Frank
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-01-07 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: gem_hadar
@@ -15,14 +15,14 @@ dependencies:
15
15
  requirements:
16
16
  - - "~>"
17
17
  - !ruby/object:Gem::Version
18
- version: '1.19'
18
+ version: '2.10'
19
19
  type: :development
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
23
  - - "~>"
24
24
  - !ruby/object:Gem::Version
25
- version: '1.19'
25
+ version: '2.10'
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: all_images
28
28
  requirement: !ruby/object:Gem::Requirement
@@ -51,6 +51,20 @@ dependencies:
51
51
  - - ">="
52
52
  - !ruby/object:Gem::Version
53
53
  version: '0'
54
+ - !ruby/object:Gem::Dependency
55
+ name: simplecov
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ type: :development
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
54
68
  - !ruby/object:Gem::Dependency
55
69
  name: term-ansicolor
56
70
  requirement: !ruby/object:Gem::Requirement
@@ -71,22 +85,22 @@ dependencies:
71
85
  requirements:
72
86
  - - "~>"
73
87
  - !ruby/object:Gem::Version
74
- version: '3.1'
88
+ version: '3.7'
75
89
  type: :development
76
90
  prerelease: false
77
91
  version_requirements: !ruby/object:Gem::Requirement
78
92
  requirements:
79
93
  - - "~>"
80
94
  - !ruby/object:Gem::Version
81
- version: '3.1'
95
+ version: '3.7'
82
96
  - !ruby/object:Gem::Dependency
83
- name: simplecov
97
+ name: sync
84
98
  requirement: !ruby/object:Gem::Requirement
85
99
  requirements:
86
100
  - - ">="
87
101
  - !ruby/object:Gem::Version
88
102
  version: '0'
89
- type: :development
103
+ type: :runtime
90
104
  prerelease: false
91
105
  version_requirements: !ruby/object:Gem::Requirement
92
106
  requirements:
@@ -94,7 +108,7 @@ dependencies:
94
108
  - !ruby/object:Gem::Version
95
109
  version: '0'
96
110
  - !ruby/object:Gem::Dependency
97
- name: sync
111
+ name: bigdecimal
98
112
  requirement: !ruby/object:Gem::Requirement
99
113
  requirements:
100
114
  - - ">="
@@ -108,7 +122,7 @@ dependencies:
108
122
  - !ruby/object:Gem::Version
109
123
  version: '0'
110
124
  - !ruby/object:Gem::Dependency
111
- name: bigdecimal
125
+ name: readline
112
126
  requirement: !ruby/object:Gem::Requirement
113
127
  requirements:
114
128
  - - ">="
@@ -121,6 +135,20 @@ dependencies:
121
135
  - - ">="
122
136
  - !ruby/object:Gem::Version
123
137
  version: '0'
138
+ - !ruby/object:Gem::Dependency
139
+ name: mize
140
+ requirement: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - "~>"
143
+ - !ruby/object:Gem::Version
144
+ version: '0.6'
145
+ type: :runtime
146
+ prerelease: false
147
+ version_requirements: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - "~>"
150
+ - !ruby/object:Gem::Version
151
+ version: '0.6'
124
152
  description: All the stuff that isn't good/big enough for a real library.
125
153
  email: flori@ping.de
126
154
  executables: []
@@ -140,10 +168,8 @@ extra_rdoc_files:
140
168
  - lib/tins/case_predicate.rb
141
169
  - lib/tins/complete.rb
142
170
  - lib/tins/concern.rb
143
- - lib/tins/count_by.rb
144
171
  - lib/tins/date_dummy.rb
145
172
  - lib/tins/date_time_dummy.rb
146
- - lib/tins/deep_const_get.rb
147
173
  - lib/tins/deep_dup.rb
148
174
  - lib/tins/deprecate.rb
149
175
  - lib/tins/dslkit.rb
@@ -180,6 +206,7 @@ extra_rdoc_files:
180
206
  - lib/tins/sexy_singleton.rb
181
207
  - lib/tins/string_byte_order_mark.rb
182
208
  - lib/tins/string_camelize.rb
209
+ - lib/tins/string_named_placeholders.rb
183
210
  - lib/tins/string_underscore.rb
184
211
  - lib/tins/string_version.rb
185
212
  - lib/tins/subhash.rb
@@ -188,11 +215,9 @@ extra_rdoc_files:
188
215
  - lib/tins/terminal.rb
189
216
  - lib/tins/thread_local.rb
190
217
  - lib/tins/time_dummy.rb
191
- - lib/tins/timed_cache.rb
192
218
  - lib/tins/to.rb
193
219
  - lib/tins/to_proc.rb
194
220
  - lib/tins/token.rb
195
- - lib/tins/uniq_by.rb
196
221
  - lib/tins/unit.rb
197
222
  - lib/tins/version.rb
198
223
  - lib/tins/write.rb
@@ -204,10 +229,8 @@ extra_rdoc_files:
204
229
  - lib/tins/xt/case_predicate.rb
205
230
  - lib/tins/xt/complete.rb
206
231
  - lib/tins/xt/concern.rb
207
- - lib/tins/xt/count_by.rb
208
232
  - lib/tins/xt/date_dummy.rb
209
233
  - lib/tins/xt/date_time_dummy.rb
210
- - lib/tins/xt/deep_const_get.rb
211
234
  - lib/tins/xt/deep_dup.rb
212
235
  - lib/tins/xt/deprecate.rb
213
236
  - lib/tins/xt/dslkit.rb
@@ -222,6 +245,7 @@ extra_rdoc_files:
222
245
  - lib/tins/xt/implement.rb
223
246
  - lib/tins/xt/irb.rb
224
247
  - lib/tins/xt/method_description.rb
248
+ - lib/tins/xt/minimize.rb
225
249
  - lib/tins/xt/named.rb
226
250
  - lib/tins/xt/null.rb
227
251
  - lib/tins/xt/p.rb
@@ -236,6 +260,7 @@ extra_rdoc_files:
236
260
  - lib/tins/xt/string.rb
237
261
  - lib/tins/xt/string_byte_order_mark.rb
238
262
  - lib/tins/xt/string_camelize.rb
263
+ - lib/tins/xt/string_named_placeholders.rb
239
264
  - lib/tins/xt/string_underscore.rb
240
265
  - lib/tins/xt/string_version.rb
241
266
  - lib/tins/xt/subhash.rb
@@ -243,12 +268,11 @@ extra_rdoc_files:
243
268
  - lib/tins/xt/time_dummy.rb
244
269
  - lib/tins/xt/time_freezer.rb
245
270
  - lib/tins/xt/to.rb
246
- - lib/tins/xt/uniq_by.rb
247
271
  - lib/tins/xt/write.rb
248
272
  files:
249
273
  - CHANGES.md
250
- - COPYING
251
274
  - Gemfile
275
+ - LICENSE
252
276
  - README.md
253
277
  - Rakefile
254
278
  - examples/add_one.png
@@ -289,10 +313,8 @@ files:
289
313
  - lib/tins/case_predicate.rb
290
314
  - lib/tins/complete.rb
291
315
  - lib/tins/concern.rb
292
- - lib/tins/count_by.rb
293
316
  - lib/tins/date_dummy.rb
294
317
  - lib/tins/date_time_dummy.rb
295
- - lib/tins/deep_const_get.rb
296
318
  - lib/tins/deep_dup.rb
297
319
  - lib/tins/deprecate.rb
298
320
  - lib/tins/dslkit.rb
@@ -329,6 +351,7 @@ files:
329
351
  - lib/tins/sexy_singleton.rb
330
352
  - lib/tins/string_byte_order_mark.rb
331
353
  - lib/tins/string_camelize.rb
354
+ - lib/tins/string_named_placeholders.rb
332
355
  - lib/tins/string_underscore.rb
333
356
  - lib/tins/string_version.rb
334
357
  - lib/tins/subhash.rb
@@ -337,11 +360,9 @@ files:
337
360
  - lib/tins/terminal.rb
338
361
  - lib/tins/thread_local.rb
339
362
  - lib/tins/time_dummy.rb
340
- - lib/tins/timed_cache.rb
341
363
  - lib/tins/to.rb
342
364
  - lib/tins/to_proc.rb
343
365
  - lib/tins/token.rb
344
- - lib/tins/uniq_by.rb
345
366
  - lib/tins/unit.rb
346
367
  - lib/tins/version.rb
347
368
  - lib/tins/write.rb
@@ -353,10 +374,8 @@ files:
353
374
  - lib/tins/xt/case_predicate.rb
354
375
  - lib/tins/xt/complete.rb
355
376
  - lib/tins/xt/concern.rb
356
- - lib/tins/xt/count_by.rb
357
377
  - lib/tins/xt/date_dummy.rb
358
378
  - lib/tins/xt/date_time_dummy.rb
359
- - lib/tins/xt/deep_const_get.rb
360
379
  - lib/tins/xt/deep_dup.rb
361
380
  - lib/tins/xt/deprecate.rb
362
381
  - lib/tins/xt/dslkit.rb
@@ -371,6 +390,7 @@ files:
371
390
  - lib/tins/xt/implement.rb
372
391
  - lib/tins/xt/irb.rb
373
392
  - lib/tins/xt/method_description.rb
393
+ - lib/tins/xt/minimize.rb
374
394
  - lib/tins/xt/named.rb
375
395
  - lib/tins/xt/null.rb
376
396
  - lib/tins/xt/p.rb
@@ -385,6 +405,7 @@ files:
385
405
  - lib/tins/xt/string.rb
386
406
  - lib/tins/xt/string_byte_order_mark.rb
387
407
  - lib/tins/xt/string_camelize.rb
408
+ - lib/tins/xt/string_named_placeholders.rb
388
409
  - lib/tins/xt/string_underscore.rb
389
410
  - lib/tins/xt/string_version.rb
390
411
  - lib/tins/xt/subhash.rb
@@ -392,7 +413,6 @@ files:
392
413
  - lib/tins/xt/time_dummy.rb
393
414
  - lib/tins/xt/time_freezer.rb
394
415
  - lib/tins/xt/to.rb
395
- - lib/tins/xt/uniq_by.rb
396
416
  - lib/tins/xt/write.rb
397
417
  - tests/annotate_test.rb
398
418
  - tests/ask_and_send_test.rb
@@ -401,10 +421,8 @@ files:
401
421
  - tests/blank_full_test.rb
402
422
  - tests/case_predicate_test.rb
403
423
  - tests/concern_test.rb
404
- - tests/count_by_test.rb
405
424
  - tests/date_dummy_test.rb
406
425
  - tests/date_time_dummy_test.rb
407
- - tests/deep_const_get_test.rb
408
426
  - tests/deep_dup_test.rb
409
427
  - tests/delegate_test.rb
410
428
  - tests/deprecate_test.rb
@@ -446,6 +464,7 @@ files:
446
464
  - tests/sexy_singleton_test.rb
447
465
  - tests/string_byte_order_mark_test.rb
448
466
  - tests/string_camelize_test.rb
467
+ - tests/string_named_placeholders.rb
449
468
  - tests/string_underscore_test.rb
450
469
  - tests/string_version_test.rb
451
470
  - tests/subhash_test.rb
@@ -455,7 +474,6 @@ files:
455
474
  - tests/time_freezer_test.rb
456
475
  - tests/to_test.rb
457
476
  - tests/token_test.rb
458
- - tests/uniq_by_test.rb
459
477
  - tests/unit_test.rb
460
478
  - tins.gemspec
461
479
  homepage: https://github.com/flori/tins
@@ -473,14 +491,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
473
491
  requirements:
474
492
  - - ">="
475
493
  - !ruby/object:Gem::Version
476
- version: '2.0'
494
+ version: '3.1'
477
495
  required_rubygems_version: !ruby/object:Gem::Requirement
478
496
  requirements:
479
497
  - - ">="
480
498
  - !ruby/object:Gem::Version
481
499
  version: '0'
482
500
  requirements: []
483
- rubygems_version: 3.6.2
501
+ rubygems_version: 4.0.2
484
502
  specification_version: 4
485
503
  summary: Useful stuff.
486
504
  test_files:
@@ -491,10 +509,8 @@ test_files:
491
509
  - tests/blank_full_test.rb
492
510
  - tests/case_predicate_test.rb
493
511
  - tests/concern_test.rb
494
- - tests/count_by_test.rb
495
512
  - tests/date_dummy_test.rb
496
513
  - tests/date_time_dummy_test.rb
497
- - tests/deep_const_get_test.rb
498
514
  - tests/deep_dup_test.rb
499
515
  - tests/delegate_test.rb
500
516
  - tests/deprecate_test.rb
@@ -536,6 +552,7 @@ test_files:
536
552
  - tests/sexy_singleton_test.rb
537
553
  - tests/string_byte_order_mark_test.rb
538
554
  - tests/string_camelize_test.rb
555
+ - tests/string_named_placeholders.rb
539
556
  - tests/string_underscore_test.rb
540
557
  - tests/string_version_test.rb
541
558
  - tests/subhash_test.rb
@@ -545,5 +562,4 @@ test_files:
545
562
  - tests/time_freezer_test.rb
546
563
  - tests/to_test.rb
547
564
  - tests/token_test.rb
548
- - tests/uniq_by_test.rb
549
565
  - tests/unit_test.rb
data/lib/tins/count_by.rb DELETED
@@ -1,21 +0,0 @@
1
- require 'tins/string_version'
2
-
3
- module Tins
4
- module CountBy
5
- if Tins::StringVersion.compare(RUBY_VERSION, :<=, "1.8")
6
- def count_by(&block)
7
- block ||= lambda { |x| true }
8
- inject(0) { |s, e| s += 1 if block.call(e); s }
9
- end
10
- else
11
- require 'tins/deprecate'
12
- extend Tins::Deprecate
13
-
14
- deprecate method:
15
- def count_by(&block)
16
- count(&block)
17
- end,
18
- new_method: :count
19
- end
20
- end
21
- end
@@ -1,64 +0,0 @@
1
- require 'tins/string_version'
2
-
3
- module Tins
4
- module DeepConstGet
5
- class << self
6
- if ::Object.method(:const_defined?).arity == 1
7
- # :nocov:
8
- # We do not create coverage on 1.8
9
- def const_defined_in?(modul, constant)
10
- modul.const_defined?(constant)
11
- end
12
- # :nocov:
13
- else
14
- require 'tins/deprecate'
15
- extend Tins::Deprecate
16
-
17
- deprecate method:
18
- def const_defined_in?(modul, constant)
19
- modul.const_defined?(constant, false)
20
- end,
21
- new_method: :const_defined?
22
- end
23
-
24
- if Tins::StringVersion.compare(RUBY_VERSION, :<, '2.0')
25
- def deep_const_get(path, start_module = Object)
26
- path.to_s.split('::').inject(start_module) do |p, c|
27
- case
28
- when c.empty?
29
- if start_module == Object
30
- Object
31
- else
32
- raise ArgumentError, "top level constants cannot be reached from"\
33
- " start module #{start_module.inspect}"
34
- end
35
- when const_defined_in?(p, c)
36
- p.const_get(c)
37
- else
38
- begin
39
- p.const_missing(c)
40
- rescue NameError => e
41
- raise ArgumentError, "can't get const #{path}: #{e}"
42
- end
43
- end
44
- end
45
- end
46
- else
47
- require 'tins/deprecate'
48
- extend Tins::Deprecate
49
-
50
- deprecate method:
51
- def deep_const_get(path, start_module = Object)
52
- start_module.const_get(path)
53
- rescue NameError => e
54
- raise ArgumentError, "can't get const #{path}: #{e}"
55
- end,
56
- new_method: :const_get
57
- end
58
- end
59
-
60
- def deep_const_get(path, start_module = Object)
61
- ::Tins::DeepConstGet.deep_const_get(path, start_module)
62
- end
63
- end
64
- end
@@ -1,51 +0,0 @@
1
- class TimedCache
2
- class Value < Struct.new(:value, :timestamp)
3
- def self.json_create(hash)
4
- new(*hash.values_at('value', 'timestamp'))
5
- end
6
-
7
- def as_json(*)
8
- super | { JSON.create_id => self.class.name }
9
- end
10
- end
11
-
12
- def initialize(name, ttl: 60, jitter: 1..5, &block)
13
- @name = name
14
- @ttl = ttl
15
- @jitter = jitter
16
- block or raise ArgumentError, 'block is required'
17
- @block = block
18
- @redis = Redis.new
19
- end
20
-
21
- def namespaced(key)
22
- "timed_cache:#{key}"
23
- end
24
-
25
- def value
26
- now = Time.now
27
- if stored = stored_value
28
- if (now - @ttl).to_i >= stored.timestamp
29
- Thread.new {
30
- sleep @jitter
31
- if stored_value.timestamp <= stored.timestamp
32
- @redis.set namespaced(@name), new_value(now).to_json
33
- end
34
- }
35
- end
36
- stored.value
37
- else
38
- nv = new_value(now)
39
- @redis.set namespaced(@name), nv.to_json
40
- nv.value
41
- end
42
- end
43
-
44
- def new_value(now)
45
- Value.new(@block.(), now.to_i)
46
- end
47
-
48
- def stored_value
49
- @redis.get(namespaced(@name)).full? { |s| ::JSON.parse(s, create_additions: true) rescue nil }
50
- end
51
- end
data/lib/tins/uniq_by.rb DELETED
@@ -1,23 +0,0 @@
1
- require 'tins/string_version'
2
-
3
- module Tins
4
- module UniqBy
5
- if Tins::StringVersion.compare(RUBY_VERSION, :<=, "1.8")
6
- def uniq_by(&block)
7
- block ||= lambda { |x| x }
8
- inject({}) { |h, e| h[ block.call(e) ] ||= e; h }.values
9
- end
10
- else
11
- require 'tins/deprecate'
12
- extend Tins::Deprecate
13
-
14
- deprecate method:
15
- def uniq_by(&block)
16
- uniq(&block)
17
- end,
18
- new_method: :uniq
19
- end
20
- end
21
- end
22
-
23
- require 'tins/alias'
@@ -1,7 +0,0 @@
1
- require 'tins/count_by'
2
-
3
- module Tins
4
- module ::Enumerable
5
- include CountBy
6
- end
7
- end
@@ -1,7 +0,0 @@
1
- require 'tins/deep_const_get'
2
-
3
- module Tins
4
- class ::Object
5
- include DeepConstGet
6
- end
7
- end
@@ -1,25 +0,0 @@
1
- require 'tins/string_version'
2
- require 'tins/uniq_by'
3
-
4
- module Tins
5
- module ::Enumerable
6
- include UniqBy
7
- end
8
-
9
- class ::Array
10
- if Tins::StringVersion.compare(RUBY_VERSION, :<=, "1.8")
11
- include UniqBy
12
-
13
- def uniq_by!(&b)
14
- replace uniq_by(&b)
15
- end
16
- else
17
- require 'tins/deprecate'
18
- extend Tins::Deprecate
19
-
20
- deprecate method:
21
- alias_method(:uniq_by!, :uniq!),
22
- new_method: :uniq!
23
- end
24
- end
25
- end
@@ -1,17 +0,0 @@
1
- require 'test_helper'
2
- require 'tins/xt'
3
-
4
- module Tins
5
- class CountByTest < Test::Unit::TestCase
6
-
7
- def test_count_by
8
- assert_equal 0, [].count_by { |x| x % 2 == 0 }
9
- assert_equal 0, [ 1 ].count_by { |x| x % 2 == 0 }
10
- assert_equal 1, [ 1 ].count_by { |x| x % 2 == 1 }
11
- assert_equal 1, [ 1, 2 ].count_by { |x| x % 2 == 0 }
12
- assert_equal 1, [ 1, 2 ].count_by { |x| x % 2 == 1 }
13
- assert_equal 2, [ 1, 2, 3, 4, 5 ].count_by { |x| x % 2 == 0 }
14
- assert_equal 3, [ 1, 2, 3, 4, 5 ].count_by { |x| x % 2 == 1 }
15
- end
16
- end
17
- end
@@ -1,37 +0,0 @@
1
- require 'test_helper'
2
- require 'tins/xt/deep_const_get'
3
-
4
- module Tins
5
- class DeepConstGetTest < Test::Unit::TestCase
6
- module A
7
- module B
8
- end
9
- end
10
-
11
- module C
12
- module NotB
13
- end
14
-
15
- def self.const_missing(c)
16
- NotB
17
- end
18
- end
19
-
20
- def test_deep_const_get_with_start_module
21
- assert_raise(ArgumentError) { deep_const_get '::B', A }
22
- assert_equal A::B, deep_const_get('B', A)
23
- end
24
-
25
- def test_deep_const_get_without_start_module
26
- assert_equal Tins::DeepConstGetTest::A::B, deep_const_get('::Tins::DeepConstGetTest::A::B')
27
- assert_equal Tins::DeepConstGetTest::A::B, deep_const_get('Tins::DeepConstGetTest::A::B')
28
- assert_equal Array, deep_const_get('::Array')
29
- assert_equal Array, deep_const_get('Array')
30
- end
31
-
32
- def test_deep_const_get_with_const_missing
33
- assert_raise(ArgumentError) { deep_const_get '::Tins::DeepConstGetTest::A::NIXDA' }
34
- assert_equal Tins::DeepConstGetTest::C::NotB, deep_const_get('::Tins::DeepConstGetTest::C::B')
35
- end
36
- end
37
- end
@@ -1,31 +0,0 @@
1
- require 'test_helper'
2
- require 'tins/xt'
3
-
4
- module Tins
5
- class UniqByTest < Test::Unit::TestCase
6
-
7
- unless defined?(Point)
8
- class Point < Struct.new :x, :y
9
- end
10
- end
11
-
12
- def test_uniq_by
13
- assert_equal [ 1, 2, 3 ], [ 1, 2, 2, 3 ].uniq_by.sort
14
- a = [ 1, 2, 2, 3 ]; a.uniq_by!
15
- assert_equal [ 1, 2, 3 ], a.sort
16
- p1 = Point.new 1, 2
17
- p2 = Point.new 2, 2
18
- p3 = Point.new 2, 2
19
- p4 = Point.new 3, 3
20
- a = [ p1, p2, p3, p4 ]
21
- a_uniq = a.uniq_by { |p| p.y }
22
- assert_equal 2, a_uniq.size
23
- assert a_uniq.include?(p4)
24
- assert [ p1, p2, p3 ].any? { |p| a_uniq.include? p }
25
- a.uniq_by! { |p| p.y }
26
- assert_equal 2, a.size
27
- assert a.include?(p4)
28
- assert [ p1, p2, p3 ].any? { |p| a.include? p }
29
- end
30
- end
31
- end
File without changes