active_object 1.0.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.
@@ -0,0 +1,7 @@
1
+ class Integer
2
+
3
+ def time
4
+ Time.at(self)
5
+ end
6
+
7
+ end
@@ -0,0 +1,523 @@
1
+ class Numeric
2
+
3
+ MILLI = 0.001
4
+ CENTI = MILLI * 10
5
+ DECI = CENTI * 10
6
+ DECA = 10
7
+ HECTO = DECA * 10
8
+ KILO = HECTO * 10
9
+
10
+ KILOBYTE = 1024
11
+ MEGABYTE = KILOBYTE * 1024
12
+ GIGABYTE = MEGABYTE * 1024
13
+ TERABYTE = GIGABYTE * 1024
14
+ PETABYTE = TERABYTE * 1024
15
+ EXABYTE = PETABYTE * 1024
16
+
17
+ FEET = 12
18
+ YARD = FEET * 3
19
+ MILE = YARD * 1760
20
+ NAUTICAL_MILE = MILE * 1.15078
21
+
22
+ METRIC_TON = KILO * 1000
23
+ POUND = 16
24
+ STONE = POUND * 14
25
+ TON = POUND * 2000
26
+
27
+ MINUTE = 60
28
+ HOUR = MINUTE * 60
29
+ DAY = HOUR * 24
30
+ WEEK = DAY * 7
31
+ YEAR = DAY * 365.25
32
+ DECADE = YEAR * 10
33
+ CENTURY = DECADE * 10
34
+ MILLENNIUM = CENTURY * 10
35
+
36
+ def add(n)
37
+ self + n
38
+ end
39
+
40
+ unless method_defined?(:bytes)
41
+ def bytes
42
+ self
43
+ end
44
+
45
+ alias_method :byte, :bytes
46
+ end
47
+
48
+ def centigrams
49
+ self * CENTI
50
+ end
51
+
52
+ alias_method :centigram, :centigrams
53
+
54
+ def centimeters
55
+ self * CENTI
56
+ end
57
+
58
+ alias_method :centimeter, :centimeters
59
+
60
+ def centuries
61
+ self * CENTURY
62
+ end
63
+
64
+ alias_method :century, :centuries
65
+
66
+ def days
67
+ self * DAY
68
+ end
69
+
70
+ alias_method :day, :days
71
+
72
+ def decades
73
+ self * DECADE
74
+ end
75
+
76
+ alias_method :decade, :decades
77
+
78
+ def decagrams
79
+ self * DECA
80
+ end
81
+
82
+ alias_method :decagram, :decagrams
83
+
84
+ def decameters
85
+ self * DECA
86
+ end
87
+
88
+ alias_method :decameter, :decameters
89
+
90
+ def decigrams
91
+ self * DECI
92
+ end
93
+
94
+ alias_method :decigram, :decigrams
95
+
96
+ def decimeters
97
+ self * DECI
98
+ end
99
+
100
+ alias_method :decimeter, :decimeters
101
+
102
+ def divide(n)
103
+ self / n
104
+ end
105
+
106
+ unless method_defined?(:exabytes)
107
+ def exabytes
108
+ self * EXABYTE
109
+ end
110
+
111
+ alias_method :exabyte, :exabytes
112
+ end
113
+
114
+ def feet
115
+ self * FEET
116
+ end
117
+
118
+ alias_method :foot, :feet
119
+
120
+ unless method_defined?(:gigabytes)
121
+ def gigabytes
122
+ self * GIGABYTE
123
+ end
124
+
125
+ alias_method :gigabyte, :gigabytes
126
+ end
127
+
128
+ def grams
129
+ self
130
+ end
131
+
132
+ alias_method :gram, :grams
133
+
134
+ def hectograms
135
+ self * HECTO
136
+ end
137
+
138
+ alias_method :hectogram, :hectograms
139
+
140
+ def hectometers
141
+ self * HECTO
142
+ end
143
+
144
+ alias_method :hectometer, :hectometers
145
+
146
+ def hours
147
+ self * HOUR
148
+ end
149
+
150
+ alias_method :hour, :hours
151
+
152
+ def inches
153
+ self
154
+ end
155
+
156
+ alias_method :inch, :inches
157
+
158
+ unless method_defined?(:kilobytes)
159
+ def kilobytes
160
+ self * KILOBYTE
161
+ end
162
+
163
+ alias_method :kilobyte, :kilobytes
164
+ end
165
+
166
+ def kilometers
167
+ self * KILO
168
+ end
169
+
170
+ alias_method :kilometer, :kilometers
171
+
172
+ def kilograms
173
+ self * KILO
174
+ end
175
+
176
+ alias_method :kilogram, :kilograms
177
+
178
+ def metric_tons
179
+ self * METRIC_TON
180
+ end
181
+
182
+ alias_method :metric_ton, :metric_tons
183
+
184
+ unless method_defined?(:megabytes)
185
+ def megabytes
186
+ self * MEGABYTE
187
+ end
188
+
189
+ alias_method :megabyte, :megabytes
190
+ end
191
+
192
+ def meters
193
+ self
194
+ end
195
+
196
+ alias_method :meter, :meters
197
+
198
+ def miles
199
+ self * MILE
200
+ end
201
+
202
+ alias_method :mile, :miles
203
+
204
+ def millenniums
205
+ self * MILLENNIUM
206
+ end
207
+
208
+ alias_method :millennium, :millenniums
209
+
210
+ def milligrams
211
+ self * MILLI
212
+ end
213
+
214
+ alias_method :milligram, :milligrams
215
+
216
+ def millimeters
217
+ self * MILLI
218
+ end
219
+
220
+ alias_method :millimeter, :millimeters
221
+
222
+ def minutes
223
+ self * MINUTE
224
+ end
225
+
226
+ alias_method :minute, :minutes
227
+
228
+ def multiply(n)
229
+ self * n
230
+ end
231
+
232
+ unless method_defined?(:multiple_of?)
233
+ def multiple_of?(number)
234
+ number != 0 ? modulo(number).zero? : zero?
235
+ end
236
+ end
237
+
238
+ def nautical_miles
239
+ self * NAUTICAL_MILE
240
+ end
241
+
242
+ alias_method :nautical_mile, :nautical_miles
243
+
244
+ def negative?
245
+ self < 0
246
+ end
247
+
248
+ unless method_defined?(:ordinal)
249
+ def ordinal
250
+ abs_number = abs
251
+
252
+ if (11..13).include?(abs_number % 100)
253
+ "th"
254
+ else
255
+ case abs_number % 10
256
+ when 1; "st"
257
+ when 2; "nd"
258
+ when 3; "rd"
259
+ else "th"
260
+ end
261
+ end
262
+ end
263
+ end
264
+
265
+ unless method_defined?(:ordinalize)
266
+ def ordinalize
267
+ "#{self}#{self.ordinal}"
268
+ end
269
+ end
270
+
271
+ def ounces
272
+ self
273
+ end
274
+
275
+ alias_method :ounce, :ounces
276
+
277
+ def pad(options={})
278
+ pad_number = options.fetch(:pad_number, 0)
279
+ precision = options.fetch(:precision, 3)
280
+
281
+ to_s.rjust(precision, pad_number.to_s)
282
+ end
283
+
284
+ def pad_precision(options={})
285
+ pad_number = options.fetch(:pad_number, 0)
286
+ precision = options.fetch(:precision, 2)
287
+ separator = options.fetch(:separator, ".")
288
+ string = to_s
289
+
290
+ string << separator unless string.include?(separator)
291
+ ljust_count = string.split(separator).first.size
292
+ ljust_count += (string.count(separator) + precision) if precision > 0
293
+ num_count = string.size
294
+ ljust_count >= num_count ? string.ljust(ljust_count, pad_number.to_s) : string[0..(ljust_count - 1)]
295
+ end
296
+
297
+ unless method_defined?(:petabytes)
298
+ def petabytes
299
+ self * PETABYTE
300
+ end
301
+
302
+ alias_method :petabyte, :petabytes
303
+ end
304
+
305
+ def positive?
306
+ self > 0
307
+ end
308
+
309
+ def pounds
310
+ self * POUND
311
+ end
312
+
313
+ alias_method :pound, :pounds
314
+
315
+ def power(n)
316
+ self ** n
317
+ end
318
+
319
+ def root(n)
320
+ self ** (1.0 / n)
321
+ end
322
+
323
+ def seconds
324
+ self
325
+ end
326
+
327
+ alias_method :second, :seconds
328
+
329
+ def stones
330
+ self * STONE
331
+ end
332
+
333
+ alias_method :stone, :stones
334
+
335
+ def subtract(n)
336
+ self - n
337
+ end
338
+
339
+ unless method_defined?(:terabytes)
340
+ def terabytes
341
+ self * TERABYTE
342
+ end
343
+
344
+ alias_method :terabyte, :terabytes
345
+ end
346
+
347
+ def to_byte(from, to)
348
+ valid_keys = [
349
+ :byte, :bytes,
350
+ :kilobyte, :kilobytes,
351
+ :megabyte, :megabytes,
352
+ :gigabyte, :gigabytes,
353
+ :terabyte, :terabytes,
354
+ :petabyte, :petabytes,
355
+ :exabyte, :exabytes
356
+ ]
357
+
358
+ unless valid_keys.include?(from) && valid_keys.include?(to)
359
+ raise ArgumentError,
360
+ "Unknown key(s): form: #{from.inspect} and to: #{to.inspect}, Valid keys are: #{valid_keys.map(&:inspect).join(', ')}"
361
+ end
362
+
363
+ to_f * 1.send(from) / 1.send(to)
364
+ end
365
+
366
+ def to_length(from, to)
367
+ valid_keys = [
368
+ :meter, :meters,
369
+ :millimeter, :millimeters,
370
+ :centimeter, :centimeters,
371
+ :decimeter, :decimeters,
372
+ :decameter, :decameters,
373
+ :hectometer, :hectometers,
374
+ :kilometer, :kilometers,
375
+ :inch, :inches,
376
+ :foot, :feet,
377
+ :yard, :yards,
378
+ :mile, :miles,
379
+ :nautical_mile, :nautical_miles
380
+ ]
381
+
382
+ unless valid_keys.include?(from) && valid_keys.include?(to)
383
+ raise ArgumentError,
384
+ "Unknown key(s): form: #{from.inspect} and to: #{to.inspect}, Valid keys are: #{valid_keys.map(&:inspect).join(', ')}"
385
+ end
386
+
387
+ case to
388
+ when from
389
+ self
390
+ when :meter, :meters, :millimeter, :millimeters, :centimeter, :centimeters, :decimeter, :decimeters, :decameter, :decameters, :hectometer, :hectometers, :kilometer, :kilometers
391
+ if valid_keys.first(14).include?(from)
392
+ to_f * 1.send(from) / 1.send(to)
393
+ else
394
+ to_f * ((1.send(from) * 0.0254) / 1.send(to))
395
+ end
396
+ when :inch, :inches, :foot, :feet, :yard, :yards, :mile, :miles, :nautical_mile, :nautical_miles
397
+ if valid_keys.first(14).include?(from)
398
+ to_f * ((1.send(from) * 39.3701) / 1.send(to))
399
+ else
400
+ to_f * 1.send(from) / 1.send(to)
401
+ end
402
+ end
403
+ end
404
+
405
+ def to_mass(from, to)
406
+ valid_keys = [
407
+ :gram, :grams,
408
+ :milligram, :milligrams,
409
+ :centigram, :centigrams,
410
+ :decigram, :decigrams,
411
+ :decagram, :decagrams,
412
+ :hectogram, :hectograms,
413
+ :kilogram, :kilograms,
414
+ :metric_ton, :metric_tons,
415
+ :ounce, :ounces,
416
+ :pound, :pounds,
417
+ :stone, :stones,
418
+ :ton, :tons
419
+ ]
420
+
421
+ unless valid_keys.include?(from) && valid_keys.include?(to)
422
+ raise ArgumentError,
423
+ "Unknown key(s): form: #{from.inspect} and to: #{to.inspect}, Valid keys are: #{valid_keys.map(&:inspect).join(', ')}"
424
+ end
425
+
426
+ case to
427
+ when from
428
+ self
429
+ when :gram, :grams, :milligram, :milligrams, :centigram, :centigrams, :decigram, :decigrams, :decagram, :decagrams, :hectogram, :hectograms, :kilogram, :kilograms, :metric_ton, :metric_tons
430
+ if valid_keys.first(16).include?(from)
431
+ to_f * 1.send(from) / 1.send(to)
432
+ else
433
+ to_f * ((1.send(from) * 28.3495) / 1.send(to))
434
+ end
435
+ when :ounce, :ounces, :pound, :pounds, :stone, :stones, :ton, :tons
436
+ if valid_keys.first(16).include?(from)
437
+ to_f * ((1.send(from) * 0.035274) / 1.send(to))
438
+ else
439
+ to_f * 1.send(from) / 1.send(to)
440
+ end
441
+ end
442
+ end
443
+
444
+ def to_nearest_value(values=[])
445
+ return(self) if values.size.zero?
446
+ value = values.first
447
+ difference = (self - value).abs
448
+
449
+ values.each do |v|
450
+ if (self - v).abs < difference
451
+ difference = (self - v).abs
452
+ value = v
453
+ end
454
+ end
455
+ value
456
+ end
457
+
458
+ def to_temperature(from, to)
459
+ valid_keys = [:celsius, :fahrenheit, :kelvin]
460
+
461
+ unless valid_keys.include?(from) && valid_keys.include?(to)
462
+ raise ArgumentError,
463
+ "Unknown key(s): form: #{from.inspect} and to: #{to.inspect}, Valid keys are: #{valid_keys.map(&:inspect).join(', ')}"
464
+ end
465
+
466
+ case to
467
+ when from
468
+ self
469
+ when :celsius
470
+ from == :kelvin ? (to_f - 273.15) : ((to_f - 32.0) * 5.0 / 9.0)
471
+ when :fahrenheit
472
+ from == :kelvin ? (1.8 * (to_f - 273.15) + 32.0) : ((to_f * 9.0 / 5.0) + 32.0)
473
+ when :kelvin
474
+ from == :celsius ? (to_f + 273.15) : (((to_f - 32.0) * 5.0 / 9.0) + 273.15)
475
+ end
476
+ end
477
+
478
+ def to_time(from, to)
479
+ valid_keys = [
480
+ :second, :seconds,
481
+ :minute, :minutes,
482
+ :hour, :hours,
483
+ :day, :days,
484
+ :week, :weeks,
485
+ :year, :years,
486
+ :decade, :decades,
487
+ :century, :centuries,
488
+ :millennium, :millenniums
489
+ ]
490
+
491
+ unless valid_keys.include?(from) && valid_keys.include?(to)
492
+ raise ArgumentError,
493
+ "Unknown key(s): form: #{from.inspect} and to: #{to.inspect}, Valid keys are: #{valid_keys.map(&:inspect).join(', ')}"
494
+ end
495
+
496
+ to_f * 1.send(from) / 1.send(to)
497
+ end
498
+
499
+ def tons
500
+ self * TON
501
+ end
502
+
503
+ alias_method :ton, :tons
504
+
505
+ def weeks
506
+ self * WEEK
507
+ end
508
+
509
+ alias_method :week, :weeks
510
+
511
+ def yards
512
+ self * YARD
513
+ end
514
+
515
+ alias_method :yard, :yards
516
+
517
+ def years
518
+ self * YEAR
519
+ end
520
+
521
+ alias_method :year, :years
522
+
523
+ end