qmore 0.6.2 → 0.6.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,57 @@
1
+ require "spec_helper"
2
+
3
+ describe "Qmore::Persistence::Monitor" do
4
+ before(:each) do
5
+ Qmore.client.redis.flushall
6
+ end
7
+
8
+ it "updates periodically based on the interval" do
9
+ persistence = Qmore::Persistence::Redis.new(Qmore.client.redis)
10
+ persistence.should_receive(:load).at_least(3)
11
+ monitor = Qmore::Persistence::Monitor.new(persistence, 1)
12
+ monitor.start
13
+ sleep 4
14
+ monitor.stop
15
+ end
16
+ end
17
+
18
+ describe "Qmore::Persistence::Redis" do
19
+ before(:each) do
20
+ Qmore.client.redis.flushall
21
+ end
22
+
23
+
24
+ context "dynamic queues" do
25
+ it "can read/write dynamic queues to redis" do
26
+ queues = {
27
+ "key_a" => ["foo"],
28
+ "key_b" => ["bar"],
29
+ "key_c" => ["foo", "bar"]
30
+ }
31
+
32
+ configuration = Qmore::Configuration.new
33
+ configuration.dynamic_queues = queues
34
+ persistence = Qmore::Persistence::Redis.new(Qmore.client.redis)
35
+ persistence.write(configuration)
36
+
37
+ actual_configuration = persistence.load
38
+
39
+ configuration.dynamic_queues.should == actual_configuration.dynamic_queues
40
+ end
41
+ end
42
+
43
+ context "priorities" do
44
+ it "can read/write priorities to redis" do
45
+ priorities = [{'pattern' => 'foo*', 'fairly' => false},{'pattern' => 'default', 'fairly' => false}]
46
+ configuration = Qmore::Configuration.new
47
+ configuration.priority_buckets = priorities
48
+
49
+ persistence = Qmore::Persistence::Redis.new(Qmore.client.redis)
50
+ persistence.write(configuration)
51
+
52
+ actual_configuration = persistence.load
53
+ configuration.priority_buckets.should == actual_configuration.priority_buckets
54
+ end
55
+ end
56
+ end
57
+
@@ -9,7 +9,7 @@ require 'orderedhash'
9
9
  Sinatra::Base.set :environment, :test
10
10
 
11
11
  describe "Qmore Server" do
12
-
12
+
13
13
  include Rack::Test::Methods
14
14
  include Qmore::Attributes
15
15
 
@@ -19,219 +19,230 @@ describe "Qmore Server" do
19
19
 
20
20
  before(:each) do
21
21
  Qmore.client.redis.flushall
22
+ Qmore.configuration = Qmore::Configuration.new
22
23
  end
23
24
 
24
25
  context "DynamicQueue" do
25
-
26
+
26
27
  context "existence in application" do
27
-
28
+
28
29
  it "should respond to it's url" do
29
30
  get "/dynamicqueues"
30
31
  last_response.should be_ok
31
32
  end
32
-
33
+
33
34
  it "should display its tab" do
34
35
  get "/queues"
35
36
  last_response.body.should include "<a href='/dynamicqueues'>DynamicQueues</a>"
36
37
  end
37
-
38
+
38
39
  end
39
-
40
+
40
41
  context "show dynamic queues table" do
41
-
42
+
42
43
  it "should shows default queue when nothing set" do
43
44
  get "/dynamicqueues"
44
-
45
+
45
46
  last_response.body.should include 'default'
46
47
  end
47
-
48
+
48
49
  it "should shows names of queues" do
49
- set_dynamic_queue("key_one", ["foo"])
50
- set_dynamic_queue("key_two", ["bar"])
51
-
50
+ Qmore.configuration.dynamic_queues["key_one"] = ["foo"]
51
+ Qmore.configuration.dynamic_queues["key_two"] = ["bar"]
52
+ Qmore.persistence.write(Qmore.configuration)
53
+
52
54
  get "/dynamicqueues"
53
-
55
+
54
56
  last_response.body.should include 'key_one'
55
57
  last_response.body.should include 'key_two'
56
58
  end
57
-
59
+
58
60
  it "should shows values of queues" do
59
- set_dynamic_queue("key_one", ["foo"])
60
- set_dynamic_queue("key_two", ["bar", "baz"])
61
-
61
+ Qmore.configuration.dynamic_queues["key_one"] = ["foo"]
62
+ Qmore.configuration.dynamic_queues["key_two"] = ["bar", "baz"]
63
+ Qmore.persistence.write(Qmore.configuration)
64
+
62
65
  get "/dynamicqueues"
63
-
66
+
64
67
  last_response.body.should include 'foo'
65
68
  last_response.body.should include 'bar, baz'
66
69
  end
67
-
70
+
68
71
  end
69
-
72
+
70
73
  context "remove queue link" do
71
-
74
+
72
75
  it "should show remove link for queue" do
73
- set_dynamic_queue("key_one", ["foo"])
74
-
76
+ Qmore.configuration.dynamic_queues["key_one"] = ["foo"]
77
+ Qmore.persistence.write(Qmore.configuration)
78
+
75
79
  get "/dynamicqueues"
76
-
80
+
77
81
  last_response.body.should match /<a .*href=['"]#remove['"].*>/
78
82
  end
79
-
83
+
80
84
  it "should show add link" do
81
85
  get "/dynamicqueues"
82
-
86
+
83
87
  last_response.body.should match /<a .*href=['"]#add['"].*>/
84
88
  end
85
-
89
+
86
90
  end
87
-
91
+
88
92
  context "form to edit queues" do
89
-
93
+
90
94
  it "should have form to edit queues" do
91
95
  get "/dynamicqueues"
92
-
96
+
93
97
  last_response.body.should match /<form action="\/dynamicqueues"/
94
98
  end
95
-
99
+
96
100
  it "should show input fields" do
97
- set_dynamic_queue("key_one", ["foo"])
98
- set_dynamic_queue("key_two", ["bar", "baz"])
101
+ Qmore.configuration.dynamic_queues["key_one"] = ["foo"]
102
+ Qmore.configuration.dynamic_queues["key_two"] = ["bar", "baz"]
103
+ Qmore.persistence.write(Qmore.configuration)
104
+
99
105
  get "/dynamicqueues"
100
-
106
+
101
107
  last_response.body.should match /<input type="text" id="input-0-name" name="queues\[\]\[name\]" value="key_one"/
102
108
  last_response.body.should match /<input type="text" id="input-0-value" name="queues\[\]\[value\]" value="foo"/
103
109
  last_response.body.should match /<input type="text" id="input-1-name" name="queues\[\]\[name\]" value="key_two"/
104
110
  last_response.body.should match /<input type="text" id="input-1-value" name="queues\[\]\[value\]" value="bar, baz"/
105
111
  end
106
-
112
+
107
113
  it "should delete queues on empty queue submit" do
108
- set_dynamic_queue("key_two", ["bar", "baz"])
114
+ Qmore.configuration.dynamic_queues["key_two"] = ["bar", "baz"]
115
+ Qmore.persistence.write(Qmore.configuration)
116
+ Qmore.persistence.load.dynamic_queues.has_key?("key_two").should == true
117
+
109
118
  post "/dynamicqueues", {'queues' => [{'name' => "key_two", "value" => ""}]}
110
-
119
+
111
120
  last_response.should be_redirect
112
121
  last_response['Location'].should match /dynamicqueues/
113
- get_dynamic_queue("key_two", []).should be_empty
122
+ Qmore.configuration.dynamic_queues.has_key?("key_two").should == false
114
123
  end
115
-
124
+
116
125
  it "should create queues" do
117
126
  post "/dynamicqueues", {'queues' => [{'name' => "key_two", "value" => " foo, bar ,baz "}]}
118
-
127
+
119
128
  last_response.should be_redirect
120
129
  last_response['Location'].should match /dynamicqueues/
121
- get_dynamic_queue("key_two").should == %w{foo bar baz}
130
+ Qmore.configuration.dynamic_queues["key_two"].should == %w{foo bar baz}
122
131
  end
123
-
132
+
124
133
  it "should update queues" do
125
- set_dynamic_queue("key_two", ["bar", "baz"])
134
+ Qmore.configuration.dynamic_queues["key_two"] = ["bar", "baz"]
135
+ Qmore.persistence.write(Qmore.configuration)
136
+
126
137
  post "/dynamicqueues", {'queues' => [{'name' => "key_two", "value" => "foo,bar,baz"}]}
127
-
138
+
128
139
  last_response.should be_redirect
129
140
  last_response['Location'].should match /dynamicqueues/
130
- get_dynamic_queue("key_two").should == %w{foo bar baz}
141
+ Qmore.configuration.dynamic_queues["key_two"].should == %w{foo bar baz}
131
142
  end
132
-
143
+
133
144
  end
134
145
 
135
146
  end
136
-
147
+
137
148
  context "QueuePriority" do
138
149
 
139
150
  context "existence in application" do
140
-
151
+
141
152
  it "should respond to it's url" do
142
153
  get "/queuepriority"
143
154
  last_response.should be_ok
144
155
  end
145
-
156
+
146
157
  it "should display its tab" do
147
158
  get "/queues"
148
159
  last_response.body.should include "<a href='/queuepriority'>QueuePriority</a>"
149
160
  end
150
-
161
+
151
162
  end
152
-
163
+
153
164
  context "show queue priority table" do
154
-
165
+
155
166
  before(:each) do
156
- set_priority_buckets [{'pattern' => 'foo', 'fairly' => false},
157
- {'pattern' => 'default', 'fairly' => false},
158
- {'pattern' => 'bar', 'fairly' => true}]
159
-
167
+ Qmore.configuration.priority_buckets = [{'pattern' => 'foo', 'fairly' => false},
168
+ {'pattern' => 'default', 'fairly' => false},
169
+ {'pattern' => 'bar', 'fairly' => true}]
170
+ Qmore.persistence.write(Qmore.configuration)
160
171
  end
161
-
172
+
162
173
  it "should shows pattern input fields" do
163
174
  get "/queuepriority"
164
-
175
+
165
176
  last_response.body.should match /<input type="text" id="input-0-pattern" name="priorities\[\]\[pattern\]" value="foo"/
166
177
  last_response.body.should match /<input type="text" id="input-1-pattern" name="priorities\[\]\[pattern\]" value="default"/
167
178
  last_response.body.should match /<input type="text" id="input-2-pattern" name="priorities\[\]\[pattern\]" value="bar"/
168
179
  end
169
-
180
+
170
181
  it "should show fairly checkboxes" do
171
182
  get "/queuepriority"
172
-
183
+
173
184
  last_response.body.should match /<input type="checkbox" id="input-0-fairly" name="priorities\[\]\[fairly\]" value="true" *\/>/
174
185
  last_response.body.should match /<input type="checkbox" id="input-1-fairly" name="priorities\[\]\[fairly\]" value="true" *\/>/
175
186
  last_response.body.should match /<input type="checkbox" id="input-2-fairly" name="priorities\[\]\[fairly\]" value="true" checked *\/>/
176
187
  end
177
-
188
+
178
189
  end
179
-
190
+
180
191
  context "edit links" do
181
-
192
+
182
193
  before(:each) do
183
- set_priority_buckets [{'pattern' => 'foo', 'fairly' => false},
184
- {'pattern' => 'default', 'fairly' => false},
185
- {'pattern' => 'bar', 'fairly' => true}]
186
-
194
+ Qmore.configuration.priority_buckets = [{'pattern' => 'foo', 'fairly' => false},
195
+ {'pattern' => 'default', 'fairly' => false},
196
+ {'pattern' => 'bar', 'fairly' => true}]
197
+ Qmore.persistence.write(Qmore.configuration)
187
198
  end
188
-
199
+
189
200
  it "should show remove link for queue" do
190
201
  get "/queuepriority"
191
-
202
+
192
203
  last_response.body.should match /<a href="#remove"/
193
204
  end
194
-
205
+
195
206
  it "should show up link for queue" do
196
207
  get "/queuepriority"
197
-
208
+
198
209
  last_response.body.should match /<a href="#up"/
199
210
  end
200
-
211
+
201
212
  it "should show down link for queue" do
202
213
  get "/queuepriority"
203
-
214
+
204
215
  last_response.body.should match /<a href="#down"/
205
216
  end
206
-
217
+
207
218
  end
208
-
219
+
209
220
  context "form to edit queues" do
210
-
221
+
211
222
  it "should have form to edit queues" do
212
223
  get "/queuepriority"
213
-
224
+
214
225
  last_response.body.should match /<form action="\/queuepriority"/
215
226
  end
216
-
227
+
217
228
  it "should update queues" do
218
- get_priority_buckets.should == [{'pattern' => 'default'}]
219
-
229
+ Qmore.configuration.priority_buckets.should == [{'pattern' => 'default'}]
230
+
220
231
  params = {'priorities' => [
221
232
  OrderedHash["pattern", "foo"],
222
233
  OrderedHash["pattern", "default"],
223
234
  OrderedHash["pattern", "bar", "fairly", "true"]
224
235
  ]}
225
- post "/queuepriority", params
226
-
236
+ post "/queuepriority", params
237
+
227
238
  last_response.should be_redirect
228
239
  last_response['Location'].should match /queuepriority/
229
- get_priority_buckets.should == [{"pattern" => "foo"},
240
+ Qmore.configuration.priority_buckets.should == [{"pattern" => "foo"},
230
241
  {"pattern" => "default"},
231
242
  {"pattern" => "bar", "fairly" => "true"}]
232
243
  end
233
-
244
+
234
245
  end
235
-
246
+
236
247
  end
237
248
  end
@@ -6,7 +6,7 @@ Coveralls.wear!
6
6
  require 'qmore'
7
7
 
8
8
  redis_configs_directory = File.join(File.dirname(File.expand_path(__FILE__)), "redis")
9
- redis_configs = Dir.entries(redis_configs_directory).select{|f| !File.directory? f}
9
+ redis_configs = Dir.entries(redis_configs_directory).select{|f| !File.directory?(f) && f.end_with?(".conf")}
10
10
 
11
11
  redis_configs.each do |config|
12
12
  redis_cmd = "redis-server #{redis_configs_directory}/#{config}"
metadata CHANGED
@@ -1,113 +1,144 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qmore
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.2
4
+ version: 0.6.3
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Matt Conway
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2014-03-10 00:00:00.000000000 Z
12
+ date: 2014-06-13 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
15
+ prerelease: false
14
16
  name: qless
17
+ type: :runtime
15
18
  requirement: !ruby/object:Gem::Requirement
16
19
  requirements:
17
- - - "~>"
20
+ - - ~>
18
21
  - !ruby/object:Gem::Version
19
22
  version: '0.9'
20
- type: :runtime
21
- prerelease: false
23
+ none: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
23
25
  requirements:
24
- - - "~>"
26
+ - - ~>
25
27
  - !ruby/object:Gem::Version
26
28
  version: '0.9'
29
+ none: false
27
30
  - !ruby/object:Gem::Dependency
31
+ prerelease: false
28
32
  name: multi_json
33
+ type: :runtime
29
34
  requirement: !ruby/object:Gem::Requirement
30
35
  requirements:
31
- - - "~>"
36
+ - - ~>
32
37
  - !ruby/object:Gem::Version
33
38
  version: '1.7'
34
- type: :runtime
35
- prerelease: false
39
+ none: false
36
40
  version_requirements: !ruby/object:Gem::Requirement
37
41
  requirements:
38
- - - "~>"
42
+ - - ~>
39
43
  - !ruby/object:Gem::Version
40
44
  version: '1.7'
45
+ none: false
41
46
  - !ruby/object:Gem::Dependency
42
- name: rake
47
+ prerelease: false
48
+ name: gem_logger
49
+ type: :runtime
43
50
  requirement: !ruby/object:Gem::Requirement
44
51
  requirements:
45
- - - ">="
52
+ - - ! '>='
46
53
  - !ruby/object:Gem::Version
47
54
  version: '0'
48
- type: :development
55
+ none: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ! '>='
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ none: false
62
+ - !ruby/object:Gem::Dependency
49
63
  prerelease: false
64
+ name: rake
65
+ type: :development
66
+ requirement: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - ! '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ none: false
50
72
  version_requirements: !ruby/object:Gem::Requirement
51
73
  requirements:
52
- - - ">="
74
+ - - ! '>='
53
75
  - !ruby/object:Gem::Version
54
76
  version: '0'
77
+ none: false
55
78
  - !ruby/object:Gem::Dependency
79
+ prerelease: false
56
80
  name: rspec
81
+ type: :development
57
82
  requirement: !ruby/object:Gem::Requirement
58
83
  requirements:
59
- - - ">="
84
+ - - ! '>='
60
85
  - !ruby/object:Gem::Version
61
86
  version: '0'
62
- type: :development
63
- prerelease: false
87
+ none: false
64
88
  version_requirements: !ruby/object:Gem::Requirement
65
89
  requirements:
66
- - - ">="
90
+ - - ! '>='
67
91
  - !ruby/object:Gem::Version
68
92
  version: '0'
93
+ none: false
69
94
  - !ruby/object:Gem::Dependency
95
+ prerelease: false
70
96
  name: rack-test
97
+ type: :development
71
98
  requirement: !ruby/object:Gem::Requirement
72
99
  requirements:
73
- - - ">="
100
+ - - ! '>='
74
101
  - !ruby/object:Gem::Version
75
102
  version: '0'
76
- type: :development
77
- prerelease: false
103
+ none: false
78
104
  version_requirements: !ruby/object:Gem::Requirement
79
105
  requirements:
80
- - - ">="
106
+ - - ! '>='
81
107
  - !ruby/object:Gem::Version
82
108
  version: '0'
109
+ none: false
83
110
  - !ruby/object:Gem::Dependency
111
+ prerelease: false
84
112
  name: pry
113
+ type: :development
85
114
  requirement: !ruby/object:Gem::Requirement
86
115
  requirements:
87
- - - ">="
116
+ - - ! '>='
88
117
  - !ruby/object:Gem::Version
89
118
  version: '0'
90
- type: :development
91
- prerelease: false
119
+ none: false
92
120
  version_requirements: !ruby/object:Gem::Requirement
93
121
  requirements:
94
- - - ">="
122
+ - - ! '>='
95
123
  - !ruby/object:Gem::Version
96
124
  version: '0'
125
+ none: false
97
126
  - !ruby/object:Gem::Dependency
127
+ prerelease: false
98
128
  name: orderedhash
129
+ type: :development
99
130
  requirement: !ruby/object:Gem::Requirement
100
131
  requirements:
101
- - - ">="
132
+ - - ! '>='
102
133
  - !ruby/object:Gem::Version
103
134
  version: '0'
104
- type: :development
105
- prerelease: false
135
+ none: false
106
136
  version_requirements: !ruby/object:Gem::Requirement
107
137
  requirements:
108
- - - ">="
138
+ - - ! '>='
109
139
  - !ruby/object:Gem::Version
110
140
  version: '0'
141
+ none: false
111
142
  description: Qmore allows one to specify the queues a worker processes by the use
112
143
  of wildcards, negations, or dynamic look up from redis. It also allows one to specify
113
144
  the relative priority between queues (rather than within a single queue). It plugs
@@ -118,8 +149,8 @@ executables: []
118
149
  extensions: []
119
150
  extra_rdoc_files: []
120
151
  files:
121
- - ".gitignore"
122
- - ".travis.yml"
152
+ - .gitignore
153
+ - .travis.yml
123
154
  - CHANGELOG
124
155
  - Gemfile
125
156
  - LICENSE
@@ -129,46 +160,50 @@ files:
129
160
  - lib/qmore-server.rb
130
161
  - lib/qmore.rb
131
162
  - lib/qmore/attributes.rb
163
+ - lib/qmore/configuration.rb
132
164
  - lib/qmore/job_reserver.rb
165
+ - lib/qmore/persistence.rb
133
166
  - lib/qmore/server.rb
134
167
  - lib/qmore/server/views/dynamicqueues.erb
135
168
  - lib/qmore/server/views/priorities.erb
136
169
  - lib/qmore/version.rb
137
170
  - qmore.gemspec
138
171
  - spec/attributes_spec.rb
172
+ - spec/configuration_spec.rb
139
173
  - spec/job_reserver_spec.rb
174
+ - spec/persistance_spec.rb
140
175
  - spec/redis/qless01-test.conf
141
176
  - spec/redis/qless02-test.conf
142
177
  - spec/server_spec.rb
143
178
  - spec/spec_helper.rb
144
179
  homepage: ''
145
180
  licenses: []
146
- metadata: {}
147
181
  post_install_message:
148
182
  rdoc_options: []
149
183
  require_paths:
150
184
  - lib
151
185
  required_ruby_version: !ruby/object:Gem::Requirement
152
186
  requirements:
153
- - - ">="
187
+ - - ! '>='
154
188
  - !ruby/object:Gem::Version
155
189
  version: '0'
190
+ segments:
191
+ - 0
192
+ hash: -593121205799441535
193
+ none: false
156
194
  required_rubygems_version: !ruby/object:Gem::Requirement
157
195
  requirements:
158
- - - ">="
196
+ - - ! '>='
159
197
  - !ruby/object:Gem::Version
160
198
  version: '0'
199
+ segments:
200
+ - 0
201
+ hash: -593121205799441535
202
+ none: false
161
203
  requirements: []
162
204
  rubyforge_project: qmore
163
- rubygems_version: 2.2.2
205
+ rubygems_version: 1.8.23
164
206
  signing_key:
165
- specification_version: 4
207
+ specification_version: 3
166
208
  summary: A qless plugin that gives more control over how queues are processed
167
- test_files:
168
- - spec/attributes_spec.rb
169
- - spec/job_reserver_spec.rb
170
- - spec/redis/qless01-test.conf
171
- - spec/redis/qless02-test.conf
172
- - spec/server_spec.rb
173
- - spec/spec_helper.rb
174
- has_rdoc:
209
+ test_files: []