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