hireling 0.1 → 0.1.1
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/Rakefile +2 -2
- data/lib/new_hire/new_hire.rb +75 -0
- data/lib/new_hire/new_hires.rb +15 -0
- metadata +14 -2
data/Rakefile
CHANGED
@@ -6,7 +6,7 @@ specification = Gem::Specification.new do |s|
|
|
6
6
|
s.platform = Gem::Platform::RUBY
|
7
7
|
s.name = "hireling"
|
8
8
|
s.summary = "Simple scheduled process structure for Rails apps."
|
9
|
-
s.version = "0.1"
|
9
|
+
s.version = "0.1.1"
|
10
10
|
s.author = "David Vollbracht, Scott Conley"
|
11
11
|
s.description = s.summary
|
12
12
|
s.email = "scott.conley@flipstone.com"
|
@@ -17,7 +17,7 @@ specification = Gem::Specification.new do |s|
|
|
17
17
|
s.add_dependency('daemons', '>= 1.0.10')
|
18
18
|
s.add_dependency('rufus-scheduler', '>= 2.0.6')
|
19
19
|
|
20
|
-
s.files = FileList['{lib,test}/**/*.{rb,rake}', 'Rakefile'].to_a
|
20
|
+
s.files = FileList['{lib,test,bin}/**/*.{rb,rake}', 'Rakefile'].to_a
|
21
21
|
end
|
22
22
|
|
23
23
|
Rake::GemPackageTask.new(specification) do |package|
|
@@ -0,0 +1,75 @@
|
|
1
|
+
class NewHire
|
2
|
+
attr_accessor :reraise_work_item_errors
|
3
|
+
|
4
|
+
class <<self
|
5
|
+
attr_accessor :schedule
|
6
|
+
end
|
7
|
+
|
8
|
+
_name
|
9
|
+
Dir[File.join(Rails.root, %w(app new_hires *.rb))].each do |hire_file|
|
10
|
+
hire_name = File.basename(hire_file, '.rb')
|
11
|
+
yield hire_name.to_sym
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.schedule_with_scheduler(scheduler)
|
16
|
+
NewHire.schedule.schedule(scheduler, new)
|
17
|
+
info "scheduled"
|
18
|
+
end
|
19
|
+
|
20
|
+
def call(job)
|
21
|
+
self.class.info "starting work"
|
22
|
+
work
|
23
|
+
self.class.info "done working"
|
24
|
+
end
|
25
|
+
|
26
|
+
def work
|
27
|
+
raise "#{self.class.name} doesn't know how to do their job."
|
28
|
+
end
|
29
|
+
|
30
|
+
def work_on_items_from(scope)
|
31
|
+
scope.find_each(:batch_size => 100) do |item|
|
32
|
+
begin
|
33
|
+
yield item
|
34
|
+
rescue Exception => e
|
35
|
+
Rails.logger.error "#{e.class}: #{e.message} - #{e.backtrace.join("\n ")}"
|
36
|
+
raise e if reraise_work_item_errors
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.info(message)
|
42
|
+
Rails.logger.info "WorkingGirl #{name} at #{Time.now}: #{message}"
|
43
|
+
end
|
44
|
+
|
45
|
+
class Schedule
|
46
|
+
def initialize
|
47
|
+
@proxies = {}
|
48
|
+
end
|
49
|
+
def [](new_hire_name)
|
50
|
+
@proxies[new_hire_name] = SchedulerProxy.new
|
51
|
+
end
|
52
|
+
|
53
|
+
def schedule(rufus_scheduler, new_hire)
|
54
|
+
proxy = @proxies[new_hire.class.name.underscore.to_sym]
|
55
|
+
raise "No schedule found for #{new_hire.class}" unless proxy
|
56
|
+
proxy.replay(rufus_scheduler,new_hire)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
class SchedulerProxy
|
61
|
+
def replay(rufus_scheduler, new_hire)
|
62
|
+
rufus_scheduler.send(@method, @arg, new_hire, :blocking => true)
|
63
|
+
end
|
64
|
+
|
65
|
+
[:at, :every, :cron].each do |scheduler_method|
|
66
|
+
eval %{
|
67
|
+
def #{scheduler_method}(arg)
|
68
|
+
@method = #{scheduler_method.inspect}
|
69
|
+
@arg = arg
|
70
|
+
end
|
71
|
+
}
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
@@ -0,0 +1,15 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
ENV["RAILS_ENV"] ||= "development"
|
4
|
+
|
5
|
+
require File.dirname(__FILE__) + "/../../config/environment"
|
6
|
+
require 'rufus/scheduler'
|
7
|
+
|
8
|
+
scheduler = Rufus::Scheduler.start_new
|
9
|
+
|
10
|
+
NewHire.each_app_hire_name do |hire_name|
|
11
|
+
new_hire_class = hire_name.to_s.classify.constantize
|
12
|
+
new_hire_class.schedule_with_scheduler scheduler
|
13
|
+
end
|
14
|
+
|
15
|
+
scheduler.join
|
metadata
CHANGED
@@ -1,11 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hireling
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 25
|
4
5
|
prerelease: false
|
5
6
|
segments:
|
6
7
|
- 0
|
7
8
|
- 1
|
8
|
-
|
9
|
+
- 1
|
10
|
+
version: 0.1.1
|
9
11
|
platform: ruby
|
10
12
|
authors:
|
11
13
|
- David Vollbracht, Scott Conley
|
@@ -20,9 +22,11 @@ dependencies:
|
|
20
22
|
name: daemons
|
21
23
|
prerelease: false
|
22
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
23
26
|
requirements:
|
24
27
|
- - ">="
|
25
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
26
30
|
segments:
|
27
31
|
- 1
|
28
32
|
- 0
|
@@ -34,9 +38,11 @@ dependencies:
|
|
34
38
|
name: rufus-scheduler
|
35
39
|
prerelease: false
|
36
40
|
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
37
42
|
requirements:
|
38
43
|
- - ">="
|
39
44
|
- !ruby/object:Gem::Version
|
45
|
+
hash: 3
|
40
46
|
segments:
|
41
47
|
- 2
|
42
48
|
- 0
|
@@ -55,6 +61,8 @@ extra_rdoc_files: []
|
|
55
61
|
files:
|
56
62
|
- lib/hireling/hireling.rb
|
57
63
|
- lib/hireling/hirelings.rb
|
64
|
+
- lib/new_hire/new_hire.rb
|
65
|
+
- lib/new_hire/new_hires.rb
|
58
66
|
- Rakefile
|
59
67
|
has_rdoc: true
|
60
68
|
homepage: ""
|
@@ -66,23 +74,27 @@ rdoc_options: []
|
|
66
74
|
require_paths:
|
67
75
|
- lib
|
68
76
|
required_ruby_version: !ruby/object:Gem::Requirement
|
77
|
+
none: false
|
69
78
|
requirements:
|
70
79
|
- - ">="
|
71
80
|
- !ruby/object:Gem::Version
|
81
|
+
hash: 3
|
72
82
|
segments:
|
73
83
|
- 0
|
74
84
|
version: "0"
|
75
85
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
86
|
+
none: false
|
76
87
|
requirements:
|
77
88
|
- - ">="
|
78
89
|
- !ruby/object:Gem::Version
|
90
|
+
hash: 3
|
79
91
|
segments:
|
80
92
|
- 0
|
81
93
|
version: "0"
|
82
94
|
requirements: []
|
83
95
|
|
84
96
|
rubyforge_project: ""
|
85
|
-
rubygems_version: 1.3.
|
97
|
+
rubygems_version: 1.3.7
|
86
98
|
signing_key:
|
87
99
|
specification_version: 3
|
88
100
|
summary: Simple scheduled process structure for Rails apps.
|