buffered_job 0.4.1 → 0.4.2
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/VERSION +1 -1
- data/buffered_job.gemspec +1 -1
- data/lib/buffered_job.rb +35 -0
- data/lib/buffered_job/ext.rb +0 -6
- data/lib/buffered_job/model.rb +12 -25
- data/spec/buffered_job_spec.rb +17 -0
- data/spec/spec_helper.rb +7 -1
- metadata +2 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.2
|
data/buffered_job.gemspec
CHANGED
data/lib/buffered_job.rb
CHANGED
@@ -22,6 +22,10 @@ module BufferedJob
|
|
22
22
|
BufferedJob::Model.flush!
|
23
23
|
end
|
24
24
|
|
25
|
+
def last_results
|
26
|
+
BufferedJob::Model.last_results
|
27
|
+
end
|
28
|
+
|
25
29
|
def delay_time=(sec)
|
26
30
|
@@delay_time = sec
|
27
31
|
end
|
@@ -33,5 +37,36 @@ module BufferedJob
|
|
33
37
|
def reset_delay_time
|
34
38
|
@@delay_time = DEFAULT_DELAY_TIME
|
35
39
|
end
|
40
|
+
|
41
|
+
def unlock!
|
42
|
+
Lock.unlock!
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
class Lock
|
47
|
+
def self.cache
|
48
|
+
@@cache ||= defined?(Rails) ? Rails.cache : ActiveSupport::Cache::MemoryStore.new
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.lock!
|
52
|
+
cache.write("mail_buffer_lock",true,:expires_in => 10.minutes)
|
53
|
+
end
|
54
|
+
|
55
|
+
def self.unlock!
|
56
|
+
cache.delete("mail_buffer_lock")
|
57
|
+
end
|
58
|
+
|
59
|
+
def self.locked?
|
60
|
+
cache.exist?("mail_buffer_lock")
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
class NoBufferTargetError < StandardError
|
65
|
+
end
|
66
|
+
|
67
|
+
class NoBufferKeywordError < StandardError
|
68
|
+
end
|
69
|
+
|
70
|
+
class NoMergeMethodError < StandardError
|
36
71
|
end
|
37
72
|
end
|
data/lib/buffered_job/ext.rb
CHANGED
data/lib/buffered_job/model.rb
CHANGED
@@ -6,17 +6,13 @@ module BufferedJob
|
|
6
6
|
before_create :yaml_dump
|
7
7
|
after_create :set_delayed_job
|
8
8
|
|
9
|
-
def self.cache
|
10
|
-
@@cache ||= defined?(Rails) ? Rails.cache : ActiveSupport::Cache::MemoryStore.new
|
11
|
-
end
|
12
|
-
|
13
9
|
def self.mailer?(obj)
|
14
10
|
obj.respond_to?(:superclass) and obj.superclass == ActionMailer::Base
|
15
11
|
end
|
16
12
|
|
17
13
|
def self.flush!
|
18
|
-
return if locked?
|
19
|
-
lock!
|
14
|
+
return if Lock.locked?
|
15
|
+
Lock.lock!
|
20
16
|
jobs = self.all
|
21
17
|
skip = []
|
22
18
|
@last_results = []
|
@@ -32,13 +28,16 @@ module BufferedJob
|
|
32
28
|
targets = cojobs.map{|c|
|
33
29
|
YAML.load(c.target)
|
34
30
|
}
|
31
|
+
unless receiver.respond_to?(j.merge_method)
|
32
|
+
raise NoMergeMethodError,"define #{j.merge_method}"
|
33
|
+
end
|
35
34
|
if mailer?(receiver)
|
36
|
-
|
35
|
+
@last_results << receiver.send(j.merge_method,targets).deliver
|
37
36
|
else
|
38
|
-
|
37
|
+
@last_results << receiver.send(j.merge_method,targets)
|
39
38
|
end
|
40
39
|
rescue => er
|
41
|
-
|
40
|
+
@last_results << er
|
42
41
|
end
|
43
42
|
cojobs.each do |c|
|
44
43
|
skip[c.id] = true
|
@@ -47,35 +46,23 @@ module BufferedJob
|
|
47
46
|
begin
|
48
47
|
target = YAML.load(j.target)
|
49
48
|
if mailer?(receiver)
|
50
|
-
|
49
|
+
@last_results << receiver.send(j.method,target).deliver
|
51
50
|
else
|
52
|
-
|
51
|
+
@last_results << receiver.send(j.method,target)
|
53
52
|
end
|
54
53
|
rescue => er
|
55
|
-
|
54
|
+
@last_results << er
|
56
55
|
end
|
57
56
|
end
|
58
57
|
j.destroy
|
59
|
-
@last_results << r
|
60
58
|
end
|
61
|
-
unlock!
|
59
|
+
Lock.unlock!
|
62
60
|
end
|
63
61
|
|
64
62
|
def self.last_results
|
65
63
|
@last_results or []
|
66
64
|
end
|
67
65
|
|
68
|
-
def self.lock!
|
69
|
-
cache.write("mail_buffer_lock",true,:expires_in => 10.minutes)
|
70
|
-
end
|
71
|
-
|
72
|
-
def self.unlock!
|
73
|
-
cache.delete("mail_buffer_lock")
|
74
|
-
end
|
75
|
-
|
76
|
-
def self.locked?
|
77
|
-
cache.exist?("mail_buffer_lock")
|
78
|
-
end
|
79
66
|
|
80
67
|
private
|
81
68
|
def yaml_dump
|
data/spec/buffered_job_spec.rb
CHANGED
@@ -40,6 +40,23 @@ describe "BufferedJob" do
|
|
40
40
|
BufferedJob::Spec.results.should include(c3)
|
41
41
|
end
|
42
42
|
|
43
|
+
|
44
|
+
context "returing results" do
|
45
|
+
it "should returns last results by BufferedJob.last_results" do
|
46
|
+
@john.buffer.notify({:foo => "bar"})
|
47
|
+
@paul.buffer.notify({:moo => "ooo"})
|
48
|
+
BufferedJob.flush!
|
49
|
+
BufferedJob.last_results.should == [1,1]
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should contain NoMergeMethodError if the receiver doesn't have it" do
|
53
|
+
@john.buffer.say("Yay!")
|
54
|
+
@john.buffer.say("Hoo!")
|
55
|
+
BufferedJob.flush!
|
56
|
+
BufferedJob.last_results.last.should be_a_kind_of(BufferedJob::NoMergeMethodError)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
43
60
|
context "with delayed_job" do
|
44
61
|
before do
|
45
62
|
@original_delay_time = BufferedJob.delay_time
|
data/spec/spec_helper.rb
CHANGED
@@ -71,7 +71,6 @@ class BufferedJob::Spec
|
|
71
71
|
def self.results
|
72
72
|
@@results
|
73
73
|
end
|
74
|
-
|
75
74
|
end
|
76
75
|
|
77
76
|
|
@@ -82,11 +81,18 @@ class User < ActiveRecord::Base
|
|
82
81
|
|
83
82
|
def notify(comment)
|
84
83
|
BufferedJob::Spec.results << comment
|
84
|
+
1
|
85
85
|
end
|
86
86
|
|
87
87
|
def merge_notify(comments)
|
88
88
|
BufferedJob::Spec.results << comments
|
89
|
+
2
|
90
|
+
end
|
91
|
+
|
92
|
+
def say(str)
|
93
|
+
3
|
89
94
|
end
|
95
|
+
|
90
96
|
end
|
91
97
|
|
92
98
|
class Article < ActiveRecord::Base
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: buffered_job
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -198,7 +198,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
198
198
|
version: '0'
|
199
199
|
segments:
|
200
200
|
- 0
|
201
|
-
hash:
|
201
|
+
hash: 656163624896390621
|
202
202
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
203
203
|
none: false
|
204
204
|
requirements:
|