qu-mongoid 0.2.0 → 0.2.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.
data/Gemfile CHANGED
@@ -6,6 +6,7 @@ gemspec
6
6
  group :test do
7
7
  gem 'SystemTimer', :platform => :mri_18
8
8
  gem 'ruby-debug', :platform => :mri_18
9
+ gem 'ruby-debug', :platform => :jruby
9
10
  gem 'debugger', :platform => :mri_19
10
11
  gem 'rake'
11
12
  gem 'rspec', '~> 2.0'
data/README.md CHANGED
@@ -7,8 +7,10 @@ This gem provides a Mongoid 3 / Moped backend for the queueing library [Qu](http
7
7
 
8
8
  Add this line to your application's Gemfile:
9
9
 
10
- gem 'qu'
11
- gem 'qu-mongoid'
10
+ ```ruby
11
+ gem 'qu'
12
+ gem 'qu-mongoid'
13
+ ```
12
14
 
13
15
  And then execute:
14
16
 
@@ -26,11 +28,19 @@ Mongoid version 2 and below uses the mongo driver, so use qu-mongo if you are on
26
28
 
27
29
  ## Configuration
28
30
 
29
- Qu-Mongoid will automatically connect to the default session configured in mongoid.yml. If a default session is not configured, it will attempt to read from ENV['MONGOHQ_URL'] and ENV['MONGOLAB_URI'], so it should work on Heroku. If you need to use a different Mongoid connection, you can do the following:
31
+ Qu-Mongoid will automatically connect to the default session configured in mongoid.yml. If a default session is not configured, it will attempt to read from ```ENV['MONGOHQ_URL']``` and ```ENV['MONGOLAB_URI']```, so it should work on Heroku. If you need to use a different Mongoid session, you should do the following:
32
+
33
+ ```ruby
34
+ Qu.configure do |c|
35
+ c.backend.session = :qu
36
+ end
37
+ ```
38
+
39
+ You may also configure the Qu connection using the code below, but **WARNING**: if you are running your workers in threads, this configuration is **NOT** recommended. This is because Mongoid uses a separate connection on each thread, so only the original thread will use the configured connection. New threads will use the default Mongoid session as described above.
30
40
 
31
41
  ``` ruby
32
42
  Qu.configure do |c|
33
- c.connection = Mongoid::Sessions.with_name(:qu)
43
+ c.connection = Mongoid::Sessions.with_name(:qu) # New threads will not use this configured connection.
34
44
  end
35
45
  ```
36
46
 
@@ -1,5 +1,5 @@
1
1
  module Qu
2
2
  module Mongoid
3
- VERSION = "0.2.0"
3
+ VERSION = "0.2.1"
4
4
  end
5
5
  end
@@ -12,27 +12,40 @@ module Qu
12
12
 
13
13
  # Seconds to wait before looking for more jobs when the queue is empty (default: 5)
14
14
  attr_accessor :poll_frequency
15
+
16
+ attr_accessor :session
15
17
 
16
18
  def initialize
17
19
  self.max_retries = 5
18
20
  self.retry_frequency = 1
19
21
  self.poll_frequency = 5
22
+ self.session = :default
20
23
  end
21
24
 
22
25
  def connection
23
- @connection ||= begin
24
- unless ::Mongoid.sessions[:default]
26
+ Thread.current[self.to_s] ||= begin
27
+ unless ::Mongoid.sessions[@session]
25
28
  if (uri = (ENV['MONGOHQ_URL'] || ENV['MONGOLAB_URI']).to_s) && !uri.empty?
26
29
  ::Mongoid.sessions = {:default => {:uri => uri, :max_retries_on_connection_failure => 4}}
27
30
  else
28
31
  ::Mongoid.connect_to('qu')
29
32
  end
30
33
  end
31
- ::Mongoid::Sessions.default
34
+ ::Mongoid::Sessions.with_name(@session)
32
35
  end
33
36
  end
34
37
  alias_method :database, :connection
35
38
 
39
+ def connection=(conn)
40
+ warn %q(If you are using threads, setting the Qu::Mongoid connection will not work. Configure the session instead.
41
+ Example:
42
+ Qu.configure do |c|
43
+ c.backend.session = :qu
44
+ end
45
+ )
46
+ Thread.current[self.to_s] = conn
47
+ end
48
+
36
49
  def clear(queue = nil)
37
50
  queue ||= queues + ['failed']
38
51
  logger.info { "Clearing queues: #{queue.inspect}" }
@@ -5,15 +5,51 @@ describe Qu::Backend::Mongoid do
5
5
  it_should_behave_like 'a backend'
6
6
 
7
7
  describe 'connection' do
8
- it 'should default the qu database' do
8
+ it 'should use a separate connection in each thread' do
9
+ backend = subject
10
+ connection = subject.connection
11
+ separate_connection = false
12
+ Thread.new do
13
+ separate_connection = (backend.connection != connection)
14
+ end.join
15
+ separate_connection.should be_true
16
+ end
17
+
18
+ it 'should default to the qu database' do
9
19
  subject.connection.should be_instance_of(Moped::Session)
10
20
  subject.connection.options[:database].should == 'qu'
11
21
  end
12
22
 
23
+ it 'should default to the :default session' do
24
+ subject.session.should == :default
25
+ subject.connection.should == ::Mongoid::Sessions.with_name(subject.session)
26
+ end
27
+
28
+ it 'should have a configurable session that works with threads' do
29
+ subject.connection = nil
30
+
31
+ ::Mongoid.sessions[:qu] = {:uri => 'mongodb://127.0.0.1:27017/quspec', :max_retries_on_connection_failure => 4}
32
+ Qu.backend = subject
33
+ Qu.configure do |c|
34
+ c.backend.session = :qu
35
+ end
36
+ subject.connection.should == ::Mongoid::Sessions.with_name(:qu)
37
+
38
+ should_have_qu_session_in_new_thread = false
39
+ Thread.new do
40
+ should_have_qu_session_in_new_thread = (subject.connection == ::Mongoid::Sessions.with_name(:qu))
41
+ end.join
42
+ should_have_qu_session_in_new_thread.should be_true
43
+
44
+ # Clean up
45
+ subject.connection=nil
46
+ ::Mongoid.connect_to('qu')
47
+ end
48
+
13
49
  it 'should use MONGOHQ_URL from heroku' do
14
50
  # Clean up from other tests
15
51
  ::Mongoid.sessions[:default] = nil
16
- subject.instance_eval {@connection=nil}
52
+ subject.connection=nil
17
53
  ::Mongoid::Sessions.clear
18
54
 
19
55
  ENV['MONGOHQ_URL'] = 'mongodb://127.0.0.1:27017/quspec'
@@ -23,7 +59,7 @@ describe Qu::Backend::Mongoid do
23
59
 
24
60
  # Clean up MONGOHQ stuff
25
61
  ENV.delete('MONGOHQ_URL')
26
- subject.instance_eval {@connection=nil}
62
+ subject.connection=nil
27
63
  ::Mongoid.connect_to('qu')
28
64
  end
29
65
  end
metadata CHANGED
@@ -1,48 +1,50 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qu-mongoid
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
5
- prerelease:
4
+ prerelease:
5
+ version: 0.2.1
6
6
  platform: ruby
7
7
  authors:
8
8
  - David Butler
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-09-18 00:00:00.000000000 Z
12
+ date: 2012-11-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mongoid
16
- requirement: !ruby/object:Gem::Requirement
17
- none: false
16
+ version_requirements: !ruby/object:Gem::Requirement
18
17
  requirements:
19
18
  - - ~>
20
19
  - !ruby/object:Gem::Version
21
20
  version: '3.0'
22
- type: :runtime
23
- prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
21
  none: false
22
+ requirement: !ruby/object:Gem::Requirement
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
29
26
  version: '3.0'
27
+ none: false
28
+ prerelease: false
29
+ type: :runtime
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: qu
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
32
+ version_requirements: !ruby/object:Gem::Requirement
34
33
  requirements:
35
34
  - - ! '>='
36
35
  - !ruby/object:Gem::Version
37
- version: '0'
38
- type: :runtime
39
- prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
36
+ version: !binary |-
37
+ MA==
41
38
  none: false
39
+ requirement: !ruby/object:Gem::Requirement
42
40
  requirements:
43
41
  - - ! '>='
44
42
  - !ruby/object:Gem::Version
45
- version: '0'
43
+ version: !binary |-
44
+ MA==
45
+ none: false
46
+ prerelease: false
47
+ type: :runtime
46
48
  description: Mongoid backend for the Ruby queuing library Qu
47
49
  email:
48
50
  - dwbutler@ucla.edu
@@ -64,27 +66,28 @@ files:
64
66
  - spec/spec_helper.rb
65
67
  homepage: http://github.com/dwbutler/qu-mongoid
66
68
  licenses: []
67
- post_install_message:
69
+ post_install_message:
68
70
  rdoc_options: []
69
71
  require_paths:
70
72
  - lib
71
73
  required_ruby_version: !ruby/object:Gem::Requirement
72
- none: false
73
74
  requirements:
74
75
  - - ! '>='
75
76
  - !ruby/object:Gem::Version
76
- version: '0'
77
- required_rubygems_version: !ruby/object:Gem::Requirement
77
+ version: !binary |-
78
+ MA==
78
79
  none: false
80
+ required_rubygems_version: !ruby/object:Gem::Requirement
79
81
  requirements:
80
82
  - - ! '>='
81
83
  - !ruby/object:Gem::Version
82
- version: '0'
84
+ version: !binary |-
85
+ MA==
86
+ none: false
83
87
  requirements: []
84
- rubyforge_project:
88
+ rubyforge_project:
85
89
  rubygems_version: 1.8.24
86
- signing_key:
90
+ signing_key:
87
91
  specification_version: 3
88
92
  summary: Mongoid backend for Qu
89
93
  test_files: []
90
- has_rdoc: