about_pos 1.1.0 → 2.0.0
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/VERSION +1 -1
- data/bin/test +1 -1
- data/lib/about_pos.rb +83 -69
- data/specs/Detect.rb +3 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d97da717a18d64ca3817fd3ee1525325c7887ba3
|
4
|
+
data.tar.gz: e0f34a75858202f72b57e13d19f1e957681211a7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cf3bf9d44a5104d4457d73dc3c00c7123b05f87b56a27637bed0f3bea8d9ef820dbff46be5e545adef42d1275528f7e6ff9120ae35f28f8ea8b530e0ac187469
|
7
|
+
data.tar.gz: e8eb2e70c7354174662951f869930c98c3ced65acb49f6c6a73a7e0bf04d09be958ba1aa997ffb46836cd3ef51a436354a7a4dd341e8b4d4b2d8f43ea9a93d39
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
2.0.0
|
data/bin/test
CHANGED
data/lib/about_pos.rb
CHANGED
@@ -4,65 +4,54 @@ class About_Pos
|
|
4
4
|
No_Next = Class.new(RuntimeError)
|
5
5
|
No_Prev = Class.new(RuntimeError)
|
6
6
|
|
7
|
-
class
|
8
|
-
|
9
|
-
def Detect
|
10
|
-
self::Detect
|
11
|
-
end
|
12
|
-
|
13
|
-
def Back arr, &blok
|
14
|
-
Move(:back, arr, &blok)
|
15
|
-
end
|
16
|
-
|
17
|
-
def Forward arr, &blok
|
18
|
-
Move(:forward, arr, &blok)
|
19
|
-
end
|
7
|
+
class Enum
|
20
8
|
|
21
|
-
|
22
|
-
def Move dir, arr
|
23
|
-
size = arr.size
|
9
|
+
include Enumerable
|
24
10
|
|
11
|
+
def initialize dir, arr
|
12
|
+
@arr = arr
|
25
13
|
if dir == :forward
|
26
|
-
real_index = 0
|
27
|
-
seq = arr
|
14
|
+
@real_index = 0
|
28
15
|
else
|
29
|
-
real_index = (size - 1) - 0
|
30
|
-
seq = arr.reverse
|
16
|
+
@real_index = (@arr.size - 1) - 0
|
31
17
|
end
|
32
18
|
|
33
|
-
meta = Meta.new(dir, real_index, arr)
|
19
|
+
@meta = Meta.new(dir, @real_index, arr)
|
20
|
+
end
|
34
21
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
22
|
+
def each
|
23
|
+
return nil if @arr.empty?
|
24
|
+
has_next = false
|
25
|
+
begin
|
26
|
+
result = yield @meta.value, @meta.real_index, @meta
|
27
|
+
has_next = @meta.next?
|
28
|
+
if has_next
|
29
|
+
@meta.next!
|
41
30
|
end
|
42
|
-
|
31
|
+
end while has_next
|
43
32
|
end
|
44
33
|
|
45
|
-
end # === class
|
46
|
-
|
47
|
-
class Detect
|
34
|
+
end # === class Enum
|
48
35
|
|
49
|
-
|
36
|
+
class << self
|
50
37
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
38
|
+
def Back arr
|
39
|
+
if block_given?
|
40
|
+
Back(arr).each { |v,i,m| yield v, i, m }
|
41
|
+
else
|
42
|
+
Enum.new(:back, arr)
|
55
43
|
end
|
44
|
+
end
|
56
45
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
46
|
+
def Forward arr
|
47
|
+
if block_given?
|
48
|
+
Forward(arr).each { |v,i,m| yield v, i, m }
|
49
|
+
else
|
50
|
+
Enum.new(:forward, arr)
|
61
51
|
end
|
52
|
+
end
|
62
53
|
|
63
|
-
|
64
|
-
|
65
|
-
end # === class Detect
|
54
|
+
end # === class self ===
|
66
55
|
|
67
56
|
class Meta
|
68
57
|
|
@@ -71,11 +60,32 @@ class About_Pos
|
|
71
60
|
@data = {}
|
72
61
|
@dir = dir
|
73
62
|
@last_index = arr.size - 1
|
74
|
-
|
75
63
|
@real_index = real_index
|
64
|
+
@prev = prev
|
65
|
+
end
|
76
66
|
|
77
|
-
|
78
|
-
@
|
67
|
+
def data
|
68
|
+
@data
|
69
|
+
end
|
70
|
+
|
71
|
+
def data= d
|
72
|
+
@data = d
|
73
|
+
end
|
74
|
+
|
75
|
+
def [] k
|
76
|
+
@data[@real_index] ||= {}
|
77
|
+
@data[@real_index][k]
|
78
|
+
end
|
79
|
+
|
80
|
+
def []= k, v
|
81
|
+
self[k]
|
82
|
+
@data[@real_index][k] = v
|
83
|
+
end
|
84
|
+
|
85
|
+
def dup
|
86
|
+
d = super
|
87
|
+
d.data= @data
|
88
|
+
d
|
79
89
|
end
|
80
90
|
|
81
91
|
def value
|
@@ -106,6 +116,18 @@ class About_Pos
|
|
106
116
|
end
|
107
117
|
|
108
118
|
def next
|
119
|
+
m = dup
|
120
|
+
m.next!
|
121
|
+
m
|
122
|
+
end
|
123
|
+
|
124
|
+
def prev
|
125
|
+
m = dup
|
126
|
+
m.prev!
|
127
|
+
m
|
128
|
+
end
|
129
|
+
|
130
|
+
def next!
|
109
131
|
@msg ||= if forward?
|
110
132
|
"This is the last position."
|
111
133
|
else
|
@@ -113,16 +135,16 @@ class About_Pos
|
|
113
135
|
end
|
114
136
|
raise No_Next, @msg if !next?
|
115
137
|
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
138
|
+
if forward?
|
139
|
+
@real_index = @real_index + 1
|
140
|
+
else
|
141
|
+
@real_index = @real_index - 1
|
142
|
+
end
|
143
|
+
|
144
|
+
value
|
123
145
|
end
|
124
146
|
|
125
|
-
def prev
|
147
|
+
def prev!
|
126
148
|
@msg ||= if forward?
|
127
149
|
"This is the first position."
|
128
150
|
else
|
@@ -130,13 +152,13 @@ class About_Pos
|
|
130
152
|
end
|
131
153
|
raise No_Prev, @msg if !prev?
|
132
154
|
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
155
|
+
if forward?
|
156
|
+
@real_index = real_index - 1
|
157
|
+
else
|
158
|
+
@real_index = real_index + 1
|
159
|
+
end
|
160
|
+
|
161
|
+
value
|
140
162
|
end
|
141
163
|
|
142
164
|
def dir
|
@@ -179,14 +201,6 @@ class About_Pos
|
|
179
201
|
real_index == last_index
|
180
202
|
end
|
181
203
|
|
182
|
-
def [] k
|
183
|
-
@data[k]
|
184
|
-
end
|
185
|
-
|
186
|
-
def []= k, v
|
187
|
-
@data[k] = v
|
188
|
-
end
|
189
|
-
|
190
204
|
end # === class Meta ===
|
191
205
|
|
192
206
|
|
data/specs/Detect.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
|
2
|
-
describe :
|
2
|
+
describe :detect do
|
3
3
|
|
4
4
|
describe :Back do
|
5
5
|
|
6
6
|
it "returns first value that is truthy" do
|
7
7
|
tracks = []
|
8
|
-
result = About_Pos.
|
8
|
+
result = About_Pos.Back([1,2,3,4]).detect do |v,i,m|
|
9
9
|
tracks << v
|
10
10
|
v == 2
|
11
11
|
end
|
@@ -18,7 +18,7 @@ describe :Detect do
|
|
18
18
|
|
19
19
|
it "returns first value that is truthy" do
|
20
20
|
tracks = []
|
21
|
-
result = About_Pos.
|
21
|
+
result = About_Pos.Forward([1,2,3,4,5]).detect do |v,i,m|
|
22
22
|
tracks << v
|
23
23
|
v == 3
|
24
24
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: about_pos
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- da99
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-01-
|
11
|
+
date: 2015-01-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|