buffered_job 0.4.1 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.1
1
+ 0.4.2
data/buffered_job.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "buffered_job"
8
- s.version = "0.4.1"
8
+ s.version = "0.4.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Masaki Sawamura"]
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
@@ -14,10 +14,4 @@ module BufferedJob
14
14
  buffer_for(self,key,opt)
15
15
  end
16
16
  end
17
-
18
- class NoBufferTargetError < StandardError
19
- end
20
-
21
- class NoBufferKeywordError < StandardError
22
- end
23
17
  end
@@ -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
- r = receiver.send(j.merge_method,targets).deliver
35
+ @last_results << receiver.send(j.merge_method,targets).deliver
37
36
  else
38
- r = receiver.send(j.merge_method,targets)
37
+ @last_results << receiver.send(j.merge_method,targets)
39
38
  end
40
39
  rescue => er
41
- $stderr.puts er.to_s
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
- r = receiver.send(j.method,target).deliver
49
+ @last_results << receiver.send(j.method,target).deliver
51
50
  else
52
- r = receiver.send(j.method,target)
51
+ @last_results << receiver.send(j.method,target)
53
52
  end
54
53
  rescue => er
55
- $stderr.puts er.to_s
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
@@ -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.1
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: 7026175223246001
201
+ hash: 656163624896390621
202
202
  required_rubygems_version: !ruby/object:Gem::Requirement
203
203
  none: false
204
204
  requirements: