buffered_job 0.4.2 → 0.5.0
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/README.md +24 -5
- data/VERSION +1 -1
- data/buffered_job.gemspec +3 -3
- data/lib/buffered_job/model.rb +42 -39
- metadata +3 -3
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
|
-
#
|
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 [
|
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.
|
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
|
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.
|
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-
|
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 = [
|
data/lib/buffered_job/model.rb
CHANGED
@@ -12,51 +12,54 @@ module BufferedJob
|
|
12
12
|
|
13
13
|
def self.flush!
|
14
14
|
return if Lock.locked?
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
j.
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
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
|
-
|
35
|
-
|
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
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
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
|
-
|
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
|
+
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-
|
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:
|
201
|
+
hash: 2567470579218584468
|
202
202
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
203
203
|
none: false
|
204
204
|
requirements:
|