nrser 0.0.30 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/nrser.rb +56 -12
- data/lib/nrser/collection.rb +4 -7
- data/lib/nrser/ext.rb +5 -0
- data/lib/nrser/{refinements → ext}/enumerable.rb +11 -9
- data/lib/nrser/ext/pathname.rb +74 -0
- data/lib/nrser/{refinements → ext}/tree.rb +2 -26
- data/lib/nrser/functions.rb +18 -0
- data/lib/nrser/{array.rb → functions/array.rb} +2 -3
- data/lib/nrser/{binding.rb → functions/binding.rb} +0 -2
- data/lib/nrser/functions/enumerable.rb +355 -0
- data/lib/nrser/functions/enumerable/find_all_map.rb +33 -0
- data/lib/nrser/functions/enumerable/find_map.rb +53 -0
- data/lib/nrser/functions/exception.rb +17 -0
- data/lib/nrser/{hash.rb → functions/hash.rb} +0 -0
- data/lib/nrser/functions/hash/bury.rb +147 -0
- data/lib/nrser/{hash → functions/hash}/deep_merge.rb +5 -5
- data/lib/nrser/{hash → functions/hash}/except_keys.rb +2 -0
- data/lib/nrser/{hash → functions/hash}/guess_label_key_type.rb +3 -1
- data/lib/nrser/{hash → functions/hash}/slice_keys.rb +3 -1
- data/lib/nrser/{hash → functions/hash}/stringify_keys.rb +2 -0
- data/lib/nrser/{hash → functions/hash}/symbolize_keys.rb +3 -1
- data/lib/nrser/{hash → functions/hash}/transform_keys.rb +3 -1
- data/lib/nrser/functions/merge_by.rb +29 -0
- data/lib/nrser/{object.rb → functions/object.rb} +0 -0
- data/lib/nrser/{object → functions/object}/as_array.rb +2 -0
- data/lib/nrser/{object → functions/object}/as_hash.rb +7 -5
- data/lib/nrser/{object → functions/object}/truthy.rb +46 -7
- data/lib/nrser/{open_struct.rb → functions/open_struct.rb} +0 -0
- data/lib/nrser/functions/path.rb +150 -0
- data/lib/nrser/{proc.rb → functions/proc.rb} +1 -22
- data/lib/nrser/functions/string.rb +297 -0
- data/lib/nrser/functions/string/looks_like.rb +44 -0
- data/lib/nrser/{text.rb → functions/text.rb} +0 -0
- data/lib/nrser/{text → functions/text}/indentation.rb +2 -16
- data/lib/nrser/{text → functions/text}/lines.rb +1 -2
- data/lib/nrser/{text → functions/text}/word_wrap.rb +2 -4
- data/lib/nrser/{tree.rb → functions/tree.rb} +0 -0
- data/lib/nrser/{tree → functions/tree}/each_branch.rb +6 -7
- data/lib/nrser/functions/tree/leaves.rb +92 -0
- data/lib/nrser/{tree → functions/tree}/map_branches.rb +31 -32
- data/lib/nrser/functions/tree/map_leaves.rb +56 -0
- data/lib/nrser/{tree → functions/tree}/map_tree.rb +9 -20
- data/lib/nrser/{tree → functions/tree}/transform.rb +0 -10
- data/lib/nrser/logger.rb +9 -10
- data/lib/nrser/message.rb +3 -7
- data/lib/nrser/meta.rb +2 -0
- data/lib/nrser/meta/class_attrs.rb +3 -9
- data/lib/nrser/meta/props.rb +19 -19
- data/lib/nrser/meta/props/base.rb +4 -10
- data/lib/nrser/meta/props/prop.rb +12 -28
- data/lib/nrser/no_arg.rb +1 -3
- data/lib/nrser/refinements.rb +5 -0
- data/lib/nrser/refinements/array.rb +5 -17
- data/lib/nrser/refinements/enumerator.rb +1 -3
- data/lib/nrser/refinements/hash.rb +3 -15
- data/lib/nrser/refinements/object.rb +2 -2
- data/lib/nrser/refinements/open_struct.rb +0 -2
- data/lib/nrser/refinements/pathname.rb +3 -46
- data/lib/nrser/refinements/set.rb +2 -6
- data/lib/nrser/refinements/string.rb +2 -2
- data/lib/nrser/rspex.rb +16 -13
- data/lib/nrser/types.rb +6 -20
- data/lib/nrser/types/any.rb +0 -1
- data/lib/nrser/types/booleans.rb +1 -1
- data/lib/nrser/types/combinators.rb +5 -5
- data/lib/nrser/types/in.rb +0 -21
- data/lib/nrser/types/responds.rb +1 -0
- data/lib/nrser/types/trees.rb +1 -0
- data/lib/nrser/version.rb +2 -3
- data/spec/nrser/{template_spec.rb → functions/binding/template_spec.rb} +0 -0
- data/spec/nrser/functions/enumerable/find_all_map_spec.rb +28 -0
- data/spec/nrser/functions/enumerable/find_bounded_spec.rb +70 -0
- data/spec/nrser/functions/enumerable/find_map_spec.rb +38 -0
- data/spec/nrser/functions/enumerable/find_only_spec.rb +25 -0
- data/spec/nrser/functions/enumerable/to_h_by_spec.rb +28 -0
- data/spec/nrser/{format_exception_spec.rb → functions/exception/format_exception_spec.rb} +0 -0
- data/spec/nrser/{hash → functions/hash}/bury_spec.rb +0 -0
- data/spec/nrser/{hash → functions/hash}/guess_label_key_type_spec.rb +0 -0
- data/spec/nrser/{hash_spec.rb → functions/hash_spec.rb} +0 -7
- data/spec/nrser/{merge_by_spec.rb → functions/merge_by_spec.rb} +0 -0
- data/spec/nrser/{truthy_spec.rb → functions/object/truthy_spec.rb} +0 -0
- data/spec/nrser/{open_struct_spec.rb → functions/open_struct_spec.rb} +0 -0
- data/spec/nrser/{string → functions/string}/common_prefix_spec.rb +0 -0
- data/spec/nrser/{string → functions/string}/looks_like_spec.rb +0 -0
- data/spec/nrser/{truncate_spec.rb → functions/string/truncate_spec.rb} +0 -0
- data/spec/nrser/{text → functions/text}/dedent/gotchas_spec.rb +0 -0
- data/spec/nrser/{text → functions/text}/dedent_spec.rb +0 -0
- data/spec/nrser/{indent_spec.rb → functions/text/indent_spec.rb} +0 -0
- data/spec/nrser/{tree → functions/tree}/each_branch_spec.rb +0 -0
- data/spec/nrser/{tree → functions/tree}/leaves_spec.rb +0 -0
- data/spec/nrser/{tree → functions/tree}/map_branch_spec.rb +0 -0
- data/spec/nrser/{tree → functions/tree}/map_tree_spec.rb +0 -0
- data/spec/nrser/{tree → functions/tree}/transform_spec.rb +0 -0
- data/spec/nrser/{tree → functions/tree}/transformer_spec.rb +0 -0
- data/spec/nrser/meta/class_attrs_spec.rb +12 -14
- data/spec/spec_helper.rb +2 -3
- metadata +136 -110
- data/lib/nrser/enumerable.rb +0 -288
- data/lib/nrser/exception.rb +0 -7
- data/lib/nrser/hash/bury.rb +0 -154
- data/lib/nrser/merge_by.rb +0 -26
- data/lib/nrser/string.rb +0 -294
- data/lib/nrser/string/looks_like.rb +0 -51
- data/lib/nrser/tree/leaves.rb +0 -92
- data/lib/nrser/tree/map_leaves.rb +0 -63
- data/spec/nrser/enumerable_spec.rb +0 -111
@@ -1,63 +0,0 @@
|
|
1
|
-
module NRSER
|
2
|
-
|
3
|
-
# Eigenclass (Singleton Class)
|
4
|
-
# ========================================================================
|
5
|
-
#
|
6
|
-
class << self
|
7
|
-
|
8
|
-
def map_leaves tree, &block
|
9
|
-
NRSER::Types.tree.check tree
|
10
|
-
|
11
|
-
_internal_map_leaves tree, key_path: [], &block
|
12
|
-
end # #map_leaves
|
13
|
-
|
14
|
-
private
|
15
|
-
# ========================================================================
|
16
|
-
|
17
|
-
# Internal recursive implementation for {NRSER.leaves}.
|
18
|
-
#
|
19
|
-
# @param [#each_pair | (#each_index & #each_with_index)] tree
|
20
|
-
# Tree to walk.
|
21
|
-
#
|
22
|
-
# @param [Array] path
|
23
|
-
# Key path down to `tree`.
|
24
|
-
#
|
25
|
-
# @param [Hash<Array, Object>] results
|
26
|
-
# New hash to stick results in.
|
27
|
-
#
|
28
|
-
# @return [nil]
|
29
|
-
#
|
30
|
-
def _internal_map_leaves tree, key_path:, &block
|
31
|
-
NRSER::Types.match tree,
|
32
|
-
NRSER::Types.hash_like, ->( hash_like ) {
|
33
|
-
hash_like.map { |key, value|
|
34
|
-
new_key_path = [*key_path, key]
|
35
|
-
|
36
|
-
new_value = if NRSER::Types.tree.test( value )
|
37
|
-
_internal_map_leaves value, key_path: new_key_path, &block
|
38
|
-
else
|
39
|
-
block.call new_key_path, value
|
40
|
-
end
|
41
|
-
|
42
|
-
[key, new_value]
|
43
|
-
}.to_h
|
44
|
-
},
|
45
|
-
|
46
|
-
NRSER::Types.array_like, ->( array_like ) {
|
47
|
-
array_like.each_with_index.map { |value, index|
|
48
|
-
new_key_path = [*key_path, index]
|
49
|
-
|
50
|
-
if NRSER::Types.tree.test( value )
|
51
|
-
_internal_map_leaves value, key_path: new_key_path, &block
|
52
|
-
else
|
53
|
-
block.call new_key_path, value
|
54
|
-
end
|
55
|
-
}
|
56
|
-
}
|
57
|
-
end # #_internal_leaves
|
58
|
-
|
59
|
-
# end private
|
60
|
-
|
61
|
-
end # class << self (Eigenclass)
|
62
|
-
|
63
|
-
end # module NRSER
|
@@ -1,111 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe "NRSER Enumerable Methods" do
|
4
|
-
|
5
|
-
describe NRSER.method(:find_bounded) do
|
6
|
-
|
7
|
-
context "when just :length bounds arg is provided" do
|
8
|
-
it "returns found elements when length is correct" do
|
9
|
-
expect(
|
10
|
-
subject.([1, 2, 3], length: 1) { |i| i == 2 }
|
11
|
-
).to eq [2]
|
12
|
-
end
|
13
|
-
|
14
|
-
it "raises TypeError when length in incorrect" do
|
15
|
-
expect {
|
16
|
-
subject.([1, 2, 3], length: 2) { |i| i == 2 }
|
17
|
-
}.to raise_error TypeError
|
18
|
-
end
|
19
|
-
end # when just :length bounds arg is provided
|
20
|
-
|
21
|
-
context "when just :min bounds arg is provided" do
|
22
|
-
it "returns found elements when min is correct" do
|
23
|
-
expect(
|
24
|
-
subject.([1, 2, 3], min: 1) { |i| i == 2 }
|
25
|
-
).to eq [2]
|
26
|
-
end
|
27
|
-
|
28
|
-
it "raises TypeError when min in incorrect" do
|
29
|
-
expect {
|
30
|
-
subject.([1, 2, 3], min: 2) { |i| i == 2 }
|
31
|
-
}.to raise_error TypeError
|
32
|
-
end
|
33
|
-
end # when just :min bounds arg is provided
|
34
|
-
|
35
|
-
context "when just :max bounds arg is provided" do
|
36
|
-
it "returns found elements when max is correct" do
|
37
|
-
expect(
|
38
|
-
subject.([1, 2, 3], max: 2) { |i| i >= 2 }
|
39
|
-
).to eq [2, 3]
|
40
|
-
end
|
41
|
-
|
42
|
-
it "raises TypeError when max in incorrect" do
|
43
|
-
expect {
|
44
|
-
subject.([1, 2, 3], max: 1) { |i| i >= 2 }
|
45
|
-
}.to raise_error TypeError
|
46
|
-
end
|
47
|
-
end # when just :max bounds arg is provided
|
48
|
-
|
49
|
-
|
50
|
-
context "when :min and :max bounds args are both provided" do
|
51
|
-
it "returns found elements when min and max are correct" do
|
52
|
-
expect(
|
53
|
-
subject.([1, 2, 3], min: 1, max: 2) { |i| i >= 2 }
|
54
|
-
).to eq [2, 3]
|
55
|
-
end
|
56
|
-
|
57
|
-
it "raises TypeError when min is incorrect" do
|
58
|
-
expect {
|
59
|
-
subject.([1, 2, 3], min: 1, max: 2) { |i| false }
|
60
|
-
}.to raise_error TypeError
|
61
|
-
end
|
62
|
-
|
63
|
-
it "raises TypeError when max is incorrect" do
|
64
|
-
expect {
|
65
|
-
subject.([1, 2, 3], min: 1, max: 2) { |i| true }
|
66
|
-
}.to raise_error TypeError
|
67
|
-
end
|
68
|
-
end # when :min and :max bounds args are both provided
|
69
|
-
|
70
|
-
end # NRSER.method(:find_bounded)
|
71
|
-
|
72
|
-
|
73
|
-
describe NRSER.method(:find_only) do
|
74
|
-
|
75
|
-
it "returns the element when only one is found" do
|
76
|
-
expect(
|
77
|
-
subject.call [1, 2, 3] { |i| i == 2 }
|
78
|
-
).to be 2
|
79
|
-
end
|
80
|
-
|
81
|
-
it "raises TypeError when more than one element is found" do
|
82
|
-
expect {
|
83
|
-
subject.call [1, 2, 3] { |i| i >= 2 }
|
84
|
-
}.to raise_error TypeError
|
85
|
-
end
|
86
|
-
|
87
|
-
it "raises TypeError when no elements are found" do
|
88
|
-
expect {
|
89
|
-
subject.call [1, 2, 3] { |i| false }
|
90
|
-
}.to raise_error TypeError
|
91
|
-
end
|
92
|
-
|
93
|
-
end # NRSER.method(:find_only)
|
94
|
-
|
95
|
-
|
96
|
-
describe NRSER.method(:to_h_by) do
|
97
|
-
|
98
|
-
context "Duplicate keys" do
|
99
|
-
it "raises NRSER::ConflictError" do
|
100
|
-
expect {
|
101
|
-
NRSER.to_h_by([1, 2, 3]) { |i| i % 2 }
|
102
|
-
}.to raise_error NRSER::ConflictError
|
103
|
-
end
|
104
|
-
end # Duplicate keys
|
105
|
-
|
106
|
-
|
107
|
-
end # NRSER.to_h_by
|
108
|
-
|
109
|
-
|
110
|
-
end # NRSER Enumerable Methods
|
111
|
-
|