rubystructures 0.0.1 → 0.0.2

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.
data/README.md CHANGED
@@ -18,8 +18,8 @@ Or install it yourself as:
18
18
 
19
19
  ## Usage
20
20
 
21
- ### Stack
22
- RubyStructures::Stack provides a First in, First out stack implementation.
21
+ ### Stacks
22
+ RubyStructures::Stack provides a First in, Last out stack implementation.
23
23
 
24
24
  Create a new Stack:
25
25
  ```ruby
@@ -60,6 +60,62 @@ Is the Stack empty?
60
60
  # => false
61
61
  ```
62
62
 
63
+ ### Queues
64
+
65
+ `RubyStructures::Queue` implements a First in, First out queue.
66
+
67
+ Create a new Queue:
68
+ ```ruby
69
+ require 'rubystructures'
70
+
71
+ @queue = RubyStructures::Queue.new
72
+ ```
73
+
74
+ Push a value onto the Queue:
75
+ ```ruby
76
+ @queue.push(42)
77
+ # => true
78
+ ```
79
+
80
+ You can also use `enqueue` as an alias for push:
81
+ ```ruby
82
+ @queue.enqueue(42)
83
+ # => true
84
+ ```
85
+
86
+ Pop a value off the Queue:
87
+ ```ruby
88
+ @queue.pop
89
+ # => 42
90
+ ```
91
+
92
+ You can also use `dequeue` as an alias for pop:
93
+ ```ruby
94
+ @queue.dequeue
95
+ # => 42
96
+ ```
97
+
98
+ Take a peek at the values at the front of back of the Queue without removing them:
99
+ ```ruby
100
+ @queue.front
101
+ # => 42
102
+
103
+ @queue.back
104
+ # => 7
105
+ ```
106
+
107
+ Get the size of the Queue:
108
+ ```ruby
109
+ @queue.size
110
+ # => 4
111
+ ```
112
+
113
+ Check whether or not the Queue is empty:
114
+ ```ruby
115
+ @queue.empty?
116
+ # => false
117
+ ```
118
+
63
119
  ## Contributing
64
120
 
65
121
  1. Fork it ( https://github.com/connorjacobsen/rubystructures/fork )
@@ -0,0 +1,116 @@
1
+ module RubyStructures
2
+ class Queue
3
+ # Public: Creates a new instance of Queue.
4
+ #
5
+ # Examples
6
+ #
7
+ # @queue = Queue.new
8
+ # # => Queue
9
+ #
10
+ # Returns a new instance of Queue.
11
+ def initialize
12
+ @storage = []
13
+ end
14
+
15
+ # Public: Returns the size of the Queue.
16
+ #
17
+ # Examples
18
+ #
19
+ # @queue.size
20
+ # # => 1
21
+ #
22
+ # Returns the Integer size of the Queue.
23
+ def size
24
+ @storage.size
25
+ end
26
+
27
+ # Public: Adds a value to the Queue.
28
+ #
29
+ # value - Ruby data type, can be of any class type.
30
+ #
31
+ # Examples
32
+ #
33
+ # @queue.push(42)
34
+ # # => true
35
+ #
36
+ # Returns true if the value is successfully added to the Queue; returns
37
+ # false otherwise.
38
+ def push(value)
39
+ if @storage.insert(0, value)
40
+ true
41
+ else
42
+ false
43
+ end
44
+ end
45
+
46
+ # Public: Returns and removes the next item in the Queue.
47
+ #
48
+ # Examples
49
+ #
50
+ # @queue.pop
51
+ # # => 42
52
+ #
53
+ # Returns the next value to be served by the Queue, unless
54
+ # the Queue is empty, then returns nil.
55
+ def pop
56
+ @storage.pop
57
+ end
58
+
59
+ # Public: Returns the next value to be served by the Queue without
60
+ # removing the value from the Queue.
61
+ #
62
+ # Examples
63
+ #
64
+ # @queue.front
65
+ # # => 42
66
+ #
67
+ # Returns the value of the next item to be served in the Queue.
68
+ def front
69
+ @storage.last
70
+ end
71
+
72
+ # Public: Returns the last value added to the Queue.
73
+ #
74
+ # Examples
75
+ #
76
+ # @queue.back
77
+ # # => 42
78
+ #
79
+ # Returns the value at the end of the Queue, which would be served last.
80
+ def back
81
+ @storage.first
82
+ end
83
+
84
+ # Public: Checks if whether or not the Queue is empty.
85
+ #
86
+ # Examples
87
+ #
88
+ # @queue.empty?
89
+ # # => true
90
+ #
91
+ # Returns true if the Queue is empty; false otherwise.
92
+ def empty?
93
+ @storage.size == 0
94
+ end
95
+
96
+ # Alias for Queue.push(value)
97
+ #
98
+ # Examples
99
+ #
100
+ # @queue.push(42)
101
+ # # => true
102
+ def enqueue(value)
103
+ self.push value
104
+ end
105
+
106
+ # Alias for Queue.pop
107
+ #
108
+ # Examples
109
+ #
110
+ # @queue.dequeue
111
+ # # => 42
112
+ def dequeue
113
+ self.pop
114
+ end
115
+ end
116
+ end
@@ -0,0 +1,92 @@
1
+ module RubyStructures
2
+ class Stack
3
+ # Public: Creates a new instance of Stack with default values.
4
+ #
5
+ # Examples
6
+ #
7
+ # Stack.new
8
+ #
9
+ # Returns a new instance of RubyStuctures::Stack.
10
+ def initialize
11
+ @storage = Array.new
12
+ end
13
+
14
+ # Public: Returns the Integer current size of the stack.
15
+ # We can rely on the Ruby Array to provide us with the correct stack
16
+ # size, which allows us to not have a :size instance variable.
17
+ #
18
+ # Examples
19
+ #
20
+ # @stack.size
21
+ # # => 42
22
+ #
23
+ # Returns the size of the stack.
24
+ def size
25
+ @storage.size
26
+ end
27
+
28
+ # Public: Adds value to the Stack.
29
+ #
30
+ # value - Ruby data type, can be of any class type.
31
+ #
32
+ # Examples
33
+ #
34
+ # @stack.push(42)
35
+ # # => true
36
+ #
37
+ # Returns true if the value was successfully added to the stack.
38
+ def push(value)
39
+ if @storage << value
40
+ true
41
+ else
42
+ false
43
+ end
44
+ end
45
+
46
+ # Public: Removes and returns the value from the top of the stack.
47
+ #
48
+ # Examples
49
+ #
50
+ # # If the stack has :size > 1, return the top value.
51
+ # @stack.pop
52
+ # # => 42
53
+ #
54
+ # # If the stack is empty, returns nil.
55
+ # @stack.pop
56
+ # # => nil
57
+ #
58
+ # Returns the value at the top of the stack, or nil if the stack is empty.
59
+ def pop
60
+ @storage.pop
61
+ end
62
+
63
+ # Public: Peek at the value on the top of the stack without removing it.
64
+ #
65
+ # Examples
66
+ #
67
+ # @stack.top
68
+ # # => 42
69
+ #
70
+ # # If the stack is empty, returns nil.
71
+ # @stack.top
72
+ # # => nil
73
+ #
74
+ # Returns the value at the stop of the Stack, but does not pop the
75
+ # value off the stack. Returns nil if the Stack is empty.
76
+ def top
77
+ @storage.last
78
+ end
79
+
80
+ # Public: Boolean check to see if the stack is empty.
81
+ #
82
+ # Examples
83
+ #
84
+ # @stack.empty?
85
+ # # => true
86
+ #
87
+ # Returns true if the Stack is empty, false otherwise.
88
+ def empty?
89
+ @storage.size == 0
90
+ end
91
+ end
92
+ end
@@ -1,3 +1,3 @@
1
1
  module RubyStructures
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -2,4 +2,5 @@ require "rubystructures/version"
2
2
 
3
3
  module RubyStructures
4
4
  require 'rubystructures/stack'
5
+ require 'rubystructures/queue'
5
6
  end
@@ -0,0 +1,124 @@
1
+ require 'rubystructures'
2
+
3
+ describe RubyStructures::Queue do
4
+ queue = RubyStructures::Queue.new
5
+ subject { queue }
6
+
7
+ it { should respond_to :size }
8
+
9
+ # Methods
10
+ describe "#initialize" do
11
+ before(:each) { @queue = RubyStructures::Queue.new }
12
+
13
+ it "creates a Queue object" do
14
+ expect(@queue.class).to eql RubyStructures::Queue
15
+ end
16
+
17
+ it "has :size zero upon creation" do
18
+ expect(@queue.size).to eql 0
19
+ end
20
+ end
21
+
22
+ describe "#push" do
23
+ before { @queue = RubyStructures::Queue.new }
24
+ it "add an object to the queue" do
25
+ expect(@queue.size).to eql 0
26
+ @queue.push(42)
27
+ expect(@queue.size).to eql 1
28
+ end
29
+ end
30
+
31
+ describe "#pop" do
32
+ before(:each) do
33
+ @queue = RubyStructures::Queue.new
34
+ @queue.push(42)
35
+ end
36
+
37
+ it "returns the correct value" do
38
+ expect(@queue.pop).to eql 42
39
+ end
40
+
41
+ it "has the correct queue size" do
42
+ expect(@queue.size).to eql 1
43
+ @queue.pop
44
+ expect(@queue.size).to eql 0
45
+ end
46
+ end
47
+
48
+ describe "#size" do
49
+ before(:each) do
50
+ @queue = RubyStructures::Queue.new
51
+ end
52
+
53
+ it "returns 0 when Queue is empty" do
54
+ expect(@queue.size).to eql 0
55
+ end
56
+
57
+ it "returns correct Queue size" do
58
+ @queue.push(42)
59
+ expect(@queue.size).to eql 1
60
+ end
61
+ end
62
+
63
+ describe "#front" do
64
+ before(:each) do
65
+ @queue = RubyStructures::Queue.new
66
+ @queue.push(42)
67
+ @queue.push(13)
68
+ end
69
+
70
+ it "returns the correct value" do
71
+ expect(@queue.size).to eql 2
72
+ expect(@queue.front).to eql 42
73
+ expect(@queue.size).to eql 2
74
+ end
75
+ end
76
+
77
+ describe "#back" do
78
+ before(:each) do
79
+ @queue = RubyStructures::Queue.new
80
+ @queue.push(42)
81
+ @queue.push(13)
82
+ end
83
+
84
+ it "returns the correct value" do
85
+ expect(@queue.size).to eql 2
86
+ expect(@queue.back).to eql 13
87
+ expect(@queue.size).to eql 2
88
+ end
89
+ end
90
+
91
+ describe "#empty?" do
92
+ before { @queue = RubyStructures::Queue.new }
93
+
94
+ it "returns true when empty" do
95
+ expect(@queue.empty?).to eql true
96
+ end
97
+
98
+ it "returns false when not empty" do
99
+ @queue.push(42)
100
+ expect(@queue.empty?).to eql false
101
+ end
102
+ end
103
+
104
+ describe "#enqueue" do
105
+ before { @queue = RubyStructures::Queue.new }
106
+
107
+ it "behaves like push" do
108
+ expect(@queue.size).to eql 0
109
+ @queue.enqueue(42)
110
+ expect(@queue.size).to eql 1
111
+ end
112
+ end
113
+
114
+ describe "#dequeue" do
115
+ before { @queue = RubyStructures::Queue.new }
116
+
117
+ it "behaves like pop" do
118
+ @queue.push(42)
119
+ expect(@queue.size).to eql 1
120
+ expect(@queue.dequeue).to eql 42
121
+ expect(@queue.size).to eql 0
122
+ end
123
+ end
124
+ end
@@ -0,0 +1,81 @@
1
+ require 'rubystructures'
2
+
3
+ describe RubyStructures::Stack do
4
+ stack = RubyStructures::Stack.new
5
+ subject { stack }
6
+
7
+ # Attributes
8
+ it { should respond_to :size }
9
+
10
+ # Methods
11
+ describe "#initialize" do
12
+ before { @stack = RubyStructures::Stack.new }
13
+ it "creates a Stack object" do
14
+ expect(@stack.class).to eql RubyStructures::Stack
15
+ end
16
+
17
+ it "has size zero upon creation" do
18
+ expect(@stack.size).to eql 0
19
+ end
20
+ end
21
+
22
+ describe "#push" do
23
+ before { @stack = RubyStructures::Stack.new }
24
+ it "adds an object to the stack" do
25
+ expect(@stack.size).to eql 0
26
+ @stack.push(42)
27
+ expect(@stack.size).to eql 1
28
+ end
29
+ end
30
+
31
+ describe "#pop" do
32
+ before { @stack = RubyStructures::Stack.new }
33
+ context "stack is empty" do
34
+ it "returns nil" do
35
+ expect(@stack.pop).to eql nil
36
+ end
37
+ end
38
+
39
+ context "stack is not empty" do
40
+ before { @stack.push(42) }
41
+ it "returns and removes correct value" do
42
+ expect(@stack.pop).to eql 42
43
+ expect(@stack.size).to eql 0
44
+ end
45
+ end
46
+ end
47
+
48
+ describe "#top" do
49
+ before do
50
+ @stack = RubyStructures::Stack.new
51
+ @stack.push(42)
52
+ @stack.push(13)
53
+ end
54
+
55
+ it "returns the value of the top item" do
56
+ expect(@stack.top).to eql 13
57
+ end
58
+
59
+ it "doesn't remove any items" do
60
+ @stack.top
61
+ expect(@stack.size).to eql 2
62
+ end
63
+ end
64
+
65
+ describe "#empty?" do
66
+ before(:each) { @stack = RubyStructures::Stack.new }
67
+
68
+ context "when stack is empty" do
69
+ it "return true" do
70
+ expect(@stack.empty?).to eql true
71
+ end
72
+ end
73
+
74
+ context "when stack is not empty" do
75
+ before { @stack.push(42) }
76
+ it "returns false" do
77
+ expect(@stack.empty?).to eql false
78
+ end
79
+ end
80
+ end
81
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubystructures
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -72,8 +72,12 @@ files:
72
72
  - README.md
73
73
  - Rakefile
74
74
  - lib/rubystructures.rb
75
+ - lib/rubystructures/queue.rb
76
+ - lib/rubystructures/stack.rb
75
77
  - lib/rubystructures/version.rb
76
78
  - rubystructures.gemspec
79
+ - spec/queue_spec.rb
80
+ - spec/stack_spec.rb
77
81
  homepage: ''
78
82
  licenses:
79
83
  - MIT
@@ -99,4 +103,6 @@ rubygems_version: 1.8.23
99
103
  signing_key:
100
104
  specification_version: 3
101
105
  summary: Simple, useful data structures in ruby.
102
- test_files: []
106
+ test_files:
107
+ - spec/queue_spec.rb
108
+ - spec/stack_spec.rb