lite-ruby 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.fasterer.yml +19 -0
- data/.gitignore +11 -0
- data/.rspec +4 -0
- data/.rubocop.yml +32 -0
- data/.travis.yml +24 -0
- data/CHANGELOG.md +11 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +119 -0
- data/LICENSE.txt +21 -0
- data/README.md +96 -0
- data/Rakefile +8 -0
- data/_config.yml +1 -0
- data/bin/console +15 -0
- data/bin/setup +8 -0
- data/docs/ARRAY.md +284 -0
- data/docs/DATE.md +78 -0
- data/docs/ENUMERABLE.md +174 -0
- data/docs/HASH.md +282 -0
- data/docs/INTEGER.md +43 -0
- data/docs/KERNEL.md +31 -0
- data/docs/NUMERIC.md +302 -0
- data/docs/OBJECT.md +322 -0
- data/docs/RANGE.md +55 -0
- data/docs/STRING.md +463 -0
- data/docs/TIME.md +86 -0
- data/lib/generators/lite/ruby/install_generator.rb +17 -0
- data/lib/generators/lite/ruby/templates/install.rb +15 -0
- data/lib/lite/ruby.rb +16 -0
- data/lib/lite/ruby/array.rb +290 -0
- data/lib/lite/ruby/configuration.rb +42 -0
- data/lib/lite/ruby/date.rb +27 -0
- data/lib/lite/ruby/enumerable.rb +167 -0
- data/lib/lite/ruby/hash.rb +284 -0
- data/lib/lite/ruby/helpers/date_helper.rb +105 -0
- data/lib/lite/ruby/helpers/time_helper.rb +84 -0
- data/lib/lite/ruby/integer.rb +45 -0
- data/lib/lite/ruby/kernel.rb +29 -0
- data/lib/lite/ruby/numeric.rb +210 -0
- data/lib/lite/ruby/object.rb +182 -0
- data/lib/lite/ruby/range.rb +32 -0
- data/lib/lite/ruby/string.rb +412 -0
- data/lib/lite/ruby/time.rb +26 -0
- data/lib/lite/ruby/version.rb +9 -0
- data/lite-ruby.gemspec +48 -0
- metadata +200 -0
data/docs/TIME.md
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
# Time
|
2
|
+
|
3
|
+
`format`
|
4
|
+
------
|
5
|
+
Converts a `time` object to `strftime` it using a human readable string.
|
6
|
+
|
7
|
+
**Note:** The following values are to be used in combination with one's available in
|
8
|
+
[Date](https://github.com/drexed/lite-ruby/blob/master/docs/DATE.md#format) `format`.
|
9
|
+
|
10
|
+
| Directive | Type | Key | `strftime` | Result |
|
11
|
+
| --- | --- | --- | --- | --- |
|
12
|
+
| Hour | 24h zero-padded | `h`, `hour`, `hour_padded` | %H | (00..23) |
|
13
|
+
| Hour | 24h blank-padded | `hh`, `HOUR`, `hour_blank` | %k | ( 0..23) |
|
14
|
+
| Hour | 12h zero-padded | `hhh`, `hour_12`, `hour_12_padded` | %I | (01..12) |
|
15
|
+
| Hour | 12h blank-padded | `hhhh`, `HOUR_12`, `hour_12_blank` | %l | ( 1..12) |
|
16
|
+
| Minute | Minute | `n`, `minute` | %M | (00..59) |
|
17
|
+
| Second | Second | `s`, `second` | %S | (00..59) |
|
18
|
+
| Meridian | Lowercase | `ampm`, `meridian` | %P | am..pm |
|
19
|
+
| Meridian | Uppercase | `AMPM`, `MERIDIAN` | %p | AM..PM |
|
20
|
+
| Time zone | Zone | `z`, `time_zone` | %z | +0900 |
|
21
|
+
| Time zone | Offset | `zz`, `time_zone_offset` | %:z | +09:00 |
|
22
|
+
| Time zone | Full-offset | `zzz`, `time_zone_offset_full` | %::z | +09:00:00 |
|
23
|
+
| Time zone | Name | `zzzz`, `time_zone_name` | %Z | UTC |
|
24
|
+
|
25
|
+
```ruby
|
26
|
+
Time.now.format('month_name day, year hour:minute ampm') #=> 'January 09, 2014 02:31 pm'
|
27
|
+
```
|
28
|
+
|
29
|
+
`stamp` aka `to_format`
|
30
|
+
------
|
31
|
+
Converts a `time` object to a predefined format.
|
32
|
+
|
33
|
+
**Note:** The following values are to be used in combination with one's available in
|
34
|
+
[Date](https://github.com/drexed/lite-ruby/blob/master/docs/DATE.md#stamp-aka-to_format) `stamp`.
|
35
|
+
|
36
|
+
#### Base
|
37
|
+
|
38
|
+
| Directive | Type | Key | `strftime` | Result |
|
39
|
+
| --- | --- | --- | --- | --- |
|
40
|
+
| Hour | 24h zero-padded | `:hour`, `:hour_padded` | %H | (00..23) |
|
41
|
+
| Hour | 24h blank-padded | `:hour_blank` | %k | ( 0..23) |
|
42
|
+
| Hour | 12h zero-padded | `hour_12`, `:hour_12_padded` | %I | (01..12) |
|
43
|
+
| Hour | 12h blank-padded | `:hour_12_blank` | %l | ( 1..12) |
|
44
|
+
| Minute | Minute | `:minute` | %M | (00..59) |
|
45
|
+
| Second | Second | `:second` | %S | (00..59) |
|
46
|
+
| Meridian | Lowercase | `:ampm` | %P | am..pm |
|
47
|
+
| Meridian | Uppercase | `:meridian` | %p | AM..PM |
|
48
|
+
| Time zone | Zone | `:time_zone` | %z | +0900 |
|
49
|
+
| Time zone | Offset | `:time_zone_offset` | %:z | +09:00 |
|
50
|
+
| Time zone | Full-offset | `:time_zone_offset_full` | %::z | +09:00:00 |
|
51
|
+
| Time zone | Name | `:time_zone_name` | %Z | UTC |
|
52
|
+
|
53
|
+
#### Combinations
|
54
|
+
|
55
|
+
| Directive | Type | Key | `strftime` | Result |
|
56
|
+
| --- | --- | --- | --- | --- |
|
57
|
+
| Combo | 24h time | `:time`, `:time_padded` | %H:%M | 00:31 |
|
58
|
+
| Combo | 24h time | `:time_blank` | %k:%M %z | 0:31 |
|
59
|
+
| Combo | 24h time | `:time_tz` | %H:%M %z | 00:31 +0000 |
|
60
|
+
| Combo | 24h time | `:time_tzn` | %H:%M %Z | 00:31 UTC |
|
61
|
+
| Combo | 12h time | `:time_12`, `:time_12_padded` | %I:%M %P | 07:31 |
|
62
|
+
| Combo | 12h time | `:time_12_blank` | %l:%M %P | 7:31 |
|
63
|
+
| Combo | 12h Time | `:time_12_tz` | %I:%M %z | 07:31 am +0000 |
|
64
|
+
| Combo | 12h Time | `:time_12_tzn` | %I:%M %Z | 07:31 am UTC |
|
65
|
+
| Combo | 24h daytime | `:daytime` | %B %-d %H:%M | January 9 00:31 |
|
66
|
+
| Combo | 24h daytime | `:daytime_abbr` | %b %-d %H:%M | Jan 9 00:31 |
|
67
|
+
| Combo | 24h daytime | `:daytime_iso` | %m-%d %H:%M | 01-09 00:31 |
|
68
|
+
| Combo | 12h daytime | `:daytime_12` | %B %-d %H:%M | January 9 12:31 am |
|
69
|
+
| Combo | 12h daytime | `:daytime_12_abbr` | %b %-d %H:%M | Jan 9 12:31 am |
|
70
|
+
| Combo | 12h daytime | `:daytime_12_iso` | %m-%d %H:%M | 01-09 12:31 am |
|
71
|
+
| Combo | 24h datetime | `:datetime` | %B %-d, %Y %H:%M | January 9, 2014 00:31 |
|
72
|
+
| Combo | 24h datetime | `:datetime_abbr` | %b %-d, %Y %H:%M | Jan 9, 2014 00:31 |
|
73
|
+
| Combo | 24h datetime | `:datetime_iso` | %Y-%m-%d %H:%M | 2014-01-09 00:31 |
|
74
|
+
| Combo | 24h datetime | `:datetime_tzn` | %B %-d, %Y %H:%M %Z | January 9, 2014 00:31 UTC |
|
75
|
+
| Combo | 24h datetime | `:datetime_abbr_tzn` | %b %-d, %Y %H:%M %Z | Jan 9, 2014 00:31 UTC |
|
76
|
+
| Combo | 24h datetime | `:datetime_iso_tzn` | %Y-%m-%d %H:%M %z | 2014-01-09 00:31 +0000 |
|
77
|
+
| Combo | 12h datetime | `:datetime_12` | %B %-d, %Y %H:%M | January 9, 2014 12:31 am |
|
78
|
+
| Combo | 12h datetime | `:datetime_12_abbr` | %b %-d, %Y %H:%M | Jan 9, 2014 12:31 am |
|
79
|
+
| Combo | 12h datetime | `:datetime_12_iso` | %Y-%m-%d %H:%M | 2014-01-09 12:31 am |
|
80
|
+
| Combo | 12h datetime | `:datetime_12_tzn` | %B %-d, %Y %H:%M %Z | January 9, 2014 12:31 am UTC |
|
81
|
+
| Combo | 12h datetime | `:datetime_12_abbr_tzn` | %b %-d, %Y %H:%M %Z | Jan 9, 2014 12:31 am UTC |
|
82
|
+
| Combo | 12h datetime | `:datetime_12_iso_tzn` | %Y-%m-%d %H:%M %z | 2014-01-09 12:31 am +0000 |
|
83
|
+
|
84
|
+
```ruby
|
85
|
+
Time.now.stamp(:datetime) #=> 'January 09, 2014 02:31 pm'
|
86
|
+
```
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails/generators'
|
4
|
+
|
5
|
+
module Lite
|
6
|
+
module Ruby
|
7
|
+
class InstallGenerator < Rails::Generators::Base
|
8
|
+
|
9
|
+
source_root File.expand_path('../templates', __FILE__)
|
10
|
+
|
11
|
+
def copy_initializer_file
|
12
|
+
copy_file('install.rb', 'config/initializers/lite-ruby.rb')
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
Lite::Ruby.configure do |config|
|
4
|
+
config.array = true
|
5
|
+
config.date = true
|
6
|
+
config.enumerable = true
|
7
|
+
config.hash = true
|
8
|
+
config.integer = true
|
9
|
+
config.kernel = true
|
10
|
+
config.numeric = true
|
11
|
+
config.object = true
|
12
|
+
config.range = true
|
13
|
+
config.string = true
|
14
|
+
config.time = true
|
15
|
+
end
|
data/lib/lite/ruby.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'lite/ruby/version'
|
4
|
+
require 'lite/ruby/configuration'
|
5
|
+
|
6
|
+
%w[date time].each do |filename|
|
7
|
+
require "lite/ruby/helpers/#{filename}_helper"
|
8
|
+
end
|
9
|
+
|
10
|
+
%w[array date enumerable hash integer kernel numeric object range string time].each do |filename|
|
11
|
+
next unless Lite::Ruby.configuration.send(filename)
|
12
|
+
|
13
|
+
require "lite/ruby/#{filename}"
|
14
|
+
end
|
15
|
+
|
16
|
+
require 'generators/lite/ruby/install_generator'
|
@@ -0,0 +1,290 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class Array
|
4
|
+
|
5
|
+
def assert_valid_values!(*valid_values)
|
6
|
+
each do |value|
|
7
|
+
next if valid_values.include?(value)
|
8
|
+
|
9
|
+
raise ArgumentError,
|
10
|
+
"Invalid value: #{value.inspect}." \
|
11
|
+
"Allowed values are: #{valid_values.map(&:inspect).join(', ')}"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def assert_all_valid_values!(*valid_values)
|
16
|
+
return assert_valid_values!(*valid_values) unless empty?
|
17
|
+
|
18
|
+
raise ArgumentError, 'An empty array is not allowed'
|
19
|
+
end
|
20
|
+
|
21
|
+
def after(value)
|
22
|
+
return unless include?(value)
|
23
|
+
|
24
|
+
self[(index(value) + 1) % size]
|
25
|
+
end
|
26
|
+
|
27
|
+
def before(value)
|
28
|
+
return unless include?(value)
|
29
|
+
|
30
|
+
self[(index(value) - 1) % size]
|
31
|
+
end
|
32
|
+
|
33
|
+
# rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
34
|
+
# rubocop:disable Metrics/PerceivedComplexity, Style/GuardClause, Style/IfInsideElse
|
35
|
+
def bury(*args)
|
36
|
+
if args.count < 2
|
37
|
+
raise ArgumentError, '2 or more arguments required'
|
38
|
+
elsif args.count == 2
|
39
|
+
if args[0].is_a?(Integer)
|
40
|
+
self[args[0]] = args[1]
|
41
|
+
else
|
42
|
+
self << { args[0] => args[1] }
|
43
|
+
end
|
44
|
+
else
|
45
|
+
if args[0].is_a?(Integer)
|
46
|
+
arg = args.shift
|
47
|
+
self[arg] = [] unless self[arg]
|
48
|
+
self[arg].bury(*args)
|
49
|
+
else
|
50
|
+
self << {}.bury(*args)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
self
|
55
|
+
end
|
56
|
+
# rubocop:enable Metrics/PerceivedComplexity, Style/GuardClause, Style/IfInsideElse
|
57
|
+
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength
|
58
|
+
|
59
|
+
def delete_first
|
60
|
+
self[1..-1]
|
61
|
+
end
|
62
|
+
|
63
|
+
def delete_first!
|
64
|
+
replace(delete_first)
|
65
|
+
end
|
66
|
+
|
67
|
+
def delete_last
|
68
|
+
self[0...-1]
|
69
|
+
end
|
70
|
+
|
71
|
+
def delete_last!
|
72
|
+
replace(delete_last)
|
73
|
+
end
|
74
|
+
|
75
|
+
def delete_values(*args)
|
76
|
+
args.each_with_object([]) { |val, array| array << delete(val) }
|
77
|
+
end
|
78
|
+
|
79
|
+
def demote(value)
|
80
|
+
sort_by { |val| val == value ? 0 : -1 }
|
81
|
+
end
|
82
|
+
|
83
|
+
def demote!(value)
|
84
|
+
replace(demote(value))
|
85
|
+
end
|
86
|
+
|
87
|
+
def denillify(identity = 0)
|
88
|
+
map { |val| val.nil? ? identity : val }
|
89
|
+
end
|
90
|
+
|
91
|
+
def denillify!(identity = 0)
|
92
|
+
replace(denillify(identity))
|
93
|
+
end
|
94
|
+
|
95
|
+
def duplicates(minimum = 2)
|
96
|
+
hash = Hash.new(0)
|
97
|
+
each { |val| hash[val] += 1 }
|
98
|
+
hash.delete_if { |_, val| val < minimum }.keys
|
99
|
+
end
|
100
|
+
|
101
|
+
def from(position)
|
102
|
+
self[position, size] || []
|
103
|
+
end
|
104
|
+
|
105
|
+
def fulfill(value, amount)
|
106
|
+
return self if amount <= size
|
107
|
+
|
108
|
+
fill(value, size..(amount - 1))
|
109
|
+
end
|
110
|
+
|
111
|
+
def groups(number)
|
112
|
+
return [] if number <= 0
|
113
|
+
|
114
|
+
num, rem = size.divmod(number)
|
115
|
+
collection = (0..(num - 1)).collect { |val| self[(val * number), number] }
|
116
|
+
return collection unless rem.positive?
|
117
|
+
|
118
|
+
collection << self[-rem, rem]
|
119
|
+
end
|
120
|
+
|
121
|
+
# rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength
|
122
|
+
def in_groups(number, fill_with = nil)
|
123
|
+
collection_size = size
|
124
|
+
division = collection_size.div(number)
|
125
|
+
modulo = collection_size % number
|
126
|
+
|
127
|
+
collection = []
|
128
|
+
start = 0
|
129
|
+
number.times do |int|
|
130
|
+
mod_gt_zero = modulo.positive?
|
131
|
+
grouping = division + (mod_gt_zero && modulo > int ? 1 : 0)
|
132
|
+
collection << last_group = slice(start, grouping)
|
133
|
+
last_group << fill_with if (fill_with != false) && mod_gt_zero && (grouping == division)
|
134
|
+
start += grouping
|
135
|
+
end
|
136
|
+
|
137
|
+
return collection unless block_given?
|
138
|
+
|
139
|
+
collection.each { |val| yield(val) }
|
140
|
+
end
|
141
|
+
# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength
|
142
|
+
|
143
|
+
# rubocop:disable Metrics/AbcSize, Metrics/MethodLength, Style/GuardClause
|
144
|
+
def in_groups_of(number, fill_with = nil)
|
145
|
+
if number.to_i <= 0
|
146
|
+
raise ArgumentError, "Group size must be a positive integer, was #{number.inspect}"
|
147
|
+
elsif fill_with == false
|
148
|
+
collection = self
|
149
|
+
else
|
150
|
+
padding = (number - size % number) % number
|
151
|
+
collection = dup.concat(Array.new(padding, fill_with))
|
152
|
+
end
|
153
|
+
|
154
|
+
sliced_collection = collection.each_slice(number)
|
155
|
+
return sliced_collection.to_a unless block_given?
|
156
|
+
|
157
|
+
sliced_collection { |val| yield(val) }
|
158
|
+
end
|
159
|
+
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength, Style/GuardClause
|
160
|
+
|
161
|
+
def indexes(value)
|
162
|
+
array = []
|
163
|
+
each_with_index { |val, i| array << i if value == val }
|
164
|
+
array
|
165
|
+
end
|
166
|
+
|
167
|
+
alias indices indexes
|
168
|
+
|
169
|
+
def merge(*values)
|
170
|
+
dup.merge!(*values)
|
171
|
+
end
|
172
|
+
|
173
|
+
def merge!(*values)
|
174
|
+
values.each_with_object(self) { |val, arr| arr.concat(val) }
|
175
|
+
end
|
176
|
+
|
177
|
+
def nillify
|
178
|
+
map { |val| !val.nil? && (val.try(:blank?) || val.try(:to_s).blank?) ? nil : val }
|
179
|
+
end
|
180
|
+
|
181
|
+
def nillify!
|
182
|
+
replace(nillify)
|
183
|
+
end
|
184
|
+
|
185
|
+
def position(value)
|
186
|
+
idx = index(value)
|
187
|
+
return idx if idx.nil?
|
188
|
+
|
189
|
+
idx + 1
|
190
|
+
end
|
191
|
+
|
192
|
+
def positions(value)
|
193
|
+
indexes(value).map { |val| val + 1 }
|
194
|
+
end
|
195
|
+
|
196
|
+
def probability
|
197
|
+
hash = Hash.new(0.0)
|
198
|
+
differ = 0.0
|
199
|
+
|
200
|
+
each do |val|
|
201
|
+
hash[val] += 1.0
|
202
|
+
differ += 1.0
|
203
|
+
end
|
204
|
+
|
205
|
+
hash.each_key { |val| hash[val] /= differ }
|
206
|
+
hash
|
207
|
+
end
|
208
|
+
|
209
|
+
def promote(value)
|
210
|
+
sort_by { |val| val == value ? -1 : 0 }
|
211
|
+
end
|
212
|
+
|
213
|
+
def promote!(value)
|
214
|
+
replace(promote(value))
|
215
|
+
end
|
216
|
+
|
217
|
+
def reject_values(*args)
|
218
|
+
reject { |val| args.include?(val) }
|
219
|
+
end
|
220
|
+
|
221
|
+
def rposition(value)
|
222
|
+
idx = rindex(value)
|
223
|
+
return idx if idx.nil?
|
224
|
+
|
225
|
+
idx + 1
|
226
|
+
end
|
227
|
+
|
228
|
+
def sample!
|
229
|
+
delete_at(Random.rand(size - 1))
|
230
|
+
end
|
231
|
+
|
232
|
+
# rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
233
|
+
def split(number = nil)
|
234
|
+
array = [[]]
|
235
|
+
|
236
|
+
if block_given?
|
237
|
+
each { |val| yield(val) ? (array << []) : (array .last << val) }
|
238
|
+
else
|
239
|
+
dup_arr = dup
|
240
|
+
|
241
|
+
until dup_arr.empty?
|
242
|
+
if (idx = dup_arr.index(number))
|
243
|
+
array.last << dup_arr.shift(idx)
|
244
|
+
dup_arr.shift
|
245
|
+
array << []
|
246
|
+
else
|
247
|
+
array.last << arr.shift(dup_arr.size)
|
248
|
+
end
|
249
|
+
end
|
250
|
+
end
|
251
|
+
|
252
|
+
array
|
253
|
+
end
|
254
|
+
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength
|
255
|
+
|
256
|
+
def strip
|
257
|
+
reject(&:blank?)
|
258
|
+
end
|
259
|
+
|
260
|
+
def strip!
|
261
|
+
replace(strip)
|
262
|
+
end
|
263
|
+
|
264
|
+
def swap(from, to)
|
265
|
+
self[from], self[to] = self[to], self[from]
|
266
|
+
self
|
267
|
+
end
|
268
|
+
|
269
|
+
def to(position)
|
270
|
+
return first(position + 1) if position >= 0
|
271
|
+
|
272
|
+
self[0..position]
|
273
|
+
end
|
274
|
+
|
275
|
+
# rubocop:disable Metrics/CyclomaticComplexity
|
276
|
+
def to_sentence(options = {})
|
277
|
+
words_connector = options[:words_connector] || ', '
|
278
|
+
two_words_connector = options[:two_words_connector] || ' and '
|
279
|
+
last_word_connector = options[:last_word_connector] || ', and '
|
280
|
+
|
281
|
+
case size
|
282
|
+
when 0 then ''
|
283
|
+
when 1 then self[0].to_s.dup
|
284
|
+
when 2 then "#{self[0]}#{two_words_connector}#{self[1]}"
|
285
|
+
else "#{self[0...-1].join(words_connector)}#{last_word_connector}#{self[-1]}"
|
286
|
+
end
|
287
|
+
end
|
288
|
+
# rubocop:enable Metrics/CyclomaticComplexity
|
289
|
+
|
290
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Lite
|
4
|
+
module Ruby
|
5
|
+
|
6
|
+
class Configuration
|
7
|
+
|
8
|
+
attr_accessor :array, :date, :enumerable, :hash, :integer, :kernel, :numeric, :object, :range,
|
9
|
+
:string, :time
|
10
|
+
|
11
|
+
# rubocop:disable Metrics/MethodLength
|
12
|
+
def initialize
|
13
|
+
@array = true
|
14
|
+
@date = true
|
15
|
+
@enumerable = true
|
16
|
+
@hash = true
|
17
|
+
@integer = true
|
18
|
+
@kernel = true
|
19
|
+
@numeric = true
|
20
|
+
@object = true
|
21
|
+
@range = true
|
22
|
+
@string = true
|
23
|
+
@time = true
|
24
|
+
end
|
25
|
+
# rubocop:enable Metrics/MethodLength
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.configuration
|
30
|
+
@configuration ||= Configuration.new
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.configuration=(config)
|
34
|
+
@configuration = config
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.configure
|
38
|
+
yield(configuration)
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|