disquo 0.3.1 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e4a5a02702349eb8b6c55ccda7678d0ec5374f9d
4
- data.tar.gz: 2793c75864c561a6d96833c7a171c687b0bda854
3
+ metadata.gz: 478f669678db9f4b49df090cb601c6d2d4fad7f1
4
+ data.tar.gz: 62c78605fb663c5a4aea50c07911990e3ac1fac9
5
5
  SHA512:
6
- metadata.gz: bd458037bec4658dd490234ca46ab75f82f3f74e40deb1e6a65d95eea6e3ddf49d3a7f0770885389830be92fed26124e3a66422fad584382fc21ec33ee9f0618
7
- data.tar.gz: e0575ada72338c810ee9186104f75b1478d8518f7a91bd5e5ed2218282c1d5c52ea99988b69c8c0550197cbf04d5e2d89919d1a6a7175d21e261f5733572b707
6
+ metadata.gz: ded5fc8a2aa03764d1c3cafdf6640d88462ed856515ef30a6c2f8e042889a92890c173873ea98dfc921f28f9909e4822a6262fa4bcdc3d8484257d765f678e14
7
+ data.tar.gz: 72f521a2a23ebcf6fe226e6fb49c8631d05c983ccabbca92e158280274329e8e7698cd80847a567c8d60e975ada140f9f2448d2ff92803c33a0fb0451d42bf32
data/.travis.yml CHANGED
@@ -1,7 +1,7 @@
1
1
  language: ruby
2
2
  before_install:
3
- - wget https://github.com/antirez/disque/archive/master.tar.gz -O disque-master.tar.gz
4
- - tar xf disque-master.tar.gz && cd disque-master/src/ && make && PREFIX=../ make install && cd -
3
+ - test -d disque-master/src || wget -O- https://github.com/antirez/disque/archive/master.tar.gz | tar xz
4
+ - cd disque-master/src && make && PREFIX=../ make install && cd -
5
5
  before_script:
6
6
  - ./disque-master/bin/disque-server --daemonize yes
7
7
  script:
@@ -9,3 +9,7 @@ script:
9
9
  rvm:
10
10
  - 2.4
11
11
  - 2.3
12
+ cache:
13
+ bundler: true
14
+ directories:
15
+ - disque-master
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- disquo (0.3.1)
4
+ disquo (0.3.2)
5
5
  concurrent-ruby
6
6
  connection_pool
7
7
  disque
@@ -9,12 +9,25 @@ PATH
9
9
  GEM
10
10
  remote: https://rubygems.org/
11
11
  specs:
12
+ activejob (5.1.4)
13
+ activesupport (= 5.1.4)
14
+ globalid (>= 0.3.6)
15
+ activesupport (5.1.4)
16
+ concurrent-ruby (~> 1.0, >= 1.0.2)
17
+ i18n (~> 0.7)
18
+ minitest (~> 5.1)
19
+ tzinfo (~> 1.1)
12
20
  concurrent-ruby (1.0.5)
13
21
  connection_pool (2.2.1)
14
22
  diff-lcs (1.3)
15
23
  disque (0.0.6)
16
24
  redic (~> 1.5.0)
25
+ globalid (0.4.1)
26
+ activesupport (>= 4.2.0)
17
27
  hiredis (0.6.1)
28
+ i18n (0.9.1)
29
+ concurrent-ruby (~> 1.0)
30
+ minitest (5.10.3)
18
31
  rake (12.3.0)
19
32
  redic (1.5.0)
20
33
  hiredis
@@ -31,11 +44,15 @@ GEM
31
44
  diff-lcs (>= 1.2.0, < 2.0)
32
45
  rspec-support (~> 3.7.0)
33
46
  rspec-support (3.7.0)
47
+ thread_safe (0.3.6)
48
+ tzinfo (1.2.4)
49
+ thread_safe (~> 0.1)
34
50
 
35
51
  PLATFORMS
36
52
  ruby
37
53
 
38
54
  DEPENDENCIES
55
+ activejob
39
56
  disquo!
40
57
  rake
41
58
  rspec
data/disquo.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "disquo"
5
- s.version = "0.3.1"
5
+ s.version = "0.3.2"
6
6
  s.platform = Gem::Platform::RUBY
7
7
 
8
8
  s.licenses = ["Apache-2.0"]
@@ -25,4 +25,5 @@ Gem::Specification.new do |s|
25
25
 
26
26
  s.add_development_dependency 'rake'
27
27
  s.add_development_dependency 'rspec'
28
+ s.add_development_dependency 'activejob'
28
29
  end
@@ -0,0 +1,56 @@
1
+ require "disquo"
2
+
3
+ module ActiveJob
4
+ module QueueAdapters
5
+ # == Disquo adapter for Active Job
6
+ #
7
+ # Read more about Disquo {here}[https://github.com/bsm/disquo].
8
+ #
9
+ # To use queue_adapter config to +:disquo+.
10
+ #
11
+ # require 'active_job/queue_adapters/disquo_adapter'
12
+ #
13
+ # Rails.application.config.active_job.queue_adapter = :disquo
14
+ #
15
+ # To pass extra options into the job, you can use custom serialization:
16
+ #
17
+ # class MyJob < ActiveJob::Base
18
+ # def serialize
19
+ # opts = { 'ttl' => 1.hour, 'async' => true }
20
+ # super.merge('disquo' => opts)
21
+ # end
22
+ # end
23
+ class DisquoAdapter
24
+
25
+ class JobWrapper #:nodoc:
26
+ include Disquo::Job
27
+
28
+ def perform(job_data)
29
+ ActiveJob::Base.execute job_data
30
+ end
31
+ end
32
+
33
+ def enqueue(job) #:nodoc:
34
+ enqueue_with_opts job
35
+ end
36
+
37
+ def enqueue_at(job, timestamp) #:nodoc:
38
+ delay = timestamp - Time.current.to_f
39
+ enqueue_with_opts job, delay: delay.to_i
40
+ end
41
+
42
+ private
43
+
44
+ def enqueue_with_opts(job, opts = {})
45
+ attrs = job.serialize
46
+ opts.update attrs["disquo"].symbolize_keys if attrs["disquo"].is_a?(Hash)
47
+ opts[:queue] = job.queue_name
48
+
49
+ job_id = JobWrapper.enqueue [attrs], opts
50
+ job.provider_job_id = job_id
51
+ job_id
52
+ end
53
+
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,49 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe ActiveJob::QueueAdapters::DisquoAdapter do
4
+
5
+ subject do
6
+ TestActiveJob.set(wait: 60).perform_later("foo", 1)
7
+ end
8
+
9
+ let(:job_data) { show(subject.provider_job_id) }
10
+
11
+ it "should enqueue" do
12
+ expect(job_data).to include(
13
+ "additional-deliveries" => 0,
14
+ "id" => subject.provider_job_id,
15
+ "nacks" => 0,
16
+ "queue" => "__disquo_test__",
17
+ "state" => "active",
18
+ )
19
+ expect(job_data["delay"]).to be_within(5).of(60)
20
+ expect(job_data["retry"]).to be_within(5).of(360)
21
+ expect(job_data["ttl"]).to be_within(5).of(3600)
22
+ expect(Disquo.load_job(job_data["body"])).to eq([
23
+ "ActiveJob::QueueAdapters::DisquoAdapter::JobWrapper",
24
+ [{
25
+ "job_class" => "TestActiveJob",
26
+ "job_id" => subject.job_id,
27
+ "provider_job_id" => nil,
28
+ "queue_name" => "__disquo_test__",
29
+ "priority" => nil,
30
+ "arguments" => ["foo", 1],
31
+ "executions" => 0,
32
+ "locale" => "en",
33
+ "disquo" => {"ttl" => 3600},
34
+ }],
35
+ ])
36
+ end
37
+
38
+ it 'should perform' do
39
+ klass, args = Disquo.load_job(job_data["body"])
40
+ Object.const_get(klass).new.perform(*args)
41
+
42
+ expect(Disquo::TEST::PERFORMED.size).to eq(1)
43
+ expect(Disquo::TEST::PERFORMED.last).to include(
44
+ klass: "TestActiveJob",
45
+ args: ["foo", 1],
46
+ )
47
+ end
48
+
49
+ end
@@ -5,7 +5,7 @@ RSpec.describe Disquo::Job do
5
5
  it "should enqueue jobs" do
6
6
  jid1 = TestJob.enqueue ["foo", 1]
7
7
  expect(qlen).to eq(1)
8
- expect(jid1).to match(/^D\w+/)
8
+ expect(jid1).to match(/^D[\w\-]+/)
9
9
  expect(show(jid1)).to include(
10
10
  "id" => jid1,
11
11
  "queue" => "__disquo_test__",
@@ -18,7 +18,7 @@ RSpec.describe Disquo::Job do
18
18
 
19
19
  jid2 = TestJob.enqueue ["bar"], delay: 600
20
20
  expect(qlen).to eq(1)
21
- expect(jid2).to match(/^D\w+/)
21
+ expect(jid2).to match(/^D[\w\-]+/)
22
22
  expect(show(jid2)).to include(
23
23
  "id" => jid2,
24
24
  "queue" => "__disquo_test__",
@@ -33,7 +33,7 @@ RSpec.describe Disquo::Worker do
33
33
  klass: "TestJob",
34
34
  queue: "__disquo_test__",
35
35
  )
36
- expect(Disquo::TEST::PERFORMED.last[:job_id]).to match(/^D\w+/)
36
+ expect(Disquo::TEST::PERFORMED.last[:job_id]).to match(/^D[\w\-]+/)
37
37
  expect(Disquo::TEST::PERFORMED.map {|e| e[:args].first }).to match_array(0..199)
38
38
  end
39
39
 
data/spec/spec_helper.rb CHANGED
@@ -2,6 +2,11 @@ require 'rspec'
2
2
  require 'disquo'
3
3
  require 'disquo/worker'
4
4
 
5
+ require 'active_job'
6
+ require 'active_job/queue_adapters/disquo_adapter'
7
+ ActiveJob::Base.queue_adapter = :disquo
8
+ ActiveJob::Base.logger = Logger.new(nil)
9
+
5
10
  module Disquo::TEST
6
11
  QUEUE = "__disquo_test__"
7
12
  PERFORMED = []
@@ -17,6 +22,18 @@ class TestJob
17
22
  end
18
23
  end
19
24
 
25
+ class TestActiveJob < ActiveJob::Base
26
+ queue_as Disquo::TEST::QUEUE
27
+
28
+ def perform(*args)
29
+ Disquo::TEST::PERFORMED.push(klass: self.class.name, args: args)
30
+ end
31
+
32
+ def serialize
33
+ super.merge('disquo' => {'ttl' => 3600})
34
+ end
35
+ end
36
+
20
37
  helpers = Module.new do
21
38
 
22
39
  def qlen
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: disquo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dimitrij Denissenko
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-11-24 00:00:00.000000000 Z
11
+ date: 2017-11-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: disque
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: activejob
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  description: Concurrent background workers on top of Disque
84
98
  email: dimitrij@blacksquaremedia.com
85
99
  executables:
@@ -96,10 +110,12 @@ files:
96
110
  - Rakefile
97
111
  - bin/disquo
98
112
  - disquo.gemspec
113
+ - lib/active_job/queue_adapters/disquo_adapter.rb
99
114
  - lib/disquo.rb
100
115
  - lib/disquo/cli.rb
101
116
  - lib/disquo/job.rb
102
117
  - lib/disquo/worker.rb
118
+ - spec/active_job/queue_adapters/disquo_spec.rb
103
119
  - spec/disquo/job_spec.rb
104
120
  - spec/disquo/worker_spec.rb
105
121
  - spec/spec_helper.rb
@@ -128,6 +144,7 @@ signing_key:
128
144
  specification_version: 4
129
145
  summary: Concurrent background workers on top of Disque
130
146
  test_files:
147
+ - spec/active_job/queue_adapters/disquo_spec.rb
131
148
  - spec/disquo/job_spec.rb
132
149
  - spec/disquo/worker_spec.rb
133
150
  - spec/spec_helper.rb