about_pos 1.1.0 → 2.0.0

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