active_object 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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