backgrounded 2.1.0 → 2.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: a6f5f3fe616528faeebfbf52c4c954c022a7d37a
4
+ data.tar.gz: 1ffc6d954ba191ab3e8150620461d361d3672950
5
+ SHA512:
6
+ metadata.gz: ab1d8af191a86879995c843c36000f46c7f7ec1a41a661db4b2ab47228061edf1e8e635a11caa67883df4477dd1599e3e8c71e809df74ed632b403c4113840cb
7
+ data.tar.gz: 41ac8e66f7a5eb18a7722688553e380e4f9acf1dc24e2f0ea8ffbca43b4e506b10186fc4df5a9af86c32d01d241db5921c7b445a7620c0d244884560f876a907
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require spec_helper
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.2.4
4
+ before_install: gem install bundler -v 1.11.2
data/README.md ADDED
@@ -0,0 +1,94 @@
1
+ [![Build Status](https://travis-ci.org/wireframe/backgrounded.png?branch=master)](https://travis-ci.org/wireframe/backgrounded)
2
+ # Backgrounded
3
+
4
+ > The cleanest way to integrate background processing into your application.
5
+
6
+ Backgrounded provides a thin wrapper around any background processing
7
+ framework that implements the Backgrounded handler API which makes it
8
+ trivial to swap out processing frameworks with no impact to your code.
9
+
10
+ # Features
11
+
12
+ * clean and concise API which removes any dependency on external “worker”
13
+ jobs and allows you to execute any model method in the background
14
+ * integrates with any background processing framework (DelayedJob, Resque,
15
+ JobFu, Workling, etc)
16
+ * background methods can be actually unit tested by using an "in
17
+ process" runner
18
+ * custom callbacks to execute ActiveRecord callbacks in the background after
19
+ being committed to the database
20
+
21
+ # General Usage
22
+
23
+
24
+ class User
25
+ def do_stuff
26
+ end
27
+ def self.do_something_else
28
+ end
29
+ end
30
+
31
+ user = User.new
32
+ # execute instance method in background
33
+ user.backgrounded.do_stuff
34
+
35
+ # execute class method in background
36
+ User.backgrounded.do_something_else
37
+
38
+ # after_commit_backgrounded Callback
39
+
40
+ Automatically execute a callback in the background after a model has been
41
+ saved to the database. All of the standard after_commit options are
42
+ available as well as an optional :backgrounded option which will be passed
43
+ to the Backgrounded::Handler.
44
+
45
+ class User < ActiveRecord::Base
46
+ # execute :do_something in the background after committed
47
+ after_commit_backgrounded :do_something
48
+
49
+ # execute :do_something_else in the background after committed
50
+ # passing custom options to the backgrounded handler
51
+ after_commit_backgrounded :do_something_else, :backgrounded => {:priority => :high}
52
+ end
53
+
54
+ # Installation
55
+
56
+ $ gem install backgrounded
57
+
58
+ # Configuration
59
+
60
+ Backgrounded handlers are available for popular libraries in separate gems.
61
+ Just drop in the gem for your particular framework or write your own!
62
+
63
+ ## Resque
64
+
65
+ see [github.com/wireframe/backgrounded-resque](http://github.com/wireframe/backgrounded-resque)
66
+
67
+ ## JobFu
68
+
69
+ see [github.com/jnstq/job_fu/tree](http://github.com/jnstq/job_fu/tree)
70
+
71
+ ## Custom Handlers
72
+
73
+ Writing a custom handler is as simple as:
74
+
75
+ # config/initializers/backgrounded.rb
76
+ class MyHandler
77
+ # @param object is the target object to invoke the method upon
78
+ # @param method is the requested method to call
79
+ # @param args is the optional list of arguments to pass to the method
80
+ # @param options is the optional hash of options passed to the backgrounded call
81
+ def request(object, method, args, options={})
82
+ # process the call however you want!
83
+ end
84
+ end
85
+
86
+ # configure backgrounded to use your handler like so:
87
+ Backgrounded.configure do |config|
88
+ config.handler = MyHandler.new
89
+ end
90
+
91
+ ## Copyright
92
+
93
+ Copyright © 2012 Ryan Sonnek. See LICENSE for details.
94
+
data/Rakefile CHANGED
@@ -1,10 +1,7 @@
1
1
  require 'bundler'
2
2
  Bundler::GemHelper.install_tasks
3
3
 
4
- require 'rake/testtask'
5
- Rake::TestTask.new(:test) do |test|
6
- test.libs << 'lib' << 'test'
7
- test.pattern = 'test/**/*_test.rb'
8
- test.verbose = true
9
- end
10
- task :default => :test
4
+ require 'rspec/core/rake_task'
5
+
6
+ RSpec::Core::RakeTask.new(:spec)
7
+ task :default => :spec
data/backgrounded.gemspec CHANGED
@@ -1,30 +1,29 @@
1
- # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path("../lib", __FILE__)
3
- require "backgrounded/version"
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'backgrounded/version'
4
5
 
5
- Gem::Specification.new do |s|
6
- s.name = "backgrounded"
7
- s.version = Backgrounded::VERSION
8
- s.platform = Gem::Platform::RUBY
9
- s.authors = ["Ryan Sonnek"]
10
- s.email = ["ryan@codecrate.com"]
11
- s.homepage = "http://github.com/wireframe/backgrounded"
12
- s.summary = %q{Simple API to perform work in the background}
13
- s.description = %q{Execute any ActiveRecord Model method in the background}
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'backgrounded'
8
+ spec.version = Backgrounded::VERSION
9
+ spec.authors = ['Ryan Sonnek']
10
+ spec.email = ['ryan@codecrate.com']
14
11
 
15
- s.rubyforge_project = "backgrounded"
12
+ spec.summary = %q{Simple API to perform work in the background}
13
+ spec.description = %q{Execute any ActiveRecord Model method in the background}
14
+ spec.homepage = 'http://github.com/wireframe/backgrounded'
16
15
 
17
- s.add_runtime_dependency(%q<activerecord>, [">= 2.3.10"])
18
- s.add_runtime_dependency(%q<activesupport>, [">= 2.3.10"])
19
- s.add_development_dependency(%q<shoulda>, [">= 0"])
20
- s.add_development_dependency(%q<mocha>, [">= 0"])
21
- s.add_development_dependency(%q<sqlite3-ruby>, [">= 1.3.2"])
22
- s.add_development_dependency(%q<rake>, [">= 0.9.2.2"])
23
- s.add_development_dependency(%q<pry>, [">= 0.9.12"])
24
- s.add_development_dependency(%q<test_after_commit>, [">= 0"])
16
+ spec.add_runtime_dependency 'rails', '>= 3.0.0'
25
17
 
26
- s.files = `git ls-files`.split("\n")
27
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
28
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
29
- s.require_paths = ["lib"]
18
+ spec.add_development_dependency 'bundler', '~> 1.11'
19
+ spec.add_development_dependency 'rake', '~> 10.0'
20
+ spec.add_development_dependency 'rspec', "~> 3.0"
21
+ spec.add_development_dependency 'sqlite3-ruby', '>= 1.3.2'
22
+ spec.add_development_dependency 'pry', '>= 0.9.12'
23
+ spec.add_development_dependency 'test_after_commit'
24
+
25
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
26
+ spec.bindir = "exe"
27
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
28
+ spec.require_paths = ["lib"]
30
29
  end
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "backgrounded"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
data/lib/backgrounded.rb CHANGED
@@ -1,18 +1,29 @@
1
- require 'active_support/all'
2
-
3
- require File.join(File.dirname(__FILE__), 'backgrounded', 'handler', 'inprocess_handler')
4
- require File.join(File.dirname(__FILE__), 'backgrounded', 'concern')
5
- require File.join(File.dirname(__FILE__), 'backgrounded', 'active_record_extension')
1
+ require 'logger'
2
+ require_relative 'backgrounded/handler/inprocess_handler'
3
+ require_relative 'backgrounded/object_extensions'
4
+ require_relative 'backgrounded/railtie' if defined?(Rails)
6
5
 
7
6
  module Backgrounded
8
7
  class << self
9
8
  attr_accessor :logger, :handler
9
+
10
+ def configure
11
+ yield configuration
12
+ end
13
+
14
+ def configuration
15
+ self
16
+ end
10
17
  end
11
18
  end
12
19
 
13
- # default handler to the basic in process handler
14
- Backgrounded.handler = Backgrounded::Handler::InprocessHandler.new
20
+ # default library configuration
21
+ Backgrounded.configure do |config|
22
+ # default handler to the basic in process handler
23
+ config.handler = Backgrounded::Handler::InprocessHandler.new
15
24
 
16
- # configure default logger to standard out with info log level
17
- Backgrounded.logger = Logger.new STDOUT
18
- Backgrounded.logger.level = Logger::INFO
25
+ # configure default logger to standard out with info log level
26
+ logger = Logger.new(STDOUT)
27
+ logger.level = Logger::INFO
28
+ config.logger = logger
29
+ end
@@ -1,19 +1,18 @@
1
- require 'active_record/base'
1
+ require 'active_support/concern'
2
2
 
3
3
  module Backgrounded
4
4
  module ActiveRecordExtension
5
5
  extend ActiveSupport::Concern
6
6
 
7
- module ClassMethods
7
+ class_methods do
8
8
  # execute a method in the background after the object is committed to the database
9
9
  # @option options [Hash] :backgrounded (optional) options to pass into the backgrounded handler
10
10
  # @see after_commit
11
11
  def after_commit_backgrounded(method_name, options={})
12
- self.after_commit options.except(:backgrounded) do |instance|
12
+ after_commit options.except(:backgrounded) do |instance|
13
13
  instance.backgrounded(options[:backgrounded]).send(method_name)
14
14
  end
15
15
  end
16
16
  end
17
17
  end
18
18
  end
19
- ActiveRecord::Base.send(:include, Backgrounded::ActiveRecordExtension)
@@ -1,20 +1,22 @@
1
- require File.join(File.dirname(__FILE__), 'proxy')
1
+ require 'active_support/concern'
2
+ require_relative 'proxy'
2
3
 
3
4
  module Backgrounded
4
- module Concern
5
+ # mixin to add backgrounded proxy builder to all ruby objects
6
+ module ObjectExtensions
5
7
  extend ActiveSupport::Concern
6
8
 
7
- module ClassMethods
9
+ # @param options (optional) options to pass into the backgrounded handler
10
+ def backgrounded(options={})
11
+ Backgrounded::Proxy.new self, options
12
+ end
13
+
14
+ class_methods do
8
15
  # @see Backgrounded::Concern#backgrounded
9
16
  def backgrounded(options={})
10
17
  Backgrounded::Proxy.new self, options
11
18
  end
12
19
  end
13
-
14
- # @param options (optional) options to pass into the backgrounded handler
15
- def backgrounded(options={})
16
- Backgrounded::Proxy.new self, options
17
- end
18
20
  end
19
21
  end
20
- Object.send(:include, Backgrounded::Concern)
22
+ Object.send(:include, Backgrounded::ObjectExtensions)
@@ -1,14 +1,14 @@
1
1
  module Backgrounded
2
- attr_reader :delegate, :options
3
2
  class Proxy
3
+ attr_reader :delegate, :options
4
4
  def initialize(delegate, options={})
5
5
  @delegate = delegate
6
6
  @options = options || {}
7
7
  end
8
8
 
9
9
  def method_missing(method_name, *args)
10
- Backgrounded.logger.debug("Requesting #{Backgrounded.handler} backgrounded method: #{method_name} for instance #{@delegate} with options: #{@options}")
11
- Backgrounded.handler.request(@delegate, method_name, args, @options)
10
+ Backgrounded.logger.debug("Requesting #{Backgrounded.handler} backgrounded method: #{method_name} for instance #{delegate} with options: #{options}")
11
+ Backgrounded.handler.request(delegate, method_name, args, options)
12
12
  nil
13
13
  end
14
14
  end
@@ -0,0 +1,11 @@
1
+ require_relative 'active_record_extension'
2
+
3
+ module Backgrounded
4
+ class Railtie < Rails::Railtie
5
+ initializer 'backgrounded.configure' do
6
+ ActiveSupport.on_load(:active_record) do
7
+ include Backgrounded::ActiveRecordExtension
8
+ end
9
+ end
10
+ end
11
+ end
@@ -1,3 +1,3 @@
1
1
  module Backgrounded
2
- VERSION = "2.1.0"
2
+ VERSION = '2.1.1'
3
3
  end
metadata CHANGED
@@ -1,142 +1,111 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: backgrounded
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
5
- prerelease:
4
+ version: 2.1.1
6
5
  platform: ruby
7
6
  authors:
8
7
  - Ryan Sonnek
9
8
  autorequire:
10
- bindir: bin
9
+ bindir: exe
11
10
  cert_chain: []
12
- date: 2013-03-20 00:00:00.000000000 Z
11
+ date: 2015-12-23 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
- name: activerecord
14
+ name: rails
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
- version: 2.3.10
19
+ version: 3.0.0
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - ">="
28
25
  - !ruby/object:Gem::Version
29
- version: 2.3.10
26
+ version: 3.0.0
30
27
  - !ruby/object:Gem::Dependency
31
- name: activesupport
28
+ name: bundler
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - "~>"
36
32
  - !ruby/object:Gem::Version
37
- version: 2.3.10
38
- type: :runtime
33
+ version: '1.11'
34
+ type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - "~>"
44
39
  - !ruby/object:Gem::Version
45
- version: 2.3.10
40
+ version: '1.11'
46
41
  - !ruby/object:Gem::Dependency
47
- name: shoulda
42
+ name: rake
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - "~>"
52
46
  - !ruby/object:Gem::Version
53
- version: '0'
47
+ version: '10.0'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - "~>"
60
53
  - !ruby/object:Gem::Version
61
- version: '0'
54
+ version: '10.0'
62
55
  - !ruby/object:Gem::Dependency
63
- name: mocha
56
+ name: rspec
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - "~>"
68
60
  - !ruby/object:Gem::Version
69
- version: '0'
61
+ version: '3.0'
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - "~>"
76
67
  - !ruby/object:Gem::Version
77
- version: '0'
68
+ version: '3.0'
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: sqlite3-ruby
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
- - - ! '>='
73
+ - - ">="
84
74
  - !ruby/object:Gem::Version
85
75
  version: 1.3.2
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
- - - ! '>='
80
+ - - ">="
92
81
  - !ruby/object:Gem::Version
93
82
  version: 1.3.2
94
- - !ruby/object:Gem::Dependency
95
- name: rake
96
- requirement: !ruby/object:Gem::Requirement
97
- none: false
98
- requirements:
99
- - - ! '>='
100
- - !ruby/object:Gem::Version
101
- version: 0.9.2.2
102
- type: :development
103
- prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
- requirements:
107
- - - ! '>='
108
- - !ruby/object:Gem::Version
109
- version: 0.9.2.2
110
83
  - !ruby/object:Gem::Dependency
111
84
  name: pry
112
85
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
86
  requirements:
115
- - - ! '>='
87
+ - - ">="
116
88
  - !ruby/object:Gem::Version
117
89
  version: 0.9.12
118
90
  type: :development
119
91
  prerelease: false
120
92
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
93
  requirements:
123
- - - ! '>='
94
+ - - ">="
124
95
  - !ruby/object:Gem::Version
125
96
  version: 0.9.12
126
97
  - !ruby/object:Gem::Dependency
127
98
  name: test_after_commit
128
99
  requirement: !ruby/object:Gem::Requirement
129
- none: false
130
100
  requirements:
131
- - - ! '>='
101
+ - - ">="
132
102
  - !ruby/object:Gem::Version
133
103
  version: '0'
134
104
  type: :development
135
105
  prerelease: false
136
106
  version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
107
  requirements:
139
- - - ! '>='
108
+ - - ">="
140
109
  - !ruby/object:Gem::Version
141
110
  version: '0'
142
111
  description: Execute any ActiveRecord Model method in the background
@@ -146,60 +115,47 @@ executables: []
146
115
  extensions: []
147
116
  extra_rdoc_files: []
148
117
  files:
149
- - .gitignore
150
- - .rvmrc
118
+ - ".gitignore"
119
+ - ".rspec"
120
+ - ".rvmrc"
121
+ - ".travis.yml"
151
122
  - Gemfile
152
123
  - LICENSE
153
- - README.rdoc
124
+ - README.md
154
125
  - Rakefile
155
126
  - backgrounded.gemspec
127
+ - bin/console
128
+ - bin/setup
156
129
  - lib/backgrounded.rb
157
130
  - lib/backgrounded/active_record_extension.rb
158
- - lib/backgrounded/concern.rb
159
131
  - lib/backgrounded/handler/inprocess_handler.rb
160
132
  - lib/backgrounded/handler/no_op_handler.rb
133
+ - lib/backgrounded/object_extensions.rb
161
134
  - lib/backgrounded/proxy.rb
135
+ - lib/backgrounded/railtie.rb
162
136
  - lib/backgrounded/version.rb
163
- - test/active_record_extension_test.rb
164
- - test/backgrounded_test.rb
165
- - test/database.yml
166
- - test/proxy_test.rb
167
- - test/setup_database.rb
168
- - test/test_helper.rb
169
137
  homepage: http://github.com/wireframe/backgrounded
170
138
  licenses: []
139
+ metadata: {}
171
140
  post_install_message:
172
141
  rdoc_options: []
173
142
  require_paths:
174
143
  - lib
175
144
  required_ruby_version: !ruby/object:Gem::Requirement
176
- none: false
177
145
  requirements:
178
- - - ! '>='
146
+ - - ">="
179
147
  - !ruby/object:Gem::Version
180
148
  version: '0'
181
- segments:
182
- - 0
183
- hash: -3451700657100239997
184
149
  required_rubygems_version: !ruby/object:Gem::Requirement
185
- none: false
186
150
  requirements:
187
- - - ! '>='
151
+ - - ">="
188
152
  - !ruby/object:Gem::Version
189
153
  version: '0'
190
- segments:
191
- - 0
192
- hash: -3451700657100239997
193
154
  requirements: []
194
- rubyforge_project: backgrounded
195
- rubygems_version: 1.8.24
155
+ rubyforge_project:
156
+ rubygems_version: 2.5.1
196
157
  signing_key:
197
- specification_version: 3
158
+ specification_version: 4
198
159
  summary: Simple API to perform work in the background
199
- test_files:
200
- - test/active_record_extension_test.rb
201
- - test/backgrounded_test.rb
202
- - test/database.yml
203
- - test/proxy_test.rb
204
- - test/setup_database.rb
205
- - test/test_helper.rb
160
+ test_files: []
161
+ has_rdoc:
data/README.rdoc DELETED
@@ -1,76 +0,0 @@
1
- = Backgrounded
2
-
3
- The cleanest way to integrate background processing into your application.
4
-
5
- Backgrounded provides a thin wrapper around any background processing framework that implements the Backgrounded handler API which makes it trivial to swap out processing frameworks with no impact to your code.
6
-
7
- = Features
8
- * clean and concise API which removes any dependency on external "worker" jobs and allows you to execute any model method in the background
9
- * integrates with any background processing framework (DelayedJob, Resque, JobFu, Workling, etc)
10
- * background methods can be actually unit tested by using an 'in process' runner
11
- * custom callbacks to execute ActiveRecord callbacks in the background after being committed to the database
12
-
13
- = General Usage
14
-
15
- class User
16
- def do_stuff
17
- end
18
- def self.do_something_else
19
- end
20
- end
21
-
22
- user = User.new
23
- # execute instance method in background
24
- user.backgrounded.do_stuff
25
-
26
- # execute class method in background
27
- User.backgrounded.do_something_else
28
-
29
- = after_commit_backgrounded Callback
30
-
31
- Automatically execute a callback in the background after a model has been saved to the database. All of the standard after_commit options are
32
- available as well as an optional :backgrounded option which will be passed to the Backgrounded::Handler.
33
-
34
- class User < ActiveRecord::Base
35
- # execute :do_something in the background after committed
36
- after_commit_backgrounded :do_something
37
-
38
- # execute :do_something_else in the background after committed
39
- # passing custom options to the backgrounded handler
40
- after_commit_backgrounded :do_something_else, :backgrounded => {:priority => :high}
41
- end
42
-
43
- = Installation
44
-
45
- Bundler Gemfile configuration
46
-
47
- gem 'backgrounded'
48
-
49
- = Configuration
50
-
51
- Backgrounded handlers are available for popular libraries in separate gems. Just drop in the gem for your particular framework or write your own!
52
-
53
- == Resque
54
- see http://github.com/wireframe/backgrounded-resque
55
-
56
- == JobFu
57
- see http://github.com/jnstq/job_fu/tree
58
-
59
- == Custom Handlers
60
- Writing a custom handler is as simple as:
61
-
62
- # config/initializers/backgrounded.rb
63
- class MyHandler
64
- # @param object is the target object to invoke the method upon
65
- # @param method is the requested method to call
66
- # @param args is the optional list of arguments to pass to the method
67
- # @param options is the optional hash of options passed to the backgrounded call
68
- def request(object, method, args, options={})
69
- # process the call however you want!
70
- end
71
- end
72
- Backgrounded.handler = MyHandler.new
73
-
74
- == Copyright
75
-
76
- Copyright (c) 2012 Ryan Sonnek. See LICENSE for details.
@@ -1,37 +0,0 @@
1
- require File.join(File.dirname(__FILE__), 'test_helper')
2
-
3
- class ActiveRecordExtensionTest < Test::Unit::TestCase
4
-
5
- class Blog < ActiveRecord::Base
6
- after_commit_backgrounded :do_something_else
7
- def do_something_else
8
- end
9
- end
10
- class User < ActiveRecord::Base
11
- after_commit_backgrounded :do_stuff, :backgrounded => {:priority => :high}
12
- def do_stuff
13
- end
14
- end
15
-
16
- context '.after_commit_backgrounded' do
17
- should 'be defined on ActiveRecord::Base' do
18
- assert ActiveRecord::Base.respond_to?(:after_commit_backgrounded)
19
- end
20
- context 'without options' do
21
- setup do
22
- @blog = Blog.new
23
- Backgrounded.handler.expects(:request).with(@blog, :do_something_else, [], {})
24
- @blog.save!
25
- end
26
- should 'invoke Backgrounded.handler with no options' do end # see expectations
27
- end
28
- context 'with options[:backgrounded]' do
29
- setup do
30
- @user = User.new
31
- Backgrounded.handler.expects(:request).with(@user, :do_stuff, [], {:priority => :high})
32
- @user.save!
33
- end
34
- should 'pass options[:backgrounded] to Backgrounded.handler' do end # see expectations
35
- end
36
- end
37
- end
@@ -1,45 +0,0 @@
1
- require File.join(File.dirname(__FILE__), 'test_helper')
2
-
3
- class BackgroundedTest < Test::Unit::TestCase
4
-
5
- class Dog
6
- def do_stuff
7
- end
8
- def self.do_something_else
9
- end
10
- end
11
-
12
- context '#backgrounded' do
13
- should 'be defined for class' do
14
- assert Dog.respond_to?(:backgrounded)
15
- end
16
- should 'be defined for instance' do
17
- assert Dog.new.respond_to?(:backgrounded)
18
- end
19
- context 'invoking on class' do
20
- setup do
21
- @result = Dog.backgrounded
22
- end
23
- should 'return instance of Backgrounded::Proxy' do
24
- assert @result.is_a?(Backgrounded::Proxy)
25
- end
26
- end
27
- context 'invoking on an instance' do
28
- setup do
29
- @dog = Dog.new
30
- @result = @dog.backgrounded
31
- end
32
- should 'return instance of Backgrounded::Proxy' do
33
- assert @result.is_a?(Backgrounded::Proxy)
34
- end
35
- end
36
- context 'invoking with options' do
37
- setup do
38
- @dog = Dog.new
39
- Backgrounded.handler.expects(:request).with(@dog, :do_stuff, [], {:priority => :high})
40
- @dog.backgrounded(:priority => :high).do_stuff
41
- end
42
- should 'pass options onto Backgrounded.handler' do end # see expectations
43
- end
44
- end
45
- end
data/test/database.yml DELETED
@@ -1,3 +0,0 @@
1
- sqlite:
2
- adapter: sqlite3
3
- database: test/backgrounded.sqlite3
data/test/proxy_test.rb DELETED
@@ -1,51 +0,0 @@
1
- require File.join(File.dirname(__FILE__), 'test_helper')
2
-
3
- class ProxyTest < Test::Unit::TestCase
4
- class Person
5
- def self.do_something_else
6
- end
7
- def do_stuff(name, place, location)
8
- end
9
- def do_stuff_without_arguments
10
- end
11
- end
12
-
13
- context 'invoking delegate method' do
14
- context 'with arguments and options' do
15
- setup do
16
- @delegate = Person.new
17
- Backgrounded.handler.expects(:request).with(@delegate, :do_stuff, ['foo', 1, 'bar'], {:option_one => 'alpha'})
18
- @proxy = Backgrounded::Proxy.new @delegate, :option_one => 'alpha'
19
- @result = @proxy.do_stuff 'foo', 1, 'bar'
20
- end
21
- should "invokes Backgrounded.handler with delegate, method and args" do end #see expectations
22
- should 'return nil' do
23
- assert_nil @result
24
- end
25
- end
26
- context 'with arguments' do
27
- setup do
28
- @delegate = Person.new
29
- Backgrounded.handler.expects(:request).with(@delegate, :do_stuff, ['foo', 1, 'bar'], {})
30
- @proxy = Backgrounded::Proxy.new @delegate
31
- @result = @proxy.do_stuff 'foo', 1, 'bar'
32
- end
33
- should "invokes Backgrounded.handler with delegate, method and args" do end #see expectations
34
- should 'return nil' do
35
- assert_nil @result
36
- end
37
- end
38
- context 'with no arguments' do
39
- setup do
40
- @delegate = Person.new
41
- Backgrounded.handler.expects(:request).with(@delegate, :do_stuff_without_arguments, [], {})
42
- @proxy = Backgrounded::Proxy.new @delegate
43
- @result = @proxy.do_stuff_without_arguments
44
- end
45
- should "invokes Backgrounded.handler with delegate, method and args" do end #see expectations
46
- should 'return nil' do
47
- assert_nil @result
48
- end
49
- end
50
- end
51
- end
@@ -1,13 +0,0 @@
1
- config = YAML::load(IO.read(File.join(File.dirname(__FILE__), 'database.yml')))
2
- ActiveRecord::Base.logger = Logger.new(File.join(File.dirname(__FILE__), "debug.log"))
3
- ActiveRecord::Base.establish_connection(config[ENV['DB'] || 'sqlite'])
4
-
5
- ActiveRecord::Schema.define(:version => 1) do
6
- create_table :blogs, :force => true do |t|
7
- t.column :title, :string
8
- t.column :body, :string
9
- end
10
- create_table :users, :force => true do |t|
11
- t.column :name, :string
12
- end
13
- end
data/test/test_helper.rb DELETED
@@ -1,24 +0,0 @@
1
- require 'rubygems'
2
- require 'bundler'
3
- begin
4
- Bundler.setup(:default, :development)
5
- rescue Bundler::BundlerError => e
6
- $stderr.puts e.message
7
- $stderr.puts "Run `bundle install` to install missing gems"
8
- exit e.status_code
9
- end
10
- require 'test/unit'
11
- require 'shoulda'
12
- require 'pry'
13
- require 'mocha'
14
- require 'active_record'
15
-
16
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
17
- $LOAD_PATH.unshift(File.dirname(__FILE__))
18
- require 'backgrounded'
19
- require 'setup_database'
20
-
21
- Backgrounded.logger.level = Logger::DEBUG
22
-
23
- class Test::Unit::TestCase
24
- end