linked 0.4.0 → 0.5.1
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 +5 -5
- data/.rubocop.yml +71 -0
- data/.travis.yml +1 -0
- data/Gemfile +2 -0
- data/Rakefile +18 -5
- data/bin/console +4 -3
- data/lib/linked.rb +4 -2
- data/lib/linked/item.rb +20 -27
- data/lib/linked/list.rb +95 -272
- data/lib/linked/list_enumerable.rb +86 -0
- data/lib/linked/listable.rb +421 -258
- data/lib/linked/util.rb +10 -0
- data/lib/linked/version.rb +2 -1
- data/linked.gemspec +28 -16
- metadata +56 -11
- data/lib/linked/list/eol.rb +0 -84
data/lib/linked/util.rb
ADDED
data/lib/linked/version.rb
CHANGED
data/linked.gemspec
CHANGED
@@ -1,26 +1,38 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
lib = File.expand_path('lib', __dir__)
|
3
5
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
6
|
require 'linked/version'
|
5
7
|
|
6
8
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name =
|
9
|
+
spec.name = 'linked'
|
8
10
|
spec.version = Linked::VERSION
|
9
|
-
spec.authors = [
|
10
|
-
spec.email = [
|
11
|
+
spec.authors = ['Sebastian Lindberg']
|
12
|
+
spec.email = ['seb.lindberg@gmail.com']
|
11
13
|
|
12
|
-
spec.summary =
|
13
|
-
spec.description =
|
14
|
-
|
15
|
-
|
14
|
+
spec.summary = 'Yet another linked list implementation in Ruby.'
|
15
|
+
spec.description = 'Yes, there are a lot of linked list implementaions ' \
|
16
|
+
'out there but I wrote my own all the same. This ' \
|
17
|
+
'library is ment to be subclassed/included by other ' \
|
18
|
+
'objects that that behave like linked lists.'
|
19
|
+
spec.homepage = 'https://github.com/seblindberg/ruby-linked'
|
20
|
+
spec.license = 'MIT'
|
16
21
|
|
17
|
-
spec.files = `git ls-files -z
|
18
|
-
|
22
|
+
spec.files = `git ls-files -z`
|
23
|
+
.split("\x0")
|
24
|
+
.reject { |f| f.match(%r{^(test|spec|features)/}) }
|
25
|
+
spec.bindir = 'exe'
|
19
26
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
20
|
-
spec.require_paths = [
|
27
|
+
spec.require_paths = ['lib']
|
28
|
+
|
29
|
+
spec.metadata['yard.run'] = 'yri'
|
21
30
|
|
22
|
-
spec.add_development_dependency
|
23
|
-
spec.add_development_dependency
|
24
|
-
spec.add_development_dependency
|
25
|
-
spec.add_development_dependency
|
31
|
+
spec.add_development_dependency 'bundler', '~> 1.12'
|
32
|
+
spec.add_development_dependency 'coveralls', '~> 0.8'
|
33
|
+
spec.add_development_dependency 'minitest', '~> 5.0'
|
34
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
35
|
+
spec.add_development_dependency 'rubocop', '~> 0.52'
|
36
|
+
spec.add_development_dependency 'simplecov', '~> 0.9'
|
37
|
+
spec.add_development_dependency 'yard', '~> 0.9'
|
26
38
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: linked
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sebastian Lindberg
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-05-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -25,19 +25,19 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.12'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: coveralls
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '0.8'
|
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
|
-
version: '
|
40
|
+
version: '0.8'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: minitest
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -53,19 +53,61 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '5.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: rake
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '0
|
61
|
+
version: '10.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
|
-
version: '0
|
68
|
+
version: '10.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rubocop
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0.52'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0.52'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: simplecov
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0.9'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0.9'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: yard
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0.9'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0.9'
|
69
111
|
description: Yes, there are a lot of linked list implementaions out there but I wrote
|
70
112
|
my own all the same. This library is ment to be subclassed/included by other objects
|
71
113
|
that that behave like linked lists.
|
@@ -76,6 +118,7 @@ extensions: []
|
|
76
118
|
extra_rdoc_files: []
|
77
119
|
files:
|
78
120
|
- ".gitignore"
|
121
|
+
- ".rubocop.yml"
|
79
122
|
- ".travis.yml"
|
80
123
|
- Gemfile
|
81
124
|
- LICENSE.txt
|
@@ -86,14 +129,16 @@ files:
|
|
86
129
|
- lib/linked.rb
|
87
130
|
- lib/linked/item.rb
|
88
131
|
- lib/linked/list.rb
|
89
|
-
- lib/linked/
|
132
|
+
- lib/linked/list_enumerable.rb
|
90
133
|
- lib/linked/listable.rb
|
134
|
+
- lib/linked/util.rb
|
91
135
|
- lib/linked/version.rb
|
92
136
|
- linked.gemspec
|
93
137
|
homepage: https://github.com/seblindberg/ruby-linked
|
94
138
|
licenses:
|
95
139
|
- MIT
|
96
|
-
metadata:
|
140
|
+
metadata:
|
141
|
+
yard.run: yri
|
97
142
|
post_install_message:
|
98
143
|
rdoc_options: []
|
99
144
|
require_paths:
|
@@ -110,7 +155,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
110
155
|
version: '0'
|
111
156
|
requirements: []
|
112
157
|
rubyforge_project:
|
113
|
-
rubygems_version: 2.
|
158
|
+
rubygems_version: 2.7.3
|
114
159
|
signing_key:
|
115
160
|
specification_version: 4
|
116
161
|
summary: Yet another linked list implementation in Ruby.
|
data/lib/linked/list/eol.rb
DELETED
@@ -1,84 +0,0 @@
|
|
1
|
-
module Linked
|
2
|
-
class List
|
3
|
-
# End Of List
|
4
|
-
#
|
5
|
-
# This class implements a special list item that is placed at both the end
|
6
|
-
# and the beginning of a chain of listable items to form a list. The naming
|
7
|
-
# (end of list) comes from the fact that this object, by returning true for
|
8
|
-
# calls to #nil?, signifies the end of a list of Items. In both directions
|
9
|
-
# as a matter of fact, which is why the head and tail objects defined by
|
10
|
-
# Item are combined into one.
|
11
|
-
#
|
12
|
-
# In a nutshell, the structure looks something like this:
|
13
|
-
#
|
14
|
-
# +-------------------- EOL --------------------+
|
15
|
-
# | (head) (tail) |
|
16
|
-
# +---------------------------------------------+
|
17
|
-
# ^ +-- Item 1 ---+ +-- Item N ---+ ^
|
18
|
-
# +-| prev | next |<- ... ->| prev | next |-+
|
19
|
-
# +------+------+ +------+------+
|
20
|
-
|
21
|
-
class EOL
|
22
|
-
include Listable
|
23
|
-
|
24
|
-
# Calling #delete on the EOL is not supported and would break the
|
25
|
-
# connection between the list and its items.
|
26
|
-
|
27
|
-
undef delete
|
28
|
-
|
29
|
-
# Creates a new enf-of-list, as part of a list, with no items yet added to
|
30
|
-
# it.
|
31
|
-
#
|
32
|
-
# list - a List object.
|
33
|
-
|
34
|
-
def initialize(list)
|
35
|
-
super()
|
36
|
-
self.list = list
|
37
|
-
reset
|
38
|
-
end
|
39
|
-
|
40
|
-
# EOL objects will return true when asked if they are nil. This is
|
41
|
-
# foremost an implementation detail to comply with the requirements of the
|
42
|
-
# Item class, but also logical in the sense that end-of-list objects are
|
43
|
-
# not really part of the list, and should therefore be considered nil.
|
44
|
-
#
|
45
|
-
# Returns true.
|
46
|
-
|
47
|
-
def nil?
|
48
|
-
true
|
49
|
-
end
|
50
|
-
|
51
|
-
# Inserts one or more items at the end of the list.
|
52
|
-
#
|
53
|
-
# See Item#append for more details.
|
54
|
-
|
55
|
-
def append(object)
|
56
|
-
empty? ? super : prev!.append(object)
|
57
|
-
end
|
58
|
-
|
59
|
-
# Inserts one or more items at the beginning of the list.
|
60
|
-
#
|
61
|
-
# See Item#append for more details.
|
62
|
-
|
63
|
-
def prepend(object)
|
64
|
-
empty? ? super : next!.prepend(object)
|
65
|
-
end
|
66
|
-
|
67
|
-
# Private helper to reset the EOL to its initial state. This method should
|
68
|
-
# never be called directly as it leaves the both the list and the items in
|
69
|
-
# an inconsistant state.
|
70
|
-
|
71
|
-
private def reset
|
72
|
-
self.prev = self.next = self
|
73
|
-
end
|
74
|
-
|
75
|
-
# Private helper to check if the item chain is empty.
|
76
|
-
#
|
77
|
-
# Return true if the chain is empty, otherwise nil.
|
78
|
-
|
79
|
-
private def empty?
|
80
|
-
prev!.equal? self
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|