punchline 0.0.1 → 0.1.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/README.md +21 -4
- data/lib/punchline.rb +4 -0
- data/lib/punchline/min_queue.rb +2 -3
- data/lib/punchline/version.rb +1 -1
- data/punchline.gemspec +1 -0
- data/spec/mindy/min_queue_spec.rb +37 -25
- data/spec/spec_helper.rb +10 -0
- metadata +15 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9aea1e279156757a3782956b9684c86b9945e43c
|
4
|
+
data.tar.gz: a7a3e6921c2bcd932514d7dac7f4177ec77c323b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b8eccc58cded5aee6dba4b48ec543d7f60cbe470e28112ce6cd6f4b13fc190d2728b680774e13a1c338d3bf592efa493a8e44703a167f656e9789aad363085a6
|
7
|
+
data.tar.gz: d6b6b59dbe054eb1fbd7f36dedb641792c707aa91a10b570e8343dcbaf03ea92e893f7db73412bc4e9428b00704b4aca16f1c65da64662f8cf5a6602933da9d8
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
[](https://travis-ci.org/catkins/punchline) [](https://gemnasium.com/catkins/punchline) [](https://coveralls.io/r/catkins/punchline) [](https://codeclimate.com/github/catkins/punchline)
|
1
|
+
[](https://travis-ci.org/catkins/punchline) [](https://gemnasium.com/catkins/punchline) [](https://coveralls.io/r/catkins/punchline) [](https://codeclimate.com/github/catkins/punchline) [](http://badge.fury.io/rb/punchline)
|
2
2
|
|
3
3
|
# Punchline
|
4
4
|
|
@@ -34,18 +34,22 @@ $ bundle
|
|
34
34
|
require 'punchline'
|
35
35
|
|
36
36
|
# optionally override Punchline with your own Redis client, otherwise defaults to Redis.new
|
37
|
-
Punchline.
|
37
|
+
Punchline.configure do |config|
|
38
|
+
config.redis = Redis.new host: "10.0.1.1", port: 6830
|
39
|
+
end
|
38
40
|
|
39
41
|
# create a queue
|
40
42
|
queue = Punchline::MinQueue.new
|
41
43
|
queue.length # => 0
|
42
44
|
|
43
45
|
# add a key
|
44
|
-
queue.enqueue
|
46
|
+
queue.enqueue 'hello!' # => true
|
47
|
+
|
45
48
|
queue.length # => 1
|
46
49
|
|
47
50
|
# shortly after... higher priority score is rejected
|
48
|
-
queue.enqueue
|
51
|
+
queue.enqueue 'hello!' # => false
|
52
|
+
|
49
53
|
queue.length # => 1
|
50
54
|
|
51
55
|
# original key is retrieved
|
@@ -54,6 +58,19 @@ queue.dequeue # => { :priority => 1411405014, :value => "hello!" }
|
|
54
58
|
# queue is now empty
|
55
59
|
queue.length # => 0
|
56
60
|
|
61
|
+
# optionally set your own priority value
|
62
|
+
queue.enqueue 'hello!', priority: 155 # => true
|
63
|
+
|
64
|
+
# fetch all without dequeuing
|
65
|
+
queue.enqueue 'hello!'
|
66
|
+
queue.enqueue 'adding values!'
|
67
|
+
queue.all # [{:value=>"hello", :priority=>1411445996}, {:value=>"adding values!", :priority=>1411446073}]
|
68
|
+
|
69
|
+
# clear out queue
|
70
|
+
queue.clear!
|
71
|
+
queue.all # => []
|
72
|
+
queue.length # => 0
|
73
|
+
|
57
74
|
```
|
58
75
|
|
59
76
|
## TODO
|
data/lib/punchline.rb
CHANGED
data/lib/punchline/min_queue.rb
CHANGED
@@ -24,9 +24,8 @@ module Punchline
|
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
-
def enqueue(options = {})
|
28
|
-
priority = options
|
29
|
-
value = options.fetch :value
|
27
|
+
def enqueue(value, options = {})
|
28
|
+
priority = options[:priority] || Time.now.to_i
|
30
29
|
@enqueue.call([key], [priority, value]) == 1
|
31
30
|
end
|
32
31
|
|
data/lib/punchline/version.rb
CHANGED
data/punchline.gemspec
CHANGED
@@ -23,6 +23,7 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.add_development_dependency 'bundler', '~> 1.5'
|
24
24
|
spec.add_development_dependency 'rake'
|
25
25
|
spec.add_development_dependency 'rspec', '~> 3.1.0'
|
26
|
+
spec.add_development_dependency 'timecop', '~> 0.7.1'
|
26
27
|
spec.add_development_dependency 'pry'
|
27
28
|
spec.add_development_dependency 'coveralls'
|
28
29
|
end
|
@@ -9,7 +9,10 @@ module Punchline
|
|
9
9
|
end
|
10
10
|
|
11
11
|
before(:all) { clear_queue! }
|
12
|
-
after(:each)
|
12
|
+
after(:each) do
|
13
|
+
subject.reset_scripts!
|
14
|
+
clear_queue!
|
15
|
+
end
|
13
16
|
|
14
17
|
let(:some_key) { TEST_KEY }
|
15
18
|
subject(:min_queue) { MinQueue.new some_key }
|
@@ -42,7 +45,7 @@ module Punchline
|
|
42
45
|
describe '#length' do
|
43
46
|
it { should respond_to :length }
|
44
47
|
|
45
|
-
let(:mock_redis) { double 'redis', zcard: 5, del: true }
|
48
|
+
let(:mock_redis) { double 'redis', zcard: 5, del: true, script: true }
|
46
49
|
|
47
50
|
it 'is initially zero' do
|
48
51
|
expect(subject.length).to eq 0
|
@@ -74,7 +77,7 @@ module Punchline
|
|
74
77
|
end
|
75
78
|
|
76
79
|
it 'returns elements as hashes' do
|
77
|
-
subject.enqueue priority: 123
|
80
|
+
subject.enqueue 'hello', priority: 123
|
78
81
|
|
79
82
|
hash = subject.all.first
|
80
83
|
expect(hash).not_to be_nil
|
@@ -84,15 +87,11 @@ module Punchline
|
|
84
87
|
end
|
85
88
|
|
86
89
|
describe '#enqueue' do
|
87
|
-
after(:each) do
|
88
|
-
subject.reset_scripts!
|
89
|
-
end
|
90
|
-
|
91
90
|
it { should respond_to :enqueue }
|
92
91
|
|
93
92
|
it 'increases the length by 1' do
|
94
93
|
expect {
|
95
|
-
subject.enqueue
|
94
|
+
subject.enqueue 'hello'
|
96
95
|
}.to change {
|
97
96
|
subject.length
|
98
97
|
}.by 1
|
@@ -104,50 +103,63 @@ module Punchline
|
|
104
103
|
end
|
105
104
|
|
106
105
|
it 'returns false when key is not written' do
|
107
|
-
result = subject.enqueue priority: 123
|
108
|
-
result = subject.enqueue priority: 456
|
106
|
+
result = subject.enqueue 'hello', priority: 123
|
107
|
+
result = subject.enqueue 'hello', priority: 456
|
109
108
|
expect(result).to eq false
|
110
109
|
end
|
111
110
|
|
112
111
|
describe 'duplicates' do
|
113
112
|
it 'ignores duplicate values' do
|
114
|
-
subject.enqueue priority: 123
|
113
|
+
subject.enqueue 'hello', priority: 123
|
115
114
|
|
116
115
|
expect {
|
117
|
-
subject.enqueue priority: 567
|
116
|
+
subject.enqueue 'hello', priority: 567
|
118
117
|
}.to change {
|
119
118
|
subject.length
|
120
119
|
}.by(0)
|
121
120
|
end
|
122
121
|
|
123
122
|
it 'retains only the lowest priority score' do
|
124
|
-
subject.enqueue priority: 123
|
125
|
-
subject.enqueue priority: 567
|
126
|
-
subject.enqueue
|
123
|
+
subject.enqueue 'hello', priority: 123
|
124
|
+
subject.enqueue 'hello', priority: 567
|
125
|
+
subject.enqueue 'hello', priority: 25
|
127
126
|
|
128
127
|
pair = subject.dequeue
|
129
|
-
expect(pair[:priority]).to eq
|
128
|
+
expect(pair[:priority]).to eq 25
|
130
129
|
end
|
131
130
|
end
|
132
|
-
end
|
133
131
|
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
132
|
+
describe 'sequential inserts' do
|
133
|
+
before(:each) { Timecop.freeze }
|
134
|
+
|
135
|
+
it 'keeps the oldest value for a given key' do
|
136
|
+
original_time = Time.now.to_i
|
137
|
+
subject.enqueue 'hello'
|
138
|
+
|
139
|
+
Timecop.travel Time.now + 1000
|
140
|
+
subject.enqueue 'hello'
|
141
|
+
|
142
|
+
Timecop.travel Time.now + 1000
|
143
|
+
subject.enqueue 'hello'
|
144
|
+
|
145
|
+
result = subject.dequeue
|
146
|
+
expect(result[:priority]).to eq original_time
|
147
|
+
end
|
138
148
|
end
|
149
|
+
end
|
139
150
|
|
151
|
+
describe '#dequeue' do
|
140
152
|
it { should respond_to :dequeue }
|
141
153
|
|
142
154
|
it 'decreases the length by 1' do
|
143
|
-
subject.enqueue priority: 123
|
155
|
+
subject.enqueue 'hello', priority: 123
|
144
156
|
|
145
157
|
expect{ subject.dequeue }.to change { subject.length }.by -1
|
146
158
|
end
|
147
159
|
|
148
160
|
it 'returns the pair with the lowest score' do
|
149
|
-
subject.enqueue priority: 123
|
150
|
-
subject.enqueue priority: 567
|
161
|
+
subject.enqueue 'hello', priority: 123
|
162
|
+
subject.enqueue 'world', priority: 567
|
151
163
|
expect(subject.dequeue).to eq({ value: 'hello', priority: 123 })
|
152
164
|
end
|
153
165
|
end
|
@@ -161,7 +173,7 @@ module Punchline
|
|
161
173
|
end
|
162
174
|
|
163
175
|
it 'resets the length' do
|
164
|
-
subject.enqueue priority: 123
|
176
|
+
subject.enqueue 'hello', priority: 123
|
165
177
|
expect { subject.clear! }.to change { subject.length }.by -1
|
166
178
|
end
|
167
179
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: punchline
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Atkins
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - ~>
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 3.1.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: timecop
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ~>
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.7.1
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ~>
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.7.1
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: pry
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|