carrierwave_backgrounder 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -21,6 +21,6 @@ Gem::Specification.new do |s|
21
21
  s.add_dependency "carrierwave", ["~> 0.5"]
22
22
 
23
23
  s.add_development_dependency "rspec", ["2.5.0"]
24
- s.add_development_dependency "mocha", ["~> 0.9"]
24
+ s.add_development_dependency "mocha", ["~> 0.12.0"]
25
25
  s.add_development_dependency "rake"
26
26
  end
@@ -1,19 +1,20 @@
1
1
  # encoding: utf-8
2
- require 'active_record'
3
2
 
4
3
  module CarrierWave
5
4
  module Backgrounder
6
5
  module ORM
7
6
 
8
- module ActiveRecord
7
+ module ActiveModel
9
8
  include CarrierWave::Backgrounder::ORM::Base
10
9
 
11
10
  def process_in_background(column, worker=::CarrierWave::Workers::ProcessAsset)
12
11
  super
13
12
 
14
- class_eval <<-RUBY, __FILE__, __LINE__ + 1
13
+ mod = Module.new
14
+ include mod
15
+ mod.module_eval <<-RUBY, __FILE__, __LINE__ + 1
15
16
  def trigger_#{column}_background_processing?
16
- process_#{column}_upload != true && (#{column}_changed? || remote_#{column}_url.present?)
17
+ super && (#{column}_changed? || previous_changes.has_key?(:#{column}) || remote_#{column}_url.present?)
17
18
  end
18
19
  RUBY
19
20
  end
@@ -21,16 +22,17 @@ module CarrierWave
21
22
  def store_in_background(column, worker=::CarrierWave::Workers::StoreAsset)
22
23
  super
23
24
 
24
- class_eval <<-RUBY, __FILE__, __LINE__ + 1
25
+ mod = Module.new
26
+ include mod
27
+ mod.module_eval <<-RUBY, __FILE__, __LINE__ + 1
25
28
  def trigger_#{column}_background_storage?
26
- process_#{column}_upload != true && (#{column}_changed? || remote_#{column}_url.present?)
29
+ super && (#{column}_changed? || previous_changes.has_key?(:#{column}) || remote_#{column}_url.present?)
27
30
  end
28
31
  RUBY
29
32
  end
30
- end # ActiveRecord
33
+ end # ActiveModel
31
34
 
32
35
  end # ORM
33
36
  end # Backgrounder
34
37
  end # CarrierWave
35
38
 
36
- ActiveRecord::Base.extend CarrierWave::Backgrounder::ORM::ActiveRecord
@@ -40,10 +40,17 @@ module CarrierWave
40
40
  #
41
41
  def process_in_background(column, worker=::CarrierWave::Workers::ProcessAsset)
42
42
  send :before_save, :"set_#{column}_processing", :if => :"trigger_#{column}_background_processing?"
43
- send :after_save, :"enqueue_#{column}_background_job", :if => :"trigger_#{column}_background_processing?"
43
+ if self.respond_to?(:after_commit)
44
+ send :after_commit, :"enqueue_#{column}_background_job", :if => :"trigger_#{column}_background_processing?"
45
+ else
46
+ send :after_save, :"enqueue_#{column}_background_job", :if => :"trigger_#{column}_background_processing?"
47
+ end
48
+ send :attr_accessor, :"process_#{column}_upload"
44
49
 
45
- class_eval <<-RUBY, __FILE__, __LINE__ + 1
46
- attr_accessor :process_#{column}_upload
50
+ mod = Module.new
51
+ include mod
52
+
53
+ mod.module_eval <<-RUBY, __FILE__, __LINE__ + 1
47
54
 
48
55
  def set_#{column}_processing
49
56
  self.#{column}_processing = true if respond_to?(:#{column}_processing)
@@ -83,10 +90,16 @@ module CarrierWave
83
90
  # end
84
91
  #
85
92
  def store_in_background(column, worker=::CarrierWave::Workers::StoreAsset)
86
- send :after_save, :"enqueue_#{column}_background_job", :if => :"trigger_#{column}_background_storage?"
87
-
88
- class_eval <<-RUBY, __FILE__, __LINE__ + 1
89
- attr_accessor :process_#{column}_upload
93
+ if self.respond_to?(:after_commit)
94
+ send :after_commit, :"enqueue_#{column}_background_job", :if => :"trigger_#{column}_background_storage?"
95
+ else
96
+ send :after_save, :"enqueue_#{column}_background_job", :if => :"trigger_#{column}_background_storage?"
97
+ end
98
+ send :attr_accessor, :"process_#{column}_upload"
99
+
100
+ mod = Module.new
101
+ include mod
102
+ mod.module_eval <<-RUBY, __FILE__, __LINE__ + 1
90
103
 
91
104
  def write_#{column}_identifier
92
105
  super() and return if process_#{column}_upload
@@ -20,7 +20,7 @@ module CarrierWave
20
20
 
21
21
  def enqueue_#{column}_background_job
22
22
  if trigger_#{column}_background_processing?
23
- ::Delayed::Job.enqueue #{worker}.new(self.class, id, #{column}.mounted_as)
23
+ CarrierWave::Backgrounder.enqueue_for_backend(#{worker}, self.class.name, id, #{column}.mounted_as)
24
24
  @#{column}_changed = false
25
25
  end
26
26
  end
@@ -55,7 +55,7 @@ module CarrierWave
55
55
 
56
56
  def enqueue_#{column}_background_job
57
57
  if trigger_#{column}_background_storage?
58
- ::Delayed::Job.enqueue #{worker}.new(self.class, id, #{column}.mounted_as)
58
+ CarrierWave::Backgrounder.enqueue_for_backend(#{worker}, self.class.name, id, #{column}.mounted_as)
59
59
  @#{column}_changed = false
60
60
  end
61
61
  end
@@ -1,5 +1,5 @@
1
1
  module CarrierWave
2
2
  module Backgrounder
3
- VERSION = "0.0.8"
3
+ VERSION = "0.0.9"
4
4
  end
5
5
  end
@@ -3,9 +3,14 @@ module CarrierWave
3
3
  module Workers
4
4
 
5
5
  class ProcessAsset < Struct.new(:klass, :id, :column)
6
- include ::Sidekiq::Worker if defined?(::Sidekiq)
7
6
  @queue = :process_asset
8
7
 
8
+ if defined?(::Sidekiq)
9
+ include ::Sidekiq::Worker
10
+
11
+ sidekiq_options :queue => @queue
12
+ end
13
+
9
14
  def self.perform(*args)
10
15
  new(*args).perform
11
16
  end
@@ -3,9 +3,14 @@ module CarrierWave
3
3
  module Workers
4
4
 
5
5
  class StoreAsset < Struct.new(:klass, :id, :column)
6
- include ::Sidekiq::Worker if defined?(::Sidekiq)
7
6
  @queue = :store_asset
8
7
 
8
+ if defined?(::Sidekiq)
9
+ include ::Sidekiq::Worker
10
+
11
+ sidekiq_options :queue => @queue
12
+ end
13
+
9
14
  def self.perform(*args)
10
15
  new(*args).perform
11
16
  end
@@ -27,12 +32,12 @@ module CarrierWave
27
32
  end
28
33
  end
29
34
  end
30
-
35
+
31
36
  def set_args(klass, id, column)
32
37
  self.klass, self.id, self.column = klass, id, column
33
38
  end
34
39
 
35
40
  end # StoreAsset
36
-
41
+
37
42
  end # Workers
38
43
  end # Backgrounder
@@ -83,7 +83,8 @@ if defined?(Rails)
83
83
 
84
84
  initializer "carrierwave_backgrounder.active_record" do
85
85
  ActiveSupport.on_load :active_record do
86
- require 'backgrounder/orm/activerecord'
86
+ require 'backgrounder/orm/activemodel'
87
+ ::ActiveRecord::Base.extend CarrierWave::Backgrounder::ORM::ActiveModel
87
88
  end
88
89
  end
89
90
 
@@ -92,7 +93,10 @@ if defined?(Rails)
92
93
  end
93
94
 
94
95
  initializer "carrierwave_backgrounder.mongoid" do
95
- require 'backgrounder/orm/mongoid' if defined?(Mongoid)
96
+ if defined?(Mongoid)
97
+ require 'backgrounder/orm/activemodel'
98
+ ::Mongoid::Document::ClassMethods.send(:include, ::CarrierWave::Backgrounder::ORM::ActiveModel)
99
+ end
96
100
  end
97
101
 
98
102
  end
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+ require 'ostruct'
3
+ require 'backgrounder/orm/activemodel'
4
+
5
+ describe CarrierWave::Backgrounder::ORM::ActiveModel do
6
+ before do
7
+ @mock_class = Class.new do
8
+ def self.before_save(method, opts); nil; end
9
+ def self.after_commit(method, opts); nil; end
10
+ def avatar_changed?; nil; end
11
+ def remote_avatar_url; OpenStruct.new(:present? => true); end
12
+ def previous_changes; {}; end
13
+ end
14
+
15
+ @mock_class.extend CarrierWave::Backgrounder::ORM::ActiveModel
16
+ @mock_class.process_in_background :avatar
17
+ end
18
+
19
+ describe '#trigger_column_background_processing?' do
20
+ it "calls up to processs column upload getter in the base class" do
21
+ instance = @mock_class.new
22
+ instance.expects(:process_avatar_upload)
23
+ instance.trigger_avatar_background_processing?
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,103 @@
1
+ require 'spec_helper'
2
+
3
+
4
+ describe CarrierWave::Backgrounder::ORM::Base do
5
+ before do
6
+ @mock_class = Class.new do
7
+ def self.before_save(method, opts); nil; end
8
+ def self.after_commit(method, opts); nil; end
9
+ end
10
+
11
+ @mock_class.extend CarrierWave::Backgrounder::ORM::Base
12
+ end
13
+
14
+ it 'mixes in the two DSL methods' do
15
+ @mock_class.should respond_to(:process_in_background)
16
+ @mock_class.should respond_to(:store_in_background)
17
+ end
18
+
19
+ describe 'process in background' do
20
+
21
+ describe 'setting up callbacks' do
22
+
23
+ it 'creates a before_save hook' do
24
+ @mock_class.expects(:before_save).with(:set_avatar_processing, :if => :trigger_avatar_background_processing?)
25
+ @mock_class.process_in_background :avatar
26
+ end
27
+
28
+ it 'creates an after_save hook' do
29
+ @mock_class.expects(:after_commit).with(:enqueue_avatar_background_job, :if => :trigger_avatar_background_processing?)
30
+ @mock_class.process_in_background :avatar
31
+ end
32
+
33
+ end
34
+
35
+ describe 'including new methods' do
36
+ before do
37
+ @mock_class.process_in_background :avatar
38
+ @instance = @mock_class.new
39
+ end
40
+
41
+ it 'creates a processing enabled accessor' do
42
+ @instance.should respond_to(:process_avatar_upload)
43
+ @instance.should respond_to(:process_avatar_upload=)
44
+ end
45
+
46
+ it 'create a setter for the processing attribute' do
47
+ @instance.should respond_to(:set_avatar_processing)
48
+ end
49
+
50
+ it 'create a background job queuer' do
51
+ @instance.should respond_to(:enqueue_avatar_background_job)
52
+ end
53
+
54
+ it 'create a trigger interrogator' do
55
+ @instance.should respond_to(:trigger_avatar_background_processing?)
56
+ end
57
+
58
+ end
59
+
60
+ end
61
+
62
+ describe 'store in background' do
63
+
64
+ describe 'setting up callbacks' do
65
+
66
+ it 'creates an after_save hook' do
67
+ @mock_class.expects(:after_commit).with(:enqueue_avatar_background_job, :if => :trigger_avatar_background_storage?)
68
+ @mock_class.store_in_background :avatar
69
+ end
70
+
71
+ end
72
+
73
+ describe 'including new methods' do
74
+ before do
75
+ @mock_class.store_in_background :avatar
76
+ @instance = @mock_class.new
77
+ end
78
+
79
+ it 'creates a processing enabled accessor' do
80
+ @instance.should respond_to(:process_avatar_upload)
81
+ @instance.should respond_to(:process_avatar_upload=)
82
+ end
83
+
84
+ it 'overrides the write column identifier method from carrierwave' do
85
+ @instance.should respond_to(:write_avatar_identifier)
86
+ end
87
+
88
+ it 'overrides the store column method from carrierwave' do
89
+ @instance.should respond_to(:store_avatar!)
90
+ end
91
+
92
+ it 'create a background job queuer' do
93
+ @instance.should respond_to(:enqueue_avatar_background_job)
94
+ end
95
+
96
+ it 'create a trigger interrogator' do
97
+ @instance.should respond_to(:trigger_avatar_background_storage?)
98
+ end
99
+
100
+ end
101
+ end
102
+
103
+ end
@@ -16,6 +16,14 @@ end
16
16
 
17
17
  module Sidekiq
18
18
  module Worker
19
+ def self.included(base)
20
+ base.extend(ClassMethods)
21
+ end
22
+
23
+ module ClassMethods
24
+ def sidekiq_options(opts = {})
25
+ end
26
+ end
19
27
  end
20
28
  end
21
29
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: carrierwave_backgrounder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-15 00:00:00.000000000 Z
12
+ date: 2012-11-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: carrierwave
@@ -50,7 +50,7 @@ dependencies:
50
50
  requirements:
51
51
  - - ~>
52
52
  - !ruby/object:Gem::Version
53
- version: '0.9'
53
+ version: 0.12.0
54
54
  type: :development
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
@@ -58,7 +58,7 @@ dependencies:
58
58
  requirements:
59
59
  - - ~>
60
60
  - !ruby/object:Gem::Version
61
- version: '0.9'
61
+ version: 0.12.0
62
62
  - !ruby/object:Gem::Dependency
63
63
  name: rake
64
64
  requirement: !ruby/object:Gem::Requirement
@@ -89,16 +89,17 @@ files:
89
89
  - Rakefile
90
90
  - carrierwave_backgrounder.gemspec
91
91
  - lib/backgrounder/delay.rb
92
- - lib/backgrounder/orm/activerecord.rb
92
+ - lib/backgrounder/orm/activemodel.rb
93
93
  - lib/backgrounder/orm/base.rb
94
94
  - lib/backgrounder/orm/data_mapper.rb
95
- - lib/backgrounder/orm/mongoid.rb
96
95
  - lib/backgrounder/version.rb
97
96
  - lib/backgrounder/workers.rb
98
97
  - lib/backgrounder/workers/process_asset.rb
99
98
  - lib/backgrounder/workers/store_asset.rb
100
99
  - lib/carrierwave_backgrounder.rb
101
100
  - spec/backgrounder/backends_spec.rb
101
+ - spec/backgrounder/orm/activemodel_spec.rb
102
+ - spec/backgrounder/orm/base_spec.rb
102
103
  - spec/backgrounder/workers/fixtures/test.jpg
103
104
  - spec/backgrounder/workers/process_asset_spec.rb
104
105
  - spec/backgrounder/workers/store_asset_spec.rb
@@ -118,7 +119,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
118
119
  version: '0'
119
120
  segments:
120
121
  - 0
121
- hash: -3222022521039944985
122
+ hash: 1188528619388271900
122
123
  required_rubygems_version: !ruby/object:Gem::Requirement
123
124
  none: false
124
125
  requirements:
@@ -127,7 +128,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
127
128
  version: '0'
128
129
  segments:
129
130
  - 0
130
- hash: -3222022521039944985
131
+ hash: 1188528619388271900
131
132
  requirements: []
132
133
  rubyforge_project: carrierwave_backgrounder
133
134
  rubygems_version: 1.8.24
@@ -137,6 +138,8 @@ summary: Offload CarrierWave's image processing and storage to a background proc
137
138
  using Delayed Job
138
139
  test_files:
139
140
  - spec/backgrounder/backends_spec.rb
141
+ - spec/backgrounder/orm/activemodel_spec.rb
142
+ - spec/backgrounder/orm/base_spec.rb
140
143
  - spec/backgrounder/workers/fixtures/test.jpg
141
144
  - spec/backgrounder/workers/process_asset_spec.rb
142
145
  - spec/backgrounder/workers/store_asset_spec.rb
@@ -1,33 +0,0 @@
1
- module CarrierWave
2
- module Backgrounder
3
- module ORM
4
-
5
- module Mongoid
6
- include CarrierWave::Backgrounder::ORM::Base
7
-
8
- def process_in_background(column, worker=::CarrierWave::Workers::ProcessAsset)
9
- super
10
-
11
- class_eval <<-RUBY, __FILE__, __LINE__ + 1
12
- def trigger_#{column}_background_processing?
13
- process_#{column}_upload != true && (#{column}_changed? || remote_#{column}_url.present?)
14
- end
15
- RUBY
16
- end
17
-
18
- def store_in_background(column, worker=::CarrierWave::Workers::StoreAsset)
19
- super
20
-
21
- class_eval <<-RUBY, __FILE__, __LINE__ + 1
22
- def trigger_#{column}_background_storage?
23
- process_#{column}_upload != true && (#{column}_changed? || remote_#{column}_url.present?)
24
- end
25
- RUBY
26
- end
27
- end # ActiveRecord
28
-
29
- end # ORM
30
- end # Backgrounder
31
- end # CarrierWave
32
-
33
- Mongoid::Document::ClassMethods.send(:include, ::CarrierWave::Backgrounder::ORM::Mongoid)