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 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: