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.
Files changed (6) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/bin/test +1 -1
  4. data/lib/about_pos.rb +83 -69
  5. data/specs/Detect.rb +3 -3
  6. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fec989b13e7dd8f14816edee14e295e2e0da207c
4
- data.tar.gz: 03161410f565e475d604d9e46db00ba3d32e3986
3
+ metadata.gz: d97da717a18d64ca3817fd3ee1525325c7887ba3
4
+ data.tar.gz: e0f34a75858202f72b57e13d19f1e957681211a7
5
5
  SHA512:
6
- metadata.gz: ec6a38347b1457ea15a4f558bff26c6c3dbf204cdf4e2c1e375e8ca71c2929570ed54b791fc54128ecac672ff289e98148784f3bc707fae7c82485a57c17c7cc
7
- data.tar.gz: 3f7c496157c6a8ed2a08339bae3204e2af74761f3a62e1377302730493446dfd8db558f58ce2acfe7b708ad787bd64c8df9909fe982fc2b8bdf517191e791a21
6
+ metadata.gz: cf3bf9d44a5104d4457d73dc3c00c7123b05f87b56a27637bed0f3bea8d9ef820dbff46be5e545adef42d1275528f7e6ff9120ae35f28f8ea8b530e0ac187469
7
+ data.tar.gz: e8eb2e70c7354174662951f869930c98c3ced65acb49f6c6a73a7e0bf04d09be958ba1aa997ffb46836cd3ef51a436354a7a4dd341e8b4d4b2d8f43ea9a93d39
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.1.0
1
+ 2.0.0
data/bin/test CHANGED
@@ -2,9 +2,9 @@
2
2
  # -*- bash -*-
3
3
  #
4
4
  #
5
+ files="specs/$1.rb"
5
6
  set -u -e -o pipefail
6
7
 
7
- files="specs/$@.rb"
8
8
  if [[ -f "$files" ]]; then
9
9
  shift
10
10
  else
@@ -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 << self
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
- private
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
- seq.each_with_index { |v, i|
36
- yield meta.value, meta.real_index, meta
37
- if meta.next?
38
- meta = meta.next
39
- else
40
- break
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 self ===
46
-
47
- class Detect
34
+ end # === class Enum
48
35
 
49
- class << self
36
+ class << self
50
37
 
51
- def Back arr
52
- About_Pos.Back(arr) { |v,i,m|
53
- break if yield(v,i,m)
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
- def Forward arr
58
- About_Pos.Forward(arr) { |v,i,m|
59
- break if yield(v,i,m)
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
- end # === class self
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
- @next = nil
78
- @prev = prev
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
- @next ||= begin
117
- if forward?
118
- Meta.new(dir, real_index + 1, arr, self)
119
- else
120
- Meta.new(dir, real_index - 1, arr, self)
121
- end
122
- end
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
- @prev ||= begin
134
- if forward?
135
- Meta.new(dir, real_index - 1, arr)
136
- else
137
- Meta.new(dir, real_index + 1, arr)
138
- end
139
- end
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
 
@@ -1,11 +1,11 @@
1
1
 
2
- describe :Detect do
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.Detect.Back([1,2,3,4]) do |v,i,m|
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.Detect.Forward([1,2,3,4,5]) do |v,i,m|
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: 1.1.0
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-08 00:00:00.000000000 Z
11
+ date: 2015-01-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler