perfectsched 0.8.2 → 0.8.3

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/ChangeLog CHANGED
@@ -1,4 +1,9 @@
1
1
 
2
+ == 2012-07-06 version 0.8.3
3
+
4
+ * Introduced PerfectSched::Application::Decider
5
+
6
+
2
7
  == 2012-07-03 version 0.8.2
3
8
 
4
9
  * Fixed rdb_compat to raise PreemptedError and
@@ -20,6 +20,50 @@ module PerfectSched
20
20
  module Application
21
21
 
22
22
  class Base < Runner
23
+ def self.decider
24
+ DefaultDecider
25
+ end
26
+
27
+ def self.decider=(decider_klass)
28
+ (class<<self;self;end).instance_eval do
29
+ self.__send__(:define_method, :decider) { decider_klass }
30
+ end
31
+ decider_klass
32
+ end
33
+
34
+ def initialize(task)
35
+ super
36
+ @decider = self.class.decider.new(self)
37
+ end
38
+
39
+ attr_reader :decider
40
+
41
+ def run
42
+ begin
43
+ return unless before_perform
44
+ begin
45
+ perform
46
+ ensure
47
+ after_perform
48
+ end
49
+ rescue
50
+ decide! :unexpected_error_raised, :error=>$!
51
+ end
52
+ end
53
+
54
+ def before_perform
55
+ true
56
+ end
57
+
58
+ #def perform
59
+ #end
60
+
61
+ def after_perform
62
+ end
63
+
64
+ def decide!(type, option={})
65
+ @decider.decide!(type, option)
66
+ end
23
67
  end
24
68
 
25
69
  end
@@ -0,0 +1,55 @@
1
+ #
2
+ # PerfectSched
3
+ #
4
+ # Copyright (C) 2012 FURUHASHI Sadayuki
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ module PerfectSched
20
+ module Application
21
+
22
+ require 'perfectqueue/application/decider'
23
+
24
+ UndefinedDecisionError = PerfectQueue::Application::UndefinedDecisionError
25
+
26
+ class Decider
27
+ def initialize(base)
28
+ @base = base
29
+ end
30
+
31
+ def schedules
32
+ @base.schedules
33
+ end
34
+
35
+ def task
36
+ @base.task
37
+ end
38
+
39
+ def decide!(type, opts={})
40
+ begin
41
+ m = method(type)
42
+ rescue NameError
43
+ raise UndefinedDecisionError, "Undefined decision #{type} options=#{opt.inspect}"
44
+ end
45
+ m.call(type, opts)
46
+ end
47
+ end
48
+
49
+ class DefaultDecider < Decider
50
+ # no decisions defined
51
+ end
52
+
53
+ end
54
+ end
55
+
@@ -23,6 +23,9 @@ module PerfectSched
23
23
  :Dispatch => 'application/dispatch',
24
24
  :Router => 'application/router',
25
25
  :RouterDSL => 'application/router',
26
+ :Decider => 'application/decider',
27
+ :DefaultDecider => 'application/decider',
28
+ :UndefinedDecisionError => 'application/decider',
26
29
  :Base => 'application/base',
27
30
  }.each_pair {|k,v|
28
31
  autoload k, File.expand_path(v, File.dirname(__FILE__))
@@ -1,3 +1,3 @@
1
1
  module PerfectSched
2
- VERSION = "0.8.2"
2
+ VERSION = "0.8.3"
3
3
  end
data/perfectsched.gemspec CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |gem|
19
19
  gem.add_dependency "cron-spec", [">= 0.1.2", "<= 0.1.2"]
20
20
  gem.add_dependency "sequel", "~> 3.26.0"
21
21
  gem.add_dependency "tzinfo", "~> 0.3.29"
22
- gem.add_dependency "perfectqueue", "~> 0.8.3"
22
+ gem.add_dependency "perfectqueue", "~> 0.8.4"
23
23
  gem.add_development_dependency "rake", "~> 0.9.2"
24
24
  gem.add_development_dependency "rspec", "~> 2.10.0"
25
25
  gem.add_development_dependency "simplecov", "~> 0.5.4"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: perfectsched
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.2
4
+ version: 0.8.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-04 00:00:00.000000000Z
12
+ date: 2012-07-07 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: cron-spec
16
- requirement: &70202080349100 !ruby/object:Gem::Requirement
16
+ requirement: &70229464188900 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -24,10 +24,10 @@ dependencies:
24
24
  version: 0.1.2
25
25
  type: :runtime
26
26
  prerelease: false
27
- version_requirements: *70202080349100
27
+ version_requirements: *70229464188900
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: sequel
30
- requirement: &70202080348340 !ruby/object:Gem::Requirement
30
+ requirement: &70229464170100 !ruby/object:Gem::Requirement
31
31
  none: false
32
32
  requirements:
33
33
  - - ~>
@@ -35,10 +35,10 @@ dependencies:
35
35
  version: 3.26.0
36
36
  type: :runtime
37
37
  prerelease: false
38
- version_requirements: *70202080348340
38
+ version_requirements: *70229464170100
39
39
  - !ruby/object:Gem::Dependency
40
40
  name: tzinfo
41
- requirement: &70202080347880 !ruby/object:Gem::Requirement
41
+ requirement: &70229464167060 !ruby/object:Gem::Requirement
42
42
  none: false
43
43
  requirements:
44
44
  - - ~>
@@ -46,21 +46,21 @@ dependencies:
46
46
  version: 0.3.29
47
47
  type: :runtime
48
48
  prerelease: false
49
- version_requirements: *70202080347880
49
+ version_requirements: *70229464167060
50
50
  - !ruby/object:Gem::Dependency
51
51
  name: perfectqueue
52
- requirement: &70202080347420 !ruby/object:Gem::Requirement
52
+ requirement: &70229464151880 !ruby/object:Gem::Requirement
53
53
  none: false
54
54
  requirements:
55
55
  - - ~>
56
56
  - !ruby/object:Gem::Version
57
- version: 0.8.3
57
+ version: 0.8.4
58
58
  type: :runtime
59
59
  prerelease: false
60
- version_requirements: *70202080347420
60
+ version_requirements: *70229464151880
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: rake
63
- requirement: &70202080346960 !ruby/object:Gem::Requirement
63
+ requirement: &70229464147920 !ruby/object:Gem::Requirement
64
64
  none: false
65
65
  requirements:
66
66
  - - ~>
@@ -68,10 +68,10 @@ dependencies:
68
68
  version: 0.9.2
69
69
  type: :development
70
70
  prerelease: false
71
- version_requirements: *70202080346960
71
+ version_requirements: *70229464147920
72
72
  - !ruby/object:Gem::Dependency
73
73
  name: rspec
74
- requirement: &70202079928960 !ruby/object:Gem::Requirement
74
+ requirement: &70229464141720 !ruby/object:Gem::Requirement
75
75
  none: false
76
76
  requirements:
77
77
  - - ~>
@@ -79,10 +79,10 @@ dependencies:
79
79
  version: 2.10.0
80
80
  type: :development
81
81
  prerelease: false
82
- version_requirements: *70202079928960
82
+ version_requirements: *70229464141720
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: simplecov
85
- requirement: &70202079928500 !ruby/object:Gem::Requirement
85
+ requirement: &70229464137960 !ruby/object:Gem::Requirement
86
86
  none: false
87
87
  requirements:
88
88
  - - ~>
@@ -90,10 +90,10 @@ dependencies:
90
90
  version: 0.5.4
91
91
  type: :development
92
92
  prerelease: false
93
- version_requirements: *70202079928500
93
+ version_requirements: *70229464137960
94
94
  - !ruby/object:Gem::Dependency
95
95
  name: sqlite3
96
- requirement: &70202079928040 !ruby/object:Gem::Requirement
96
+ requirement: &70229464128900 !ruby/object:Gem::Requirement
97
97
  none: false
98
98
  requirements:
99
99
  - - ~>
@@ -101,7 +101,7 @@ dependencies:
101
101
  version: 1.3.3
102
102
  type: :development
103
103
  prerelease: false
104
- version_requirements: *70202079928040
104
+ version_requirements: *70229464128900
105
105
  description: Highly available distributed cron built on RDBMS
106
106
  email: frsyuki@gmail.com
107
107
  executables:
@@ -118,6 +118,7 @@ files:
118
118
  - lib/perfectsched.rb
119
119
  - lib/perfectsched/application.rb
120
120
  - lib/perfectsched/application/base.rb
121
+ - lib/perfectsched/application/decider.rb
121
122
  - lib/perfectsched/application/dispatch.rb
122
123
  - lib/perfectsched/application/router.rb
123
124
  - lib/perfectsched/backend.rb