accessory 0.1.8 → 0.1.9
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/accessors/all_accessor.rb +13 -2
- data/lib/accessory/accessors/attribute_accessor.rb +5 -3
- data/lib/accessory/accessors/between_each_accessor.rb +11 -2
- data/lib/accessory/accessors/betwixt_accessor.rb +5 -3
- data/lib/accessory/accessors/filter_accessor.rb +12 -2
- data/lib/accessory/accessors/first_accessor.rb +5 -3
- data/lib/accessory/accessors/instance_variable_accessor.rb +5 -3
- data/lib/accessory/accessors/last_accessor.rb +5 -3
- data/lib/accessory/accessors/subscript_accessor.rb +5 -3
- data/lib/accessory/lens.rb +12 -3
- data/lib/accessory/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c03753edaa94362541af5695a93547b6e1f3565f37aa82e7536b3e81d212eb7c
|
4
|
+
data.tar.gz: a3584fbf0b4ee32555feccd642c7225fd6c6f8f85563fcb03b542624f36f7660
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 61015ff40a150d474e43ec454a4c50cb0fd4021660a10cf65d61cd69ec4abe3293523fa53cceda199da7996ed5bea160efc45bf826724647fbc7020f0c666b57
|
7
|
+
data.tar.gz: 3ec8ca3a2f53df27e958621997102d6d10220a15f26c48dc6cdb3f56403f387d629d531433d93f05e6ced2f30ad7d046df0ae27ad620047715b3648bf2ec20dd
|
@@ -50,17 +50,28 @@ class Accessory::Accessors::AllAccessor < Accessory::Accessor
|
|
50
50
|
def get_and_update(data)
|
51
51
|
results = []
|
52
52
|
new_data = []
|
53
|
+
dirty = false
|
53
54
|
|
54
55
|
(data || []).each do |pos|
|
55
56
|
case yield(pos)
|
56
|
-
in [result,
|
57
|
+
in [:clean, result, _]
|
58
|
+
results.push(result)
|
59
|
+
new_data.push(pos)
|
60
|
+
# ok
|
61
|
+
in [:dirty, result, new_value]
|
57
62
|
results.push(result)
|
58
63
|
new_data.push(new_value)
|
64
|
+
dirty = true
|
59
65
|
in :pop
|
60
66
|
results.push(pos)
|
67
|
+
dirty = true
|
61
68
|
end
|
62
69
|
end
|
63
70
|
|
64
|
-
|
71
|
+
if dirty
|
72
|
+
[:dirty, results, new_data]
|
73
|
+
else
|
74
|
+
[:clean, results, data]
|
75
|
+
end
|
65
76
|
end
|
66
77
|
end
|
@@ -88,12 +88,14 @@ class Accessory::Accessors::AttributeAccessor < Accessory::Accessor
|
|
88
88
|
value = traverse_or_default(data)
|
89
89
|
|
90
90
|
case yield(value)
|
91
|
-
in [result,
|
91
|
+
in [:clean, result, _]
|
92
|
+
[:clean, result, data]
|
93
|
+
in [:dirty, result, new_value]
|
92
94
|
data.send(@setter_method_name, new_value)
|
93
|
-
[result, data]
|
95
|
+
[:dirty, result, data]
|
94
96
|
in :pop
|
95
97
|
data.send(@setter_method_name, nil)
|
96
|
-
[value, data]
|
98
|
+
[:dirty, value, data]
|
97
99
|
end
|
98
100
|
end
|
99
101
|
end
|
@@ -75,15 +75,20 @@ class Accessory::Accessors::BetweenEachAccessor < Accessory::Accessor
|
|
75
75
|
def get_and_update(data)
|
76
76
|
results = []
|
77
77
|
new_data = []
|
78
|
+
dirty = false
|
78
79
|
|
79
80
|
positions = traverse_or_default(data || [])
|
80
81
|
|
81
82
|
positions.each do |pos|
|
82
83
|
case yield(pos)
|
83
|
-
in [result,
|
84
|
+
in [:clean, result, _]
|
85
|
+
results.push(result)
|
86
|
+
in [:dirty, result, new_value]
|
84
87
|
new_data.push(new_value)
|
85
88
|
results.push(result)
|
89
|
+
dirty = true
|
86
90
|
in :pop
|
91
|
+
# ok
|
87
92
|
end
|
88
93
|
|
89
94
|
unless pos.last?
|
@@ -91,6 +96,10 @@ class Accessory::Accessors::BetweenEachAccessor < Accessory::Accessor
|
|
91
96
|
end
|
92
97
|
end
|
93
98
|
|
94
|
-
|
99
|
+
if dirty
|
100
|
+
[:dirty, results, new_data]
|
101
|
+
else
|
102
|
+
[:clean, results, data]
|
103
|
+
end
|
95
104
|
end
|
96
105
|
end
|
@@ -100,12 +100,14 @@ class Accessory::Accessors::BetwixtAccessor < Accessory::Accessor
|
|
100
100
|
pos = traverse_or_default(data || [])
|
101
101
|
|
102
102
|
case yield(pos)
|
103
|
-
in [result, new_value]
|
103
|
+
in [:dirty, result, new_value]
|
104
104
|
data ||= []
|
105
105
|
data.insert(@offset, new_value)
|
106
|
-
[result, data]
|
106
|
+
[:dirty, result, data]
|
107
107
|
in :pop
|
108
|
-
[nil, data]
|
108
|
+
[:clean, nil, data]
|
109
|
+
in [:clean, result, _]
|
110
|
+
[:clean, result, data]
|
109
111
|
end
|
110
112
|
end
|
111
113
|
end
|
@@ -65,6 +65,7 @@ class Accessory::Accessors::FilterAccessor < Accessory::Accessor
|
|
65
65
|
def get_and_update(data)
|
66
66
|
results = []
|
67
67
|
new_data = []
|
68
|
+
dirty = false
|
68
69
|
|
69
70
|
(data || []).each do |pos|
|
70
71
|
unless @pred.call(pos)
|
@@ -73,14 +74,23 @@ class Accessory::Accessors::FilterAccessor < Accessory::Accessor
|
|
73
74
|
end
|
74
75
|
|
75
76
|
case yield(pos)
|
76
|
-
in [result,
|
77
|
+
in [:clean, result, _]
|
78
|
+
results.push(result)
|
79
|
+
new_data.push(pos)
|
80
|
+
in [:dirty, result, new_value]
|
77
81
|
results.push(result)
|
78
82
|
new_data.push(new_value)
|
83
|
+
dirty = true
|
79
84
|
in :pop
|
80
85
|
results.push(pos)
|
86
|
+
dirty = true
|
81
87
|
end
|
82
88
|
end
|
83
89
|
|
84
|
-
|
90
|
+
if dirty
|
91
|
+
[:dirty, results, new_data]
|
92
|
+
else
|
93
|
+
[:clean, results, data]
|
94
|
+
end
|
85
95
|
end
|
86
96
|
end
|
@@ -58,16 +58,18 @@ class Accessory::Accessors::FirstAccessor < Accessory::Accessor
|
|
58
58
|
old_value = traverse_or_default(data)
|
59
59
|
|
60
60
|
case yield(old_value)
|
61
|
-
in [result,
|
61
|
+
in [:clean, result, _]
|
62
|
+
[:clean, result, data]
|
63
|
+
in [:dirty, result, new_value]
|
62
64
|
if data.respond_to?(:"first=")
|
63
65
|
data.first = new_value
|
64
66
|
else
|
65
67
|
data[0] = new_value
|
66
68
|
end
|
67
|
-
[result, data]
|
69
|
+
[:dirty, result, data]
|
68
70
|
in :pop
|
69
71
|
data.delete_at(0)
|
70
|
-
[old_value, data]
|
72
|
+
[:dirty, old_value, data]
|
71
73
|
end
|
72
74
|
end
|
73
75
|
end
|
@@ -70,12 +70,14 @@ class Accessory::Accessors::InstanceVariableAccessor < Accessory::Accessor
|
|
70
70
|
value = traverse_or_default(data)
|
71
71
|
|
72
72
|
case yield(value)
|
73
|
-
in [result,
|
73
|
+
in [:clean, result, _]
|
74
|
+
[:clean, result, data]
|
75
|
+
in [:dirty, result, new_value]
|
74
76
|
data.instance_variable_set(@ivar_name, new_value)
|
75
|
-
[result, data]
|
77
|
+
[:dirty, result, data]
|
76
78
|
in :pop
|
77
79
|
data.remove_instance_variable(@ivar_name)
|
78
|
-
[value, data]
|
80
|
+
[:dirty, value, data]
|
79
81
|
end
|
80
82
|
end
|
81
83
|
end
|
@@ -58,16 +58,18 @@ class Accessory::Accessors::LastAccessor < Accessory::Accessor
|
|
58
58
|
old_value = traverse_or_default(data)
|
59
59
|
|
60
60
|
case yield(old_value)
|
61
|
-
in [result,
|
61
|
+
in [:clean, result, _]
|
62
|
+
[:clean, result, data]
|
63
|
+
in [:dirty, result, new_value]
|
62
64
|
if data.respond_to?(:"last=")
|
63
65
|
data.last = new_value
|
64
66
|
else
|
65
67
|
data[-1] = new_value
|
66
68
|
end
|
67
|
-
[result, data]
|
69
|
+
[:dirty, result, data]
|
68
70
|
in :pop
|
69
71
|
data.delete_at(-1)
|
70
|
-
[old_value, data]
|
72
|
+
[:dirty, old_value, data]
|
71
73
|
end
|
72
74
|
end
|
73
75
|
end
|
@@ -92,12 +92,14 @@ class Accessory::Accessors::SubscriptAccessor < Accessory::Accessor
|
|
92
92
|
value = traverse_or_default(data)
|
93
93
|
|
94
94
|
case yield(value)
|
95
|
-
in [result,
|
95
|
+
in [:clean, result, _]
|
96
|
+
[:clean, result, data]
|
97
|
+
in [:dirty, result, new_value]
|
96
98
|
data[@key] = new_value
|
97
|
-
[result, data]
|
99
|
+
[:dirty, result, data]
|
98
100
|
in :pop
|
99
101
|
data.delete(@key)
|
100
|
-
[value, data]
|
102
|
+
[:dirty, value, data]
|
101
103
|
end
|
102
104
|
end
|
103
105
|
end
|
data/lib/accessory/lens.rb
CHANGED
@@ -164,7 +164,15 @@ class Accessory::Lens
|
|
164
164
|
# 1. the _old_ value(s) found after all traversals, and
|
165
165
|
# 2. the updated +subject+
|
166
166
|
def update_in(subject, &new_value_fn)
|
167
|
-
_, new_data = self.get_and_update_in(subject)
|
167
|
+
_, _, new_data = self.get_and_update_in(subject) do |v|
|
168
|
+
case new_value_fn.call(v)
|
169
|
+
in [:set, new_value]
|
170
|
+
[:dirty, nil, new_value]
|
171
|
+
in :keep
|
172
|
+
[:clean, nil, v]
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
168
176
|
new_data
|
169
177
|
end
|
170
178
|
|
@@ -178,7 +186,7 @@ class Accessory::Lens
|
|
178
186
|
# @param new_value [Object] a replacement value at the traversal position.
|
179
187
|
# @return [Object] the updated +subject+
|
180
188
|
def put_in(subject, new_value)
|
181
|
-
_, new_data = self.get_and_update_in(subject){ [nil, new_value] }
|
189
|
+
_, _, new_data = self.get_and_update_in(subject){ [:dirty, nil, new_value] }
|
182
190
|
new_data
|
183
191
|
end
|
184
192
|
|
@@ -191,7 +199,8 @@ class Accessory::Lens
|
|
191
199
|
# @param subject [Object] the data-structure to traverse
|
192
200
|
# @return [Object] the updated +subject+
|
193
201
|
def pop_in(subject)
|
194
|
-
self.get_and_update_in(subject){ :pop }
|
202
|
+
_, popped_item, new_data = self.get_and_update_in(subject){ :pop }
|
203
|
+
[popped_item, new_data]
|
195
204
|
end
|
196
205
|
|
197
206
|
def append_accessor!(part)
|
data/lib/accessory/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: accessory
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Levi Aul
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-01-
|
11
|
+
date: 2021-01-14 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email:
|