line_up 0.1.1 → 0.1.4

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 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: []