buffered_job 0.4.2 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -33,7 +33,7 @@ Then. With this module,you can buffer `notify` method
33
33
  @user.buffer.notify(c2)
34
34
  # these two methods would be translated to
35
35
  @user.merge_notify([c1,c2])
36
- # then you can build other notification email with arryed comment objects
36
+ # So, you can write other notification email template which handles array of comment objects
37
37
  ```
38
38
 
39
39
 
@@ -77,11 +77,13 @@ flushing would be triggered by delayed_job. Start worker as follows after migrat
77
77
  $ (bundle exec) rake jobs:work
78
78
  ```
79
79
 
80
- See more details about [delayed_job_active_record](https://github.com/collectiveidea/delayed_job_active_record)
80
+ See more details about [delayed_job](https://github.com/collectiveidea/delayed_job)
81
81
 
82
82
 
83
83
  ## Usage
84
84
 
85
+ ### With ActiveRecord Object
86
+
85
87
  Every active_record object has `buffer` method. You can put it between receiver and method and bufferes method
86
88
  along with argument object.
87
89
 
@@ -96,11 +98,26 @@ invoke merge_{:original_method} method insted of original method on
96
98
  that User model,so in this case, you must define `merge_post_to_twitter` in User model.
97
99
 
98
100
  ```
99
- def merge_post_to_twitter(articles)
100
- ..
101
- end
101
+ def merge_post_to_twitter(articles)
102
+ ..
103
+ end
102
104
  ```
103
105
 
106
+ ### With ActionMailer Class
107
+
108
+ Also, subclasses of ActionMailer::Base have buffer method. You can buffer sending method with
109
+ buffering keyword. That keyword will be used to determine which methods should be merged.
110
+
111
+ ```
112
+ YourMailer.buffer("send_to/135").greeting(some_object)
113
+ YourMailer.buffer("send_to/135").greeting(other_object)
114
+ # these two will be merged
115
+ # and invoke merge_greeting([some_object,other_object])
116
+ YourMailer.buffer("send_to/222").greeting(yet_another_object)
117
+ # this won't be merged into preceding two.
118
+ ```
119
+
120
+
104
121
  ## Current Limitation
105
122
 
106
123
  Only one argument object can be passed to buffered method.
@@ -115,6 +132,8 @@ BufferedJob.delay_time = 30.seconds
115
132
  ```
116
133
 
117
134
 
135
+
136
+
118
137
  ## Copyright
119
138
 
120
139
  Copyright (c) 2012 Masaki Sawamura.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.2
1
+ 0.5.0
data/buffered_job.gemspec CHANGED
@@ -1,15 +1,15 @@
1
1
  # Generated by jeweler
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
3
+ # Instead, edit Jeweler::Tasks in rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "buffered_job"
8
- s.version = "0.4.2"
8
+ s.version = "0.5.0"
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"]
12
- s.date = "2012-06-05"
12
+ s.date = "2012-11-18"
13
13
  s.description = "Buffering jobs for a certain period and invoke specific method if two or more similer jobs in a buffer."
14
14
  s.email = "masaki.sw@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -12,51 +12,54 @@ module BufferedJob
12
12
 
13
13
  def self.flush!
14
14
  return if Lock.locked?
15
- Lock.lock!
16
- jobs = self.all
17
- skip = []
18
- @last_results = []
19
- jobs.each do |j|
20
- if skip[j.id]
21
- j.destroy
22
- next
23
- end
24
- cojobs = jobs.select{ |o| o.user_id == j.user_id and o.category == j.category }
25
- receiver = YAML.load(j.receiver)
26
- if cojobs.size > 1
27
- begin
28
- targets = cojobs.map{|c|
29
- YAML.load(c.target)
30
- }
31
- unless receiver.respond_to?(j.merge_method)
32
- raise NoMergeMethodError,"define #{j.merge_method}"
15
+ begin
16
+ Lock.lock!
17
+ jobs = self.all
18
+ skip = []
19
+ @last_results = []
20
+ jobs.each do |j|
21
+ if skip[j.id]
22
+ j.destroy
23
+ next
24
+ end
25
+ cojobs = jobs.select{ |o| o.user_id == j.user_id and o.category == j.category }
26
+ receiver = YAML.load(j.receiver)
27
+ if cojobs.size > 1
28
+ begin
29
+ targets = cojobs.map{|c|
30
+ YAML.load(c.target)
31
+ }
32
+ unless receiver.respond_to?(j.merge_method)
33
+ raise NoMergeMethodError,"define #{j.merge_method}"
34
+ end
35
+ if mailer?(receiver)
36
+ @last_results << receiver.send(j.merge_method,targets).deliver
37
+ else
38
+ @last_results << receiver.send(j.merge_method,targets)
39
+ end
40
+ rescue => er
41
+ @last_results << er
33
42
  end
34
- if mailer?(receiver)
35
- @last_results << receiver.send(j.merge_method,targets).deliver
36
- else
37
- @last_results << receiver.send(j.merge_method,targets)
43
+ cojobs.each do |c|
44
+ skip[c.id] = true
38
45
  end
39
- rescue => er
40
- @last_results << er
41
- end
42
- cojobs.each do |c|
43
- skip[c.id] = true
44
- end
45
- else
46
- begin
47
- target = YAML.load(j.target)
48
- if mailer?(receiver)
49
- @last_results << receiver.send(j.method,target).deliver
50
- else
51
- @last_results << receiver.send(j.method,target)
46
+ else
47
+ begin
48
+ target = YAML.load(j.target)
49
+ if mailer?(receiver)
50
+ @last_results << receiver.send(j.method,target).deliver
51
+ else
52
+ @last_results << receiver.send(j.method,target)
53
+ end
54
+ rescue => er
55
+ @last_results << er
52
56
  end
53
- rescue => er
54
- @last_results << er
55
57
  end
58
+ j.destroy
56
59
  end
57
- j.destroy
60
+ ensure
61
+ Lock.unlock!
58
62
  end
59
- Lock.unlock!
60
63
  end
61
64
 
62
65
  def self.last_results
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.2
4
+ version: 0.5.0
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-06-05 00:00:00.000000000 Z
12
+ date: 2012-11-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -198,7 +198,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
198
198
  version: '0'
199
199
  segments:
200
200
  - 0
201
- hash: 656163624896390621
201
+ hash: 2567470579218584468
202
202
  required_rubygems_version: !ruby/object:Gem::Requirement
203
203
  none: false
204
204
  requirements: