accessory 0.1.6 → 0.1.7
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 +4 -4
- data/lib/accessory.rb +0 -3
- data/lib/accessory/access.rb +39 -39
- data/lib/accessory/accessor.rb +10 -11
- data/lib/accessory/accessors/all_accessor.rb +1 -1
- data/lib/accessory/accessors/attribute_accessor.rb +1 -1
- data/lib/accessory/accessors/between_each_accessor.rb +1 -1
- data/lib/accessory/accessors/betwixt_accessor.rb +1 -1
- data/lib/accessory/accessors/filter_accessor.rb +1 -1
- data/lib/accessory/accessors/first_accessor.rb +1 -1
- data/lib/accessory/accessors/instance_variable_accessor.rb +1 -1
- data/lib/accessory/accessors/last_accessor.rb +1 -1
- data/lib/accessory/accessors/subscript_accessor.rb +1 -1
- data/lib/accessory/lens.rb +2 -2
- data/lib/accessory/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9f4517af7f1ae501a9dea6721f8dd0966a85c2fd9e8ada3d1d444f8b58cb297e
|
4
|
+
data.tar.gz: 4e8bcc0130b9cb5078779642cc0e81f4d4121ac6275ead2fe7a5decd873a5047
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 295b43b1f100522c1dcc9e659acbcf174a9725c38448d68b8eb3be10603b9ad9df643f82dced994849616d194ccef080697febc3f934440b45420eae8229fa31
|
7
|
+
data.tar.gz: 5d9d93d0a17668ba39313dd8151cf7324a562df362fbbeb0a34bdc6c24b2dc7a8996f36f8e0b1be1c0d489dafc435f645e1b8a4348e3a080bdd66e9efe5dbc61
|
data/lib/accessory.rb
CHANGED
data/lib/accessory/access.rb
CHANGED
@@ -18,59 +18,59 @@ require 'accessory/accessors/last_accessor'
|
|
18
18
|
# include Accessory
|
19
19
|
|
20
20
|
module Accessory::Access
|
21
|
-
# (see Accessory::SubscriptAccessor)
|
21
|
+
# (see Accessory::Accessors::SubscriptAccessor)
|
22
22
|
def self.subscript(...)
|
23
|
-
Accessory::SubscriptAccessor.new(...)
|
23
|
+
Accessory::Accessors::SubscriptAccessor.new(...)
|
24
24
|
end
|
25
25
|
|
26
|
-
# (see Accessory::AttributeAccessor)
|
26
|
+
# (see Accessory::Accessors::AttributeAccessor)
|
27
27
|
def self.attr(...)
|
28
|
-
Accessory::AttributeAccessor.new(...)
|
28
|
+
Accessory::Accessors::AttributeAccessor.new(...)
|
29
29
|
end
|
30
30
|
|
31
|
-
# (see Accessory::InstanceVariableAccessor)
|
31
|
+
# (see Accessory::Accessors::InstanceVariableAccessor)
|
32
32
|
def self.ivar(...)
|
33
|
-
Accessory::InstanceVariableAccessor.new(...)
|
33
|
+
Accessory::Accessors::InstanceVariableAccessor.new(...)
|
34
34
|
end
|
35
35
|
|
36
|
-
# (see Accessory::BetwixtAccessor)
|
36
|
+
# (see Accessory::Accessors::BetwixtAccessor)
|
37
37
|
def self.betwixt(...)
|
38
|
-
Accessory::BetwixtAccessor.new(...)
|
38
|
+
Accessory::Accessors::BetwixtAccessor.new(...)
|
39
39
|
end
|
40
40
|
|
41
|
-
# Alias for +Accessory::Access.betwixt(0)+. See {Access.betwixt}
|
41
|
+
# Alias for +Accessory::Accessors::Access.betwixt(0)+. See {Access.betwixt}
|
42
42
|
def self.before_first
|
43
43
|
self.betwixt(0)
|
44
44
|
end
|
45
45
|
|
46
|
-
# Alias for +Accessory::Access.betwixt(-1)+. See {Access.betwixt}
|
46
|
+
# Alias for +Accessory::Accessors::Access.betwixt(-1)+. See {Access.betwixt}
|
47
47
|
def self.after_last
|
48
48
|
self.betwixt(-1)
|
49
49
|
end
|
50
50
|
|
51
|
-
# (see Accessory::BetweenEachAccessor)
|
51
|
+
# (see Accessory::Accessors::BetweenEachAccessor)
|
52
52
|
def self.between_each
|
53
|
-
Accessory::BetweenEachAccessor.new
|
53
|
+
Accessory::Accessors::BetweenEachAccessor.new
|
54
54
|
end
|
55
55
|
|
56
|
-
# (see Accessory::AllAccessor)
|
56
|
+
# (see Accessory::Accessors::AllAccessor)
|
57
57
|
def self.all
|
58
|
-
Accessory::AllAccessor.new
|
58
|
+
Accessory::Accessors::AllAccessor.new
|
59
59
|
end
|
60
60
|
|
61
|
-
# (see Accessory::FirstAccessor)
|
61
|
+
# (see Accessory::Accessors::FirstAccessor)
|
62
62
|
def self.first
|
63
|
-
Accessory::FirstAccessor.new
|
63
|
+
Accessory::Accessors::FirstAccessor.new
|
64
64
|
end
|
65
65
|
|
66
|
-
# (see Accessory::LastAccessor)
|
66
|
+
# (see Accessory::Accessors::LastAccessor)
|
67
67
|
def self.last
|
68
|
-
Accessory::LastAccessor.new
|
68
|
+
Accessory::Accessors::LastAccessor.new
|
69
69
|
end
|
70
70
|
|
71
|
-
# (see Accessory::FilterAccessor)
|
71
|
+
# (see Accessory::Accessors::FilterAccessor)
|
72
72
|
def self.filter(&pred)
|
73
|
-
Accessory::FilterAccessor.new(pred)
|
73
|
+
Accessory::Accessors::FilterAccessor.new(pred)
|
74
74
|
end
|
75
75
|
end
|
76
76
|
|
@@ -83,29 +83,29 @@ end
|
|
83
83
|
# {Lens} or {BoundLens} from the addition of the accessor.
|
84
84
|
|
85
85
|
module Accessory::Access::FluentHelpers
|
86
|
-
# (see Accessory::SubscriptAccessor)
|
86
|
+
# (see Accessory::Accessors::SubscriptAccessor)
|
87
87
|
def subscript(...)
|
88
|
-
self.then(Accessory::SubscriptAccessor.new(...))
|
88
|
+
self.then(Accessory::Accessors::SubscriptAccessor.new(...))
|
89
89
|
end
|
90
90
|
|
91
91
|
# Alias for {#subscript}
|
92
92
|
def [](...)
|
93
|
-
self.then(Accessory::SubscriptAccessor.new(...))
|
93
|
+
self.then(Accessory::Accessors::SubscriptAccessor.new(...))
|
94
94
|
end
|
95
95
|
|
96
|
-
# (see Accessory::AttributeAccessor)
|
96
|
+
# (see Accessory::Accessors::AttributeAccessor)
|
97
97
|
def attr(...)
|
98
|
-
self.then(Accessory::AttributeAccessor.new(...))
|
98
|
+
self.then(Accessory::Accessors::AttributeAccessor.new(...))
|
99
99
|
end
|
100
100
|
|
101
|
-
# (see Accessory::InstanceVariableAccessor)
|
101
|
+
# (see Accessory::Accessors::InstanceVariableAccessor)
|
102
102
|
def ivar(...)
|
103
|
-
self.then(Accessory::InstanceVariableAccessor.new(...))
|
103
|
+
self.then(Accessory::Accessors::InstanceVariableAccessor.new(...))
|
104
104
|
end
|
105
105
|
|
106
|
-
# (see Accessory::BetwixtAccessor)
|
106
|
+
# (see Accessory::Accessors::BetwixtAccessor)
|
107
107
|
def betwixt(...)
|
108
|
-
self.then(Accessory::BetwixtAccessor.new(...))
|
108
|
+
self.then(Accessory::Accessors::BetwixtAccessor.new(...))
|
109
109
|
end
|
110
110
|
|
111
111
|
# Alias for +#betwixt(0)+. See {#betwixt}
|
@@ -118,29 +118,29 @@ module Accessory::Access::FluentHelpers
|
|
118
118
|
self.betwixt(-1)
|
119
119
|
end
|
120
120
|
|
121
|
-
# (see Accessory::BetweenEachAccessor)
|
121
|
+
# (see Accessory::Accessors::BetweenEachAccessor)
|
122
122
|
def between_each
|
123
|
-
self.then(Accessory::BetweenEachAccessor.new)
|
123
|
+
self.then(Accessory::Accessors::BetweenEachAccessor.new)
|
124
124
|
end
|
125
125
|
|
126
|
-
# (see Accessory::AllAccessor)
|
126
|
+
# (see Accessory::Accessors::AllAccessor)
|
127
127
|
def all
|
128
|
-
self.then(Accessory::AllAccessor.new)
|
128
|
+
self.then(Accessory::Accessors::AllAccessor.new)
|
129
129
|
end
|
130
130
|
|
131
|
-
# (see Accessory::FirstAccessor)
|
131
|
+
# (see Accessory::Accessors::FirstAccessor)
|
132
132
|
def first
|
133
|
-
self.then(Accessory::FirstAccessor.new)
|
133
|
+
self.then(Accessory::Accessors::FirstAccessor.new)
|
134
134
|
end
|
135
135
|
|
136
|
-
# (see Accessory::LastAccessor)
|
136
|
+
# (see Accessory::Accessors::LastAccessor)
|
137
137
|
def last
|
138
|
-
self.then(Accessory::LastAccessor.new)
|
138
|
+
self.then(Accessory::Accessors::LastAccessor.new)
|
139
139
|
end
|
140
140
|
|
141
|
-
# (see Accessory::FilterAccessor)
|
141
|
+
# (see Accessory::Accessors::FilterAccessor)
|
142
142
|
def filter(&pred)
|
143
|
-
self.then(Accessory::FilterAccessor.new(pred))
|
143
|
+
self.then(Accessory::Accessors::FilterAccessor.new(pred))
|
144
144
|
end
|
145
145
|
end
|
146
146
|
|
data/lib/accessory/accessor.rb
CHANGED
@@ -19,7 +19,7 @@ module Accessory; end
|
|
19
19
|
# info):
|
20
20
|
#
|
21
21
|
# * {Accessor#traverse}
|
22
|
-
# * {Accessor#
|
22
|
+
# * {Accessor#ensure_valid}
|
23
23
|
|
24
24
|
class Accessory::Accessor
|
25
25
|
TERMINAL_DEFAULT_FN = lambda{ nil }
|
@@ -78,16 +78,13 @@ class Accessory::Accessor
|
|
78
78
|
# call <tt>traverse_or_default(data)</tt> within your implementation to safely
|
79
79
|
# get a traversal-result to operate on.
|
80
80
|
#
|
81
|
-
#
|
82
|
-
#
|
83
|
-
# {
|
84
|
-
#
|
85
|
-
#
|
86
|
-
#
|
87
|
-
#
|
88
|
-
# implementation calling <tt>super(default)</tt>; or it's the result of
|
89
|
-
# calling {default_data_constructor} on the successor-accessor in the accessor
|
90
|
-
# chain.
|
81
|
+
# The value returned by your {traverse} callback will be validated by your
|
82
|
+
# calling the {ensure_valid} callback of the _successor accessor_ in the Lens
|
83
|
+
# path. {ensure_valid} will replace any value it considers invalid with a
|
84
|
+
# reasonable default. This means you don't need to worry about what will
|
85
|
+
# happen if your traversal doesn't find a value and so returns +nil+. The
|
86
|
+
# successor's {ensure_valid} will replace that +nil+ with a value that works
|
87
|
+
# for it.
|
91
88
|
def traverse_or_default(data)
|
92
89
|
traversal_result = traverse(data) || @default_value
|
93
90
|
|
@@ -214,3 +211,5 @@ class Accessory::Accessor
|
|
214
211
|
|
215
212
|
# @!endgroup
|
216
213
|
end
|
214
|
+
|
215
|
+
module Accessory::Accessors; end
|
@@ -15,7 +15,7 @@ require 'accessory/accessor'
|
|
15
15
|
#
|
16
16
|
# * +Array.new+
|
17
17
|
|
18
|
-
class Accessory::AllAccessor < Accessory::Accessor
|
18
|
+
class Accessory::Accessors::AllAccessor < Accessory::Accessor
|
19
19
|
# @!visibility private
|
20
20
|
def ensure_valid(traversal_result)
|
21
21
|
if traversal_result.kind_of?(Enumerable)
|
@@ -19,7 +19,7 @@ require 'accessory/accessor'
|
|
19
19
|
#
|
20
20
|
# * +OpenStruct.new+
|
21
21
|
|
22
|
-
class Accessory::AttributeAccessor < Accessory::Accessor
|
22
|
+
class Accessory::Accessors::AttributeAccessor < Accessory::Accessor
|
23
23
|
# @param attr_name [Symbol] the attribute name (i.e. name of the getter method)
|
24
24
|
# @param default [Object] the default to use if the predecessor accessor passes +nil+ data
|
25
25
|
def initialize(attr_name, default: nil)
|
@@ -16,7 +16,7 @@ require 'accessory/traversal_position/enumerable_before_offset'
|
|
16
16
|
#
|
17
17
|
# * +Array.new+
|
18
18
|
|
19
|
-
class Accessory::BetweenEachAccessor < Accessory::Accessor
|
19
|
+
class Accessory::Accessors::BetweenEachAccessor < Accessory::Accessor
|
20
20
|
# @!visibility private
|
21
21
|
def ensure_valid(traversal_result)
|
22
22
|
if traversal_result.kind_of?(Enumerable)
|
@@ -26,7 +26,7 @@ require 'accessory/traversal_position/enumerable_before_offset'
|
|
26
26
|
#
|
27
27
|
# * +Array.new+
|
28
28
|
|
29
|
-
class Accessory::BetwixtAccessor < Accessory::Accessor
|
29
|
+
class Accessory::Accessors::BetwixtAccessor < Accessory::Accessor
|
30
30
|
# @param offset [Integer] the cursor position (i.e. the index of the element after the cursor)
|
31
31
|
# @param default [Object] the default to use if the predecessor accessor passes +nil+ data
|
32
32
|
def initialize(offset, default: nil)
|
@@ -15,7 +15,7 @@ require 'accessory/accessor'
|
|
15
15
|
#
|
16
16
|
# * +Array.new+
|
17
17
|
|
18
|
-
class Accessory::FilterAccessor < Accessory::Accessor
|
18
|
+
class Accessory::Accessors::FilterAccessor < Accessory::Accessor
|
19
19
|
# Returns a new instance of {FilterAccessor}.
|
20
20
|
#
|
21
21
|
# The predicate function may be passed in as either a positional argument,
|
@@ -15,7 +15,7 @@ require 'accessory/accessor'
|
|
15
15
|
#
|
16
16
|
# * +Array.new+
|
17
17
|
|
18
|
-
class Accessory::FirstAccessor < Accessory::Accessor
|
18
|
+
class Accessory::Accessors::FirstAccessor < Accessory::Accessor
|
19
19
|
# @!visibility private
|
20
20
|
def ensure_valid(traversal_result)
|
21
21
|
if traversal_result.kind_of?(Enumerable)
|
@@ -14,7 +14,7 @@ require 'accessory/accessor'
|
|
14
14
|
#
|
15
15
|
# * +Object.new+
|
16
16
|
|
17
|
-
class Accessory::InstanceVariableAccessor < Accessory::Accessor
|
17
|
+
class Accessory::Accessors::InstanceVariableAccessor < Accessory::Accessor
|
18
18
|
# @param ivar_name [Symbol] the instance-variable name
|
19
19
|
# @param default [Object] the default to use if the predecessor accessor passes +nil+ data
|
20
20
|
def initialize(ivar_name, default: nil)
|
@@ -15,7 +15,7 @@ require 'accessory/accessor'
|
|
15
15
|
#
|
16
16
|
# * +Array.new+
|
17
17
|
|
18
|
-
class Accessory::LastAccessor < Accessory::Accessor
|
18
|
+
class Accessory::Accessors::LastAccessor < Accessory::Accessor
|
19
19
|
# @!visibility private
|
20
20
|
def ensure_valid(traversal_result)
|
21
21
|
if traversal_result.kind_of?(Enumerable)
|
@@ -31,7 +31,7 @@ require 'accessory/accessor'
|
|
31
31
|
#
|
32
32
|
# Other accessors ({FirstAccessor}, {BetwixtAccessor}, etc.) may fit your expectations more closely for +Array+ traversal.
|
33
33
|
|
34
|
-
class Accessory::SubscriptAccessor < Accessory::Accessor
|
34
|
+
class Accessory::Accessors::SubscriptAccessor < Accessory::Accessor
|
35
35
|
# @!visibility private
|
36
36
|
def initialize(key, **kwargs)
|
37
37
|
super(**kwargs)
|
data/lib/accessory/lens.rb
CHANGED
@@ -200,9 +200,9 @@ class Accessory::Lens
|
|
200
200
|
when Accessory::Accessor
|
201
201
|
part
|
202
202
|
when Array
|
203
|
-
Accessory::SubscriptAccessor.new(part[0], default: part[1])
|
203
|
+
Accessory::Accessors::SubscriptAccessor.new(part[0], default: part[1])
|
204
204
|
else
|
205
|
-
Accessory::SubscriptAccessor.new(part)
|
205
|
+
Accessory::Accessors::SubscriptAccessor.new(part)
|
206
206
|
end
|
207
207
|
|
208
208
|
unless @parts.empty?
|
data/lib/accessory/version.rb
CHANGED