coiasira 0.1.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/.gitignore +1 -0
- data/Gemfile +4 -0
- data/README +0 -0
- data/Rakefile +79 -0
- data/bin/coiasira +4 -0
- data/coiasira.gemspec +23 -0
- data/lib/coiasira/base.rb +51 -0
- data/lib/coiasira/commands/job.rb +33 -0
- data/lib/coiasira/context.rb +42 -0
- data/lib/coiasira/job_data.rb +12 -0
- data/lib/coiasira/job_detail.rb +46 -0
- data/lib/coiasira/job_execution_error.rb +13 -0
- data/lib/coiasira/job_wrapper.rb +15 -0
- data/lib/coiasira/jobs.rb +83 -0
- data/lib/coiasira/rails/initializer.rb +90 -0
- data/lib/coiasira/runner.rb +12 -0
- data/lib/coiasira/scheduler_error.rb +4 -0
- data/lib/coiasira/trigger.rb +9 -0
- data/lib/coiasira/version.rb +3 -0
- data/lib/coiasira.rb +41 -0
- data/test/spec_coiasira.rb +0 -0
- metadata +102 -0
data/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
pkg/
|
data/Gemfile
ADDED
data/README
ADDED
File without changes
|
data/Rakefile
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
# Rakefile for Coiasira. -*-ruby-*-
|
2
|
+
require 'bundler'
|
3
|
+
|
4
|
+
def install_tasks(opts = nil)
|
5
|
+
dir = caller.find{|c| /Rakefile:/}[/^(.*?)\/Rakefile:/, 1]
|
6
|
+
h = Bundler::GemHelper.new(dir, opts && opts[:name])
|
7
|
+
h.install
|
8
|
+
h
|
9
|
+
end
|
10
|
+
helper = install_tasks
|
11
|
+
spec = helper.gemspec
|
12
|
+
|
13
|
+
require 'rake/clean'
|
14
|
+
CLEAN.include 'pkg'
|
15
|
+
|
16
|
+
task :git_local_check do
|
17
|
+
sh "git diff --no-ext-diff --ignore-submodules --quiet --exit-code" do |ok, _|
|
18
|
+
raise "working directory is unclean" if !ok
|
19
|
+
sh "git diff-index --cached --quiet --ignore-submodules HEAD --" do |ok, _|
|
20
|
+
raise "git index is unclean" if !ok
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
require 'rake/rdoctask'
|
27
|
+
Rake::RDocTask.new do |rdoc|
|
28
|
+
rdoc.rdoc_dir = 'rdoc'
|
29
|
+
rdoc.title = "#{spec.name} #{spec.version}"
|
30
|
+
rdoc.rdoc_files.include('README*')
|
31
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
32
|
+
end
|
33
|
+
|
34
|
+
|
35
|
+
#require 'rake/rdoctask'
|
36
|
+
#require 'rake/testtask'
|
37
|
+
#require File.join(File.dirname(__FILE__), 'lib', 'coiasira', 'version')
|
38
|
+
|
39
|
+
#desc "Default Task"
|
40
|
+
#task :default => [:package]
|
41
|
+
|
42
|
+
#desc "Do predistribution stuff"
|
43
|
+
#task :predist => [:chmod, :rdoc]
|
44
|
+
|
45
|
+
|
46
|
+
#desc "Make an archive as .tar.gz"
|
47
|
+
#task :dist => [:test, :predist] do
|
48
|
+
# sh "git archive --format=tar --prefix=#{release}/ HEAD^{tree} >#{release}.tar"
|
49
|
+
# sh "pax -waf #{release}.tar -s ':^:#{release}/:' RDOX doc"
|
50
|
+
# sh "gzip -f -9 #{release}.tar"
|
51
|
+
#end
|
52
|
+
|
53
|
+
#desc "Make binaries executable"
|
54
|
+
#task :chmod do
|
55
|
+
# Dir["bin/*"].each { |binary| File.chmod(0775, binary) }
|
56
|
+
# Dir["test/cgi/test*"].each { |binary| File.chmod(0775, binary) }
|
57
|
+
#end
|
58
|
+
|
59
|
+
#desc "Run all the tests"
|
60
|
+
#task :test => [:chmod] do
|
61
|
+
# sh "specrb -Ilib:test -w #{ENV['TEST'] || '-a'} #{ENV['TESTOPTS']}"
|
62
|
+
#end
|
63
|
+
|
64
|
+
#def gem_version
|
65
|
+
# Coiasira::VERSION::STRING
|
66
|
+
#end
|
67
|
+
|
68
|
+
#def release
|
69
|
+
# "coiasira-#{gem_version}"
|
70
|
+
#end
|
71
|
+
|
72
|
+
#def manifest
|
73
|
+
# `svn ls -R`.split("\n")
|
74
|
+
#end
|
75
|
+
|
76
|
+
#task :install => [:gem] do
|
77
|
+
# sh "gem install pkg/#{release}.gem"
|
78
|
+
#end
|
79
|
+
|
data/bin/coiasira
ADDED
data/coiasira.gemspec
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path("../lib/coiasira", __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = "coiasira"
|
6
|
+
s.version = Coiasira::VERSION
|
7
|
+
s.author = 'Brian Olsen'
|
8
|
+
s.email = 'brian@maven-group.org'
|
9
|
+
s.homepage = "http://github.com/griff/coaisira"
|
10
|
+
s.summary = "some helpers for running scheduled jobs"
|
11
|
+
s.description = "Something something"
|
12
|
+
|
13
|
+
s.required_rubygems_version = ">= 1.3.6"
|
14
|
+
|
15
|
+
s.add_development_dependency "bundler", ">= 1.0.0"
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
|
19
|
+
s.require_path = 'lib'
|
20
|
+
|
21
|
+
s.test_files = Dir['spec/*_spec.rb']
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Coiasira
|
2
|
+
class Base
|
3
|
+
# Accepts a logger conforming to the interface of Log4r or the default Ruby 1.8+ Logger class, which is then passed
|
4
|
+
# on to any new database connections made and which can be retrieved on both a class and instance level by calling +logger+.
|
5
|
+
unless defined? @@logger
|
6
|
+
@@logger = nil
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.logger
|
10
|
+
@@logger
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.logger=(obj)
|
14
|
+
@@logger = obj
|
15
|
+
end
|
16
|
+
|
17
|
+
def logger
|
18
|
+
@@logger
|
19
|
+
end
|
20
|
+
|
21
|
+
class << self
|
22
|
+
def process(context)
|
23
|
+
new.process(context)
|
24
|
+
end
|
25
|
+
|
26
|
+
def default_action
|
27
|
+
'default'
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def initialize()
|
32
|
+
@action = self.class.default_action
|
33
|
+
end
|
34
|
+
|
35
|
+
# def logger
|
36
|
+
# merged.logger || self.class.logger
|
37
|
+
# end
|
38
|
+
|
39
|
+
def process(context)
|
40
|
+
@action = context.action if context && context.respond_to?(:action) && context.action
|
41
|
+
logger.info("Starting job #{self.class.name.underscore} with action #{@action}")
|
42
|
+
begin
|
43
|
+
self.__send__(@action, context)
|
44
|
+
logger.info("Finished job #{self.class.name.underscore} with action #{@action}")
|
45
|
+
rescue
|
46
|
+
logger.info("Failed job #{self.class.name.underscore} with action #{@action}")
|
47
|
+
raise
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
if defined? Rails::Initializer
|
2
|
+
require "#{RAILS_ROOT}/config/environment"
|
3
|
+
end
|
4
|
+
|
5
|
+
def setup
|
6
|
+
puts "script/job <job_name> [action] [arguments]"
|
7
|
+
exit 1
|
8
|
+
end
|
9
|
+
|
10
|
+
setup if ARGV.include?('--help') || ARGV.include?('-h') || ARGV.size == 0
|
11
|
+
|
12
|
+
command = ARGV.shift
|
13
|
+
runner = Coiasira::Runner.new
|
14
|
+
|
15
|
+
unless runner.has_command?(command)
|
16
|
+
puts "No job named '#{command}'"
|
17
|
+
setup
|
18
|
+
end
|
19
|
+
|
20
|
+
log = Logger.new(STDOUT)
|
21
|
+
log.level = Logger::DEBUG
|
22
|
+
Coiasira::Base.logger = log
|
23
|
+
|
24
|
+
context = Coiasira::Context.new
|
25
|
+
if( ARGV.size > 0 )
|
26
|
+
action = ARGV.shift
|
27
|
+
context.action = action
|
28
|
+
ARGV.each do |arg|
|
29
|
+
name, value = arg.split('=')
|
30
|
+
context.details.data[name] = value
|
31
|
+
end
|
32
|
+
end
|
33
|
+
runner.process(command, context)
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Coiasira
|
2
|
+
class Context
|
3
|
+
attr_reader :merged, :details, :trigger, :previous_fire_time, :next_fire_time, :scheduled_fire_time
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
@details = JobDetail.new
|
7
|
+
@trigger = Trigger.new
|
8
|
+
@merged = JobData.new
|
9
|
+
@data = Hash.new
|
10
|
+
end
|
11
|
+
|
12
|
+
def [](key)
|
13
|
+
@data[key]
|
14
|
+
end
|
15
|
+
|
16
|
+
def []=(key, value)
|
17
|
+
@data[key] = value
|
18
|
+
end
|
19
|
+
|
20
|
+
def action
|
21
|
+
details.data.action
|
22
|
+
end
|
23
|
+
|
24
|
+
def action=(value)
|
25
|
+
details.data.action=value.to_s
|
26
|
+
end
|
27
|
+
|
28
|
+
def prepare
|
29
|
+
@merged.merge! details.data
|
30
|
+
@merged.merge! trigger.data
|
31
|
+
end
|
32
|
+
|
33
|
+
def method_missing(sym, value=nil)
|
34
|
+
sym = sym.to_s
|
35
|
+
if sym =~ /^(.*)=$/
|
36
|
+
return self[$~[1]] = value
|
37
|
+
else
|
38
|
+
return self[sym]
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Coiasira
|
2
|
+
class JobDetail
|
3
|
+
attr_accessor :name, :group, :description
|
4
|
+
attr_reader :data
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@data = JobData.new
|
8
|
+
end
|
9
|
+
|
10
|
+
def full_name
|
11
|
+
"#{group}.#{name}"
|
12
|
+
end
|
13
|
+
|
14
|
+
def volatility=(value)
|
15
|
+
@volatility = value
|
16
|
+
end
|
17
|
+
|
18
|
+
def volatility?
|
19
|
+
@volatility
|
20
|
+
end
|
21
|
+
|
22
|
+
def durability=(value)
|
23
|
+
@durability = value
|
24
|
+
end
|
25
|
+
|
26
|
+
def durability?
|
27
|
+
@durability
|
28
|
+
end
|
29
|
+
|
30
|
+
def requests_recovery=(value)
|
31
|
+
@requests_recovery = value
|
32
|
+
end
|
33
|
+
|
34
|
+
def requests_recovery?
|
35
|
+
@requests_recovery
|
36
|
+
end
|
37
|
+
|
38
|
+
def stateful=(value)
|
39
|
+
@stateful = value
|
40
|
+
end
|
41
|
+
|
42
|
+
def stateful?
|
43
|
+
@stateful
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Coiasira
|
2
|
+
class JobExecutionError < SchedulerError
|
3
|
+
attr_accessor :refire, :unschedule_firing_trigger, :unchedule_all_triggers
|
4
|
+
|
5
|
+
def initialize(options={})
|
6
|
+
unknown_keys = options.keys - [:refire_immediately, :unschedule_firing_trigger, :unchedule_all_triggers].flatten
|
7
|
+
raise(ArgumentError, "Unknown key(s): #{unknown_keys.join(", ")}") unless unknown_keys.empty?
|
8
|
+
@refire = options[:refire_immediately] || false
|
9
|
+
@unschedule_trigger = options[:unschedule_firing_trigger] || false
|
10
|
+
@unchedule_all_triggers = options[:unchedule_all_triggers] || false
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Coiasira
|
2
|
+
class JobWrapper
|
3
|
+
attr_reader :job_class
|
4
|
+
|
5
|
+
def initialize(name)
|
6
|
+
@name = name
|
7
|
+
@job_class = nil
|
8
|
+
end
|
9
|
+
|
10
|
+
def process(context)
|
11
|
+
@job_class = Jobs.find_class(@name) unless job_class
|
12
|
+
job_class.process(context)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
module Coiasira
|
2
|
+
module Jobs
|
3
|
+
# The root paths which may contain job files
|
4
|
+
unless defined? @@job_paths
|
5
|
+
@@job_paths = []
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.job_paths
|
9
|
+
@@job_paths
|
10
|
+
end
|
11
|
+
|
12
|
+
def job_paths
|
13
|
+
@@job_paths
|
14
|
+
end
|
15
|
+
def self.job_paths=(obj)
|
16
|
+
@@job_paths = obj
|
17
|
+
end
|
18
|
+
def job_paths=(obj)
|
19
|
+
@@job_paths = obj
|
20
|
+
end
|
21
|
+
|
22
|
+
class << self
|
23
|
+
# Returns an array of paths, cleaned of double-slashes and relative path references.
|
24
|
+
# * "\\\" and "//" become "\\" or "/".
|
25
|
+
# * "/foo/bar/../config" becomes "/foo/config".
|
26
|
+
# The returned array is sorted by length, descending.
|
27
|
+
def normalize_paths(paths)
|
28
|
+
# do the hokey-pokey of path normalization...
|
29
|
+
paths = paths.collect do |path|
|
30
|
+
path = path.
|
31
|
+
gsub("//", "/"). # replace double / chars with a single
|
32
|
+
gsub("\\\\", "\\"). # replace double \ chars with a single
|
33
|
+
gsub(%r{(.)[\\/]$}, '\1') # drop final / or \ if path ends with it
|
34
|
+
|
35
|
+
# eliminate .. paths where possible
|
36
|
+
re = %r{[^/\\]+[/\\]\.\.[/\\]}
|
37
|
+
path.gsub!(re, "") while path.match(re)
|
38
|
+
path
|
39
|
+
end
|
40
|
+
|
41
|
+
# start with longest path, first
|
42
|
+
paths = paths.uniq.sort_by { |path| - path.length }
|
43
|
+
end
|
44
|
+
|
45
|
+
# Returns the array of job names currently available.
|
46
|
+
def possible_jobs
|
47
|
+
unless @possible_jobs
|
48
|
+
@possible_jobs = []
|
49
|
+
paths = job_paths.select { |path| File.directory?(path) && path != "." }
|
50
|
+
|
51
|
+
seen_paths = Hash.new {|h, k| h[k] = true; false}
|
52
|
+
normalize_paths(paths).each do |load_path|
|
53
|
+
Dir["#{load_path}/**/*_job.rb"].collect do |path|
|
54
|
+
next if seen_paths[path.gsub(%r{^\.[/\\]}, "")]
|
55
|
+
|
56
|
+
job_name = path[(load_path.length + 1)..-1]
|
57
|
+
|
58
|
+
job_name.gsub!(/_job\.rb\Z/, '')
|
59
|
+
@possible_jobs << job_name
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
# remove duplicates
|
64
|
+
@possible_jobs.uniq!
|
65
|
+
end
|
66
|
+
@possible_jobs
|
67
|
+
end
|
68
|
+
|
69
|
+
def has_job?(name)
|
70
|
+
possible_jobs.include?(name)
|
71
|
+
end
|
72
|
+
|
73
|
+
def load_job(name)
|
74
|
+
raise NameError, name unless has_job?(name)
|
75
|
+
JobWrapper.new(name)
|
76
|
+
end
|
77
|
+
|
78
|
+
def find_class(name)
|
79
|
+
"#{name.camelize}Job".constantize
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
module Rails
|
2
|
+
class Initializer
|
3
|
+
def self.alias_method_chain(target, feature)
|
4
|
+
# Strip out punctuation on predicates or bang methods since
|
5
|
+
# e.g. target?_without_feature is not a valid method name.
|
6
|
+
aliased_target, punctuation = target.to_s.sub(/([?!=])$/, ''), $1
|
7
|
+
yield(aliased_target, punctuation) if block_given?
|
8
|
+
|
9
|
+
with_method, without_method = "#{aliased_target}_with_#{feature}#{punctuation}", "#{aliased_target}_without_#{feature}#{punctuation}"
|
10
|
+
|
11
|
+
alias_method without_method, target
|
12
|
+
alias_method target, with_method
|
13
|
+
|
14
|
+
case
|
15
|
+
when public_method_defined?(without_method)
|
16
|
+
public target
|
17
|
+
when protected_method_defined?(without_method)
|
18
|
+
protected target
|
19
|
+
when private_method_defined?(without_method)
|
20
|
+
private target
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def initialize_coiasira
|
25
|
+
return unless configuration.frameworks.include?(:coiasira)
|
26
|
+
::Coiasira::Jobs.job_paths = configuration.job_paths
|
27
|
+
# ActionController::Routing::Routes.configuration_file = configuration.routes_configuration_file
|
28
|
+
# ActionController::Routing::Routes.reload
|
29
|
+
end
|
30
|
+
|
31
|
+
def initialize_routing_with_coiasira
|
32
|
+
initialize_routing_without_coiasira
|
33
|
+
initialize_coiasira
|
34
|
+
end
|
35
|
+
alias_method_chain :initialize_routing, :coiasira
|
36
|
+
end
|
37
|
+
|
38
|
+
class Configuration
|
39
|
+
def self.alias_method_chain(target, feature)
|
40
|
+
# Strip out punctuation on predicates or bang methods since
|
41
|
+
# e.g. target?_without_feature is not a valid method name.
|
42
|
+
aliased_target, punctuation = target.to_s.sub(/([?!=])$/, ''), $1
|
43
|
+
yield(aliased_target, punctuation) if block_given?
|
44
|
+
|
45
|
+
with_method, without_method = "#{aliased_target}_with_#{feature}#{punctuation}", "#{aliased_target}_without_#{feature}#{punctuation}"
|
46
|
+
|
47
|
+
alias_method without_method, target
|
48
|
+
alias_method target, with_method
|
49
|
+
|
50
|
+
case
|
51
|
+
when public_method_defined?(without_method)
|
52
|
+
public target
|
53
|
+
when protected_method_defined?(without_method)
|
54
|
+
protected target
|
55
|
+
when private_method_defined?(without_method)
|
56
|
+
private target
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
attr_accessor :coiasira
|
61
|
+
|
62
|
+
# The list of paths that should be searched for jobs. (Defaults
|
63
|
+
# to <tt>app/jobs</tt>.)
|
64
|
+
attr_accessor :job_paths
|
65
|
+
|
66
|
+
def initialize_with_coiasira
|
67
|
+
initialize_without_coiasira
|
68
|
+
self.job_paths = default_job_paths
|
69
|
+
end
|
70
|
+
alias_method_chain :initialize, :coiasira
|
71
|
+
|
72
|
+
private
|
73
|
+
def default_frameworks_with_coiasira
|
74
|
+
default_frameworks_without_coiasira + [ :coiasira ]
|
75
|
+
end
|
76
|
+
alias_method_chain :default_frameworks, :coiasira
|
77
|
+
|
78
|
+
def default_load_paths_with_coiasira
|
79
|
+
paths = default_load_paths_without_coiasira
|
80
|
+
|
81
|
+
# Add the app's job directory
|
82
|
+
paths.concat(Dir["#{root_path}/app/jobs/"])
|
83
|
+
end
|
84
|
+
alias_method_chain :default_load_paths, :coiasira
|
85
|
+
|
86
|
+
def default_job_paths
|
87
|
+
[File.join(root_path, 'app', 'jobs')]
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
data/lib/coiasira.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
$:.unshift(File.dirname(__FILE__)) unless
|
2
|
+
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
3
|
+
|
4
|
+
=begin comment
|
5
|
+
unless defined?(ActiveSupport)
|
6
|
+
begin
|
7
|
+
$:.unshift "#{File.dirname(__FILE__)}/../../activesupport/lib"
|
8
|
+
require 'active_support'
|
9
|
+
rescue LoadError
|
10
|
+
require 'rubygems'
|
11
|
+
begin
|
12
|
+
gem 'activesupport'
|
13
|
+
rescue LoadError
|
14
|
+
require 'coiasira/core_ext'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
=end
|
19
|
+
|
20
|
+
require 'coiasira/version'
|
21
|
+
require 'coiasira/scheduler_error'
|
22
|
+
require 'coiasira/job_execution_error'
|
23
|
+
require 'coiasira/job_data'
|
24
|
+
require 'coiasira/job_detail'
|
25
|
+
require 'coiasira/trigger'
|
26
|
+
require 'coiasira/context'
|
27
|
+
require 'coiasira/base'
|
28
|
+
require 'coiasira/job_wrapper'
|
29
|
+
require 'coiasira/jobs'
|
30
|
+
require 'coiasira/runner'
|
31
|
+
|
32
|
+
module Coiasira
|
33
|
+
def self.silence_warnings
|
34
|
+
oldv, $VERBOSE = $VERBOSE, nil
|
35
|
+
begin
|
36
|
+
yield
|
37
|
+
ensure
|
38
|
+
$VERBOSE = oldv
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
File without changes
|
metadata
ADDED
@@ -0,0 +1,102 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: coiasira
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 27
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 0
|
10
|
+
version: 0.1.0
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Brian Olsen
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-07-13 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: bundler
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 23
|
29
|
+
segments:
|
30
|
+
- 1
|
31
|
+
- 0
|
32
|
+
- 0
|
33
|
+
version: 1.0.0
|
34
|
+
type: :development
|
35
|
+
version_requirements: *id001
|
36
|
+
description: Something something
|
37
|
+
email: brian@maven-group.org
|
38
|
+
executables:
|
39
|
+
- coiasira
|
40
|
+
extensions: []
|
41
|
+
|
42
|
+
extra_rdoc_files: []
|
43
|
+
|
44
|
+
files:
|
45
|
+
- .gitignore
|
46
|
+
- Gemfile
|
47
|
+
- README
|
48
|
+
- Rakefile
|
49
|
+
- bin/coiasira
|
50
|
+
- coiasira.gemspec
|
51
|
+
- lib/coiasira.rb
|
52
|
+
- lib/coiasira/base.rb
|
53
|
+
- lib/coiasira/commands/job.rb
|
54
|
+
- lib/coiasira/context.rb
|
55
|
+
- lib/coiasira/job_data.rb
|
56
|
+
- lib/coiasira/job_detail.rb
|
57
|
+
- lib/coiasira/job_execution_error.rb
|
58
|
+
- lib/coiasira/job_wrapper.rb
|
59
|
+
- lib/coiasira/jobs.rb
|
60
|
+
- lib/coiasira/rails/initializer.rb
|
61
|
+
- lib/coiasira/runner.rb
|
62
|
+
- lib/coiasira/scheduler_error.rb
|
63
|
+
- lib/coiasira/trigger.rb
|
64
|
+
- lib/coiasira/version.rb
|
65
|
+
- test/spec_coiasira.rb
|
66
|
+
homepage: http://github.com/griff/coaisira
|
67
|
+
licenses: []
|
68
|
+
|
69
|
+
post_install_message:
|
70
|
+
rdoc_options: []
|
71
|
+
|
72
|
+
require_paths:
|
73
|
+
- lib
|
74
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
75
|
+
none: false
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
hash: 3
|
80
|
+
segments:
|
81
|
+
- 0
|
82
|
+
version: "0"
|
83
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
84
|
+
none: false
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
hash: 23
|
89
|
+
segments:
|
90
|
+
- 1
|
91
|
+
- 3
|
92
|
+
- 6
|
93
|
+
version: 1.3.6
|
94
|
+
requirements: []
|
95
|
+
|
96
|
+
rubyforge_project:
|
97
|
+
rubygems_version: 1.8.5
|
98
|
+
signing_key:
|
99
|
+
specification_version: 3
|
100
|
+
summary: some helpers for running scheduled jobs
|
101
|
+
test_files: []
|
102
|
+
|