buffered_job 0.2.2 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.2
1
+ 0.3.0
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.2.2"
8
+ s.version = "0.3.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"]
@@ -29,7 +29,7 @@ Gem::Specification.new do |s|
29
29
  "buffered_job.gemspec",
30
30
  "lib/buffered_job.rb",
31
31
  "lib/buffered_job/ext.rb",
32
- "lib/buffered_job/main.rb",
32
+ "lib/buffered_job/model.rb",
33
33
  "lib/buffered_job/proxy.rb",
34
34
  "lib/generators/buffered_job/buffered_job_generator.rb",
35
35
  "lib/generators/buffered_job/templates/migration.rb",
data/lib/buffered_job.rb CHANGED
@@ -3,7 +3,7 @@ require 'active_support'
3
3
  require 'active_record'
4
4
  require 'action_mailer'
5
5
 
6
- require 'buffered_job/main'
6
+ require 'buffered_job/model'
7
7
  require 'buffered_job/proxy'
8
8
  require 'buffered_job/ext'
9
9
 
@@ -12,3 +12,12 @@ require 'delayed_job_active_record'
12
12
 
13
13
  ActiveRecord::Base.send(:include,BufferedJob::Ext)
14
14
  ActionMailer::Base.send(:extend,BufferedJob::Ext)
15
+
16
+ module BufferedJob
17
+ class << self
18
+
19
+ def flush!
20
+ BufferedJob::Model.flush!
21
+ end
22
+ end
23
+ end
@@ -1,4 +1,4 @@
1
- class BufferedJob
1
+ module BufferedJob
2
2
  module Ext
3
3
  def buffer_for(user,opt={})
4
4
  Proxy.new(self,user,opt)
@@ -0,0 +1,110 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ module BufferedJob
4
+ class Model < ActiveRecord::Base
5
+ self.table_name = 'buffered_jobs'
6
+ before_create :yaml_dump
7
+ after_create :set_delayed_job
8
+
9
+ DEFAULT_DELAY_TIME = 3.minutes
10
+ @@delay_time = DEFAULT_DELAY_TIME
11
+
12
+ def self.cache
13
+ @@cache ||= defined?(Rails) ? Rails.cache : ActiveSupport::Cache::MemoryStore.new
14
+ end
15
+
16
+ def self.delay_time=(sec)
17
+ @@delay_time = sec
18
+ end
19
+
20
+ def self.reset_delay_time
21
+ @@delay_time = DEFAULT_DELAY_TIME
22
+ end
23
+
24
+ def self.mailer?(obj)
25
+ obj.respond_to?(:superclass) and obj.superclass == ActionMailer::Base
26
+ end
27
+
28
+ def self.flush!
29
+ return if locked?
30
+ lock!
31
+ jobs = self.all
32
+ skip = []
33
+ @last_results = []
34
+ jobs.each do |j|
35
+ if skip[j.id]
36
+ j.destroy
37
+ next
38
+ end
39
+ cojobs = jobs.select{ |o| o.user_id = j.user_id and o.category == j.category }
40
+ receiver = YAML.load(j.receiver)
41
+ if cojobs.size > 1
42
+ begin
43
+ targets = cojobs.map{|c|
44
+ YAML.load(c.target)
45
+ }
46
+ if mailer?(receiver)
47
+ r = receiver.send(j.merge_method,targets).deliver
48
+ else
49
+ r = receiver.send(j.merge_method,targets)
50
+ end
51
+ rescue => er
52
+ $stderr.puts er.to_s
53
+ end
54
+ cojobs.each do |c|
55
+ skip[c.id] = true
56
+ end
57
+ else
58
+ begin
59
+ target = YAML.load(j.target)
60
+ if mailer?(receiver)
61
+ r = receiver.send(j.method,target).deliver
62
+ else
63
+ r = receiver.send(j.method,target)
64
+ end
65
+ rescue => er
66
+ $stderr.puts er.to_s
67
+ end
68
+ end
69
+ j.destroy
70
+ @last_results << r
71
+ end
72
+ unlock!
73
+ end
74
+
75
+ def self.last_results
76
+ @last_results or []
77
+ end
78
+
79
+ def self.lock!
80
+ cache.write("mail_buffer_lock",true,:expires_in => 10.minutes)
81
+ end
82
+
83
+ def self.unlock!
84
+ cache.delete("mail_buffer_lock")
85
+ end
86
+
87
+ def self.locked?
88
+ cache.exist?("mail_buffer_lock")
89
+ end
90
+
91
+ private
92
+ def yaml_dump
93
+ self.receiver = YAML.dump self.receiver
94
+ self.target = YAML.dump self.target
95
+ end
96
+
97
+ def set_delayed_job
98
+ delay_time = @@delay_time or DEFAULT_DELAY_TIME
99
+ self.class.delay(:run_at => delay_time.from_now).flush!
100
+ end
101
+ end
102
+ end
103
+
104
+
105
+
106
+
107
+
108
+
109
+
110
+
@@ -1,4 +1,4 @@
1
- class BufferedJob
1
+ module BufferedJob
2
2
  class Proxy
3
3
  def initialize(receiver,user,opt={})
4
4
  @receiver = receiver
@@ -10,12 +10,12 @@ class BufferedJob
10
10
  cat = @opt[:category]
11
11
  cat ||= ( @receiver.class == Class ? @receiver.to_s : @receiver.class.to_s) + '#' + method.to_s
12
12
  merge_method = @opt[:action] || "merge_#{method}".to_sym
13
- BufferedJob.buf(:user_id => @user.id,
14
- :category => cat,
15
- :receiver => @receiver,
16
- :method => method.to_sym,
17
- :merge_method => merge_method,
18
- :target => target)
13
+ BufferedJob::Model.create(:user_id => @user.id,
14
+ :category => cat,
15
+ :receiver => @receiver,
16
+ :method => method.to_sym,
17
+ :merge_method => merge_method,
18
+ :target => target)
19
19
  end
20
20
  end
21
21
  end
@@ -7,17 +7,17 @@ describe "BufferedJob" do
7
7
  @george = User.create(:name => "george")
8
8
  @article = Article.create(:user => @john,:text => "foo")
9
9
  BufferedJob::Spec.result = []
10
+ BufferedJob::Model.destroy_all
10
11
  end
11
12
 
12
13
  after do
13
- BufferedJob.destroy_all
14
14
  end
15
15
 
16
16
  it "can buffer jobs" do
17
17
  comment = @article.comments.create(:user => @paul,:text => "I love this!")
18
18
  @john.buffer.notify(comment)
19
- BufferedJob.last.user_id.should == @john.id
20
- BufferedJob.last.receiver.should == YAML.dump(@john)
19
+ BufferedJob::Model.last.user_id.should == @john.id
20
+ BufferedJob::Model.last.receiver.should == YAML.dump(@john)
21
21
  end
22
22
 
23
23
  it "can exec one job " do
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.2.2
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-06-04 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
16
- requirement: &2153174100 !ruby/object:Gem::Requirement
16
+ requirement: &2154417080 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2153174100
24
+ version_requirements: *2154417080
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: delayed_job_active_record
27
- requirement: &2153164920 !ruby/object:Gem::Requirement
27
+ requirement: &2154416200 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *2153164920
35
+ version_requirements: *2154416200
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: actionmailer
38
- requirement: &2153161780 !ruby/object:Gem::Requirement
38
+ requirement: &2154414820 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *2153161780
46
+ version_requirements: *2154414820
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rspec
49
- requirement: &2153159820 !ruby/object:Gem::Requirement
49
+ requirement: &2154414080 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 2.8.0
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *2153159820
57
+ version_requirements: *2154414080
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rdoc
60
- requirement: &2153150140 !ruby/object:Gem::Requirement
60
+ requirement: &2154409060 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '3.12'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *2153150140
68
+ version_requirements: *2154409060
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: bundler
71
- requirement: &2153147740 !ruby/object:Gem::Requirement
71
+ requirement: &2154339080 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *2153147740
79
+ version_requirements: *2154339080
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: jeweler
82
- requirement: &2153143940 !ruby/object:Gem::Requirement
82
+ requirement: &2154336000 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ~>
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: 1.8.3
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *2153143940
90
+ version_requirements: *2154336000
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: simplecov
93
- requirement: &2153137560 !ruby/object:Gem::Requirement
93
+ requirement: &2154333260 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ! '>='
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: '0'
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *2153137560
101
+ version_requirements: *2154333260
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: sqlite3
104
- requirement: &2153136000 !ruby/object:Gem::Requirement
104
+ requirement: &2154323180 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ! '>='
@@ -109,7 +109,7 @@ dependencies:
109
109
  version: '0'
110
110
  type: :development
111
111
  prerelease: false
112
- version_requirements: *2153136000
112
+ version_requirements: *2154323180
113
113
  description: Buffering jobs for a certain period and invoke specific method if two
114
114
  or more similer jobs in a buffer.
115
115
  email: masaki.sw@gmail.com
@@ -131,7 +131,7 @@ files:
131
131
  - buffered_job.gemspec
132
132
  - lib/buffered_job.rb
133
133
  - lib/buffered_job/ext.rb
134
- - lib/buffered_job/main.rb
134
+ - lib/buffered_job/model.rb
135
135
  - lib/buffered_job/proxy.rb
136
136
  - lib/generators/buffered_job/buffered_job_generator.rb
137
137
  - lib/generators/buffered_job/templates/migration.rb
@@ -153,7 +153,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
153
153
  version: '0'
154
154
  segments:
155
155
  - 0
156
- hash: -3678512095132722771
156
+ hash: 917702728650095919
157
157
  required_rubygems_version: !ruby/object:Gem::Requirement
158
158
  none: false
159
159
  requirements:
@@ -1,107 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- class BufferedJob < ActiveRecord::Base
4
- after_create :set_delayed_job
5
- DEFAULT_DELAY_TIME = 3.minutes
6
- @@delay_time = DEFAULT_DELAY_TIME
7
-
8
-
9
- def self.cache
10
- @@cache ||= defined?(Rails) ? Rails.cache : ActiveSupport::Cache::MemoryStore.new
11
- end
12
-
13
- def self.delay_time=(sec)
14
- @@delay_time = sec
15
- end
16
-
17
- def self.reset_delay_time
18
- @@delay_time = DEFAULT_DELAY_TIME
19
- end
20
-
21
- def self.buf(params)
22
- params[:receiver] = YAML.dump params[:receiver]
23
- params[:target] = YAML.dump params[:target]
24
- self.create(params)
25
- end
26
-
27
- def self.mailer?(obj)
28
- obj.respond_to?(:superclass) and obj.superclass == ActionMailer::Base
29
- end
30
-
31
- def self.flush!
32
- return if locked?
33
- lock!
34
- jobs = self.all
35
- skip = []
36
- @last_results = []
37
- jobs.each do |j|
38
- if skip[j.id]
39
- j.destroy
40
- next
41
- end
42
- cojobs = jobs.select{ |o| o.user_id = j.user_id and o.category == j.category }
43
- receiver = YAML.load(j.receiver)
44
- if cojobs.size > 1
45
- begin
46
- targets = cojobs.map{|c|
47
- YAML.load(c.target)
48
- }
49
- if mailer?(receiver)
50
- r = receiver.send(j.merge_method,targets).deliver
51
- else
52
- r = receiver.send(j.merge_method,targets)
53
- end
54
- rescue => er
55
- $stderr.puts er.to_s
56
- end
57
- cojobs.each do |c|
58
- skip[c.id] = true
59
- end
60
- else
61
- begin
62
- target = YAML.load(j.target)
63
- if mailer?(receiver)
64
- r = receiver.send(j.method,target).deliver
65
- else
66
- r = receiver.send(j.method,target)
67
- end
68
- rescue => er
69
- $stderr.puts er.to_s
70
- end
71
- end
72
- j.destroy
73
- @last_results << r
74
- end
75
- unlock!
76
- end
77
-
78
- def self.last_results
79
- @last_results or []
80
- end
81
-
82
- def self.lock!
83
- cache.write("mail_buffer_lock",true,:expires_in => 10.minutes)
84
- end
85
-
86
- def self.unlock!
87
- cache.delete("mail_buffer_lock")
88
- end
89
-
90
- def self.locked?
91
- cache.exist?("mail_buffer_lock")
92
- end
93
-
94
- private
95
- def set_delayed_job
96
- delay_time = @@delay_time or DEFAULT_DELAY_TIME
97
- self.class.delay(:run_at => delay_time.from_now).flush!
98
- end
99
- end
100
-
101
-
102
-
103
-
104
-
105
-
106
-
107
-