tins 1.38.0 → 1.48.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 (117) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES.md +132 -0
  3. data/README.md +158 -6
  4. data/Rakefile +27 -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 +288 -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/tins.gemspec +12 -11
  106. metadata +39 -37
  107. data/lib/tins/count_by.rb +0 -21
  108. data/lib/tins/deep_const_get.rb +0 -64
  109. data/lib/tins/timed_cache.rb +0 -51
  110. data/lib/tins/uniq_by.rb +0 -23
  111. data/lib/tins/xt/count_by.rb +0 -7
  112. data/lib/tins/xt/deep_const_get.rb +0 -7
  113. data/lib/tins/xt/uniq_by.rb +0 -25
  114. data/tests/count_by_test.rb +0 -17
  115. data/tests/deep_const_get_test.rb +0 -37
  116. data/tests/uniq_by_test.rb +0 -31
  117. /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.48.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.8'
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.8'
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,19 +122,19 @@ dependencies:
108
122
  - !ruby/object:Gem::Version
109
123
  version: '0'
110
124
  - !ruby/object:Gem::Dependency
111
- name: bigdecimal
125
+ name: mize
112
126
  requirement: !ruby/object:Gem::Requirement
113
127
  requirements:
114
- - - ">="
128
+ - - "~>"
115
129
  - !ruby/object:Gem::Version
116
- version: '0'
130
+ version: '0.6'
117
131
  type: :runtime
118
132
  prerelease: false
119
133
  version_requirements: !ruby/object:Gem::Requirement
120
134
  requirements:
121
- - - ">="
135
+ - - "~>"
122
136
  - !ruby/object:Gem::Version
123
- version: '0'
137
+ version: '0.6'
124
138
  description: All the stuff that isn't good/big enough for a real library.
125
139
  email: flori@ping.de
126
140
  executables: []
@@ -140,10 +154,8 @@ extra_rdoc_files:
140
154
  - lib/tins/case_predicate.rb
141
155
  - lib/tins/complete.rb
142
156
  - lib/tins/concern.rb
143
- - lib/tins/count_by.rb
144
157
  - lib/tins/date_dummy.rb
145
158
  - lib/tins/date_time_dummy.rb
146
- - lib/tins/deep_const_get.rb
147
159
  - lib/tins/deep_dup.rb
148
160
  - lib/tins/deprecate.rb
149
161
  - lib/tins/dslkit.rb
@@ -180,6 +192,7 @@ extra_rdoc_files:
180
192
  - lib/tins/sexy_singleton.rb
181
193
  - lib/tins/string_byte_order_mark.rb
182
194
  - lib/tins/string_camelize.rb
195
+ - lib/tins/string_named_placeholders.rb
183
196
  - lib/tins/string_underscore.rb
184
197
  - lib/tins/string_version.rb
185
198
  - lib/tins/subhash.rb
@@ -188,11 +201,9 @@ extra_rdoc_files:
188
201
  - lib/tins/terminal.rb
189
202
  - lib/tins/thread_local.rb
190
203
  - lib/tins/time_dummy.rb
191
- - lib/tins/timed_cache.rb
192
204
  - lib/tins/to.rb
193
205
  - lib/tins/to_proc.rb
194
206
  - lib/tins/token.rb
195
- - lib/tins/uniq_by.rb
196
207
  - lib/tins/unit.rb
197
208
  - lib/tins/version.rb
198
209
  - lib/tins/write.rb
@@ -204,10 +215,8 @@ extra_rdoc_files:
204
215
  - lib/tins/xt/case_predicate.rb
205
216
  - lib/tins/xt/complete.rb
206
217
  - lib/tins/xt/concern.rb
207
- - lib/tins/xt/count_by.rb
208
218
  - lib/tins/xt/date_dummy.rb
209
219
  - lib/tins/xt/date_time_dummy.rb
210
- - lib/tins/xt/deep_const_get.rb
211
220
  - lib/tins/xt/deep_dup.rb
212
221
  - lib/tins/xt/deprecate.rb
213
222
  - lib/tins/xt/dslkit.rb
@@ -222,6 +231,7 @@ extra_rdoc_files:
222
231
  - lib/tins/xt/implement.rb
223
232
  - lib/tins/xt/irb.rb
224
233
  - lib/tins/xt/method_description.rb
234
+ - lib/tins/xt/minimize.rb
225
235
  - lib/tins/xt/named.rb
226
236
  - lib/tins/xt/null.rb
227
237
  - lib/tins/xt/p.rb
@@ -236,6 +246,7 @@ extra_rdoc_files:
236
246
  - lib/tins/xt/string.rb
237
247
  - lib/tins/xt/string_byte_order_mark.rb
238
248
  - lib/tins/xt/string_camelize.rb
249
+ - lib/tins/xt/string_named_placeholders.rb
239
250
  - lib/tins/xt/string_underscore.rb
240
251
  - lib/tins/xt/string_version.rb
241
252
  - lib/tins/xt/subhash.rb
@@ -243,12 +254,11 @@ extra_rdoc_files:
243
254
  - lib/tins/xt/time_dummy.rb
244
255
  - lib/tins/xt/time_freezer.rb
245
256
  - lib/tins/xt/to.rb
246
- - lib/tins/xt/uniq_by.rb
247
257
  - lib/tins/xt/write.rb
248
258
  files:
249
259
  - CHANGES.md
250
- - COPYING
251
260
  - Gemfile
261
+ - LICENSE
252
262
  - README.md
253
263
  - Rakefile
254
264
  - examples/add_one.png
@@ -289,10 +299,8 @@ files:
289
299
  - lib/tins/case_predicate.rb
290
300
  - lib/tins/complete.rb
291
301
  - lib/tins/concern.rb
292
- - lib/tins/count_by.rb
293
302
  - lib/tins/date_dummy.rb
294
303
  - lib/tins/date_time_dummy.rb
295
- - lib/tins/deep_const_get.rb
296
304
  - lib/tins/deep_dup.rb
297
305
  - lib/tins/deprecate.rb
298
306
  - lib/tins/dslkit.rb
@@ -329,6 +337,7 @@ files:
329
337
  - lib/tins/sexy_singleton.rb
330
338
  - lib/tins/string_byte_order_mark.rb
331
339
  - lib/tins/string_camelize.rb
340
+ - lib/tins/string_named_placeholders.rb
332
341
  - lib/tins/string_underscore.rb
333
342
  - lib/tins/string_version.rb
334
343
  - lib/tins/subhash.rb
@@ -337,11 +346,9 @@ files:
337
346
  - lib/tins/terminal.rb
338
347
  - lib/tins/thread_local.rb
339
348
  - lib/tins/time_dummy.rb
340
- - lib/tins/timed_cache.rb
341
349
  - lib/tins/to.rb
342
350
  - lib/tins/to_proc.rb
343
351
  - lib/tins/token.rb
344
- - lib/tins/uniq_by.rb
345
352
  - lib/tins/unit.rb
346
353
  - lib/tins/version.rb
347
354
  - lib/tins/write.rb
@@ -353,10 +360,8 @@ files:
353
360
  - lib/tins/xt/case_predicate.rb
354
361
  - lib/tins/xt/complete.rb
355
362
  - lib/tins/xt/concern.rb
356
- - lib/tins/xt/count_by.rb
357
363
  - lib/tins/xt/date_dummy.rb
358
364
  - lib/tins/xt/date_time_dummy.rb
359
- - lib/tins/xt/deep_const_get.rb
360
365
  - lib/tins/xt/deep_dup.rb
361
366
  - lib/tins/xt/deprecate.rb
362
367
  - lib/tins/xt/dslkit.rb
@@ -371,6 +376,7 @@ files:
371
376
  - lib/tins/xt/implement.rb
372
377
  - lib/tins/xt/irb.rb
373
378
  - lib/tins/xt/method_description.rb
379
+ - lib/tins/xt/minimize.rb
374
380
  - lib/tins/xt/named.rb
375
381
  - lib/tins/xt/null.rb
376
382
  - lib/tins/xt/p.rb
@@ -385,6 +391,7 @@ files:
385
391
  - lib/tins/xt/string.rb
386
392
  - lib/tins/xt/string_byte_order_mark.rb
387
393
  - lib/tins/xt/string_camelize.rb
394
+ - lib/tins/xt/string_named_placeholders.rb
388
395
  - lib/tins/xt/string_underscore.rb
389
396
  - lib/tins/xt/string_version.rb
390
397
  - lib/tins/xt/subhash.rb
@@ -392,7 +399,6 @@ files:
392
399
  - lib/tins/xt/time_dummy.rb
393
400
  - lib/tins/xt/time_freezer.rb
394
401
  - lib/tins/xt/to.rb
395
- - lib/tins/xt/uniq_by.rb
396
402
  - lib/tins/xt/write.rb
397
403
  - tests/annotate_test.rb
398
404
  - tests/ask_and_send_test.rb
@@ -401,10 +407,8 @@ files:
401
407
  - tests/blank_full_test.rb
402
408
  - tests/case_predicate_test.rb
403
409
  - tests/concern_test.rb
404
- - tests/count_by_test.rb
405
410
  - tests/date_dummy_test.rb
406
411
  - tests/date_time_dummy_test.rb
407
- - tests/deep_const_get_test.rb
408
412
  - tests/deep_dup_test.rb
409
413
  - tests/delegate_test.rb
410
414
  - tests/deprecate_test.rb
@@ -446,6 +450,7 @@ files:
446
450
  - tests/sexy_singleton_test.rb
447
451
  - tests/string_byte_order_mark_test.rb
448
452
  - tests/string_camelize_test.rb
453
+ - tests/string_named_placeholders.rb
449
454
  - tests/string_underscore_test.rb
450
455
  - tests/string_version_test.rb
451
456
  - tests/subhash_test.rb
@@ -455,7 +460,6 @@ files:
455
460
  - tests/time_freezer_test.rb
456
461
  - tests/to_test.rb
457
462
  - tests/token_test.rb
458
- - tests/uniq_by_test.rb
459
463
  - tests/unit_test.rb
460
464
  - tins.gemspec
461
465
  homepage: https://github.com/flori/tins
@@ -473,14 +477,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
473
477
  requirements:
474
478
  - - ">="
475
479
  - !ruby/object:Gem::Version
476
- version: '2.0'
480
+ version: '3.1'
477
481
  required_rubygems_version: !ruby/object:Gem::Requirement
478
482
  requirements:
479
483
  - - ">="
480
484
  - !ruby/object:Gem::Version
481
485
  version: '0'
482
486
  requirements: []
483
- rubygems_version: 3.6.2
487
+ rubygems_version: 3.7.2
484
488
  specification_version: 4
485
489
  summary: Useful stuff.
486
490
  test_files:
@@ -491,10 +495,8 @@ test_files:
491
495
  - tests/blank_full_test.rb
492
496
  - tests/case_predicate_test.rb
493
497
  - tests/concern_test.rb
494
- - tests/count_by_test.rb
495
498
  - tests/date_dummy_test.rb
496
499
  - tests/date_time_dummy_test.rb
497
- - tests/deep_const_get_test.rb
498
500
  - tests/deep_dup_test.rb
499
501
  - tests/delegate_test.rb
500
502
  - tests/deprecate_test.rb
@@ -536,6 +538,7 @@ test_files:
536
538
  - tests/sexy_singleton_test.rb
537
539
  - tests/string_byte_order_mark_test.rb
538
540
  - tests/string_camelize_test.rb
541
+ - tests/string_named_placeholders.rb
539
542
  - tests/string_underscore_test.rb
540
543
  - tests/string_version_test.rb
541
544
  - tests/subhash_test.rb
@@ -545,5 +548,4 @@ test_files:
545
548
  - tests/time_freezer_test.rb
546
549
  - tests/to_test.rb
547
550
  - tests/token_test.rb
548
- - tests/uniq_by_test.rb
549
551
  - 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