active_object 1.4.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +209 -5
- data/lib/active_object/array.rb +46 -0
- data/lib/active_object/enumerable.rb +22 -0
- data/lib/active_object/hash.rb +40 -0
- data/lib/active_object/integer.rb +34 -0
- data/lib/active_object/numeric.rb +12 -0
- data/lib/active_object/range.rb +21 -5
- data/lib/active_object/string.rb +16 -0
- data/lib/active_object/time.rb +2 -0
- data/lib/active_object/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0063e4f4ebe0c179ce2e900b5521e88b210d4263
|
4
|
+
data.tar.gz: 795f415b25307d864f9fe0655028375d3f2a03bc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 471c7234bd99b4bb7d860391a2a04faa796dc10d2d5823d9099dc9dd5ec53a5a20a17024cf237cb18f0208d1bde7a941a9a14c452df436715bcbc0a4054b52c4
|
7
|
+
data.tar.gz: 0c80a0a97edb2e6d5e97edd82d0f5fb43727656628f364ea1652b178b2afcdf76eddc2b63bc2f613deb87f99bf548dab0c1d59641f9360a3243180380cc75004
|
data/README.md
CHANGED
@@ -13,6 +13,7 @@ Highly recommended extensions:
|
|
13
13
|
* **String:** Escape Utils - https://github.com/brianmario/escape_utils
|
14
14
|
* **String:** Fast Blank - https://github.com/SamSaffron/fast_blank
|
15
15
|
* **Translation:** Fast Gettext - https://github.com/grosser/fast_gettext
|
16
|
+
* **Facets:** Facets - https://github.com/rubyworks/facets
|
16
17
|
|
17
18
|
## Installation
|
18
19
|
|
@@ -42,6 +43,24 @@ Or install it yourself as:
|
|
42
43
|
|
43
44
|
## Array
|
44
45
|
|
46
|
+
####After:####
|
47
|
+
`after` returns the value after the given value.
|
48
|
+
|
49
|
+
```ruby
|
50
|
+
["1", "2", "3"].after("2") #=> "3"
|
51
|
+
["1", "2", "3"].after("3") #=> "1"
|
52
|
+
["1", "2", "3"].after("4") #=> nil
|
53
|
+
```
|
54
|
+
|
55
|
+
####Before:####
|
56
|
+
`before` returns the value before the given value.
|
57
|
+
|
58
|
+
```ruby
|
59
|
+
["1", "2", "3"].before("2") #=> "1"
|
60
|
+
["1", "2", "3"].before("1") #=> "3"
|
61
|
+
["1", "2", "3"].before("4") #=> nil
|
62
|
+
```
|
63
|
+
|
45
64
|
####Delete First:####
|
46
65
|
`delete_first` and `delete_first!` removes the first element from an array. Like Array.shift, but returns the array instead of the removed element.
|
47
66
|
|
@@ -56,6 +75,21 @@ Or install it yourself as:
|
|
56
75
|
["1", "2", "3"].delete_last #=> ["1", "2"]
|
57
76
|
```
|
58
77
|
|
78
|
+
####Delete Values:####
|
79
|
+
`delete_values` delete multiple values from array.
|
80
|
+
|
81
|
+
```ruby
|
82
|
+
[1, 2, 3, 4].delete_values(1, 3) #=> [2, 4]
|
83
|
+
```
|
84
|
+
|
85
|
+
####Duplicates:####
|
86
|
+
`duplicates` returns list of duplicate elements.
|
87
|
+
|
88
|
+
```ruby
|
89
|
+
[1, 1, 2, 2, 2, 3].duplicates #=> [1, 2]
|
90
|
+
[1, 1, 2, 2, 2, 3].duplicates(3) #=> [2]
|
91
|
+
```
|
92
|
+
|
59
93
|
####From:####
|
60
94
|
`from` returns the tail of the array from position. `Rails Safe`
|
61
95
|
|
@@ -90,6 +124,27 @@ Or install it yourself as:
|
|
90
124
|
%w(1 2 3 4 5 6 7 8 9 10).in_groups_of(3, false) #=> [["1", "2", "3"], ["4", "5", "6"], ["7", "8", "9"], ["10"]]
|
91
125
|
```
|
92
126
|
|
127
|
+
####Probablity:####
|
128
|
+
`probability` generates a hash mapping each unique element in the array to the relative frequency, i.e. the probablity, of it appearence.
|
129
|
+
|
130
|
+
```ruby
|
131
|
+
[:a, :b, :c, :c].probability #=> { a: 0.25, b: 0.25, c: 0.5 }
|
132
|
+
```
|
133
|
+
|
134
|
+
####Reject Values:####
|
135
|
+
`reject_values` delete multiple values from array from a array copy.
|
136
|
+
|
137
|
+
```ruby
|
138
|
+
[1, 2, 3, 4, 5].reject_values(2,4) #=> [1, 3, 5]
|
139
|
+
```
|
140
|
+
|
141
|
+
####Sample:####
|
142
|
+
`sample!` deletes a random value and returns that value.
|
143
|
+
|
144
|
+
```ruby
|
145
|
+
[1, 2, 3, 4, 5].sample! #=> 2
|
146
|
+
```
|
147
|
+
|
93
148
|
####Split:####
|
94
149
|
`split` divides the array into one or more subarrays based on a delimiting value or the result of an optional block. `Rails Safe`
|
95
150
|
|
@@ -134,6 +189,13 @@ Or install it yourself as:
|
|
134
189
|
|
135
190
|
## Enumerable
|
136
191
|
|
192
|
+
####Cluster:####
|
193
|
+
`cluster` clusters together adjacent elements into a list of sub-arrays.
|
194
|
+
|
195
|
+
```ruby
|
196
|
+
[2,2,2,3,3,4,2,2,1].cluster { |x| x } #=> [[2, 2, 2], [3, 3], [4], [2, 2], [1]]
|
197
|
+
```
|
198
|
+
|
137
199
|
####Difference:####
|
138
200
|
`difference` returns the difference of a collection of numbers.
|
139
201
|
|
@@ -187,6 +249,13 @@ Or install it yourself as:
|
|
187
249
|
[1, 2, 3].exclude?(3) #=> false
|
188
250
|
```
|
189
251
|
|
252
|
+
####Expand:####
|
253
|
+
`expand` expand all elements of an Enumerable object.
|
254
|
+
|
255
|
+
```ruby
|
256
|
+
[0, 2..3, 5..7].expand #=> [0,[2, 3],[5,6,7]]
|
257
|
+
```
|
258
|
+
|
190
259
|
####Exponential:####
|
191
260
|
`exponential` returns the exponential of a collection of numbers.
|
192
261
|
|
@@ -204,6 +273,14 @@ Or install it yourself as:
|
|
204
273
|
[1, :symbol, 'string', 3, :symbol, 1].frequencies #=> { 1 => 2, :symbol => 2, 'string' => 1, 3 => 1 }
|
205
274
|
```
|
206
275
|
|
276
|
+
####Incase:####
|
277
|
+
`incase?` the same as #include? but tested using #=== instead of #==.
|
278
|
+
|
279
|
+
```ruby
|
280
|
+
[1, 2, "a"].incase?(String) #=> true
|
281
|
+
[1, 2, "a"].incase?(3) #=> false
|
282
|
+
```
|
283
|
+
|
207
284
|
####Many:####
|
208
285
|
`many?` returns if collection has more than one element while respecting nil and false as an element. `Rails Safe`
|
209
286
|
|
@@ -407,6 +484,50 @@ h1.deep_merge(h2) #=> { a: false, b: { c: [1, 2, 3], x: [3, 4, 5] } }
|
|
407
484
|
{ foo: "bar" }.reverse_merge!(baz: "boo", boo: "bam") #=> { foo: "bar", baz: "boo", boo: "bam" }
|
408
485
|
```
|
409
486
|
|
487
|
+
####Sample:####
|
488
|
+
`sample` returns a random key-value pair.
|
489
|
+
`sample!` deletes a random key-value pair and returns that pair.
|
490
|
+
|
491
|
+
```ruby
|
492
|
+
h = { a: 1, b: 2, c: 3, d: 4 }
|
493
|
+
|
494
|
+
h.sample #=> [:c, 3]
|
495
|
+
h.sample! #=> [:a, 1]
|
496
|
+
```
|
497
|
+
|
498
|
+
####Sample Key:####
|
499
|
+
`sample_key` returns a random key.
|
500
|
+
`sample_key!` delete a random key-value pair, returning the key.
|
501
|
+
|
502
|
+
```ruby
|
503
|
+
h = { a: 1, b: 2, c: 3, d: 4 }
|
504
|
+
|
505
|
+
h.sample_key #=> :b
|
506
|
+
h.sample_key! #=> :d
|
507
|
+
```
|
508
|
+
|
509
|
+
####Sample Value:####
|
510
|
+
`sample_value` returns a random value.
|
511
|
+
`sample_value!` delete a random key-value pair, returning the value.
|
512
|
+
|
513
|
+
```ruby
|
514
|
+
h = { a: 1, b: 2, c: 3, d: 4 }
|
515
|
+
|
516
|
+
h.sample_value #=> 1
|
517
|
+
h.sample_value! #=> 3
|
518
|
+
```
|
519
|
+
|
520
|
+
####Shuffle:####
|
521
|
+
`shuffle` returns a copy of the hash with values arranged in new random order.
|
522
|
+
`shuffle!` returns the hash with values arranged in new random order.
|
523
|
+
|
524
|
+
```ruby
|
525
|
+
h = { a: 1, b: 2, c: 3, d: 4 }
|
526
|
+
|
527
|
+
h.shuffle #=> { b: 2, c: 3, a: 1, d: 4 }
|
528
|
+
h.shuffle! #=> { d: 4, b: 2, c: 3, a: 1 }
|
529
|
+
```
|
530
|
+
|
410
531
|
####Slice:####
|
411
532
|
`slice` a hash to include only the given keys. Returns a hash containing the given keys. `Rails Safe`
|
412
533
|
`slice!` replaces the hash with only the given keys. Returns a hash containing the removed key/value pairs. `Rails Safe`
|
@@ -464,6 +585,27 @@ h.slice!(:a, :b) #=> { c: 3, d: 4 }
|
|
464
585
|
|
465
586
|
## Integer
|
466
587
|
|
588
|
+
####Factorial:####
|
589
|
+
`factorial` calculate the factorial of an integer.
|
590
|
+
|
591
|
+
```ruby
|
592
|
+
4.factorial #=> 24
|
593
|
+
```
|
594
|
+
|
595
|
+
####Of:####
|
596
|
+
`of` is like #times but returns a collection of the yield results.
|
597
|
+
|
598
|
+
```ruby
|
599
|
+
3.of { |i| "#{i+1}" } #=> ["1", "2", "3"]
|
600
|
+
```
|
601
|
+
|
602
|
+
####Roman:####
|
603
|
+
`roman` converts this integer to a roman numeral.
|
604
|
+
|
605
|
+
```ruby
|
606
|
+
49.roman #=> "XLIX"
|
607
|
+
```
|
608
|
+
|
467
609
|
####Time:####
|
468
610
|
`time` returns a Time object for the given Integer.
|
469
611
|
|
@@ -508,6 +650,13 @@ h.slice!(:a, :b) #=> { c: 3, d: 4 }
|
|
508
650
|
3.centuries_in_seconds #=> 9467280000.0
|
509
651
|
```
|
510
652
|
|
653
|
+
####Days in Seconds:####
|
654
|
+
`day_in_seconds` and `days_in_seconds` returns the amount of seconds in n days.
|
655
|
+
|
656
|
+
```ruby
|
657
|
+
3.days_in_seconds #=> 259200
|
658
|
+
```
|
659
|
+
|
511
660
|
####Decades in Seconds:####
|
512
661
|
`decade_in_seconds` and `decades_in_seconds` returns the amount of seconds in n decades.
|
513
662
|
|
@@ -542,11 +691,12 @@ h.slice!(:a, :b) #=> { c: 3, d: 4 }
|
|
542
691
|
3.decimeters_in_meters #=> 0.3
|
543
692
|
```
|
544
693
|
|
545
|
-
####
|
546
|
-
`
|
694
|
+
####Distance:####
|
695
|
+
`distance` returns the absolute difference between numbers.
|
547
696
|
|
548
697
|
```ruby
|
549
|
-
3
|
698
|
+
5.distance(3) #=> 2
|
699
|
+
3.distance(5) #=> 2
|
550
700
|
```
|
551
701
|
|
552
702
|
####Divide:####
|
@@ -934,6 +1084,13 @@ h.slice!(:a, :b) #=> { c: 3, d: 4 }
|
|
934
1084
|
3.weeks_in_seconds #=> 1814400
|
935
1085
|
```
|
936
1086
|
|
1087
|
+
####Within:####
|
1088
|
+
`within?` determines if another number is approximately equal within a given epsilon
|
1089
|
+
|
1090
|
+
```ruby
|
1091
|
+
10.006.within?(10, 0.1) #=> true
|
1092
|
+
```
|
1093
|
+
|
937
1094
|
####Yards in Inches:####
|
938
1095
|
`yard_in_inches` and `yards_in_inches` returns the amount of inches in n yards.
|
939
1096
|
|
@@ -994,6 +1151,13 @@ h.slice!(:a, :b) #=> { c: 3, d: 4 }
|
|
994
1151
|
|
995
1152
|
## Range
|
996
1153
|
|
1154
|
+
####Combine:####
|
1155
|
+
`combine` returns two concated ranges.
|
1156
|
+
|
1157
|
+
```ruby
|
1158
|
+
(1..3).combine(7..9) #=> [1, 2, 3, 7, 8, 9]
|
1159
|
+
```
|
1160
|
+
|
997
1161
|
####Include With Range:####
|
998
1162
|
`include_with_range?` determines if a range includes another range. `Rails Safe`
|
999
1163
|
|
@@ -1011,6 +1175,30 @@ h.slice!(:a, :b) #=> { c: 3, d: 4 }
|
|
1011
1175
|
(1..5).overlaps?(7..9) # => false
|
1012
1176
|
```
|
1013
1177
|
|
1178
|
+
####Sample:####
|
1179
|
+
`sample` returns a random element from the range.
|
1180
|
+
|
1181
|
+
```ruby
|
1182
|
+
(1..5).sample # => 4
|
1183
|
+
```
|
1184
|
+
|
1185
|
+
####Shuffle:####
|
1186
|
+
`shuffle` returns a copy of a shuffled range of elements.
|
1187
|
+
`shuffle!` returns a shuffled range of elements.
|
1188
|
+
|
1189
|
+
```ruby
|
1190
|
+
(1..5).shuffle # => [2, 5, 1, 4, 3]
|
1191
|
+
(1..5).shuffle! # => [3, 4, 5, 2, 1]
|
1192
|
+
```
|
1193
|
+
|
1194
|
+
####Within:####
|
1195
|
+
`within?` determines if one range is within another.
|
1196
|
+
|
1197
|
+
```ruby
|
1198
|
+
(1..5).within?(2..4) # => true
|
1199
|
+
(1..5).within?(4..6) # => false
|
1200
|
+
```
|
1201
|
+
|
1014
1202
|
## String
|
1015
1203
|
|
1016
1204
|
####Any:####
|
@@ -1232,6 +1420,14 @@ h.slice!(:a, :b) #=> { c: 3, d: 4 }
|
|
1232
1420
|
"this is <b>bold</b> and <em>emphatic</em>".strip_tags #=> "this is bold and emphatic"
|
1233
1421
|
```
|
1234
1422
|
|
1423
|
+
####Sample:####
|
1424
|
+
`sample` and `sample!` deletes a random value and returns that value.
|
1425
|
+
|
1426
|
+
```ruby
|
1427
|
+
"this thing that".sample #=> "thing"
|
1428
|
+
"this thing that".sample(" thing ") #=> "that"
|
1429
|
+
```
|
1430
|
+
|
1235
1431
|
####Shift:####
|
1236
1432
|
`shift` and `shift!` removes the first instance of a string.
|
1237
1433
|
|
@@ -1240,6 +1436,14 @@ h.slice!(:a, :b) #=> { c: 3, d: 4 }
|
|
1240
1436
|
"this thing that thing".shift("this", "that") #=> " thing thing"
|
1241
1437
|
```
|
1242
1438
|
|
1439
|
+
####Shuffle:####
|
1440
|
+
`shuffle` and `shuffle!` randomizes the characters in a string.
|
1441
|
+
|
1442
|
+
```ruby
|
1443
|
+
"ruby rules".sample #=> "e lybrsuur"
|
1444
|
+
"ruby rules".sample! #=> "rblse syru"
|
1445
|
+
```
|
1446
|
+
|
1243
1447
|
####Slugify:####
|
1244
1448
|
`slugify` and `slugify!` generates a permalink-style string, with odd characters removed.
|
1245
1449
|
|
@@ -1375,8 +1579,8 @@ Time.now.format("month_name day, year hour:minute ampm") #=> "January 09, 2014 0
|
|
1375
1579
|
| Time Zone - hour and minute offset | `zz` or `time_zone_offset` | %z | +09:00 |
|
1376
1580
|
| Time Zone - hour, minute and second offset | `zzz` or `time_zone_offset_full` | %z | +09:00:00 |
|
1377
1581
|
|
1378
|
-
####To Format:####
|
1379
|
-
`to_format` converts a Date or Time object to a predefined format.
|
1582
|
+
####To Format / Stamp:####
|
1583
|
+
`to_format` and `stamp` converts a Date or Time object to a predefined format.
|
1380
1584
|
|
1381
1585
|
**For a full list check out the time extention file.**
|
1382
1586
|
|
data/lib/active_object/array.rb
CHANGED
@@ -1,5 +1,17 @@
|
|
1
1
|
class Array
|
2
2
|
|
3
|
+
def after(value)
|
4
|
+
return(nil) unless include?(value)
|
5
|
+
|
6
|
+
self[(index(value).to_i + 1) % size]
|
7
|
+
end
|
8
|
+
|
9
|
+
def before(value)
|
10
|
+
return(nil) unless include?(value)
|
11
|
+
|
12
|
+
self[(index(value).to_i - 1) % size]
|
13
|
+
end
|
14
|
+
|
3
15
|
def delete_first
|
4
16
|
self[1..-1]
|
5
17
|
end
|
@@ -16,6 +28,19 @@ class Array
|
|
16
28
|
replace(delete_last)
|
17
29
|
end
|
18
30
|
|
31
|
+
def delete_values(*args)
|
32
|
+
result = []
|
33
|
+
args.each { |v| result << delete(v) }
|
34
|
+
return(result)
|
35
|
+
end
|
36
|
+
|
37
|
+
def duplicates(minimum=2)
|
38
|
+
hash = Hash.new(0)
|
39
|
+
|
40
|
+
each { |i| hash[i] += 1 }
|
41
|
+
hash.delete_if { |k, v| v < minimum }.keys
|
42
|
+
end
|
43
|
+
|
19
44
|
unless defined?(Rails)
|
20
45
|
def from(position)
|
21
46
|
self[position, size] || []
|
@@ -66,6 +91,27 @@ class Array
|
|
66
91
|
end
|
67
92
|
end
|
68
93
|
|
94
|
+
def probability
|
95
|
+
hash = Hash.new(0.0)
|
96
|
+
differ = 0.0
|
97
|
+
|
98
|
+
each do |e|
|
99
|
+
hash[e] += 1.0
|
100
|
+
differ += 1.0
|
101
|
+
end
|
102
|
+
|
103
|
+
hash.keys.each { |e| hash[e] /= differ }
|
104
|
+
hash
|
105
|
+
end
|
106
|
+
|
107
|
+
def reject_values(*args)
|
108
|
+
reject { |x| args.include?(x) }
|
109
|
+
end
|
110
|
+
|
111
|
+
def sample!
|
112
|
+
delete_at(Random.rand(size - 1))
|
113
|
+
end
|
114
|
+
|
69
115
|
unless defined?(Rails)
|
70
116
|
def split(number=nil)
|
71
117
|
if block_given?
|
@@ -1,5 +1,19 @@
|
|
1
1
|
module Enumerable
|
2
2
|
|
3
|
+
def cluster(&block)
|
4
|
+
result = []
|
5
|
+
|
6
|
+
each do |element|
|
7
|
+
if result.last && (yield(result.last.last) == yield(element))
|
8
|
+
result.last << element
|
9
|
+
else
|
10
|
+
result << [element]
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
result
|
15
|
+
end
|
16
|
+
|
3
17
|
def difference(identity=0, &block)
|
4
18
|
if block_given?
|
5
19
|
map(&block).difference(identity)
|
@@ -45,6 +59,10 @@ module Enumerable
|
|
45
59
|
end
|
46
60
|
end
|
47
61
|
|
62
|
+
def expand
|
63
|
+
map { |n| n.is_a?(Enumerable) ? n.expand : n }
|
64
|
+
end
|
65
|
+
|
48
66
|
def exponential(identity=0, &block)
|
49
67
|
if block_given?
|
50
68
|
map(&block).exponential(identity)
|
@@ -57,6 +75,10 @@ module Enumerable
|
|
57
75
|
each_with_object(Hash.new(0)) { |e, a| a[e] += 1 }
|
58
76
|
end
|
59
77
|
|
78
|
+
def incase?(object)
|
79
|
+
any? { |x| object === x }
|
80
|
+
end
|
81
|
+
|
60
82
|
unless defined?(Rails)
|
61
83
|
def many?
|
62
84
|
found_count = 0
|
data/lib/active_object/hash.rb
CHANGED
@@ -102,6 +102,46 @@ class Hash
|
|
102
102
|
end
|
103
103
|
end
|
104
104
|
|
105
|
+
def sample
|
106
|
+
key = sample_key
|
107
|
+
[key, fetch(key)]
|
108
|
+
end
|
109
|
+
|
110
|
+
def sample!
|
111
|
+
key, value = sample
|
112
|
+
delete(key)
|
113
|
+
[key, value]
|
114
|
+
end
|
115
|
+
|
116
|
+
def sample_key
|
117
|
+
hash_keys = keys
|
118
|
+
hash_keys.at(Random.rand(hash_keys.size - 1))
|
119
|
+
end
|
120
|
+
|
121
|
+
def sample_key!
|
122
|
+
key, value = sample
|
123
|
+
delete(key)
|
124
|
+
key
|
125
|
+
end
|
126
|
+
|
127
|
+
def sample_value
|
128
|
+
fetch(sample_key)
|
129
|
+
end
|
130
|
+
|
131
|
+
def sample_value!
|
132
|
+
key, value = sample
|
133
|
+
delete(key)
|
134
|
+
value
|
135
|
+
end
|
136
|
+
|
137
|
+
def shuffle
|
138
|
+
Hash[to_a.sample(size)]
|
139
|
+
end
|
140
|
+
|
141
|
+
def shuffle!
|
142
|
+
replace(shuffle)
|
143
|
+
end
|
144
|
+
|
105
145
|
unless defined?(Rails)
|
106
146
|
def slice(*keys)
|
107
147
|
keys.flatten.each_with_object(self.class.new) { |k, h| h[k] = self[k] if has_key?(k) }
|
@@ -1,5 +1,39 @@
|
|
1
1
|
class Integer
|
2
2
|
|
3
|
+
ROMAN_VALUES = {
|
4
|
+
"M" => 1000,
|
5
|
+
"CM" => 900,
|
6
|
+
"D" => 500,
|
7
|
+
"CD" => 400,
|
8
|
+
"C" => 100,
|
9
|
+
"XC" => 90,
|
10
|
+
"L" => 50,
|
11
|
+
"XL" => 40,
|
12
|
+
"X" => 10,
|
13
|
+
"IX" => 9,
|
14
|
+
"V" => 5,
|
15
|
+
"IV" => 4,
|
16
|
+
"I" => 1
|
17
|
+
}
|
18
|
+
|
19
|
+
def factorial
|
20
|
+
return(1) if zero?
|
21
|
+
2.upto(self).inject(1) { |product, n| product * n }
|
22
|
+
end
|
23
|
+
|
24
|
+
def of(&block)
|
25
|
+
Array.new(self, &block)
|
26
|
+
end
|
27
|
+
|
28
|
+
def roman
|
29
|
+
return("") if zero?
|
30
|
+
return("-#{(-self).roman}") if self < 0
|
31
|
+
|
32
|
+
ROMAN_VALUES.each do |key, value|
|
33
|
+
return(key + (self - value).roman) if value <= self
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
3
37
|
def time
|
4
38
|
Time.at(self)
|
5
39
|
end
|
@@ -99,6 +99,10 @@ class Numeric
|
|
99
99
|
|
100
100
|
alias_method :decimeter_in_meters, :decimeters_in_meters
|
101
101
|
|
102
|
+
def distance(n)
|
103
|
+
(self - n).abs
|
104
|
+
end
|
105
|
+
|
102
106
|
def divide(n)
|
103
107
|
self / n
|
104
108
|
end
|
@@ -508,6 +512,14 @@ class Numeric
|
|
508
512
|
|
509
513
|
alias_method :week_in_seconds, :weeks_in_seconds
|
510
514
|
|
515
|
+
def within?(number, epsilon=0.01)
|
516
|
+
return(self == number) if epsilon.zero?
|
517
|
+
|
518
|
+
a, b = to_f, number.to_f
|
519
|
+
|
520
|
+
(a.zero? || b.zero?) ? (a - b).abs < epsilon : (a / b - 1).abs < epsilon
|
521
|
+
end
|
522
|
+
|
511
523
|
def yards_in_inches
|
512
524
|
self * YARD
|
513
525
|
end
|
data/lib/active_object/range.rb
CHANGED
@@ -1,12 +1,16 @@
|
|
1
1
|
class Range
|
2
2
|
|
3
|
+
def combine(other)
|
4
|
+
to_a.concat(other.to_a)
|
5
|
+
end
|
6
|
+
|
3
7
|
unless defined?(Rails)
|
4
|
-
def include_with_range?(
|
5
|
-
if
|
6
|
-
operator = exclude_end? && !
|
7
|
-
include?(
|
8
|
+
def include_with_range?(other)
|
9
|
+
if other.is_a?(::Range)
|
10
|
+
operator = exclude_end? && !other.exclude_end? ? :< : :<=
|
11
|
+
include?(other.first) && other.last.send(operator, last)
|
8
12
|
else
|
9
|
-
include?(
|
13
|
+
include?(other)
|
10
14
|
end
|
11
15
|
end
|
12
16
|
end
|
@@ -17,4 +21,16 @@ class Range
|
|
17
21
|
end
|
18
22
|
end
|
19
23
|
|
24
|
+
def sample
|
25
|
+
to_a.sample
|
26
|
+
end
|
27
|
+
|
28
|
+
def shuffle
|
29
|
+
to_a.shuffle
|
30
|
+
end
|
31
|
+
|
32
|
+
def within?(other)
|
33
|
+
cover?(other.first) && cover?(other.last)
|
34
|
+
end
|
35
|
+
|
20
36
|
end
|
data/lib/active_object/string.rb
CHANGED
@@ -223,6 +223,14 @@ class String
|
|
223
223
|
replace(remove_tags)
|
224
224
|
end
|
225
225
|
|
226
|
+
def sample(separator=' ')
|
227
|
+
split(separator).sample
|
228
|
+
end
|
229
|
+
|
230
|
+
def sample!(separator=' ')
|
231
|
+
replace(sample(separator))
|
232
|
+
end
|
233
|
+
|
226
234
|
def shift(*patterns)
|
227
235
|
string = dup
|
228
236
|
patterns.flatten.each do |pattern|
|
@@ -235,6 +243,14 @@ class String
|
|
235
243
|
replace(shift(*patterns))
|
236
244
|
end
|
237
245
|
|
246
|
+
def shuffle(separator='')
|
247
|
+
split(separator).shuffle.join
|
248
|
+
end
|
249
|
+
|
250
|
+
def shuffle!(separator='')
|
251
|
+
replace(shuffle(separator))
|
252
|
+
end
|
253
|
+
|
238
254
|
def slugify
|
239
255
|
gsub(/[^\x00-\x7F]+/, '').
|
240
256
|
gsub(/[^\w_ \-]+/i, '').
|
data/lib/active_object/time.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_object
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Juan Gomez
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-08-
|
11
|
+
date: 2015-08-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|