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