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