lite-ruby 1.3.3 → 2.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lite
4
+ module Ruby
5
+ module DateTimeHelper
6
+
7
+ def format(string = nil)
8
+ string ||= self.class::DEFAULT_UNIT
9
+ delimiters = string.scan(/\W+/)
10
+ formatters = string.scan(/[a-z0-9_]+/i)
11
+ string = formatters.map { |key| "%#{self.class::UNITS[key.to_s]}#{delimiters.shift}" }
12
+ strftime(string.join)
13
+ end
14
+
15
+ def stamp(key = nil)
16
+ key = key.nil? ? self.class::DEFAULT_STAMP : key.to_s
17
+ strftime(self.class::STAMPS[key])
18
+ end
19
+
20
+ alias to_format stamp
21
+
22
+ end
23
+ end
24
+ end
@@ -1,85 +1,84 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- if Lite::Ruby.configuration.monkey_patches.include?('integer')
4
- class Integer
5
-
6
- ROMAN_NUMERALS = {
7
- M: 1000, CM: 900, D: 500, CD: 400, C: 100, XC: 90, L: 50,
8
- XL: 40, X: 10, IX: 9, V: 5, IV: 4, I: 1
9
- }.freeze
10
-
11
- SQL_SMALLINT = 32_767
12
- SQL_INTEGER = 2_147_483_647
13
- SQL_BIGINT = 9_223_372_036_854_775_807
14
-
15
- def bit(bit)
16
- if bit.negative?
17
- mask = (1 << ~bit)
18
- self & ~mask
19
- else
20
- mask = (1 << bit)
21
- self | mask
22
- end
23
- end
3
+ require 'yaml' unless defined?(YAML)
24
4
 
25
- def bit?(bit)
26
- mask = (1 << bit)
27
- (self & mask) != 0
28
- end
5
+ class Integer
29
6
 
30
- def bit_clear(bit)
31
- mask = (1 << bit)
32
- self & ~mask
33
- end
7
+ ROMAN_NUMERALS = YAML.load_file(
8
+ File.expand_path('formats/integer_roman_numerals.yml', File.dirname(__FILE__))
9
+ ).freeze
34
10
 
35
- def bitmask(mask)
36
- if mask.negative?
37
- self & mask
38
- else
39
- self | mask
40
- end
41
- end
11
+ SQL_SMALLINT = 32_767
12
+ SQL_INTEGER = 2_147_483_647
13
+ SQL_BIGINT = 9_223_372_036_854_775_807
42
14
 
43
- def bitmask?(mask)
44
- (self & mask) != 0
15
+ def bit(bit)
16
+ if bit.negative?
17
+ mask = (1 << ~bit)
18
+ self & ~mask
19
+ else
20
+ mask = (1 << bit)
21
+ self | mask
45
22
  end
23
+ end
46
24
 
47
- def combinatorial(num)
48
- (0...num).inject(1) { |acc, i| (acc * (self - i)) / (i + 1) }
49
- end
25
+ def bit?(bit)
26
+ mask = (1 << bit)
27
+ (self & mask) != 0
28
+ end
29
+
30
+ def bit_clear(bit)
31
+ mask = (1 << bit)
32
+ self & ~mask
33
+ end
50
34
 
51
- def factorial
52
- (1..self).inject { |acc, i| acc * i } || 0
35
+ def bitmask(mask)
36
+ if mask.negative?
37
+ self & mask
38
+ else
39
+ self | mask
53
40
  end
41
+ end
54
42
 
55
- def factors
56
- limit = Math.sqrt(self).floor
43
+ def bitmask?(mask)
44
+ (self & mask) != 0
45
+ end
57
46
 
58
- (1..limit).each_with_object([]) do |i, array|
59
- next unless (self % i).zero?
47
+ def combinatorial(num)
48
+ (0...num).inject(1) { |acc, i| (acc * (self - i)) / (i + 1) }
49
+ end
60
50
 
61
- sq = (self / i)
62
- array.push(i)
63
- array.push(sq) if sq != i
64
- end
65
- end
51
+ def factorial
52
+ (1..self).inject { |acc, i| acc * i } || 0
53
+ end
66
54
 
67
- def of(&block)
68
- Array.new(self, &block)
69
- end
55
+ def factors
56
+ limit = Math.sqrt(self).floor
70
57
 
71
- def roman_numeral
72
- return '' if zero?
73
- return "-#{(-self).roman_numeral}" if negative?
58
+ (1..limit).each_with_object([]) do |i, array|
59
+ next unless (self % i).zero?
74
60
 
75
- ROMAN_NUMERALS.each { |key, val| break "#{key}#{(self - val).roman_numeral}" if val <= self }
61
+ sq = (self / i)
62
+ array.push(i)
63
+ array.push(sq) if sq != i
76
64
  end
65
+ end
77
66
 
78
- def to_time
79
- Time.at(self)
80
- end
67
+ def of(&block)
68
+ Array.new(self, &block)
69
+ end
70
+
71
+ def roman_numeral
72
+ return '' if zero?
73
+ return "-#{(-self).roman_numeral}" if negative?
81
74
 
82
- alias to_t to_time unless defined?(to_t)
75
+ ROMAN_NUMERALS.each { |key, val| break "#{key}#{(self - val).roman_numeral}" if val <= self }
76
+ end
83
77
 
78
+ def to_time
79
+ Time.at(self)
84
80
  end
81
+
82
+ alias to_t to_time unless defined?(to_t)
83
+
85
84
  end
@@ -1,31 +1,29 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- if Lite::Ruby.configuration.monkey_patches.include?('kernel')
4
- module Kernel
3
+ module Kernel
5
4
 
6
- # rubocop:disable Lint/RescueException, Security/Eval
7
- def safe_eval
8
- eval(self)
9
- rescue Exception
10
- self
11
- end
12
-
13
- def try_eval
14
- val = /\[\d*,?\d*,?\d*\]/.match(to_s).to_s
15
- return val if val.nil?
5
+ # rubocop:disable Lint/RescueException, Security/Eval
6
+ def safe_eval
7
+ eval(self)
8
+ rescue Exception
9
+ self
10
+ end
16
11
 
17
- eval(val)
18
- end
19
- # rubocop:enable Lint/RescueException, Security/Eval
12
+ def try_eval
13
+ val = /\[\d*,?\d*,?\d*\]/.match(to_s).to_s
14
+ return val if val.nil?
20
15
 
21
- private
16
+ eval(val)
17
+ end
18
+ # rubocop:enable Lint/RescueException, Security/Eval
22
19
 
23
- def caller_name(depth = 0)
24
- val = caller[depth][/`([^']*)'/, 1]
25
- return val if depth.zero? || !val.include?('<top (required)>')
20
+ private
26
21
 
27
- caller[depth - 1][/`([^']*)'/, 1]
28
- end
22
+ def caller_name(depth = 0)
23
+ val = caller[depth][/`([^']*)'/, 1]
24
+ return val if depth.zero? || !val.include?('<top (required)>')
29
25
 
26
+ caller[depth - 1][/`([^']*)'/, 1]
30
27
  end
28
+
31
29
  end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'lite/ruby/array'
4
+ require 'lite/ruby/boolean'
5
+ require 'lite/ruby/date'
6
+ require 'lite/ruby/enumerable'
7
+ require 'lite/ruby/hash'
8
+ require 'lite/ruby/integer'
9
+ require 'lite/ruby/kernel'
10
+ require 'lite/ruby/numeric'
11
+ require 'lite/ruby/object'
12
+ require 'lite/ruby/open_struct'
13
+ require 'lite/ruby/range'
14
+ require 'lite/ruby/string'
15
+ require 'lite/ruby/struct'
16
+ require 'lite/ruby/time'
@@ -1,244 +1,259 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- if Lite::Ruby.configuration.monkey_patches.include?('numeric')
4
- class Numeric
3
+ class Numeric
5
4
 
6
- def add(num)
7
- self + num
8
- end
5
+ def add(num)
6
+ self + num
7
+ end
9
8
 
10
- def at_least(lower)
11
- self >= lower ? self : lower
12
- end
9
+ def at_least(lower)
10
+ self >= lower ? self : lower
11
+ end
13
12
 
14
- def at_most(upper)
15
- self <= upper ? self : upper
16
- end
13
+ def at_most(upper)
14
+ self <= upper ? self : upper
15
+ end
17
16
 
18
- def close?(number, epsilon = 0.01)
19
- return self == number if epsilon.zero?
17
+ def close?(number, epsilon = 0.01)
18
+ return self == number if epsilon.zero?
20
19
 
21
- a = to_f
22
- b = number.to_f
20
+ a = to_f
21
+ b = number.to_f
23
22
 
24
- if a.zero? || b.zero?
25
- (a - b).abs < epsilon
26
- else
27
- (a / b - 1).abs < epsilon
28
- end
23
+ if a.zero? || b.zero?
24
+ (a - b).abs < epsilon
25
+ else
26
+ (a / b - 1).abs < epsilon
29
27
  end
28
+ end
30
29
 
31
- def decrement(amount = 1.0)
32
- self - amount
33
- end
30
+ def decrement(amount = 1.0)
31
+ self - amount
32
+ end
34
33
 
35
- def delimit(options = {})
36
- delimiter = options[:delimiter] || ','
37
- separator = options[:separator] || '.'
34
+ def delimit(options = {})
35
+ delimiter = options[:delimiter] || ','
36
+ separator = options[:separator] || '.'
38
37
 
39
- digits, decimals = to_s.split('.')
40
- digits = digits.reverse.chars.each_slice(3).map(&:join).join(delimiter).reverse
38
+ digits, decimals = to_s.split('.')
39
+ digits = digits.reverse.chars.each_slice(3).map(&:join).join(delimiter).reverse
41
40
 
42
- return digits unless decimals
41
+ return digits unless decimals
43
42
 
44
- [digits, decimals].join(separator)
45
- end
43
+ [digits, decimals].join(separator)
44
+ end
46
45
 
47
- def delta(num)
48
- (self - num).abs
49
- end
46
+ def delta(num)
47
+ (self - num).abs
48
+ end
50
49
 
51
- def distance(num)
52
- self - num
53
- end
50
+ def distance(num)
51
+ self - num
52
+ end
54
53
 
55
- def divide(num)
56
- return num if num.zero?
54
+ def divide(num)
55
+ return num if num.zero?
57
56
 
58
- self / num
59
- end
57
+ self / num
58
+ end
60
59
 
61
- def equal_to?(num)
62
- self == num
63
- end
60
+ def equal_to?(num)
61
+ self == num
62
+ end
64
63
 
65
- def fraction
66
- (self - truncate).abs
67
- end
64
+ def fraction
65
+ (self - truncate).abs
66
+ end
68
67
 
69
- def fraction?
70
- fraction.to_d != 0.0.to_d
71
- end
68
+ def fraction?
69
+ fraction.to_d != 0.0.to_d
70
+ end
72
71
 
73
- def greater_than?(num)
74
- num < self
75
- end
72
+ def greater_than?(num)
73
+ num < self
74
+ end
76
75
 
77
- def greater_than_or_equal_to?(num)
78
- num <= self
79
- end
76
+ def greater_than_or_equal_to?(num)
77
+ num <= self
78
+ end
80
79
 
81
- def increment(amount = 1.0)
82
- self + amount
83
- end
80
+ def increment(amount = 1.0)
81
+ self + amount
82
+ end
84
83
 
85
- def inside?(start, finish)
86
- (start < self) && (finish > self)
87
- end
84
+ def inside?(start, finish)
85
+ (start < self) && (finish > self)
86
+ end
88
87
 
89
- def less_than?(num)
90
- num > self
91
- end
88
+ def less_than?(num)
89
+ num > self
90
+ end
92
91
 
93
- def less_than_or_equal_to?(num)
94
- num >= self
95
- end
92
+ def less_than_or_equal_to?(num)
93
+ num >= self
94
+ end
96
95
 
97
- def markdown_percentage(percent)
98
- to_f * ((100.0 - percent.to_f) / 100.0)
99
- end
96
+ def many?
97
+ to_f > 1.0
98
+ end
100
99
 
101
- def markup_percentage(percent)
102
- to_f + (to_f * (percent.to_f / 100.0))
103
- end
100
+ def markdown_percentage(percent)
101
+ to_f * ((100.0 - percent.to_f) / 100.0)
102
+ end
104
103
 
105
- def multiply(num)
106
- self * num
107
- end
104
+ def markup_percentage(percent)
105
+ to_f + (to_f * (percent.to_f / 100.0))
106
+ end
108
107
 
109
- def multiple_of?(number)
110
- return zero? if number.zero?
108
+ def multiply(num)
109
+ self * num
110
+ end
111
111
 
112
- modulo(number).zero?
113
- end
112
+ def multiple_of?(number)
113
+ return zero? if number.zero?
114
114
 
115
- def not_equal_to?(num)
116
- self != num
117
- end
115
+ modulo(number).zero?
116
+ end
118
117
 
119
- def ordinal
120
- return 'th' if (11..13).cover?(abs % 100)
118
+ def negate
119
+ -self
120
+ end
121
121
 
122
- case abs % 10
123
- when 1 then 'st'
124
- when 2 then 'nd'
125
- when 3 then 'rd'
126
- else 'th'
127
- end
128
- end
122
+ def not_equal_to?(num)
123
+ self != num
124
+ end
129
125
 
130
- def ordinalize
131
- "#{self}#{ordinal}"
132
- end
126
+ def one?
127
+ to_d == 1.0.to_d
128
+ end
133
129
 
134
- def outside?(start, finish)
135
- (start > self) || (finish < self)
130
+ def ordinal
131
+ return 'th' if (11..13).cover?(abs % 100)
132
+
133
+ case abs % 10
134
+ when 1 then 'st'
135
+ when 2 then 'nd'
136
+ when 3 then 'rd'
137
+ else 'th'
136
138
  end
139
+ end
137
140
 
138
- def pad(options = {})
139
- pad_number = options[:pad_number] || 0
140
- precision = options[:precision] || 3
141
+ def ordinalize
142
+ "#{self}#{ordinal}"
143
+ end
141
144
 
142
- to_s.rjust(precision, pad_number.to_s)
143
- end
145
+ def outside?(start, finish)
146
+ (start > self) || (finish < self)
147
+ end
144
148
 
145
- # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
146
- def pad_precision(options = {})
147
- pad_number = options[:pad_number] || 0
148
- precision = options[:precision] || 2
149
- separator = options[:separator] || '.'
150
- string = to_s
151
-
152
- string << separator unless string.include?(separator)
153
- ljust_count = string.split(separator).first.length
154
- ljust_count += (string.count(separator) + precision) if precision.positive?
155
-
156
- if ljust_count >= string.length
157
- string.ljust(ljust_count, pad_number.to_s)
158
- else
159
- string[0..(ljust_count - 1)]
160
- end
161
- end
162
- # rubocop:enable Metrics/AbcSize, Metrics/MethodLength
149
+ def pad(options = {})
150
+ pad_number = options[:pad_number] || 0
151
+ precision = options[:precision] || 3
163
152
 
164
- def percentage_of(number)
165
- return 0 if zero? || number.zero?
153
+ to_s.rjust(precision, pad_number.to_s)
154
+ end
166
155
 
167
- (self / number.to_f) * 100.0
168
- end
156
+ # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
157
+ def pad_precision(options = {})
158
+ pad_number = options[:pad_number] || 0
159
+ precision = options[:precision] || 2
160
+ separator = options[:separator] || '.'
161
+ string = to_s
169
162
 
170
- def power(num)
171
- self**num
172
- end
163
+ string << separator unless string.include?(separator)
164
+ ljust_count = string.split(separator).first.length
165
+ ljust_count += (string.count(separator) + precision) if precision.positive?
173
166
 
174
- def range(value)
175
- (self - value)..(self + value)
167
+ if ljust_count >= string.length
168
+ string.ljust(ljust_count, pad_number.to_s)
169
+ else
170
+ string[0..(ljust_count - 1)]
176
171
  end
172
+ end
173
+ # rubocop:enable Metrics/AbcSize, Metrics/MethodLength
177
174
 
178
- def root(num)
179
- self**(1.0 / num)
180
- end
175
+ def percentage_of(number)
176
+ return 0 if zero? || number.zero?
181
177
 
182
- def round_down(num = 0)
183
- int, dec = to_f.to_s.split('.')
178
+ (self / number.to_f) * 100.0
179
+ end
184
180
 
185
- "#{int}.#{dec[0...num]}".to_f
186
- end
181
+ def power(num)
182
+ self**num
183
+ end
187
184
 
188
- def subtract(num)
189
- self - num
190
- end
185
+ def range(value)
186
+ (self - value)..(self + value)
187
+ end
191
188
 
192
- def to_currency(options = {})
193
- unit = options[:unit] || '$'
189
+ def root(num)
190
+ self**(1.0 / num)
191
+ end
194
192
 
195
- "#{unit}#{pad_precision(options.only(:precision))}"
196
- end
193
+ def round_down(num = 0)
194
+ int, dec = to_f.to_s.split('.')
197
195
 
198
- def to_nearest_value(values = [])
199
- return self if values.length.zero?
196
+ "#{int}.#{dec[0...num]}".to_f
197
+ end
200
198
 
201
- value = values.first
202
- difference = (self - value).abs
199
+ def subtract(num)
200
+ self - num
201
+ end
203
202
 
204
- values.each do |val|
205
- next unless (self - val).abs < difference
203
+ def to_currency(options = {})
204
+ unit = options[:unit] || '$'
206
205
 
207
- difference = (self - val).abs
208
- value = val
209
- end
206
+ "#{unit}#{pad_precision(options.only(:precision))}"
207
+ end
210
208
 
211
- value
212
- end
209
+ def to_nearest_value(values = [])
210
+ return self if values.length.zero?
213
211
 
214
- def to_percentage(options = {})
215
- unit = options[:unit] || '%'
212
+ value = values.first
213
+ difference = (self - value).abs
216
214
 
217
- "#{pad_precision(options.only(:precision))}#{unit}"
215
+ values.each do |val|
216
+ next unless (self - val).abs < difference
217
+
218
+ difference = (self - val).abs
219
+ value = val
218
220
  end
219
221
 
220
- def within?(number, epsilon = 0.01)
221
- return number == self if epsilon.zero?
222
+ value
223
+ end
222
224
 
223
- alpha = to_f
224
- beta = number.to_f
225
+ def to_percentage(options = {})
226
+ unit = options[:unit] || '%'
225
227
 
226
- if alpha.zero? || beta.zero?
227
- (alpha - beta).abs < epsilon
228
- else
229
- (alpha / beta - 1).abs < epsilon
230
- end
231
- end
228
+ "#{pad_precision(options.only(:precision))}#{unit}"
229
+ end
230
+
231
+ def to_range
232
+ negative? ? self..-self : -self..self
233
+ end
234
+
235
+ def within?(number, epsilon = 0.01)
236
+ return number == self if epsilon.zero?
232
237
 
233
- alias eq? equal_to?
234
- alias gt? greater_than?
235
- alias gteq? greater_than_or_equal_to?
236
- alias inequal_to? not_equal_to?
237
- alias ineq? not_equal_to?
238
- alias lt? less_than?
239
- alias lteq? less_than_or_equal_to?
240
- alias not_eq? not_equal_to?
241
- alias plus_minus range
238
+ alpha = to_f
239
+ beta = number.to_f
242
240
 
241
+ if alpha.zero? || beta.zero?
242
+ (alpha - beta).abs < epsilon
243
+ else
244
+ (alpha / beta - 1).abs < epsilon
245
+ end
243
246
  end
247
+
248
+ alias eq? equal_to?
249
+ alias gt? greater_than?
250
+ alias gteq? greater_than_or_equal_to?
251
+ alias inequal_to? not_equal_to?
252
+ alias ineq? not_equal_to?
253
+ alias lt? less_than?
254
+ alias lteq? less_than_or_equal_to?
255
+ alias none? zero?
256
+ alias not_eq? not_equal_to?
257
+ alias plus_minus range
258
+
244
259
  end