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