augmented 0.2.1 → 0.2.2
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.
- checksums.yaml +5 -5
- data/README.md +1 -1
- data/augmented.gemspec +2 -2
- data/lib/augmented/arrays/tieable.rb +1 -1
- data/lib/augmented/objects/pickable.rb +2 -2
- data/lib/augmented/procs/rescuable.rb +3 -3
- data/lib/augmented/version.rb +1 -1
- data/test/augmented/arrays/tieable_test.rb +10 -10
- data/test/augmented/enumerators/indexing_test.rb +1 -1
- data/test/augmented/hashes/mappable_test.rb +4 -4
- data/test/augmented/hashes/polymorphable_test.rb +9 -9
- data/test/augmented/hashes/transformable_test.rb +11 -11
- data/test/augmented/modules/refined_test.rb +6 -4
- data/test/augmented/objects/iffy_test.rb +16 -16
- data/test/augmented/objects/pickable_test.rb +5 -5
- data/test/augmented/objects/tackable_test.rb +3 -3
- data/test/augmented/objects/tappable_test.rb +20 -20
- data/test/augmented/objects/thru_test.rb +18 -18
- data/test/augmented/procs/chainable_test.rb +1 -1
- data/test/augmented/procs/rescuable_test.rb +3 -3
- data/test/augmented/symbols/arguable_test.rb +6 -6
- data/test/augmented/symbols/comparing_test.rb +32 -32
- metadata +9 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: d8cd8a8566eb16186e26909a2c32597cb2cf8d0e12e2f6785a55fa2cc43992ab
|
4
|
+
data.tar.gz: b19a9fd510664c6dc52e99b98ebf0faa5bc70c8c061143b7c4e57addb84f261f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: de5a4fde6a7325acd6d90008bd4f7895da85a87b71691d4c7cc5cbb81b798576f46b34621cbd9f0857c6ae087ab7e684855d839b97885ad7f127118a00e92f88
|
7
|
+
data.tar.gz: f6185c773e2af7676f35e07d0732305bfc7c5882109a0248db835c77ebd41c361ee8946cc66dcdced3b3087fcfc14b8c6953299eea677e8b08019f70983323cd
|
data/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
`Augmented` is a library with some core-type utility methods that I frequently find myself copying across projects. It uses refinements instead of class modification for maximum control and an easy sleep at night.
|
4
4
|
|
5
|
-
Many of the methods in `Augmented` facilitate a more functional style of programming and cover a few tiny gaps in Ruby's solid functional support.
|
5
|
+
Many of the methods in `Augmented` facilitate a more functional style of programming and cover a few tiny gaps in Ruby's solid functional support.
|
6
6
|
|
7
7
|
|
8
8
|
## Installation
|
data/augmented.gemspec
CHANGED
@@ -18,6 +18,6 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_development_dependency "bundler", "~> 1
|
22
|
-
spec.add_development_dependency "rake", "
|
21
|
+
spec.add_development_dependency "bundler", "~> 2.1"
|
22
|
+
spec.add_development_dependency "rake", ">= 12.3.3"
|
23
23
|
end
|
@@ -7,7 +7,7 @@ module Augmented
|
|
7
7
|
raise ArgumentError, 'you must provide a non-nil tie object or block' if object.nil? && !block_given?
|
8
8
|
|
9
9
|
tie_function = block_given? ? block : proc{ object }
|
10
|
-
ties = self.each_cons(2).map
|
10
|
+
ties = self.each_cons(2).map(&tie_function)
|
11
11
|
|
12
12
|
self.zip(ties).flatten(1)[0...-1]
|
13
13
|
end
|
@@ -7,14 +7,14 @@ module Augmented
|
|
7
7
|
ensure_array = -> thing { thing.kind_of?(Array) ? thing : Array[thing] }
|
8
8
|
|
9
9
|
if self.respond_to? :each
|
10
|
-
self.map{ |thing| thing.pick
|
10
|
+
self.map{ |thing| thing.pick(*picks) }
|
11
11
|
else
|
12
12
|
picks.each_with_object({}) do |pick, result|
|
13
13
|
|
14
14
|
if pick.kind_of? Hash
|
15
15
|
|
16
16
|
pick.each do |attribute, nested_picks|
|
17
|
-
result[attribute] = self.__send__(attribute.to_sym).pick
|
17
|
+
result[attribute] = self.__send__(attribute.to_sym).pick(*ensure_array[nested_picks])
|
18
18
|
end
|
19
19
|
|
20
20
|
else
|
@@ -1,9 +1,9 @@
|
|
1
1
|
module Augmented
|
2
2
|
module Procs
|
3
3
|
module Rescuable
|
4
|
-
|
4
|
+
NOT_PROVIDED = Object.new
|
5
5
|
|
6
|
-
|
6
|
+
refine Proc do
|
7
7
|
|
8
8
|
def rescues exception_class, return_value = NOT_PROVIDED, &block
|
9
9
|
raise ArgumentError, 'must provide a return value or block' if return_value == NOT_PROVIDED && !block_given?
|
@@ -12,7 +12,7 @@ module Augmented
|
|
12
12
|
|
13
13
|
Proc.new do |*args|
|
14
14
|
begin
|
15
|
-
original.call
|
15
|
+
original.call(*args)
|
16
16
|
rescue exception_class => exception
|
17
17
|
block ? block.call(exception) : return_value
|
18
18
|
end
|
data/lib/augmented/version.rb
CHANGED
@@ -12,15 +12,15 @@ describe Augmented::Arrays::Tieable do
|
|
12
12
|
object = Object.new
|
13
13
|
weaved = %w(a b c).tie object
|
14
14
|
|
15
|
-
weaved
|
15
|
+
assert_equal weaved, ['a', object, 'b', object, 'c']
|
16
16
|
end
|
17
17
|
|
18
18
|
it 'returns an empty array if the original array is empty' do
|
19
|
-
[].tie(1)
|
19
|
+
assert_equal [].tie(1), []
|
20
20
|
end
|
21
21
|
|
22
22
|
it 'returns the original array if it has only one element' do
|
23
|
-
[42].tie(1)
|
23
|
+
assert_equal [42].tie(1), [42]
|
24
24
|
end
|
25
25
|
|
26
26
|
end
|
@@ -31,34 +31,34 @@ describe Augmented::Arrays::Tieable do
|
|
31
31
|
values = [10 ,20].each
|
32
32
|
weaved = %w(a b c).tie{ values.next }
|
33
33
|
|
34
|
-
weaved
|
34
|
+
assert_equal weaved, ['a', 10, 'b', 20, 'c']
|
35
35
|
end
|
36
36
|
|
37
37
|
it 'passes both neighbour values as arguments to the supplied block' do
|
38
38
|
weaved = [1, 5, 12].tie{ |a, b| a + b }
|
39
39
|
|
40
|
-
weaved
|
40
|
+
assert_equal weaved, [1, 6, 5, 17, 12]
|
41
41
|
end
|
42
42
|
|
43
43
|
it 'will weave nils if the block does not return anything else' do
|
44
44
|
weaved = [1, 2, 3].tie{}
|
45
45
|
|
46
|
-
weaved
|
46
|
+
assert_equal weaved, [1, nil, 2, nil, 3]
|
47
47
|
end
|
48
48
|
|
49
49
|
it 'returns an empty array if the original arrays is empty' do
|
50
|
-
[].tie{ 1 }
|
50
|
+
assert_equal [].tie{ 1 }, []
|
51
51
|
end
|
52
52
|
|
53
53
|
it 'returns the original array if it has only one element' do
|
54
|
-
[42].tie{ 1 }
|
54
|
+
assert_equal [42].tie{ 1 }, [42]
|
55
55
|
end
|
56
56
|
|
57
57
|
end
|
58
58
|
|
59
59
|
it 'raises an ArgumentError if not passed a non-nil object or block' do
|
60
|
-
|
61
|
-
|
60
|
+
assert_raises(ArgumentError){ [].tie }
|
61
|
+
assert_raises(ArgumentError){ [].tie nil }
|
62
62
|
end
|
63
63
|
|
64
64
|
end
|
@@ -7,7 +7,7 @@ describe Augmented::Enumerators::Indexing do
|
|
7
7
|
describe '#index_by' do
|
8
8
|
|
9
9
|
it 'returns a hash keyed by the results of invoking the criterion on every collection element and the values are the last element matching the criterion' do
|
10
|
-
['a', 'bbb', 'c', 'dd'].to_enum.index_by(&:length)
|
10
|
+
assert_equal ['a', 'bbb', 'c', 'dd'].to_enum.index_by(&:length), ({ 1 => 'c', 2 => 'dd', 3 => 'bbb' })
|
11
11
|
end
|
12
12
|
|
13
13
|
end
|
@@ -7,14 +7,14 @@ describe Augmented::Hashes::Mappable do
|
|
7
7
|
describe '#map_values' do
|
8
8
|
|
9
9
|
it 'returns a new hash with the same keys but transformed values' do
|
10
|
-
{ aa: 11, bb: 22 }.map_values{ |i| i * 3 }
|
10
|
+
assert_equal ({ aa: 11, bb: 22 }.map_values{ |i| i * 3 }), ({ aa: 33, bb: 66 })
|
11
11
|
end
|
12
12
|
|
13
13
|
it 'also provides the key and hash to the tranformer function as additional arguments' do
|
14
14
|
hash = { aa: 11, bb: 22 }
|
15
15
|
result = hash.map_values{ |i, key, h| [key, h.object_id] }
|
16
16
|
|
17
|
-
result.values
|
17
|
+
assert_equal result.values, [[:aa, hash.object_id], [:bb, hash.object_id]]
|
18
18
|
end
|
19
19
|
|
20
20
|
end
|
@@ -22,14 +22,14 @@ describe Augmented::Hashes::Mappable do
|
|
22
22
|
describe '#map_keys' do
|
23
23
|
|
24
24
|
it 'returns a new hash with the same values but transformed keys' do
|
25
|
-
{ aa: 11, bb: 22 }.map_keys{ |k| k.to_s[0] }
|
25
|
+
assert_equal ({ aa: 11, bb: 22 }.map_keys{ |k| k.to_s[0] }), ({ 'a' => 11, 'b' => 22 })
|
26
26
|
end
|
27
27
|
|
28
28
|
it 'also provides the value and hash to the tranformer function as additional arguments' do
|
29
29
|
hash = { aa: 11, bb: 22 }
|
30
30
|
result = hash.map_keys{ |k, value, h| [value, h.object_id] }
|
31
31
|
|
32
|
-
result.keys
|
32
|
+
assert_equal result.keys, [[11, hash.object_id], [22, hash.object_id]]
|
33
33
|
end
|
34
34
|
|
35
35
|
end
|
@@ -10,34 +10,34 @@ describe Augmented::Hashes::Polymorphable do
|
|
10
10
|
it 'returns an object of the class specified by the `:type` attribute, initialized with the hash itself' do
|
11
11
|
object = { type: 'OpenStruct', speak: 'meeehh' }.polymorph
|
12
12
|
|
13
|
-
|
14
|
-
object.speak
|
13
|
+
assert_instance_of OpenStruct, object
|
14
|
+
assert_equal object.speak, 'meeehh'
|
15
15
|
end
|
16
16
|
|
17
17
|
describe 'type attribute' do
|
18
18
|
|
19
19
|
it 'can also be a string key in the hash' do
|
20
|
-
{ 'type' => 'OpenStruct' }.polymorph
|
20
|
+
assert_instance_of OpenStruct, { 'type' => 'OpenStruct' }.polymorph
|
21
21
|
end
|
22
22
|
|
23
23
|
it 'can be an arbitrary attribute in the hash' do
|
24
|
-
{ lorem_ipsum: 'OpenStruct' }.polymorph(:lorem_ipsum)
|
25
|
-
{ 'lorem_ipsum' => 'OpenStruct' }.polymorph(:lorem_ipsum)
|
24
|
+
assert_instance_of OpenStruct, { lorem_ipsum: 'OpenStruct' }.polymorph(:lorem_ipsum)
|
25
|
+
assert_instance_of OpenStruct, { 'lorem_ipsum' => 'OpenStruct' }.polymorph(:lorem_ipsum)
|
26
26
|
end
|
27
27
|
|
28
28
|
it 'can be a class' do
|
29
|
-
{ type: OpenStruct }.polymorph()
|
29
|
+
assert_instance_of OpenStruct, { type: OpenStruct }.polymorph()
|
30
30
|
end
|
31
31
|
|
32
32
|
it 'can be a class passed directly to the method, ignoring the type attribute in the hash' do
|
33
|
-
{ type: 'TotallyIgnoredClass' }.polymorph(OpenStruct)
|
33
|
+
assert_instance_of OpenStruct, { type: 'TotallyIgnoredClass' }.polymorph(OpenStruct)
|
34
34
|
end
|
35
35
|
|
36
36
|
end
|
37
37
|
|
38
38
|
it 'raises an error if it cannot find a type class' do
|
39
|
-
|
40
|
-
|
39
|
+
assert_raises(ArgumentError){ {}.polymorph }
|
40
|
+
assert_raises(ArgumentError){ { type: nil }.polymorph }
|
41
41
|
end
|
42
42
|
|
43
43
|
end
|
@@ -12,8 +12,8 @@ describe Augmented::Hashes::Transformable do
|
|
12
12
|
|
13
13
|
new_hash = hash.transform thing1: -> i { i * 3 }, thing2: :random_method_name
|
14
14
|
|
15
|
-
new_hash[:thing1]
|
16
|
-
new_hash[:thing2]
|
15
|
+
assert_equal new_hash[:thing1], 300
|
16
|
+
assert_equal new_hash[:thing2], 900
|
17
17
|
|
18
18
|
|
19
19
|
# mutable version test:
|
@@ -21,8 +21,8 @@ describe Augmented::Hashes::Transformable do
|
|
21
21
|
|
22
22
|
hash.transform! thing1: -> i { i * 3 }, thing2: :random_method_name
|
23
23
|
|
24
|
-
hash[:thing1]
|
25
|
-
hash[:thing2]
|
24
|
+
assert_equal hash[:thing1], 300
|
25
|
+
assert_equal hash[:thing2], 900
|
26
26
|
end
|
27
27
|
|
28
28
|
it 'applies procables recursively when given a hash' do
|
@@ -30,7 +30,7 @@ describe Augmented::Hashes::Transformable do
|
|
30
30
|
|
31
31
|
new_hash = hash.transform({ a: { b: { c: -> i { i * 3 } } } })
|
32
32
|
|
33
|
-
new_hash[:a][:b][:c]
|
33
|
+
assert_equal new_hash[:a][:b][:c], 300
|
34
34
|
|
35
35
|
|
36
36
|
# mutable version test:
|
@@ -38,7 +38,7 @@ describe Augmented::Hashes::Transformable do
|
|
38
38
|
|
39
39
|
hash.transform!({ a: { b: { c: -> i { i * 3 } } } })
|
40
40
|
|
41
|
-
hash[:a][:b][:c]
|
41
|
+
assert_equal hash[:a][:b][:c], 300
|
42
42
|
end
|
43
43
|
|
44
44
|
it 'applies procables to all elements of a collection if a value is iterable (iterable MUST be a collection of hashes)' do
|
@@ -46,7 +46,7 @@ describe Augmented::Hashes::Transformable do
|
|
46
46
|
|
47
47
|
new_hash = hash.transform(a: { my_value: -> i { i * 3 } })
|
48
48
|
|
49
|
-
new_hash[:a]
|
49
|
+
assert_equal new_hash[:a], [ { my_value: 30 }, { my_value: 60 } ]
|
50
50
|
|
51
51
|
|
52
52
|
# mutable version test:
|
@@ -54,7 +54,7 @@ describe Augmented::Hashes::Transformable do
|
|
54
54
|
|
55
55
|
hash.transform!(a: { my_value: -> i { i * 3 } })
|
56
56
|
|
57
|
-
hash[:a]
|
57
|
+
assert_equal hash[:a], [ { my_value: 30 }, { my_value: 60 } ]
|
58
58
|
end
|
59
59
|
|
60
60
|
it 'can apply several procables to a value, supplied in an array, executed from left to right' do
|
@@ -65,7 +65,7 @@ describe Augmented::Hashes::Transformable do
|
|
65
65
|
|
66
66
|
new_hash = hash.transform a: [ :to_i, add_ten, double ]
|
67
67
|
|
68
|
-
new_hash[:a]
|
68
|
+
assert_equal new_hash[:a], 24
|
69
69
|
|
70
70
|
|
71
71
|
# mutable version test:
|
@@ -73,14 +73,14 @@ describe Augmented::Hashes::Transformable do
|
|
73
73
|
|
74
74
|
hash.transform! a: [ :to_i, add_ten, double ]
|
75
75
|
|
76
|
-
hash[:a]
|
76
|
+
assert_equal hash[:a], 24
|
77
77
|
end
|
78
78
|
|
79
79
|
it 'returns itself (mutable version only)' do
|
80
80
|
hash = {}
|
81
81
|
same_hash = hash.transform! Hash.new
|
82
82
|
|
83
|
-
same_hash.object_id
|
83
|
+
assert_equal same_hash.object_id, hash.object_id
|
84
84
|
end
|
85
85
|
|
86
86
|
end
|
@@ -9,18 +9,20 @@ describe Augmented::Modules::Refined do
|
|
9
9
|
before do
|
10
10
|
class TesterClass
|
11
11
|
using refined String,
|
12
|
-
as_phrase: -> { self.capitalize.gsub
|
12
|
+
as_phrase: -> { self.capitalize.gsub(/\.?\z/, '.') },
|
13
13
|
fill: -> filler { (filler * self.length)[0..length] }
|
14
14
|
|
15
15
|
def do_test
|
16
|
-
|
17
|
-
|
16
|
+
[
|
17
|
+
'hello world'.as_phrase == 'Hello world.',
|
18
|
+
'hello world'.fill('!') == '!!!!!!!!!!!',
|
19
|
+
]
|
18
20
|
end
|
19
21
|
end
|
20
22
|
end
|
21
23
|
|
22
24
|
it 'creates a refinement module on the fly for the given class, with the procs supplied' do
|
23
|
-
TesterClass.new.do_test
|
25
|
+
assert_equal TesterClass.new.do_test, [true, true]
|
24
26
|
end
|
25
27
|
|
26
28
|
end
|
@@ -10,18 +10,18 @@ describe Augmented::Objects::Iffy do
|
|
10
10
|
subject = 'abc'
|
11
11
|
condition = -> subj { subj.length == 3 }
|
12
12
|
|
13
|
-
subject.if(true)
|
14
|
-
subject.if(Object.new)
|
15
|
-
subject.if(&condition)
|
13
|
+
assert_same subject.if(true), subject
|
14
|
+
assert_same subject.if(Object.new), subject
|
15
|
+
assert_same subject.if(&condition), subject
|
16
16
|
end
|
17
17
|
|
18
18
|
it 'returns nil if the condition evaluates to falsy' do
|
19
19
|
subject = 'abc'
|
20
20
|
condition = -> subj { subj.length == 0 }
|
21
21
|
|
22
|
-
subject.if(false)
|
23
|
-
subject.if(nil)
|
24
|
-
subject.if(&condition)
|
22
|
+
assert_nil subject.if(false)
|
23
|
+
assert_nil subject.if(nil)
|
24
|
+
assert_nil subject.if(&condition)
|
25
25
|
end
|
26
26
|
|
27
27
|
end
|
@@ -32,18 +32,18 @@ describe Augmented::Objects::Iffy do
|
|
32
32
|
subject = 'abc'
|
33
33
|
condition = -> subj { subj.length == 0 }
|
34
34
|
|
35
|
-
subject.unless(false)
|
36
|
-
subject.unless(nil)
|
37
|
-
subject.unless(&condition)
|
35
|
+
assert_same subject.unless(false), subject
|
36
|
+
assert_same subject.unless(nil), subject
|
37
|
+
assert_same subject.unless(&condition), subject
|
38
38
|
end
|
39
39
|
|
40
40
|
it 'returns nil if the condition evaluates to truish' do
|
41
41
|
subject = 'abc'
|
42
42
|
condition = -> subj { subj.length == 3 }
|
43
43
|
|
44
|
-
subject.unless(true)
|
45
|
-
subject.unless(Object.new)
|
46
|
-
subject.unless(&condition)
|
44
|
+
assert_nil subject.unless(true)
|
45
|
+
assert_nil subject.unless(Object.new)
|
46
|
+
assert_nil subject.unless(&condition)
|
47
47
|
end
|
48
48
|
|
49
49
|
end
|
@@ -53,15 +53,15 @@ describe Augmented::Objects::Iffy do
|
|
53
53
|
it 'returns the alternative if the object is falsy' do
|
54
54
|
alternative = Object.new
|
55
55
|
|
56
|
-
false.else(alternative)
|
57
|
-
nil.else(alternative)
|
56
|
+
assert_same false.else(alternative), alternative
|
57
|
+
assert_same nil.else(alternative), alternative
|
58
58
|
end
|
59
59
|
|
60
60
|
it 'returns the object if the object is truish' do
|
61
61
|
subject = Object.new
|
62
62
|
|
63
|
-
true.else(123)
|
64
|
-
subject.else(123)
|
63
|
+
assert_same true.else(123), true
|
64
|
+
assert_same subject.else(123), subject
|
65
65
|
end
|
66
66
|
|
67
67
|
end
|
@@ -10,29 +10,29 @@ describe Augmented::Objects::Pickable do
|
|
10
10
|
it 'returns a hash with the results of invoking the list of picks in the target' do
|
11
11
|
target = OpenStruct.new aaa: 111, bbb: 222, ccc: 333
|
12
12
|
|
13
|
-
target.pick(:aaa, :ccc)
|
13
|
+
assert_equal target.pick(:aaa, :ccc), { aaa: 111, ccc: 333 }
|
14
14
|
end
|
15
15
|
|
16
16
|
it 'returns the result of invoking `pick` on every element of an enumerable target' do
|
17
17
|
target = [ OpenStruct.new(val: 11), OpenStruct.new(val: 22), OpenStruct.new(val: 33) ]
|
18
18
|
|
19
|
-
target.pick(:val)
|
19
|
+
assert_equal target.pick(:val), [{val: 11}, {val: 22}, {val: 33}]
|
20
20
|
end
|
21
21
|
|
22
22
|
it 'applies picks recursively when provided with hashes' do
|
23
23
|
target = OpenStruct.new(aa: (OpenStruct.new bb: (OpenStruct.new cc: 33)))
|
24
24
|
|
25
|
-
target.pick(aa: { bb: :cc })
|
25
|
+
assert_equal target.pick(aa: { bb: :cc }), { aa: { bb: { cc: 33 } } }
|
26
26
|
|
27
27
|
target = OpenStruct.new(dd: OpenStruct.new(ee: 55), ff: OpenStruct.new(gg: 77))
|
28
28
|
|
29
|
-
target.pick(dd: :ee, ff: :gg)
|
29
|
+
assert_equal target.pick(dd: :ee, ff: :gg), { dd: { ee: 55 }, ff: { gg: 77 } }
|
30
30
|
end
|
31
31
|
|
32
32
|
it 'allows you to specify pick lists with arrays when picking recursively' do
|
33
33
|
target = OpenStruct.new aa: (OpenStruct.new bb: 22, cc: (OpenStruct.new dd: 44, ee: 55))
|
34
34
|
|
35
|
-
target.pick(aa: [:bb, cc: [:dd, :ee]])
|
35
|
+
assert_equal target.pick(aa: [:bb, cc: [:dd, :ee]]), { aa: { bb: 22, cc: { dd: 44, ee: 55 } } }
|
36
36
|
end
|
37
37
|
|
38
38
|
end
|
@@ -11,13 +11,13 @@ describe Augmented::Objects::Tackable do
|
|
11
11
|
|
12
12
|
obj.tack lorem: 123, ipsum: -> { self }
|
13
13
|
|
14
|
-
obj.lorem
|
15
|
-
obj.ipsum.object_id
|
14
|
+
assert_equal obj.lorem, 123
|
15
|
+
assert_equal obj.ipsum.object_id, obj.object_id
|
16
16
|
end
|
17
17
|
|
18
18
|
it 'returns self' do
|
19
19
|
obj = Object.new
|
20
|
-
obj.tack.object_id
|
20
|
+
assert_equal obj.tack.object_id, obj.object_id
|
21
21
|
end
|
22
22
|
|
23
23
|
end
|
@@ -12,11 +12,11 @@ describe Augmented::Objects::Tappable do
|
|
12
12
|
|
13
13
|
subject.tap_if(true) { |subj| test = subj.upcase }
|
14
14
|
|
15
|
-
test
|
15
|
+
assert_equal test, 'ABC'
|
16
16
|
|
17
17
|
subject.tap_if(Object.new) { |subj| test = subj.reverse }
|
18
18
|
|
19
|
-
test
|
19
|
+
assert_equal test, 'cba'
|
20
20
|
end
|
21
21
|
|
22
22
|
it 'does not execute block if condition is falsy' do
|
@@ -25,11 +25,11 @@ describe Augmented::Objects::Tappable do
|
|
25
25
|
|
26
26
|
subject.tap_if(false) { |subj| test = subj.upcase }
|
27
27
|
|
28
|
-
test
|
28
|
+
assert_nil test
|
29
29
|
|
30
30
|
subject.tap_if(nil) { |subj| test = subj.upcase }
|
31
31
|
|
32
|
-
test
|
32
|
+
assert_nil test
|
33
33
|
end
|
34
34
|
|
35
35
|
it 'executes block if condition evaluates to truish' do
|
@@ -40,11 +40,11 @@ describe Augmented::Objects::Tappable do
|
|
40
40
|
|
41
41
|
subject.tap_if(condition_1) { |subj| test = subj.upcase }
|
42
42
|
|
43
|
-
test
|
43
|
+
assert_equal test, 'ABC'
|
44
44
|
|
45
45
|
subject.tap_if(condition_2) { |subj| test = subj.reverse }
|
46
46
|
|
47
|
-
test
|
47
|
+
assert_equal test, 'cba'
|
48
48
|
end
|
49
49
|
|
50
50
|
it 'does not execute block if condition evaluates to falsy' do
|
@@ -55,18 +55,18 @@ describe Augmented::Objects::Tappable do
|
|
55
55
|
|
56
56
|
subject.tap_if(condition_1) { |subj| test = subj.upcase }
|
57
57
|
|
58
|
-
test
|
58
|
+
assert_nil test
|
59
59
|
|
60
60
|
subject.tap_if(condition_2) { |subj| test = subj.upcase }
|
61
61
|
|
62
|
-
test
|
62
|
+
assert_nil test
|
63
63
|
end
|
64
64
|
|
65
65
|
it 'always returns the object' do
|
66
66
|
subject = 'abc'
|
67
67
|
|
68
|
-
subject.tap_if(true){}
|
69
|
-
subject.tap_if(false){}
|
68
|
+
assert_same subject.tap_if(true){}, subject
|
69
|
+
assert_same subject.tap_if(false){}, subject
|
70
70
|
end
|
71
71
|
|
72
72
|
end
|
@@ -79,11 +79,11 @@ describe Augmented::Objects::Tappable do
|
|
79
79
|
|
80
80
|
subject.tap_unless(false) { |subj| test = subj.upcase }
|
81
81
|
|
82
|
-
test
|
82
|
+
assert_equal test, 'ABC'
|
83
83
|
|
84
84
|
subject.tap_unless(nil) { |subj| test = subj.reverse }
|
85
85
|
|
86
|
-
test
|
86
|
+
assert_equal test, 'cba'
|
87
87
|
end
|
88
88
|
|
89
89
|
it 'does not execute block if condition is truish' do
|
@@ -92,11 +92,11 @@ describe Augmented::Objects::Tappable do
|
|
92
92
|
|
93
93
|
subject.tap_unless(true) { |subj| test = subj.upcase }
|
94
94
|
|
95
|
-
test
|
95
|
+
assert_nil test
|
96
96
|
|
97
97
|
subject.tap_unless(Object.new) { |subj| test = subj.upcase }
|
98
98
|
|
99
|
-
test
|
99
|
+
assert_nil test
|
100
100
|
end
|
101
101
|
|
102
102
|
it 'executes block if condition evaluates to falsy' do
|
@@ -107,11 +107,11 @@ describe Augmented::Objects::Tappable do
|
|
107
107
|
|
108
108
|
subject.tap_unless(condition_1) { |subj| test = subj.upcase }
|
109
109
|
|
110
|
-
test
|
110
|
+
assert_equal test, 'ABC'
|
111
111
|
|
112
112
|
subject.tap_unless(condition_2) { |subj| test = subj.reverse }
|
113
113
|
|
114
|
-
test
|
114
|
+
assert_equal test, 'cba'
|
115
115
|
end
|
116
116
|
|
117
117
|
it 'does not execute block if condition evaluates to truish' do
|
@@ -122,18 +122,18 @@ describe Augmented::Objects::Tappable do
|
|
122
122
|
|
123
123
|
subject.tap_unless(condition_1) { |subj| test = subj.upcase }
|
124
124
|
|
125
|
-
test
|
125
|
+
assert_nil test
|
126
126
|
|
127
127
|
subject.tap_unless(condition_2) { |subj| test = subj.upcase }
|
128
128
|
|
129
|
-
test
|
129
|
+
assert_nil test
|
130
130
|
end
|
131
131
|
|
132
132
|
it 'always returns the object' do
|
133
133
|
subject = 'abc'
|
134
134
|
|
135
|
-
subject.tap_unless(true){}
|
136
|
-
subject.tap_unless(false){}
|
135
|
+
assert_same subject.tap_unless(true){}, subject
|
136
|
+
assert_same subject.tap_unless(false){}, subject
|
137
137
|
end
|
138
138
|
|
139
139
|
end
|
@@ -9,12 +9,12 @@ describe Augmented::Objects::Thru do
|
|
9
9
|
it 'returns the result of applying the given function to the object' do
|
10
10
|
plus_10 = -> i { i + 10 }
|
11
11
|
|
12
|
-
5.thru(&plus_10)
|
12
|
+
assert_equal 5.thru(&plus_10), 15
|
13
13
|
end
|
14
14
|
|
15
15
|
it 'returns the object untouched if called without arguments' do
|
16
16
|
obj = Object.new
|
17
|
-
obj.thru.object_id
|
17
|
+
assert_equal obj.thru.object_id, obj.object_id
|
18
18
|
end
|
19
19
|
|
20
20
|
end
|
@@ -24,8 +24,8 @@ describe Augmented::Objects::Thru do
|
|
24
24
|
it 'applies the given function to the object if the condition is truish' do
|
25
25
|
plus_10 = -> i { i + 10 }
|
26
26
|
|
27
|
-
5.thru_if(true, &plus_10)
|
28
|
-
5.thru_if(Object.new, &plus_10)
|
27
|
+
assert_equal 5.thru_if(true, &plus_10), 15
|
28
|
+
assert_equal 5.thru_if(Object.new, &plus_10), 15
|
29
29
|
end
|
30
30
|
|
31
31
|
it 'applies the given function to the object if the condition evaluates to truish' do
|
@@ -34,15 +34,15 @@ describe Augmented::Objects::Thru do
|
|
34
34
|
condition_1 = -> i { i == 5 }
|
35
35
|
condition_2 = -> i { i.to_s }
|
36
36
|
|
37
|
-
5.thru_if(condition_1, &plus_10)
|
38
|
-
5.thru_if(condition_2, &plus_10)
|
37
|
+
assert_equal 5.thru_if(condition_1, &plus_10), 15
|
38
|
+
assert_equal 5.thru_if(condition_2, &plus_10), 15
|
39
39
|
end
|
40
40
|
|
41
41
|
it 'returns the object without applying the function if the condition is falsy' do
|
42
42
|
plus_10 = -> i { i + 10 }
|
43
43
|
|
44
|
-
5.thru_if(false, &plus_10)
|
45
|
-
5.thru_if(nil, &plus_10)
|
44
|
+
assert_equal 5.thru_if(false, &plus_10), 5
|
45
|
+
assert_equal 5.thru_if(nil, &plus_10), 5
|
46
46
|
end
|
47
47
|
|
48
48
|
it 'returns the object without applying the function if the condition evaluates to falsy' do
|
@@ -51,8 +51,8 @@ describe Augmented::Objects::Thru do
|
|
51
51
|
condition_1 = -> i { i == 10 }
|
52
52
|
condition_2 = -> i { nil }
|
53
53
|
|
54
|
-
5.thru_if(condition_1, &plus_10)
|
55
|
-
5.thru_if(condition_2, &plus_10)
|
54
|
+
assert_equal 5.thru_if(condition_1, &plus_10), 5
|
55
|
+
assert_equal 5.thru_if(condition_2, &plus_10), 5
|
56
56
|
end
|
57
57
|
|
58
58
|
end
|
@@ -62,8 +62,8 @@ describe Augmented::Objects::Thru do
|
|
62
62
|
it 'applies the given function to the object if the condition is falsy' do
|
63
63
|
plus_10 = -> i { i + 10 }
|
64
64
|
|
65
|
-
5.thru_unless(false, &plus_10)
|
66
|
-
5.thru_unless(nil, &plus_10)
|
65
|
+
assert_equal 5.thru_unless(false, &plus_10), 15
|
66
|
+
assert_equal 5.thru_unless(nil, &plus_10), 15
|
67
67
|
end
|
68
68
|
|
69
69
|
it 'applies the given function to the object if the condition evaluates to falsy' do
|
@@ -72,15 +72,15 @@ describe Augmented::Objects::Thru do
|
|
72
72
|
condition_1 = -> i { i == 10 }
|
73
73
|
condition_2 = -> i { nil }
|
74
74
|
|
75
|
-
5.thru_unless(condition_1, &plus_10)
|
76
|
-
5.thru_unless(condition_2, &plus_10)
|
75
|
+
assert_equal 5.thru_unless(condition_1, &plus_10), 15
|
76
|
+
assert_equal 5.thru_unless(condition_2, &plus_10), 15
|
77
77
|
end
|
78
78
|
|
79
79
|
it 'returns the object without applying the function if the condition is truish' do
|
80
80
|
plus_10 = -> i { i + 10 }
|
81
81
|
|
82
|
-
5.thru_unless(true, &plus_10)
|
83
|
-
5.thru_unless(Object.new, &plus_10)
|
82
|
+
assert_equal 5.thru_unless(true, &plus_10), 5
|
83
|
+
assert_equal 5.thru_unless(Object.new, &plus_10), 5
|
84
84
|
end
|
85
85
|
|
86
86
|
it 'returns the object without applying the function if the condition evaluates to truish' do
|
@@ -89,8 +89,8 @@ describe Augmented::Objects::Thru do
|
|
89
89
|
condition_1 = -> i { i == 5 }
|
90
90
|
condition_2 = -> i { i.to_s }
|
91
91
|
|
92
|
-
5.thru_unless(condition_1, &plus_10)
|
93
|
-
5.thru_unless(condition_2, &plus_10)
|
92
|
+
assert_equal 5.thru_unless(condition_1, &plus_10), 5
|
93
|
+
assert_equal 5.thru_unless(condition_2, &plus_10), 5
|
94
94
|
end
|
95
95
|
|
96
96
|
end
|
@@ -12,7 +12,7 @@ describe Augmented::Procs::Rescuable do
|
|
12
12
|
unsafe_proc = -> { raise specific_exception_class }
|
13
13
|
rescued_proc = unsafe_proc.rescues specific_exception_class, 42
|
14
14
|
|
15
|
-
rescued_proc.call
|
15
|
+
assert_equal rescued_proc.call, 42
|
16
16
|
end
|
17
17
|
|
18
18
|
it 'returns a proc which returns the result of the provided block if the expected exception is raised' do
|
@@ -21,7 +21,7 @@ describe Augmented::Procs::Rescuable do
|
|
21
21
|
unsafe_proc = -> { raise specific_exception_class }
|
22
22
|
rescued_proc = unsafe_proc.rescues(specific_exception_class){ |exception| exception }
|
23
23
|
|
24
|
-
rescued_proc.call
|
24
|
+
assert_instance_of specific_exception_class, rescued_proc.call
|
25
25
|
end
|
26
26
|
|
27
27
|
it 'returns a proc which lets exceptions other than the expected one to be raised' do
|
@@ -30,7 +30,7 @@ describe Augmented::Procs::Rescuable do
|
|
30
30
|
unsafe_proc = -> { raise RuntimeError }
|
31
31
|
rescued_proc = unsafe_proc.rescues specific_exception_class, 42
|
32
32
|
|
33
|
-
rescued_proc.
|
33
|
+
assert_raises(RuntimeError){ rescued_proc.call }
|
34
34
|
end
|
35
35
|
|
36
36
|
end
|
@@ -23,17 +23,17 @@ describe Augmented::Symbols::Arguable do
|
|
23
23
|
end
|
24
24
|
|
25
25
|
it 'returns a function that calls the method named <symbol> while also passing the arguments supplied' do
|
26
|
-
:add.with(9).call(@eleven)
|
27
|
-
:add_many.with(3, 6, 10, 20, 50).call(@eleven)
|
26
|
+
assert_equal :add.with(9).call(@eleven), 20
|
27
|
+
assert_equal :add_many.with(3, 6, 10, 20, 50).call(@eleven), 100
|
28
28
|
end
|
29
29
|
|
30
30
|
describe 'the returned function' do
|
31
31
|
|
32
32
|
it "it preserves Symbol's `to_proc` behavior of passing extra arguments, if supplied" do
|
33
|
-
:add.to_proc.call(@eleven, 4)
|
34
|
-
:add.with().call(@eleven, 4)
|
33
|
+
assert_equal :add.to_proc.call(@eleven, 4), 15
|
34
|
+
assert_equal :add.with().call(@eleven, 4), 15
|
35
35
|
|
36
|
-
:add_many.with(10, 20).call(@eleven, 4, 5)
|
36
|
+
assert_equal :add_many.with(10, 20).call(@eleven, 4, 5), 50
|
37
37
|
end
|
38
38
|
|
39
39
|
it 'passes along the block supplied to `with`, if any' do
|
@@ -42,7 +42,7 @@ describe Augmented::Symbols::Arguable do
|
|
42
42
|
|
43
43
|
:do_whatever.with(&set_result).call(@eleven)
|
44
44
|
|
45
|
-
result
|
45
|
+
assert_equal result, 11
|
46
46
|
end
|
47
47
|
|
48
48
|
end
|
@@ -16,15 +16,15 @@ describe Augmented::Symbols::Comparing do
|
|
16
16
|
it 'returns a function that sends <symbol> to two objects and compares the results with `==`' do
|
17
17
|
comparator = :lorem_ipsum.eq
|
18
18
|
|
19
|
-
comparator.call(thing_A, thing_B)
|
20
|
-
comparator.call(thing_A, thing_C)
|
19
|
+
assert_equal comparator.call(thing_A, thing_B), true
|
20
|
+
assert_equal comparator.call(thing_A, thing_C), false
|
21
21
|
end
|
22
22
|
|
23
23
|
it 'if you give it a value, it returns a function that sends <symbol> to an object and compares the result to a given value using `==`' do
|
24
24
|
comparator = :lorem_ipsum.eq(123)
|
25
25
|
|
26
|
-
comparator.call(thing_A)
|
27
|
-
comparator.call(thing_C)
|
26
|
+
assert_equal comparator.call(thing_A), true
|
27
|
+
assert_equal comparator.call(thing_C), false
|
28
28
|
end
|
29
29
|
|
30
30
|
end
|
@@ -34,15 +34,15 @@ describe Augmented::Symbols::Comparing do
|
|
34
34
|
it 'returns a function that sends <symbol> to two objects and compares the results with `!=`' do
|
35
35
|
comparator = :lorem_ipsum.neq
|
36
36
|
|
37
|
-
comparator.call(thing_A, thing_B)
|
38
|
-
comparator.call(thing_A, thing_C)
|
37
|
+
assert_equal comparator.call(thing_A, thing_B), false
|
38
|
+
assert_equal comparator.call(thing_A, thing_C), true
|
39
39
|
end
|
40
40
|
|
41
41
|
it 'if you give it a value, it returns a function that sends <symbol> to an object and compares the result to a given value using `!=`' do
|
42
42
|
comparator = :lorem_ipsum.neq(123)
|
43
43
|
|
44
|
-
comparator.call(thing_A)
|
45
|
-
comparator.call(thing_C)
|
44
|
+
assert_equal comparator.call(thing_A), false
|
45
|
+
assert_equal comparator.call(thing_C), true
|
46
46
|
end
|
47
47
|
|
48
48
|
end
|
@@ -52,17 +52,17 @@ describe Augmented::Symbols::Comparing do
|
|
52
52
|
it 'returns a function that sends <symbol> to two objects and compares the results with `<`' do
|
53
53
|
comparator = :lorem_ipsum.lt
|
54
54
|
|
55
|
-
comparator.call(thing_A, thing_B)
|
56
|
-
comparator.call(thing_A, thing_C)
|
57
|
-
comparator.call(thing_C, thing_B)
|
55
|
+
assert_equal comparator.call(thing_A, thing_B), false
|
56
|
+
assert_equal comparator.call(thing_A, thing_C), true
|
57
|
+
assert_equal comparator.call(thing_C, thing_B), false
|
58
58
|
end
|
59
59
|
|
60
60
|
it 'if you give it a value, it returns a function that sends <symbol> to an object and compares the result to a given value using `<`' do
|
61
61
|
comparator = :lorem_ipsum.lt(123)
|
62
62
|
|
63
|
-
comparator.call(thing_A)
|
64
|
-
comparator.call(thing_C)
|
65
|
-
comparator.call(thing_D)
|
63
|
+
assert_equal comparator.call(thing_A), false
|
64
|
+
assert_equal comparator.call(thing_C), false
|
65
|
+
assert_equal comparator.call(thing_D), true
|
66
66
|
end
|
67
67
|
|
68
68
|
end
|
@@ -72,17 +72,17 @@ describe Augmented::Symbols::Comparing do
|
|
72
72
|
it 'returns a function that sends <symbol> to two objects and compares the results with `<=`' do
|
73
73
|
comparator = :lorem_ipsum.lte
|
74
74
|
|
75
|
-
comparator.call(thing_A, thing_B)
|
76
|
-
comparator.call(thing_A, thing_C)
|
77
|
-
comparator.call(thing_C, thing_B)
|
75
|
+
assert_equal comparator.call(thing_A, thing_B), true
|
76
|
+
assert_equal comparator.call(thing_A, thing_C), true
|
77
|
+
assert_equal comparator.call(thing_C, thing_B), false
|
78
78
|
end
|
79
79
|
|
80
80
|
it 'if you give it a value, it returns a function that sends <symbol> to an object and compares the result to a given value using `<=`' do
|
81
81
|
comparator = :lorem_ipsum.lte(123)
|
82
82
|
|
83
|
-
comparator.call(thing_A)
|
84
|
-
comparator.call(thing_C)
|
85
|
-
comparator.call(thing_D)
|
83
|
+
assert_equal comparator.call(thing_A), true
|
84
|
+
assert_equal comparator.call(thing_C), false
|
85
|
+
assert_equal comparator.call(thing_D), true
|
86
86
|
end
|
87
87
|
|
88
88
|
end
|
@@ -92,17 +92,17 @@ describe Augmented::Symbols::Comparing do
|
|
92
92
|
it 'returns a function that sends <symbol> to two objects and compares the results with `>`' do
|
93
93
|
comparator = :lorem_ipsum.gt
|
94
94
|
|
95
|
-
comparator.call(thing_A, thing_B)
|
96
|
-
comparator.call(thing_A, thing_C)
|
97
|
-
comparator.call(thing_C, thing_B)
|
95
|
+
assert_equal comparator.call(thing_A, thing_B), false
|
96
|
+
assert_equal comparator.call(thing_A, thing_C), false
|
97
|
+
assert_equal comparator.call(thing_C, thing_B), true
|
98
98
|
end
|
99
99
|
|
100
100
|
it 'if you give it a value, it returns a function that sends <symbol> to an object and compares the result to a given value using `>`' do
|
101
101
|
comparator = :lorem_ipsum.gt(123)
|
102
102
|
|
103
|
-
comparator.call(thing_A)
|
104
|
-
comparator.call(thing_C)
|
105
|
-
comparator.call(thing_D)
|
103
|
+
assert_equal comparator.call(thing_A), false
|
104
|
+
assert_equal comparator.call(thing_C), true
|
105
|
+
assert_equal comparator.call(thing_D), false
|
106
106
|
end
|
107
107
|
|
108
108
|
end
|
@@ -112,17 +112,17 @@ describe Augmented::Symbols::Comparing do
|
|
112
112
|
it 'returns a function that sends <symbol> to two objects and compares the results with `>=`' do
|
113
113
|
comparator = :lorem_ipsum.gte
|
114
114
|
|
115
|
-
comparator.call(thing_A, thing_B)
|
116
|
-
comparator.call(thing_A, thing_C)
|
117
|
-
comparator.call(thing_C, thing_B)
|
115
|
+
assert_equal comparator.call(thing_A, thing_B), true
|
116
|
+
assert_equal comparator.call(thing_A, thing_C), false
|
117
|
+
assert_equal comparator.call(thing_C, thing_B), true
|
118
118
|
end
|
119
119
|
|
120
120
|
it 'if you give it a value, it returns a function that sends <symbol> to an object and compares the result to a given value using `>=`' do
|
121
121
|
comparator = :lorem_ipsum.gte(123)
|
122
122
|
|
123
|
-
comparator.call(thing_A)
|
124
|
-
comparator.call(thing_C)
|
125
|
-
comparator.call(thing_D)
|
123
|
+
assert_equal comparator.call(thing_A), true
|
124
|
+
assert_equal comparator.call(thing_C), true
|
125
|
+
assert_equal comparator.call(thing_D), false
|
126
126
|
end
|
127
127
|
|
128
128
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: augmented
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- bruno
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-01-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1
|
19
|
+
version: '2.1'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '1
|
26
|
+
version: '2.1'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 12.3.3
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 12.3.3
|
41
41
|
description: Adds a few useful extra methods to some of Ruby's core types, available
|
42
42
|
as refinements.
|
43
43
|
email:
|
@@ -110,8 +110,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
110
110
|
- !ruby/object:Gem::Version
|
111
111
|
version: '0'
|
112
112
|
requirements: []
|
113
|
-
|
114
|
-
rubygems_version: 2.5.1
|
113
|
+
rubygems_version: 3.1.4
|
115
114
|
signing_key:
|
116
115
|
specification_version: 4
|
117
116
|
summary: Useful extra methods for some Ruby core types.
|