line_up 0.1.1 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: ce18ce8d73e695503b1817970a0f7c134a716f9bfc6c040e0572f9ef5df9a26f
4
+ data.tar.gz: b6ffe2e2f83caef827038c9b2d0015a0c9561f03f711ba008105116605d6560c
5
+ SHA512:
6
+ metadata.gz: 278311aa84959ea1d7fd8148c273eef5420494699070a9dd80ec42498d27ab2157ea63c5a73b436d016b0e7a3e38082e3ab11d3b0a18e65a937d8de2c13901e3
7
+ data.tar.gz: 9fcd63dd92472f090fe8e168b36442daf14cd673d617ea2aa2c4d8f5a75989256594776d633d9c2c464e007d8bc9c5fa1d746888b220f99f2b4d407e414f5627
data/README.md CHANGED
@@ -41,11 +41,7 @@ With the setup above, Resque lies in the `myapp:resque`-namespace. So you can en
41
41
  This is how you can enqueue a job for another applications:
42
42
 
43
43
  ```ruby
44
- if LineUp.push :otherApp, :SomeJob, 12345, some: thing
45
- # Yey, everything went well
46
- else
47
- # The "Trouble"-gem, has been notified and I can process the failure if I like
48
- end
44
+ LineUp.push :otherApp, :SomeJob, 12345, some: thing
49
45
  ```
50
46
 
51
47
  This will enqueue to `other_app:resque:some_job` with arguments `[12345, { 'some' => 'thing' }]` and make sure that the `other_app:resque:queues` Set references the queue List.
@@ -2,11 +2,12 @@ require 'logger'
2
2
 
3
3
  module LineUp
4
4
  class Configuration
5
- attr_accessor :logger, :redis
5
+ attr_accessor :logger, :redis, :recency_ttl
6
6
 
7
7
  def initialize(options={})
8
- @logger = options[:logger] || default_logger
9
- @redis = options[:redis] || default_redis
8
+ @logger = options[:logger] || default_logger
9
+ @redis = options[:redis] || default_redis
10
+ @recency_ttl = options[:recency_ttl] || default_recency_ttl
10
11
  end
11
12
 
12
13
  private
@@ -24,6 +25,11 @@ module LineUp
24
25
  return Resque.redis if defined?(Resque)
25
26
  Redis::Namespace.new nil
26
27
  end
28
+
29
+ def default_recency_ttl
30
+ 5
31
+ end
32
+
27
33
  end
28
34
  end
29
35
 
data/lib/line_up/job.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'line_up/string_extensions'
2
2
  require 'multi_json'
3
+ require 'digest/sha1'
3
4
 
4
5
  module LineUp
5
6
  class Job
@@ -11,6 +12,10 @@ module LineUp
11
12
  @args = args
12
13
  end
13
14
 
15
+ def checksum
16
+ Digest::SHA1.hexdigest(encode)
17
+ end
18
+
14
19
  def encode
15
20
  MultiJson.dump class: klass.to_s, args: args
16
21
  end
@@ -2,7 +2,7 @@ module LineUp
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 1
5
- TINY = 1
5
+ TINY = 4
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].compact.join('.')
8
8
  end
data/lib/line_up.rb CHANGED
@@ -1,5 +1,3 @@
1
- require 'trouble'
2
-
3
1
  require 'line_up/configuration'
4
2
  require 'line_up/job'
5
3
 
@@ -13,10 +11,6 @@ module LineUp
13
11
  redis.rpush "queue:#{job.queue_name}", job.encode
14
12
  end
15
13
  log caller, application, jobclass, *args
16
- true
17
- rescue Exception => exception
18
- Trouble.notify exception, caller: caller[1], message: "LineUp could not enqueue a Job", code: :enqueue_failed, redis: config.redis.inspect, application: application.inspect, job: jobclass.inspect, args: args.inspect
19
- false
20
14
  end
21
15
 
22
16
  def self.ensure(application, jobclass, *args)
@@ -30,9 +24,6 @@ module LineUp
30
24
  job = Job.new jobclass
31
25
  return r.llen "queue:#{job.queue_name}"
32
26
  end
33
- rescue Exception => e
34
- Trouble.notify e, caller: caller[1], message: "LineUp could not get the queue length", code: :getting_queue_length_failed, redis: config.redis.inspect, application: application.inspect, job: jobclass.inspect
35
- false
36
27
  end
37
28
 
38
29
  private
@@ -45,5 +36,4 @@ module LineUp
45
36
  return unless config.logger
46
37
  config.logger.debug "LINEUP ENQUEUED JOB #{jobclass.inspect} for #{application.inspect} at #{caller.first} with arguments #{args.inspect}"
47
38
  end
48
-
49
39
  end
@@ -2,8 +2,8 @@ require 'spec_helper'
2
2
 
3
3
  describe LineUp do
4
4
 
5
- let(:logger) { mock(:logger) }
6
-
5
+ let(:rails) { Module.new }
6
+ let(:logger) { double(:logger) }
7
7
  let(:lineup) { LineUp }
8
8
 
9
9
  describe '.config' do
@@ -12,22 +12,18 @@ describe LineUp do
12
12
  end
13
13
 
14
14
  it 'is an STDOUT logger' do
15
- Logger.should_receive(:new).with(STDOUT).and_return logger
16
- lineup.config.logger.should be logger
15
+ expect(Logger).to receive(:new).with(STDOUT).and_return logger
16
+ expect(lineup.config.logger).to eq(logger)
17
17
  end
18
18
 
19
19
  context 'with Rails' do
20
20
  before do
21
- ensure_module :Rails
22
- Rails.stub!(:logger).and_return(logger)
23
- end
24
-
25
- after do
26
- Object.send(:remove_const, :Rails)
21
+ allow(rails).to receive(:logger).and_return(logger)
22
+ stub_const("Rails", rails)
27
23
  end
28
24
 
29
25
  it 'is the Rails logger' do
30
- lineup.config.logger.should be Rails.logger
26
+ expect(lineup.config.logger).to eq(Rails.logger)
31
27
  end
32
28
  end
33
29
  end
@@ -6,25 +6,22 @@ describe LineUp do
6
6
  let(:job) { :SendEmail }
7
7
  let(:args) { [123, some: :thing] }
8
8
  let(:redis) { $raw_redis }
9
- let(:logger) { mock(:logger) }
9
+ let(:logger) { double(:logger) }
10
+ let(:lineup_job) { LineUp::Job.new job, *args }
10
11
 
11
12
  let(:lineup) { LineUp }
12
13
 
13
14
  describe '.push' do
14
- it 'returns true if successful' do
15
- lineup.push(application, job, *args).should be_true
16
- end
17
-
18
15
  it 'registers the queue' do
19
16
  lineup.push application, job, *args
20
- queues = redis.smembers('other_app:resque:queues').should == %w{ send_email }
17
+ expect(redis.smembers('other_app:resque:queues')).to eq(%w{ send_email })
21
18
  end
22
19
 
23
20
  it 'enqueues the job' do
24
21
  lineup.push application, job, *args
25
22
  jobs = redis.lrange('other_app:resque:queue:send_email', 0, -1)
26
- jobs.size.should == 1
27
- MultiJson.load(jobs.first).should == { 'class' => 'SendEmail', 'args' => [123, 'some' => 'thing'] }
23
+ expect(jobs.size).to eq(1)
24
+ expect(MultiJson.load(jobs.first)).to eq({ 'class' => 'SendEmail', 'args' => [123, 'some' => 'thing'] })
28
25
  end
29
26
 
30
27
  context 'with a Logger' do
@@ -33,94 +30,35 @@ describe LineUp do
33
30
  end
34
31
 
35
32
  it 'logs the enqueueing and returns true' do
36
- logger.should_receive(:debug) do |string|
37
- string.should include('LINEUP ENQUEUED')
38
- string.should include('line_up_spec.rb')
39
- string.should include(':otherApp')
40
- string.should include(':SendEmail')
41
- string.should include('[123, {:some=>:thing}]')
42
- end
43
- lineup.push(application, job, *args).should be_true
44
- end
45
- end
46
-
47
- context 'when the key for the Queue Set is occupied by the wrong data format' do
48
- before do
49
- redis.set 'other_app:resque:queues', :anything_but_a_list
50
- end
51
-
52
- it 'catches the error and returns false' do
53
- Trouble.should_receive(:notify) do |exception, metadata|
54
- exception.should be_instance_of Redis::CommandError
55
- metadata[:code].should == :enqueue_failed
56
- metadata[:application].should == ':otherApp'
57
- metadata[:job].should == ':SendEmail'
58
- metadata[:args].should == '[123, {:some=>:thing}]'
59
- metadata[:caller].should include('line_up_spec.rb')
33
+ expect(logger).to receive(:debug) do |string|
34
+ expect(string).to include('LINEUP ENQUEUED')
35
+ expect(string).to include('line_up_spec.rb')
36
+ expect(string).to include(':otherApp')
37
+ expect(string).to include(':SendEmail')
38
+ expect(string).to include('[123, {:some=>:thing}]')
60
39
  end
61
- lineup.push(application, job, *args).should be_false
62
- end
63
- end
64
-
65
- context 'when the key for the List Job Queue is occupied by the wrong data format' do
66
- before do
67
- redis.set 'other_app:resque:queue:send_email', :anything_but_a_list
68
- end
69
-
70
- it 'catches the error and returns false' do
71
- Trouble.should_receive(:notify) do |exception, metadata|
72
- exception.should be_instance_of Redis::CommandError
73
- metadata[:code].should == :enqueue_failed
74
- metadata[:application].should == ':otherApp'
75
- metadata[:job].should == ':SendEmail'
76
- metadata[:args].should == '[123, {:some=>:thing}]'
77
- metadata[:caller].should include('line_up_spec.rb')
78
- end
79
- lineup.push(application, job, *args).should be_false
40
+ lineup.push application, job, *args
80
41
  end
81
42
  end
82
43
  end
83
44
 
84
45
  describe ".queue_length" do
85
-
86
46
  it "returns the length of the given queue in the given application" do
87
47
  lineup.push(application, job, 1)
88
48
  lineup.push(application, job, 2)
89
- lineup.queue_length(application, job).should == 2
90
- end
91
-
92
- context 'when the key for the List Job Queue is occupied by the wrong data format' do
93
- before do
94
- redis.set 'other_app:resque:queue:send_email', :anything_but_a_list
95
- end
96
-
97
- it 'logs the error' do
98
- Trouble.should_receive(:notify) do |exception, metadata|
99
- exception.should be_instance_of Redis::CommandError
100
- metadata[:code].should == :getting_queue_length_failed
101
- metadata[:application].should == ':otherApp'
102
- metadata[:job].should == ':SendEmail'
103
- metadata[:caller].should include('line_up_spec.rb')
104
- end
105
- lineup.queue_length(application, job)
106
- end
107
-
108
- it "returns false" do
109
- lineup.queue_length(application, job).should be_false
110
- end
49
+ expect(lineup.queue_length(application, job)).to eq(2)
111
50
  end
112
51
  end
113
52
 
114
53
  describe ".ensure" do
115
-
116
54
  it "pushes the job if the queue is empty" do
117
- lineup.should_receive(:push).with(application, job, *args)
55
+ expect(lineup).to receive(:push).with(application, job, *args)
118
56
  lineup.ensure application, job, *args
119
57
  end
120
58
 
121
59
  it "does not push the job if the queue already has a job with the same name" do
122
60
  lineup.push application, job, *args
123
- lineup.should_not_receive(:push)
61
+ expect(lineup).not_to receive(:push)
124
62
  lineup.ensure application, job, *args
125
63
  end
126
64
  end
data/spec/spec_helper.rb CHANGED
@@ -1,40 +1,16 @@
1
1
  require 'redis-namespace'
2
2
  require 'line_up'
3
3
 
4
- def ensure_class_or_module(full_name, class_or_module)
5
- full_name.to_s.split(/::/).inject(Object) do |context, name|
6
- begin
7
- context.const_get(name)
8
- rescue NameError
9
- if class_or_module == :class
10
- context.const_set(name, Class.new)
11
- else
12
- context.const_set(name, Module.new)
13
- end
14
- end
15
- end
16
- end
17
-
18
- def ensure_module(name)
19
- ensure_class_or_module(name, :module)
20
- end
21
-
22
- def ensure_class(name)
23
- ensure_class_or_module(name, :class)
24
- end
25
-
26
4
  RSpec.configure do |config|
27
5
 
28
6
  config.before do
29
7
  $raw_redis = Redis.new(db: 14)
30
8
  LineUp.config.redis = Redis::Namespace.new :myapp, redis: $raw_redis
31
9
  LineUp.config.logger = nil
32
- Trouble.stub!(:notify)
33
10
  end
34
11
 
35
12
  config.after do
36
13
  $raw_redis.flushdb
37
14
  LineUp.reset!
38
15
  end
39
-
40
16
  end
metadata CHANGED
@@ -1,112 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: line_up
3
3
  version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: 0.1.1
4
+ version: 0.1.4
6
5
  platform: ruby
7
6
  authors:
8
7
  - bukowskis
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-05-07 00:00:00.000000000 Z
11
+ date: 2023-01-02 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
- version_requirements: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ! '>='
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- none: false
21
- name: trouble
22
- type: :runtime
23
- prerelease: false
14
+ name: multi_json
24
15
  requirement: !ruby/object:Gem::Requirement
25
16
  requirements:
26
- - - ! '>='
17
+ - - ">="
27
18
  - !ruby/object:Gem::Version
28
19
  version: '0'
29
- none: false
30
- - !ruby/object:Gem::Dependency
31
- version_requirements: !ruby/object:Gem::Requirement
32
- requirements:
33
- - - ! '>='
34
- - !ruby/object:Gem::Version
35
- version: '0'
36
- none: false
37
- name: multi_json
38
20
  type: :runtime
39
21
  prerelease: false
40
- requirement: !ruby/object:Gem::Requirement
22
+ version_requirements: !ruby/object:Gem::Requirement
41
23
  requirements:
42
- - - ! '>='
24
+ - - ">="
43
25
  - !ruby/object:Gem::Version
44
26
  version: '0'
45
- none: false
46
27
  - !ruby/object:Gem::Dependency
47
- version_requirements: !ruby/object:Gem::Requirement
28
+ name: redis-namespace
29
+ requirement: !ruby/object:Gem::Requirement
48
30
  requirements:
49
- - - ! '>='
31
+ - - ">="
50
32
  - !ruby/object:Gem::Version
51
33
  version: 1.3.0
52
- none: false
53
- name: redis-namespace
54
34
  type: :runtime
55
35
  prerelease: false
56
- requirement: !ruby/object:Gem::Requirement
36
+ version_requirements: !ruby/object:Gem::Requirement
57
37
  requirements:
58
- - - ! '>='
38
+ - - ">="
59
39
  - !ruby/object:Gem::Version
60
40
  version: 1.3.0
61
- none: false
62
41
  - !ruby/object:Gem::Dependency
63
- version_requirements: !ruby/object:Gem::Requirement
64
- requirements:
65
- - - ! '>='
66
- - !ruby/object:Gem::Version
67
- version: '0'
68
- none: false
69
42
  name: rspec
70
- type: :development
71
- prerelease: false
72
43
  requirement: !ruby/object:Gem::Requirement
73
44
  requirements:
74
- - - ! '>='
75
- - !ruby/object:Gem::Version
76
- version: '0'
77
- none: false
78
- - !ruby/object:Gem::Dependency
79
- version_requirements: !ruby/object:Gem::Requirement
80
- requirements:
81
- - - ! '>='
45
+ - - ">="
82
46
  - !ruby/object:Gem::Version
83
47
  version: '0'
84
- none: false
85
- name: guard-rspec
86
48
  type: :development
87
49
  prerelease: false
88
- requirement: !ruby/object:Gem::Requirement
89
- requirements:
90
- - - ! '>='
91
- - !ruby/object:Gem::Version
92
- version: '0'
93
- none: false
94
- - !ruby/object:Gem::Dependency
95
50
  version_requirements: !ruby/object:Gem::Requirement
96
51
  requirements:
97
- - - ! '>='
52
+ - - ">="
98
53
  - !ruby/object:Gem::Version
99
54
  version: '0'
100
- none: false
101
- name: rb-fsevent
102
- type: :development
103
- prerelease: false
104
- requirement: !ruby/object:Gem::Requirement
105
- requirements:
106
- - - ! '>='
107
- - !ruby/object:Gem::Version
108
- version: '0'
109
- none: false
110
55
  description: No more need to maintain two separate redis connections when using namespaces.
111
56
  LineUp does not even need Resque itself.
112
57
  email:
@@ -114,42 +59,40 @@ executables: []
114
59
  extensions: []
115
60
  extra_rdoc_files: []
116
61
  files:
62
+ - LICENSE
63
+ - README.md
64
+ - lib/line_up.rb
117
65
  - lib/line_up/configuration.rb
118
66
  - lib/line_up/job.rb
119
67
  - lib/line_up/string_extensions.rb
120
68
  - lib/line_up/version.rb
121
- - lib/line_up.rb
122
69
  - spec/lib/line_up/configuration_spec.rb
123
70
  - spec/lib/line_up_spec.rb
124
71
  - spec/spec_helper.rb
125
- - README.md
126
- - LICENSE
127
72
  homepage: https://github.com/bukowskis/line_up
128
73
  licenses:
129
74
  - MIT
75
+ metadata: {}
130
76
  post_install_message:
131
77
  rdoc_options:
132
- - --encoding
78
+ - "--encoding"
133
79
  - UTF-8
134
80
  require_paths:
135
81
  - lib
136
82
  required_ruby_version: !ruby/object:Gem::Requirement
137
83
  requirements:
138
- - - ! '>='
84
+ - - ">="
139
85
  - !ruby/object:Gem::Version
140
86
  version: '0'
141
- none: false
142
87
  required_rubygems_version: !ruby/object:Gem::Requirement
143
88
  requirements:
144
- - - ! '>='
89
+ - - ">="
145
90
  - !ruby/object:Gem::Version
146
91
  version: '0'
147
- none: false
148
92
  requirements: []
149
- rubyforge_project:
150
- rubygems_version: 1.8.23
93
+ rubygems_version: 3.0.3.1
151
94
  signing_key:
152
- specification_version: 3
95
+ specification_version: 4
153
96
  summary: Enqueue Resque Jobs directly via Redis so that you can choose the namespace
154
97
  yourself
155
98
  test_files: []