doubly_linked_list 0.0.2 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -13
- data/README.md +1 -1
- data/doubly_linked_list.gemspec +1 -1
- data/lib/doubly_linked_list.rb +5 -33
- data/spec/doubly_linked_list_spec.rb +128 -0
- metadata +15 -15
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
YWZlOWQ1Mzk2NTkyNDUzMTVhYzE3M2QzODhjMTk4MjgxODBkZjU1OQ==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: cd01a06702ae377d5190ddda0b1fc080f713cbdb
|
4
|
+
data.tar.gz: dfd144070ace491c819c55047734cb91058a2348
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
ZjhjZmI2ZDVjMjdkYjk2ZTY4YmQ0YjA2Y2Q4MTIwMTI3OTNkOGUwZjViNDNj
|
11
|
-
NTM5MTViYTM0YWI4ZGNhNDMwNjYyNzg1ZjY5ODFjNDZlYWNkNzk=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
NjkyMzcwY2Q1NTg4NTg2OTdjMjUwZGM4YmRkMjA0YzM4ZGE3ZGZlOWNlZjhh
|
14
|
-
OWU0YmE3OGYwZGY4MjE2ZTgxNjM5NjE3NmFhMmQxNWMwMjE3NjRhZjE4Y2Y5
|
15
|
-
NGE4YjI0OTEyYzE4ZDgxNzg2OTdmNjRjZGQyODE5MjAyOTZhYjQ=
|
6
|
+
metadata.gz: ab08e7e1cde305e1dab14aca6f6b700f1407e02755ea7fe575828017f5fbd56a4e71276a9370ae4d66cf40b6cb5ff5f3978141acd3fb4ddb12f2e3ba23654411
|
7
|
+
data.tar.gz: f1a841166ebe687f5a25103cb4d8a873dee728eb2dab6734242b2810bc11233e6edf5ec5ae7e76211ecfd78b3aaec766fe87730f52efd2c82f6861087cfbfc26
|
data/README.md
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
[![Build Status](https://travis-ci.org/elrayle/doubly_linked_list.png?branch=master)](https://travis-ci.org/elrayle/doubly_linked_list)
|
4
4
|
[![Coverage Status](https://coveralls.io/repos/elrayle/doubly_linked_list/badge.png?branch=master)](https://coveralls.io/r/elrayle/doubly_linked_list?branch=master)
|
5
5
|
[![Gem Version](https://badge.fury.io/rb/doubly_linked_list.svg)](http://badge.fury.io/rb/doubly_linked_list)
|
6
|
-
[![Dependency Status](https://www.versioneye.com/ruby/doubly_linked_list/0.0.
|
6
|
+
[![Dependency Status](https://www.versioneye.com/ruby/doubly_linked_list/0.0.2/badge.svg)](https://www.versioneye.com/ruby/doubly_linked_list/0.0.2)
|
7
7
|
|
8
8
|
|
9
9
|
Ruby implementation of doubly linked list, following some Ruby idioms.
|
data/doubly_linked_list.gemspec
CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = 'doubly_linked_list'
|
7
|
-
spec.version = '0.0.
|
7
|
+
spec.version = '0.0.4'
|
8
8
|
spec.authors = ["E. Lynette Rayle"]
|
9
9
|
spec.email = ["elr37@cornell.edu"]
|
10
10
|
spec.platform = Gem::Platform::RUBY
|
data/lib/doubly_linked_list.rb
CHANGED
@@ -86,18 +86,6 @@ class DoublyLinkedList
|
|
86
86
|
@list.delete_at(head)
|
87
87
|
end
|
88
88
|
|
89
|
-
##
|
90
|
-
# Iterates over nodes from top to bottom passing node data to the block if
|
91
|
-
# given. If no block given, returns +Enumerator+.
|
92
|
-
#
|
93
|
-
# @returns +Enumerator+ or yields data to the block stored in every node on the
|
94
|
-
# list.
|
95
|
-
#
|
96
|
-
def each
|
97
|
-
return to_enum(__callee__) unless block_given?
|
98
|
-
__each { |node| yield(node.data) }
|
99
|
-
end
|
100
|
-
|
101
89
|
# Returns list array without list info.
|
102
90
|
#
|
103
91
|
def to_a
|
@@ -106,10 +94,11 @@ class DoublyLinkedList
|
|
106
94
|
alias_method :to_ary, :to_a
|
107
95
|
|
108
96
|
# Passing all missing methods to the list so all array operations can be performed.
|
109
|
-
def method_missing method_id, *args
|
110
|
-
# binding.pry
|
97
|
+
def method_missing method_id, *args, &block
|
111
98
|
begin
|
112
|
-
return @list.send(method_id,*args)
|
99
|
+
return @list.send(method_id,*args, &block) if @list.respond_to?(method_id)
|
100
|
+
return @list_info.send(method_id,*args,&block) if @list_info.respond_to?(method_id)
|
101
|
+
super
|
113
102
|
rescue
|
114
103
|
super
|
115
104
|
end
|
@@ -119,16 +108,7 @@ class DoublyLinkedList
|
|
119
108
|
sprintf('#<%s:%#x %s>', self.class, self.__id__, to_a.inspect)
|
120
109
|
end
|
121
110
|
|
122
|
-
|
123
|
-
# #
|
124
|
-
# # == Returns:
|
125
|
-
# # +self+
|
126
|
-
# #
|
127
|
-
# def to_list
|
128
|
-
# self
|
129
|
-
# end
|
130
|
-
|
131
|
-
private
|
111
|
+
private
|
132
112
|
|
133
113
|
def head
|
134
114
|
@list && @list.size > 0 ? 0 : nil
|
@@ -137,12 +117,4 @@ class DoublyLinkedList
|
|
137
117
|
def tail
|
138
118
|
@list && @list.size > 0 ? @list.size-1 : nil
|
139
119
|
end
|
140
|
-
|
141
|
-
def __each
|
142
|
-
curr_node = @head
|
143
|
-
while(curr_node)
|
144
|
-
yield curr_node
|
145
|
-
curr_node = curr_node.next
|
146
|
-
end
|
147
|
-
end
|
148
120
|
end
|
@@ -199,4 +199,132 @@ describe 'DoublyLinkedList' do
|
|
199
199
|
end
|
200
200
|
end
|
201
201
|
|
202
|
+
describe '#missing_method' do
|
203
|
+
before do
|
204
|
+
class Dummy
|
205
|
+
def hello
|
206
|
+
"hello back at you"
|
207
|
+
end
|
208
|
+
def size
|
209
|
+
"very large indeed"
|
210
|
+
end
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
214
|
+
context "when list responds to missing method" do
|
215
|
+
it "should pass method to list and succeed" do
|
216
|
+
l = DoublyLinkedList.new :items => ['cat','dog','rabbit','fish'], :list_info => Dummy.new
|
217
|
+
expect(l.values_at(1..2)).to eq ['dog','rabbit']
|
218
|
+
expect(l.sort).to eq ['cat','dog','fish','rabbit']
|
219
|
+
end
|
220
|
+
|
221
|
+
it "should pass method to list only even if list_info has the same method and succeed" do
|
222
|
+
l = DoublyLinkedList.new :items => ['cat','dog','rabbit','fish'], :list_info => Dummy.new
|
223
|
+
expect(l.size).to eq 4
|
224
|
+
end
|
225
|
+
|
226
|
+
it "should pass method each to the list" do
|
227
|
+
l = DoublyLinkedList.new :items => ['cat','dog','rabbit','fish'], :list_info => Dummy.new
|
228
|
+
a = []
|
229
|
+
l.each do |i|
|
230
|
+
a << i
|
231
|
+
expect(l.to_a).to include i
|
232
|
+
end
|
233
|
+
expect(a).to eq ['cat','dog','rabbit','fish']
|
234
|
+
end
|
235
|
+
|
236
|
+
it "should pass method each to the list when block is inline" do
|
237
|
+
l = DoublyLinkedList.new :items => ['cat','dog','rabbit','fish'], :list_info => Dummy.new
|
238
|
+
a = []
|
239
|
+
l.each { |i| a<<i; expect(l.to_a).to include i }
|
240
|
+
expect(a).to eq ['cat','dog','rabbit','fish']
|
241
|
+
end
|
242
|
+
end
|
243
|
+
|
244
|
+
context "when list does not respond to missing method" do
|
245
|
+
it "should pass method to list_info and succeed if list_info responds to that method" do
|
246
|
+
l = DoublyLinkedList.new :items => ['cat','dog','rabbit','fish'], :list_info => Dummy.new
|
247
|
+
expect(l.hello).to eq 'hello back at you'
|
248
|
+
end
|
249
|
+
|
250
|
+
it "should not pass array method to list_info when @list is empty and succeed if list_info responds to that method" do
|
251
|
+
l = DoublyLinkedList.new :list_info => Dummy.new
|
252
|
+
expect(l.size).not_to eq 'very large indeed'
|
253
|
+
expect(l.size).to eq 0
|
254
|
+
end
|
255
|
+
end
|
256
|
+
|
257
|
+
context "when neither list nor list_info respond to missing method" do
|
258
|
+
it "should raise an error if it is not an array method nor list_info method" do
|
259
|
+
l = DoublyLinkedList.new :items => ['cat','dog','rabbit','fish'], :list_info => Dummy.new
|
260
|
+
expect{ l.foo }.to raise_error(NoMethodError, /undefined method `foo'/)
|
261
|
+
end
|
262
|
+
end
|
263
|
+
end
|
264
|
+
|
265
|
+
describe '#inspect' do
|
266
|
+
it "should return class and items" do
|
267
|
+
l = DoublyLinkedList.new :items => ['cat','dog','rabbit']
|
268
|
+
expect(l.inspect).to match /#<DoublyLinkedList:0x(\d|[abcdef])* \[\"cat\", \"dog\", \"rabbit\"\]/
|
269
|
+
end
|
270
|
+
end
|
271
|
+
|
272
|
+
describe "Array" do
|
273
|
+
describe "#move" do
|
274
|
+
it "should move an element to first position" do
|
275
|
+
a = [1,2,3,4,5,6,7,8,9,10]
|
276
|
+
expect(a.move(4,0)).to eq [5,1,2,3,4,6,7,8,9,10]
|
277
|
+
end
|
278
|
+
|
279
|
+
it "should move an element to last position" do
|
280
|
+
a = [1,2,3,4,5,6,7,8,9,10]
|
281
|
+
expect(a.move(5,9)).to eq [1,2,3,4,5,7,8,9,10,6]
|
282
|
+
end
|
283
|
+
|
284
|
+
it "should move an element from first to middle position" do
|
285
|
+
a = [1,2,3,4,5,6,7,8,9,10]
|
286
|
+
expect(a.move(0,4)).to eq [2,3,4,5,1,6,7,8,9,10]
|
287
|
+
end
|
288
|
+
|
289
|
+
it "should move an element from last to middle position" do
|
290
|
+
a = [1,2,3,4,5,6,7,8,9,10]
|
291
|
+
expect(a.move(9,4)).to eq [1,2,3,4,10,5,6,7,8,9]
|
292
|
+
end
|
293
|
+
|
294
|
+
it "should move an element forward from middle" do
|
295
|
+
a = [1,2,3,4,5,6,7,8,9,10]
|
296
|
+
expect(a.move(3,6)).to eq [1,2,3,5,6,7,4,8,9,10]
|
297
|
+
end
|
298
|
+
|
299
|
+
it "should move an element backward from middle" do
|
300
|
+
a = [1,2,3,4,5,6,7,8,9,10]
|
301
|
+
expect(a.move(6,3)).to eq [1,2,3,7,4,5,6,8,9,10]
|
302
|
+
end
|
303
|
+
|
304
|
+
it "should move an element beyond end of list" do
|
305
|
+
a = [1,2,3,4,5,6,7,8,9,10]
|
306
|
+
expect(a.move(6,12)).to eq [1,2,3,4,5,6,8,9,10,nil,nil,nil,7]
|
307
|
+
end
|
308
|
+
|
309
|
+
it "should move an element counting from right when 'from' is negative" do
|
310
|
+
a = [1,2,3,4,5,6,7,8,9,10]
|
311
|
+
expect(a.move(-3,2)).to eq [1,2,8,3,4,5,6,7,9,10]
|
312
|
+
end
|
313
|
+
|
314
|
+
it "should move an element counting to position counting from right when 'to' is negative" do
|
315
|
+
a = [1,2,3,4,5,6,7,8,9,10]
|
316
|
+
expect(a.move(2,-3)).to eq [1,2,4,5,6,7,8,3,9,10]
|
317
|
+
end
|
318
|
+
|
319
|
+
it "should add nil at 'to' position if 'from' negative number exceeds size" do
|
320
|
+
a = [1,2,3,4,5,6,7,8,9,10]
|
321
|
+
expect(a.move(-20,3)).to eq [1,2,3,nil,4,5,6,7,8,9,10]
|
322
|
+
end
|
323
|
+
|
324
|
+
it "should raise error if 'to' negative number exceeds size" do
|
325
|
+
a = [1,2,3,4,5,6,7,8,9,10]
|
326
|
+
expect{ a.move(3,-20) }.to raise_error(IndexError,'index -19 too small for array; minimum: -9')
|
327
|
+
end
|
328
|
+
end
|
329
|
+
end
|
202
330
|
end
|
metadata
CHANGED
@@ -1,69 +1,69 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: doubly_linked_list
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- E. Lynette Rayle
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-01-
|
11
|
+
date: 2015-01-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pry
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
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: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rdoc
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: coveralls
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
description: Ruby implementation of doubly_linked_lists using an array to hold and
|
@@ -76,9 +76,9 @@ extra_rdoc_files:
|
|
76
76
|
- LICENSE.txt
|
77
77
|
- README.md
|
78
78
|
files:
|
79
|
-
- .coveralls.yml
|
80
|
-
- .gitignore
|
81
|
-
- .travis.yml
|
79
|
+
- ".coveralls.yml"
|
80
|
+
- ".gitignore"
|
81
|
+
- ".travis.yml"
|
82
82
|
- Gemfile
|
83
83
|
- LICENSE.txt
|
84
84
|
- README.md
|
@@ -97,12 +97,12 @@ require_paths:
|
|
97
97
|
- lib
|
98
98
|
required_ruby_version: !ruby/object:Gem::Requirement
|
99
99
|
requirements:
|
100
|
-
- -
|
100
|
+
- - ">="
|
101
101
|
- !ruby/object:Gem::Version
|
102
102
|
version: 1.9.3
|
103
103
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
104
104
|
requirements:
|
105
|
-
- -
|
105
|
+
- - ">="
|
106
106
|
- !ruby/object:Gem::Version
|
107
107
|
version: '0'
|
108
108
|
requirements: []
|