about_pos 0.1.0 → 1.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/about_pos.gemspec +1 -2
- data/lib/about_pos.rb +30 -15
- data/specs/Back.rb +50 -0
- data/specs/Forward.rb +30 -0
- metadata +5 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5a13fbc4f4d32305a5c2a484631122595c3885ec
|
4
|
+
data.tar.gz: f76609319cbc3f3016c60a5aad03ce3c63f1d894
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5bbab446317f930dde77d793ab3e10d42145b59f735ff0147e289d76005fa8239c63ac6d8043ebfb33c70cbdf0423eca955d8e4558bf3e622367d723385728b4
|
7
|
+
data.tar.gz: c3223262b8529197c8e872ae8e232d1eb2f9bfe9e7e47d24daa281710812a5c4872e58cead9fa466c7e2e55d7eb55e861c01015875d89d048bef8cd318263e4f
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
1.0.0
|
data/about_pos.gemspec
CHANGED
@@ -23,8 +23,7 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
24
24
|
spec.require_paths = ["lib"]
|
25
25
|
|
26
|
-
spec.add_development_dependency "bundler", "
|
27
|
-
spec.add_development_dependency "rake"
|
26
|
+
spec.add_development_dependency "bundler", "> 1.5"
|
28
27
|
spec.add_development_dependency "bacon"
|
29
28
|
spec.add_development_dependency "Bacon_Colored"
|
30
29
|
spec.add_development_dependency "pry"
|
data/lib/about_pos.rb
CHANGED
@@ -26,11 +26,15 @@ class About_Pos
|
|
26
26
|
seq = arr.reverse
|
27
27
|
end
|
28
28
|
|
29
|
-
meta = Meta.new(dir, real_index,
|
29
|
+
meta = Meta.new(dir, real_index, arr)
|
30
30
|
|
31
31
|
seq.each_with_index { |v, i|
|
32
32
|
yield meta.value, meta.real_index, meta
|
33
|
-
|
33
|
+
if meta.next?
|
34
|
+
meta = meta.next
|
35
|
+
else
|
36
|
+
break
|
37
|
+
end
|
34
38
|
}
|
35
39
|
end
|
36
40
|
|
@@ -38,25 +42,26 @@ class About_Pos
|
|
38
42
|
|
39
43
|
class Meta
|
40
44
|
|
41
|
-
def initialize dir, real_index,
|
45
|
+
def initialize dir, real_index, arr, prev = nil
|
42
46
|
@arr = arr
|
43
47
|
@data = {}
|
44
48
|
@dir = dir
|
45
49
|
@last_index = arr.size - 1
|
46
50
|
|
47
51
|
@real_index = real_index
|
48
|
-
@value = arr[real_index]
|
49
|
-
@i = i
|
50
52
|
|
51
53
|
@next = nil
|
52
54
|
@prev = prev
|
53
55
|
end
|
54
56
|
|
57
|
+
def value
|
58
|
+
arr[real_index]
|
59
|
+
end
|
60
|
+
|
55
61
|
[
|
56
62
|
:arr,
|
57
63
|
:real_index,
|
58
|
-
:last_index
|
59
|
-
:value, :i
|
64
|
+
:last_index
|
60
65
|
].each { |v|
|
61
66
|
eval %~
|
62
67
|
def #{v}
|
@@ -66,6 +71,16 @@ class About_Pos
|
|
66
71
|
~
|
67
72
|
}
|
68
73
|
|
74
|
+
def grab
|
75
|
+
raise No_Next, "No more values to grab" unless next?
|
76
|
+
if forward?
|
77
|
+
@real_index += 1
|
78
|
+
else
|
79
|
+
@real_index -= 1
|
80
|
+
end
|
81
|
+
value
|
82
|
+
end
|
83
|
+
|
69
84
|
def next
|
70
85
|
@msg ||= if forward?
|
71
86
|
"This is the last position."
|
@@ -76,9 +91,9 @@ class About_Pos
|
|
76
91
|
|
77
92
|
@next ||= begin
|
78
93
|
if forward?
|
79
|
-
Meta.new(dir, real_index + 1,
|
94
|
+
Meta.new(dir, real_index + 1, arr, self)
|
80
95
|
else
|
81
|
-
Meta.new(dir, real_index - 1,
|
96
|
+
Meta.new(dir, real_index - 1, arr, self)
|
82
97
|
end
|
83
98
|
end
|
84
99
|
end
|
@@ -93,9 +108,9 @@ class About_Pos
|
|
93
108
|
|
94
109
|
@prev ||= begin
|
95
110
|
if forward?
|
96
|
-
Meta.new(dir, real_index - 1,
|
111
|
+
Meta.new(dir, real_index - 1, arr)
|
97
112
|
else
|
98
|
-
Meta.new(dir, real_index + 1,
|
113
|
+
Meta.new(dir, real_index + 1, arr)
|
99
114
|
end
|
100
115
|
end
|
101
116
|
end
|
@@ -114,17 +129,17 @@ class About_Pos
|
|
114
129
|
|
115
130
|
def next?
|
116
131
|
if forward?
|
117
|
-
real_index
|
132
|
+
real_index < last_index
|
118
133
|
else
|
119
|
-
real_index
|
134
|
+
real_index > 0
|
120
135
|
end
|
121
136
|
end
|
122
137
|
|
123
138
|
def prev?
|
124
139
|
if forward?
|
125
|
-
real_index
|
140
|
+
real_index > 0
|
126
141
|
else
|
127
|
-
real_index
|
142
|
+
real_index < last_index
|
128
143
|
end
|
129
144
|
end
|
130
145
|
|
data/specs/Back.rb
CHANGED
@@ -91,6 +91,56 @@ describe "Back" do
|
|
91
91
|
|
92
92
|
end # === describe next ===
|
93
93
|
|
94
|
+
describe :grab do
|
95
|
+
|
96
|
+
it "grabs the :next value" do
|
97
|
+
tracks = []
|
98
|
+
About_Pos.Back([1,2,3,4]) { |v,i,m|
|
99
|
+
tracks << m.grab
|
100
|
+
}
|
101
|
+
tracks.should == [3,1]
|
102
|
+
end # === it grabs the :next value
|
103
|
+
|
104
|
+
it "skips grabbed values" do
|
105
|
+
tracks = []
|
106
|
+
About_Pos.Back([1,2,3,4,5]) { |v,i,m|
|
107
|
+
tracks << m.grab if m.next?
|
108
|
+
}
|
109
|
+
tracks.should == [4,2]
|
110
|
+
end # === it skips grabbed values
|
111
|
+
|
112
|
+
end # === describe :grab
|
113
|
+
|
114
|
+
describe ".top?" do
|
115
|
+
|
116
|
+
it "returns true if at real first" do
|
117
|
+
track = []
|
118
|
+
About_Pos.Back([1,2,3,4,5]) { |v,i,m| track.push m.top? }
|
119
|
+
track.should == [false, false, false, false, true]
|
120
|
+
end
|
121
|
+
|
122
|
+
end # === describe .top? ===
|
123
|
+
|
124
|
+
describe ".middle?" do
|
125
|
+
|
126
|
+
it "returns true if not at real first and real last" do
|
127
|
+
track = []
|
128
|
+
About_Pos.Back([4,5,6]) { |v,i,m| track.push m.middle? }
|
129
|
+
track.should == [false, true, false]
|
130
|
+
end
|
131
|
+
|
132
|
+
end # === describe .middle? ===
|
133
|
+
|
134
|
+
describe ".bottom?" do
|
135
|
+
|
136
|
+
it "returns true if at real last" do
|
137
|
+
track = []
|
138
|
+
About_Pos.Back([10,11,12,15]) { |v,i,m| track.push m.bottom? }
|
139
|
+
track.should == [true, false, false, false]
|
140
|
+
end
|
141
|
+
|
142
|
+
end # === describe .bottom? ===
|
143
|
+
|
94
144
|
end # === describe Meta ===
|
95
145
|
|
96
146
|
end # === describe about_pos ===
|
data/specs/Forward.rb
CHANGED
@@ -81,6 +81,36 @@ describe "Forward" do
|
|
81
81
|
|
82
82
|
end # === describe prev ===
|
83
83
|
|
84
|
+
describe :grab do
|
85
|
+
|
86
|
+
it "takes the next value" do
|
87
|
+
tracks = []
|
88
|
+
About_Pos.Forward([1,2,3,4]) do |v,i,m|
|
89
|
+
tracks << m.grab
|
90
|
+
end
|
91
|
+
tracks.should == [2,4]
|
92
|
+
end # === it takes the next value
|
93
|
+
|
94
|
+
it "skips the value that was taken" do
|
95
|
+
tracks = []
|
96
|
+
About_Pos.Forward([1,2,3,4]) do |v,i,m|
|
97
|
+
tracks << v
|
98
|
+
m.grab
|
99
|
+
end
|
100
|
+
tracks.should == [1,3]
|
101
|
+
end # === it skips the value that was taken
|
102
|
+
|
103
|
+
it "raises an error if there aren't anymore values" do
|
104
|
+
lambda {
|
105
|
+
About_Pos.Forward([1,2,3,4]) do |v,i,m|
|
106
|
+
5.times { m.grab }
|
107
|
+
end
|
108
|
+
}.should.raise(About_Pos::No_Next).
|
109
|
+
message.should.match /No more values to grab/
|
110
|
+
end # === it raises an error if there aren't anymore values
|
111
|
+
|
112
|
+
end # === describe :grab
|
113
|
+
|
84
114
|
describe "saving/reading data ([], []=)" do
|
85
115
|
|
86
116
|
it "saves a value to be used on .prev meta" do
|
metadata
CHANGED
@@ -1,43 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: about_pos
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.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:
|
11
|
+
date: 2015-01-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.5'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.5'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: rake
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ">="
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ">="
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
28
|
name: bacon
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -123,7 +109,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
123
109
|
version: '0'
|
124
110
|
requirements: []
|
125
111
|
rubyforge_project:
|
126
|
-
rubygems_version: 2.
|
112
|
+
rubygems_version: 2.4.5
|
127
113
|
signing_key:
|
128
114
|
specification_version: 4
|
129
115
|
summary: Provide more meta info while you loop back/forth on your arrays.
|