pq-wsm 0.0.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 +7 -0
- data/README.md +86 -0
- data/Rakefile +38 -0
- data/lib/generators/pc_queues/install_generator.rb +9 -0
- data/lib/generators/pc_queues/migration_generator.rb +15 -0
- data/lib/generators/pc_queues/templates/README +15 -0
- data/lib/generators/pc_queues/templates/initializer.rb +6 -0
- data/lib/generators/pc_queues/templates/migration.rb +36 -0
- data/lib/pc_queues.rb +43 -0
- data/lib/pc_queues/acts_as_enqueable.rb +31 -0
- data/lib/pc_queues/acts_as_queue_owner.rb +30 -0
- data/lib/pc_queues/priority_queue_item.rb +13 -0
- data/lib/pc_queues/queue.rb +312 -0
- data/lib/pc_queues/queue_item.rb +58 -0
- data/lib/pc_queues/queue_rule.rb +32 -0
- data/lib/pc_queues/queue_rule_set.rb +40 -0
- data/lib/pc_queues/queue_rules/boolean_queue_rule.rb +34 -0
- data/lib/pc_queues/queue_rules/numeric_queue_rule.rb +42 -0
- data/lib/pc_queues/queue_rules/sample_queue_rule.rb +36 -0
- data/lib/pc_queues/queue_rules/string_match_queue_rule.rb +44 -0
- data/lib/pc_queues/railtie.rb +10 -0
- data/lib/pc_queues/version.rb +3 -0
- data/lib/tasks/pc_queues_tasks.rake +4 -0
- data/spec/boolean_queue_rule_spec.rb +34 -0
- data/spec/numeric_queue_rule_spec.rb +123 -0
- data/spec/queue_spec.rb +494 -0
- data/spec/sample_queue_rule_spec.rb +34 -0
- data/spec/spec_helper.rb +30 -0
- data/spec/string_match_rule_spec.rb +76 -0
- data/spec/support/active_record.rb +42 -0
- data/spec/support/application.rb +122 -0
- data/spec/support/queue_helpers.rb +16 -0
- data/spec/support/redis_helpers.rb +32 -0
- data/spec/support/time.rb +23 -0
- metadata +131 -0
@@ -0,0 +1,34 @@
|
|
1
|
+
require './spec/spec_helper'
|
2
|
+
|
3
|
+
describe PcQueues::QueueRules::SampleQueueRule do
|
4
|
+
|
5
|
+
before :each do
|
6
|
+
PcQueues.redis { |r| r.flushall }
|
7
|
+
|
8
|
+
@company = Company.create :name => "ProctorCam"
|
9
|
+
@company.create_hr_queue
|
10
|
+
|
11
|
+
@people = {
|
12
|
+
:john => Person.create(:name => "John", :age => 42, :is_female => false),
|
13
|
+
:sally => Person.create(:name => "Sally", :age => 29, :is_female => true),
|
14
|
+
:mildred => Person.create(:name => "Mildred", :age => 67, :is_female => true),
|
15
|
+
:lars => Person.create(:name => "Lars", :age => 34, :is_female => false)
|
16
|
+
}
|
17
|
+
end
|
18
|
+
|
19
|
+
after :each do
|
20
|
+
@company.hr_queue.destroy
|
21
|
+
@company.destroy
|
22
|
+
end
|
23
|
+
|
24
|
+
it "does not pass if the sample rate rolls false" do
|
25
|
+
queue_rule = PcQueues::QueueRules::SampleQueueRule.create PcQueues::QueueRules::SampleQueueRule.options({:sample_percent => 0})
|
26
|
+
expect(queue_rule.passes? @people[:john]).to eq(false)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "passes if the sample rate rolls true" do
|
30
|
+
queue_rule = PcQueues::QueueRules::SampleQueueRule.create PcQueues::QueueRules::SampleQueueRule.options({:sample_percent => 100})
|
31
|
+
expect(queue_rule.passes? @people[:john]).to eq(true)
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
#
|
2
|
+
# This source file is part of project: ProctorServ
|
3
|
+
#
|
4
|
+
# A Proctoring Workflow Platform
|
5
|
+
#
|
6
|
+
# Copyright (c) ProctorCam Inc. 2013 All rights reserved
|
7
|
+
#
|
8
|
+
# This file is copied to spec/ when you run 'rails generate rspec:install'
|
9
|
+
|
10
|
+
require 'support/active_record'
|
11
|
+
require 'pc_queues'
|
12
|
+
require './lib/generators/pc_queues/templates/migration'
|
13
|
+
require 'support/application'
|
14
|
+
|
15
|
+
%x[ps cax | grep redis-server]
|
16
|
+
raise "Redis needs to be running to test pc-queues!" if $?.exitstatus > 0
|
17
|
+
|
18
|
+
RSpec.configure do |config|
|
19
|
+
config.order = "random"
|
20
|
+
|
21
|
+
config.before(:suite) do
|
22
|
+
CreatePcQueuesTables.migrate :up
|
23
|
+
ApplicationMigration.migrate :up
|
24
|
+
end
|
25
|
+
|
26
|
+
config.after(:suite) do
|
27
|
+
CreatePcQueuesTables.migrate :down
|
28
|
+
ApplicationMigration.migrate :down
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
require './spec/spec_helper'
|
2
|
+
|
3
|
+
describe PcQueues::QueueRules::StringMatchQueueRule do
|
4
|
+
|
5
|
+
before :each do
|
6
|
+
PcQueues.redis { |r| r.flushall }
|
7
|
+
|
8
|
+
@company = Company.create :name => "ProctorCam"
|
9
|
+
@company.create_hr_queue
|
10
|
+
|
11
|
+
@people = {
|
12
|
+
:john => Person.create(:name => "John", :age => 42, :is_female => false),
|
13
|
+
:sally => Person.create(:name => "Sally", :age => 29, :is_female => true),
|
14
|
+
:mildred => Person.create(:name => "Mildred", :age => 67, :is_female => true),
|
15
|
+
:lars => Person.create(:name => "Lars", :age => 34, :is_female => false)
|
16
|
+
}
|
17
|
+
end
|
18
|
+
|
19
|
+
after :each do
|
20
|
+
@company.hr_queue.destroy
|
21
|
+
@company.destroy
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "when passed a regular_expression" do
|
25
|
+
|
26
|
+
it "passes when the regexp matches" do
|
27
|
+
queue_rule = NameMatchQueueRule.create(NameMatchQueueRule.options({:regular_expression => "J.*n"}))
|
28
|
+
expect(queue_rule.passes? @people[:john]).to eq(true)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "does not pass when the regexp does not match" do
|
32
|
+
queue_rule = NameMatchQueueRule.create(NameMatchQueueRule.options({:regular_expression => "J.*n"}))
|
33
|
+
expect(queue_rule.passes? @people[:mildred]).to eq(false)
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "when passed a contains" do
|
39
|
+
|
40
|
+
it "passes when the value contains the :contains value exactly" do
|
41
|
+
queue_rule = NameMatchQueueRule.create(NameMatchQueueRule.options({:contains => "John"}))
|
42
|
+
expect(queue_rule.passes? @people[:john]).to eq(true)
|
43
|
+
end
|
44
|
+
|
45
|
+
it "does not pass when the value does not contain the :contains value (case sensitivity)" do
|
46
|
+
queue_rule = NameMatchQueueRule.create(NameMatchQueueRule.options({:contains => "john"}))
|
47
|
+
expect(queue_rule.passes? @people[:john]).to eq(false)
|
48
|
+
end
|
49
|
+
|
50
|
+
it "does not pass when the value does not contain the :contains value" do
|
51
|
+
queue_rule = NameMatchQueueRule.create(NameMatchQueueRule.options({:contains => "john"}))
|
52
|
+
expect(queue_rule.passes? @people[:mildred]).to eq(false)
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
describe "when passed an icontains" do
|
58
|
+
|
59
|
+
it "passes when the value contains the :icontains value exactly" do
|
60
|
+
queue_rule = NameMatchQueueRule.create(NameMatchQueueRule.options({:icontains => "John"}))
|
61
|
+
expect(queue_rule.passes? @people[:john]).to eq(true)
|
62
|
+
end
|
63
|
+
|
64
|
+
it "passes when the value contains the :icontains value regardless of case" do
|
65
|
+
queue_rule = NameMatchQueueRule.create(NameMatchQueueRule.options({:icontains => "john"}))
|
66
|
+
expect(queue_rule.passes? @people[:john]).to eq(true)
|
67
|
+
end
|
68
|
+
|
69
|
+
it "does not pass when the value does not contain the :icontains value" do
|
70
|
+
queue_rule = NameMatchQueueRule.create(NameMatchQueueRule.options({:icontains => "john"}))
|
71
|
+
expect(queue_rule.passes? @people[:mildred]).to eq(false)
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'active_record'
|
2
|
+
|
3
|
+
ActiveRecord::Base.establish_connection({
|
4
|
+
:adapter => "mysql2",
|
5
|
+
:database => "pc-queues",
|
6
|
+
:encoding => "utf8",
|
7
|
+
:pool => 15,
|
8
|
+
:timeout => 5000,
|
9
|
+
:username => "proctorserv",
|
10
|
+
:password => "pr0ct0rcam",
|
11
|
+
:host => "localhost"
|
12
|
+
})
|
13
|
+
|
14
|
+
module ActiveModel::Validations
|
15
|
+
# Extension to enhance `should have` on AR Model instances. Calls
|
16
|
+
# model.valid? in order to prepare the object's errors object.
|
17
|
+
#
|
18
|
+
# You can also use this to specify the content of the error messages.
|
19
|
+
#
|
20
|
+
# @example
|
21
|
+
#
|
22
|
+
# model.should have(:no).errors_on(:attribute)
|
23
|
+
# model.should have(1).error_on(:attribute)
|
24
|
+
# model.should have(n).errors_on(:attribute)
|
25
|
+
#
|
26
|
+
# model.errors_on(:attribute).should include("can't be blank")
|
27
|
+
def errors_on(attribute)
|
28
|
+
self.valid?
|
29
|
+
[self.errors[attribute]].flatten.compact
|
30
|
+
end
|
31
|
+
alias :error_on :errors_on
|
32
|
+
end
|
33
|
+
|
34
|
+
# Don't pollute database between tests
|
35
|
+
RSpec.configure do |config|
|
36
|
+
config.around do |example|
|
37
|
+
ActiveRecord::Base.transaction do
|
38
|
+
example.run
|
39
|
+
raise ActiveRecord::Rollback
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,122 @@
|
|
1
|
+
|
2
|
+
class ApplicationMigration < ActiveRecord::Migration
|
3
|
+
def change
|
4
|
+
create_table :people do |t|
|
5
|
+
t.string :name
|
6
|
+
t.integer :age
|
7
|
+
t.boolean :is_female
|
8
|
+
end
|
9
|
+
|
10
|
+
create_table :companies do |t|
|
11
|
+
t.string :name
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class Person < ActiveRecord::Base
|
17
|
+
include PcQueues::ActsAsEnqueable
|
18
|
+
|
19
|
+
# attr_accessible :name, :age, :is_female
|
20
|
+
def self.accessible_attributes
|
21
|
+
[:name, :age, :is_female]
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
class PersonQueue < PcQueues::Queue
|
26
|
+
enqueues Person
|
27
|
+
end
|
28
|
+
|
29
|
+
class Company < ActiveRecord::Base
|
30
|
+
include PcQueues::ActsAsQueueOwner
|
31
|
+
|
32
|
+
has_many_queues_as :it_queues, :class_name => 'PersonQueue'
|
33
|
+
has_one_queue_as :hr_queue, :class_name => 'PersonQueue'
|
34
|
+
end
|
35
|
+
|
36
|
+
class GenderQueueRule < PcQueues::QueueRules::BooleanQueueRule
|
37
|
+
def self.options(opts = {})
|
38
|
+
opts[:bool_value] = opts[:is_female]
|
39
|
+
opts.except! :is_female
|
40
|
+
super
|
41
|
+
end
|
42
|
+
|
43
|
+
# Implementors must provide an implementation of this method that takes
|
44
|
+
# the args splat passed to the queue and returns a numberic value
|
45
|
+
def value(person, *args)
|
46
|
+
person.is_female
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
class AgeQueueRule < PcQueues::QueueRules::NumericQueueRule
|
51
|
+
def value(person, *args)
|
52
|
+
person.age
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
class IsOverAgeQueueRule < AgeQueueRule
|
57
|
+
def self.options(opts = {})
|
58
|
+
opts[:operator] = '>='
|
59
|
+
super
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
class NameMatchQueueRule < PcQueues::QueueRules::StringMatchQueueRule
|
64
|
+
def self.options(opts)
|
65
|
+
opts[:icontains] = opts[:name] if opts.key? :name
|
66
|
+
opts.except! :name
|
67
|
+
super
|
68
|
+
end
|
69
|
+
|
70
|
+
def value(person, *args)
|
71
|
+
person.name
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
Wolverine.config.script_path = Pathname.new "#{File.dirname(__FILE__)}/../app/wolverine/"
|
76
|
+
|
77
|
+
PcQueues.config do |config|
|
78
|
+
# Configuring Redis
|
79
|
+
#
|
80
|
+
# Redis can be configured by:
|
81
|
+
#
|
82
|
+
# * passing an options Hash for the Redis Client connection pool
|
83
|
+
# * passing an existing ConnectionPool
|
84
|
+
#
|
85
|
+
# Example using a Hash
|
86
|
+
#
|
87
|
+
# config.redis = { :namespace => 'myapp', :size => 1, :url => 'redis://myhost:8877/0' }
|
88
|
+
#
|
89
|
+
#
|
90
|
+
# Example using ConnectionPool
|
91
|
+
#
|
92
|
+
# config.redis = PcQueues.create { :namespace => 'myapp', :size => 1, :url => 'redis://myhost:8877/0' }
|
93
|
+
#
|
94
|
+
|
95
|
+
config.redis = PcQueues.create({
|
96
|
+
:url => 'redis://localhost',
|
97
|
+
:size => 1
|
98
|
+
})
|
99
|
+
|
100
|
+
#
|
101
|
+
# Also if you have different ways of doing a cold start, you can set up a cold start method here
|
102
|
+
# to wrap it.
|
103
|
+
#
|
104
|
+
# A Sidekiq worker to do this would look like this:
|
105
|
+
#
|
106
|
+
# First a Worker Class
|
107
|
+
#
|
108
|
+
# class QueueColdStarter
|
109
|
+
# include Sidekiq::Worker
|
110
|
+
#
|
111
|
+
# def perform(queue_id)
|
112
|
+
# queue = PcQueues::Queue.find(queue_id)
|
113
|
+
# queue.cold_start
|
114
|
+
# end
|
115
|
+
# end
|
116
|
+
#
|
117
|
+
# Next Set the config method cold_start to call it
|
118
|
+
#
|
119
|
+
config.cold_start = Proc.new { |q| puts "Cold starting: #{q}"; q.cold_start }
|
120
|
+
#
|
121
|
+
|
122
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class QueueHelpers
|
2
|
+
class << self
|
3
|
+
def get_redis_length(queue)
|
4
|
+
PcQueues.redis { |r|
|
5
|
+
r.llen("#{PcQueues.namespace}:#{queue.class.name}.#{queue.id}").to_i
|
6
|
+
}
|
7
|
+
end
|
8
|
+
|
9
|
+
def get_queue_items(queue)
|
10
|
+
ids = PcQueues.redis { |r|
|
11
|
+
r.lrange("#{PcQueues.namespace}:#{queue.class.name}.#{queue.id}", 0, -1)
|
12
|
+
}
|
13
|
+
ids.map{|id| queue.enqueable_type.find id.to_i }
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
#
|
2
|
+
# This source file is part of project: ProctorServ
|
3
|
+
#
|
4
|
+
# A Proctoring Workflow Platform
|
5
|
+
#
|
6
|
+
# Copyright (c) ProctorCam Inc. 2013 All rights reserved
|
7
|
+
#
|
8
|
+
module RedisHelpers
|
9
|
+
module Subscription
|
10
|
+
|
11
|
+
def self.subscribe_to_and_publish(channel, subscribe_proc, &publish_block)
|
12
|
+
message = ""
|
13
|
+
conn = Redis.new
|
14
|
+
namespaced_channel = "#{PcQueues.namespace}:#{channel}"
|
15
|
+
|
16
|
+
conn.subscribe namespaced_channel do |on|
|
17
|
+
on.subscribe { |c, subscriptions| yield }
|
18
|
+
|
19
|
+
on.message do |c, msg|
|
20
|
+
conn.unsubscribe namespaced_channel
|
21
|
+
message = msg
|
22
|
+
subscribe_proc.call msg
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
conn.quit
|
27
|
+
message
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
class Time
|
2
|
+
class << self
|
3
|
+
|
4
|
+
alias_method :prev_now, :now
|
5
|
+
|
6
|
+
def travel_to(t)
|
7
|
+
@now = t
|
8
|
+
end
|
9
|
+
|
10
|
+
def now
|
11
|
+
@now ? @now : prev_now
|
12
|
+
end
|
13
|
+
|
14
|
+
def reset
|
15
|
+
@now = nil
|
16
|
+
end
|
17
|
+
|
18
|
+
def wait_until_even_second
|
19
|
+
while (t = Time.now.to_f) % 1 > 0.01 do ; end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
metadata
ADDED
@@ -0,0 +1,131 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: pq-wsm
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Test Only
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-06-08 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rails
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 4.2.6
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 4.2.6
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: mysql2
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec-rails
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
description: A Queuing gem designed to support ActiveRecord models with an active
|
56
|
+
Redis publishing component.
|
57
|
+
email:
|
58
|
+
- unlikely_pc_email@proctorcam.com
|
59
|
+
executables: []
|
60
|
+
extensions: []
|
61
|
+
extra_rdoc_files: []
|
62
|
+
files:
|
63
|
+
- README.md
|
64
|
+
- Rakefile
|
65
|
+
- lib/generators/pc_queues/install_generator.rb
|
66
|
+
- lib/generators/pc_queues/migration_generator.rb
|
67
|
+
- lib/generators/pc_queues/templates/README
|
68
|
+
- lib/generators/pc_queues/templates/initializer.rb
|
69
|
+
- lib/generators/pc_queues/templates/migration.rb
|
70
|
+
- lib/pc_queues.rb
|
71
|
+
- lib/pc_queues/acts_as_enqueable.rb
|
72
|
+
- lib/pc_queues/acts_as_queue_owner.rb
|
73
|
+
- lib/pc_queues/priority_queue_item.rb
|
74
|
+
- lib/pc_queues/queue.rb
|
75
|
+
- lib/pc_queues/queue_item.rb
|
76
|
+
- lib/pc_queues/queue_rule.rb
|
77
|
+
- lib/pc_queues/queue_rule_set.rb
|
78
|
+
- lib/pc_queues/queue_rules/boolean_queue_rule.rb
|
79
|
+
- lib/pc_queues/queue_rules/numeric_queue_rule.rb
|
80
|
+
- lib/pc_queues/queue_rules/sample_queue_rule.rb
|
81
|
+
- lib/pc_queues/queue_rules/string_match_queue_rule.rb
|
82
|
+
- lib/pc_queues/railtie.rb
|
83
|
+
- lib/pc_queues/version.rb
|
84
|
+
- lib/tasks/pc_queues_tasks.rake
|
85
|
+
- spec/boolean_queue_rule_spec.rb
|
86
|
+
- spec/numeric_queue_rule_spec.rb
|
87
|
+
- spec/queue_spec.rb
|
88
|
+
- spec/sample_queue_rule_spec.rb
|
89
|
+
- spec/spec_helper.rb
|
90
|
+
- spec/string_match_rule_spec.rb
|
91
|
+
- spec/support/active_record.rb
|
92
|
+
- spec/support/application.rb
|
93
|
+
- spec/support/queue_helpers.rb
|
94
|
+
- spec/support/redis_helpers.rb
|
95
|
+
- spec/support/time.rb
|
96
|
+
homepage: http://gitlab.proctorcam.com/proctorcam-development/pc-queues
|
97
|
+
licenses: []
|
98
|
+
metadata: {}
|
99
|
+
post_install_message:
|
100
|
+
rdoc_options: []
|
101
|
+
require_paths:
|
102
|
+
- lib
|
103
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
104
|
+
requirements:
|
105
|
+
- - ">="
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
version: '0'
|
108
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: '0'
|
113
|
+
requirements: []
|
114
|
+
rubyforge_project:
|
115
|
+
rubygems_version: 2.6.4
|
116
|
+
signing_key:
|
117
|
+
specification_version: 4
|
118
|
+
summary: A Queuing gem designed to support ActiveRecord models with an active Redis
|
119
|
+
publishing component.
|
120
|
+
test_files:
|
121
|
+
- spec/boolean_queue_rule_spec.rb
|
122
|
+
- spec/numeric_queue_rule_spec.rb
|
123
|
+
- spec/queue_spec.rb
|
124
|
+
- spec/sample_queue_rule_spec.rb
|
125
|
+
- spec/spec_helper.rb
|
126
|
+
- spec/string_match_rule_spec.rb
|
127
|
+
- spec/support/active_record.rb
|
128
|
+
- spec/support/application.rb
|
129
|
+
- spec/support/queue_helpers.rb
|
130
|
+
- spec/support/redis_helpers.rb
|
131
|
+
- spec/support/time.rb
|