khronos 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. data/.rspec +1 -0
  2. data/Gemfile +18 -0
  3. data/bin/khronos +9 -0
  4. data/config/.config.yml.un~ +0 -0
  5. data/config/.environment.yml.un~ +0 -0
  6. data/config/.redis.yml.un~ +0 -0
  7. data/config/.storage.yml.un~ +0 -0
  8. data/config/environment.yml +11 -0
  9. data/config.ru +7 -0
  10. data/khronos.gemspec +26 -0
  11. data/lib/.khronos.rb.un~ +0 -0
  12. data/lib/.scheduler.rb.swp +0 -0
  13. data/lib/.scheduler.rb.un~ +0 -0
  14. data/lib/khronos/.config.rb.un~ +0 -0
  15. data/lib/khronos/.controller.rb.un~ +0 -0
  16. data/lib/khronos/.runner.rb.un~ +0 -0
  17. data/lib/khronos/.schedule.rb.un~ +0 -0
  18. data/lib/khronos/.scheduler.rb.un~ +0 -0
  19. data/lib/khronos/.server.rb.un~ +0 -0
  20. data/lib/khronos/.storage.rb.un~ +0 -0
  21. data/lib/khronos/.task.rb.un~ +0 -0
  22. data/lib/khronos/.version.rb.swp +0 -0
  23. data/lib/khronos/.version.rb.un~ +0 -0
  24. data/lib/khronos/config.rb +28 -0
  25. data/lib/khronos/controller.rb +26 -0
  26. data/lib/khronos/runner.rb +11 -0
  27. data/lib/khronos/scheduler.rb +12 -0
  28. data/lib/khronos/server.rb +34 -0
  29. data/lib/khronos/storage/adapter/.client.rb.un~ +0 -0
  30. data/lib/khronos/storage/adapter/.memcached.rb.swp +0 -0
  31. data/lib/khronos/storage/adapter/.memcached.rb.un~ +0 -0
  32. data/lib/khronos/storage/adapter/.mongo.rb.un~ +0 -0
  33. data/lib/khronos/storage/adapter/.mongodb.rb.swp +0 -0
  34. data/lib/khronos/storage/adapter/.mongodb.rb.un~ +0 -0
  35. data/lib/khronos/storage/adapter/.postgres.rb.un~ +0 -0
  36. data/lib/khronos/storage/adapter/.redis.rb.swp +0 -0
  37. data/lib/khronos/storage/adapter/.redis.rb.un~ +0 -0
  38. data/lib/khronos/storage/adapter/mongo/.mongo.rb.un~ +0 -0
  39. data/lib/khronos/storage/adapter/mongo/.schedule.rb.un~ +0 -0
  40. data/lib/khronos/storage/adapter/mongo/.schedule_log.rb.un~ +0 -0
  41. data/lib/khronos/storage/adapter/mongo/schedule.rb +20 -0
  42. data/lib/khronos/storage/adapter/mongo/schedule_log.rb +19 -0
  43. data/lib/khronos/storage/adapter/mongo.rb +13 -0
  44. data/lib/khronos/storage/adapter/postgres/.schedule.rb.un~ +0 -0
  45. data/lib/khronos/storage/adapter/postgres/.schedule_log.rb.un~ +0 -0
  46. data/lib/khronos/storage/adapter/postgres/schedule.rb +13 -0
  47. data/lib/khronos/storage/adapter/postgres/schedule_log.rb +13 -0
  48. data/lib/khronos/storage/adapter/postgres.rb +15 -0
  49. data/lib/khronos/storage/adapter.rb +0 -0
  50. data/lib/khronos/storage/db/migrate/.schedule.rb.un~ +0 -0
  51. data/lib/khronos/storage/db/migrate/.schedule_log.rb.un~ +0 -0
  52. data/lib/khronos/storage/db/migrate/schedule.rb +15 -0
  53. data/lib/khronos/storage/db/migrate/schedule_log.rb +16 -0
  54. data/lib/khronos/storage.rb +26 -0
  55. data/lib/khronos/version.rb +3 -0
  56. data/lib/khronos.rb +20 -0
  57. data/spec/.spec_helper.rb.un~ +0 -0
  58. data/spec/functional/.client_spec.rb.un~ +0 -0
  59. data/spec/functional/client_spec.rb +24 -0
  60. data/spec/integration/.server_spec.rb.un~ +0 -0
  61. data/spec/integration/server_spec.rb +31 -0
  62. data/spec/spec_helper.rb +18 -0
  63. metadata +194 -0
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/Gemfile ADDED
@@ -0,0 +1,18 @@
1
+ source :rubygems
2
+ gemspec
3
+
4
+ group :test do
5
+ # Used for time functions
6
+ gem 'activesupport', "~> 3.2.8"
7
+
8
+ gem 'simplecov', '= 0.6.4'
9
+
10
+ gem 'rspec'
11
+ gem 'rack-test'
12
+ gem "fakefs", "~> 0.4.0"
13
+ gem "delorean", "~> 2.0.0"
14
+
15
+ gem 'redis'
16
+ gem 'memcached'
17
+ gem 'mongo'
18
+ end
data/bin/khronos ADDED
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/ruby
2
+ $: << 'lib'
3
+
4
+ ENV['RACK_ENV'] ||= 'production'
5
+
6
+ require 'readline'
7
+ require 'khronos'
8
+
9
+ run Khronos::Server
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,11 @@
1
+ production:
2
+ storage: redis://localhost:6379/0
3
+ interval: 5
4
+
5
+ development:
6
+ storage: redis://localhost:6379/0
7
+ interval: 1
8
+
9
+ test:
10
+ storage: redis://localhost:6379/10
11
+ interval: 1
data/config.ru ADDED
@@ -0,0 +1,7 @@
1
+ $: << 'lib'
2
+ require 'rubygems'
3
+ require 'bundler/setup'
4
+ require 'active_support/all'
5
+ require 'khronos'
6
+
7
+ run Khronos::Server
data/khronos.gemspec ADDED
@@ -0,0 +1,26 @@
1
+ # encoding: utf-8
2
+ $:.push File.expand_path('../lib', __FILE__)
3
+ require 'khronos/version'
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "khronos"
7
+ s.version = Khronos::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Endel Dreyer"]
10
+ s.email = ["endel@ocapi.com.br"]
11
+ s.homepage = "http://github.com/ocapi/scraper"
12
+
13
+ s.summary = "Ruby HTTP Job Scheduler Interface."
14
+ s.description = "Advanced Cron replacement for the cloud."
15
+ s.licenses = ['MIT']
16
+
17
+ s.add_dependency "sinatra", '~> 1.3.3'
18
+ s.add_dependency 'mongoid', '~> 3.0.5'
19
+ s.add_dependency 'activerecord', '~> 3.2.8'
20
+ s.add_dependency 'json', '~> 1.7.5'
21
+ s.add_dependency 'activesupport', '~> 3.2.8'
22
+
23
+ s.files = `git ls-files`.split("\n")
24
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
25
+ s.require_paths = ["lib"]
26
+ end
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,28 @@
1
+ require 'singleton'
2
+ require 'yaml'
3
+
4
+ module Khronos
5
+ class Config
6
+ include Singleton
7
+ attr_reader :settings
8
+
9
+ def load!(file_path, env='development')
10
+ @settings = YAML.load_file(file_path)[env]
11
+ ENV['KHRONOS_STORAGE'] = @settings['storage']
12
+ end
13
+
14
+ def get(key)
15
+ @settings[key.to_s]
16
+ end
17
+
18
+ def set(key, value)
19
+ @settings[key.to_s] = value
20
+ end
21
+
22
+ def method_missing(name, *args, &block)
23
+ self.get(name.to_s)
24
+ end
25
+ end
26
+ end
27
+
28
+ Khronos::Config.instance.load('config.yml')
@@ -0,0 +1,26 @@
1
+ module Khronos
2
+ class Controller
3
+ attr_reader :scheduler, :runner, :interval
4
+
5
+ def initialize
6
+ @runner = Runner.new
7
+ @scheduler = Scheduler.new
8
+ @scheduler.add_observer(@runner)
9
+ end
10
+
11
+ def start!
12
+ loop do
13
+ puts "Tick..."
14
+
15
+ if rand(500) == 1
16
+ puts "I'm so lucky!"
17
+ end
18
+
19
+ #
20
+ # Sleep 'interval' seconds
21
+ #
22
+ sleep(Config.instance.interval)
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,11 @@
1
+ require 'observer'
2
+
3
+ module Khronos
4
+ class Runner
5
+
6
+ def update(time, command)
7
+ puts "#{time.inspect} => #{command.inspect}"
8
+ end
9
+
10
+ end
11
+ end
@@ -0,0 +1,12 @@
1
+ require 'observer'
2
+
3
+ module Khronos
4
+ class Scheduler
5
+ include Observable
6
+
7
+ def run
8
+ end
9
+
10
+ end
11
+ end
12
+
@@ -0,0 +1,34 @@
1
+ require 'sinatra'
2
+
3
+ module Khronos
4
+ class Server < Sinatra::Base
5
+ set :storage, Storage.new
6
+
7
+ # Retrieves scheduling data from a context
8
+ #
9
+ # @return [Hash] JSON
10
+ get '/' do
11
+ context = retrieve_context!
12
+ settings.storage.get(context).to_json
13
+ end
14
+
15
+ # Creates or updates a schedule from a context
16
+ #
17
+ # @param [String]
18
+ #
19
+ # @return [Hash] Context JSON status hash
20
+ put '/' do
21
+ context = retrieve_context!
22
+ puts params.inspect
23
+ context.to_json
24
+ end
25
+
26
+ private
27
+
28
+ def retrieve_context!
29
+ halt 400, "Missing 'context' on query string." unless params[:context]
30
+ (params[:namespace].nil?) ? params[:context] : "#{params[:namespace]}:#{params[:context]}"
31
+ end
32
+
33
+ end
34
+ end
@@ -0,0 +1,20 @@
1
+ module Khronos
2
+ module Storage
3
+ module Adapter
4
+
5
+ module Mongo
6
+ class Schedule
7
+ include Mongoid::Document
8
+
9
+ field :namespace, :type => String
10
+ field :context, :type => String
11
+ field :at, :type => DateTime
12
+ field :recurring, :type => Integer
13
+
14
+ has_many :logs, :class_name => ScheduleLog
15
+ end
16
+ end
17
+
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,19 @@
1
+
2
+ module Khronos
3
+ module Storage
4
+ module Adapter
5
+
6
+ module Mongo
7
+ class ScheduleLog
8
+ include Mongoid::Document
9
+
10
+ field :started_at, :type => DateTime
11
+ field :finished_at, :type => DateTime
12
+
13
+ belongs_to :schedule
14
+ end
15
+ end
16
+
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,13 @@
1
+ require 'mongo'
2
+
3
+ module Khronos
4
+ module Storage
5
+ module Adapter
6
+
7
+ module Mongo
8
+ end
9
+
10
+ end
11
+ end
12
+ end
13
+
@@ -0,0 +1,13 @@
1
+ module Khronos
2
+ module Storage
3
+ module Adapter
4
+
5
+ module Postgres
6
+ class Schedule < ActiveRecord::Base
7
+ has_many :logs, :class_name => ScheduleLog
8
+ end
9
+ end
10
+
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module Khronos
2
+ module Storage
3
+ module Adapter
4
+
5
+ module Postgres
6
+ class ScheduleLog < ActiveRecord::Base
7
+ belongs_to :schedule
8
+ end
9
+ end
10
+
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,15 @@
1
+ require 'activerecord'
2
+ require 'pg'
3
+
4
+ module Khronos
5
+ module Storage
6
+ module Adapter
7
+
8
+ module Postgres
9
+ end
10
+
11
+ end
12
+ end
13
+ end
14
+
15
+
File without changes
@@ -0,0 +1,15 @@
1
+ class CreateSchedule < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :schedules do |t|
4
+ t.string :namespace, :limit => 100, :null => true
5
+ t.string :context, :limit => 100, :null => false
6
+ t.datetime :at, :null => false
7
+ t.integer :recurring, :null => false
8
+ end
9
+ end
10
+
11
+ def self.down
12
+ drop_table :schedules
13
+ end
14
+ end
15
+
@@ -0,0 +1,16 @@
1
+ class CreateSchedule < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :schedule_logs do |t|
4
+ t.integer :schedule_id, :null => false
5
+
6
+ t.datetime :started_at, :null => false
7
+ t.datetime :finished_at, :null => true
8
+ end
9
+ end
10
+
11
+ def self.down
12
+ drop_table :schedule_logs
13
+ end
14
+ end
15
+
16
+
@@ -0,0 +1,26 @@
1
+ require 'delegate'
2
+ require 'uri'
3
+
4
+ module Khronos
5
+ class Storage < Delegator
6
+ attr_reader :uri, :adapter
7
+
8
+ def initialize(url=ENV['KHRONOS_STORAGE'])
9
+ unless url.nil?
10
+ @uri = URI.parse(url)
11
+
12
+ require "khronos/adapter/#{@uri.scheme}"
13
+ __setobj__(Adapter.const_get(@uri.scheme.capitalize).new(@uri))
14
+ end
15
+ end
16
+
17
+ def __getobj__
18
+ @adapter
19
+ end
20
+
21
+ def __setobj__(adapter)
22
+ @adapter = adapter
23
+ end
24
+
25
+ end
26
+ end
@@ -0,0 +1,3 @@
1
+ module Khronos
2
+ VERSION = '0.0.0'
3
+ end
data/lib/khronos.rb ADDED
@@ -0,0 +1,20 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ require 'bundler/setup'
4
+ require 'json'
5
+
6
+ module Khronos
7
+ autoload :Config, 'khronos/config'
8
+
9
+ autoload :Storage, 'khronos/storage'
10
+ autoload :Server, 'khronos/server'
11
+
12
+ autoload :Scheduler, 'khronos/scheduler'
13
+ autoload :Runner, 'khronos/runner'
14
+ autoload :Controller, 'khronos/controller'
15
+ end
16
+
17
+ Khronos::Config.instance.load!('config/environment.yml', ENV['RACK_ENV'])
18
+
19
+ controller = Khronos::Controller.new
20
+ controller.start!
Binary file
Binary file
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ describe Khronos::Storage do
4
+ subject { Khronos::Storage }
5
+
6
+ describe 'adapters' do
7
+
8
+ it "should identify redis adapter" do
9
+ client = subject.new('redis://127.0.0.1:6379/0')
10
+ client.adapter.should be_a_instance_of Khronos::Adapter::Redis
11
+ end
12
+
13
+ xit "should identify memcached adapter" do
14
+ client = subject.new('memcached://127.0.0.1:6379/test')
15
+ client.adapter.should be_a_instance_of Khronos::Adapter::Memcached
16
+ end
17
+
18
+ xit "should identify mongodb adapter" do
19
+ client = subject.new('mongodb://127.0.0.1:6379/test')
20
+ client.adapter.should be_a_instance_of Khronos::Adapter::Mongodb
21
+ end
22
+
23
+ end
24
+ end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ describe Khronos::Server do
4
+ include Rack::Test::Methods
5
+
6
+ def app
7
+ Khronos::Server
8
+ end
9
+
10
+ it "shouldn't accept request without context" do
11
+ get('/')
12
+ last_response.status.should == 400
13
+ end
14
+
15
+ it "should accept requests with no data" do
16
+ get('/', {:context => "invalid"})
17
+ last_response.status.should == 200
18
+ JSON.parse(last_response.body).should == {}
19
+ end
20
+
21
+ it "should schedule context to 1 week" do
22
+ put('/', {
23
+ :context => "invalid",
24
+ :schedule => 1.week,
25
+ :at => '15:00',
26
+ :recurrency => 5
27
+ })
28
+ last_response.status.should == 200
29
+ end
30
+
31
+ end
@@ -0,0 +1,18 @@
1
+ # encoding: utf-8
2
+ $: << File.expand_path('lib')
3
+
4
+ ENV['RACK_ENV'] = 'test'
5
+
6
+ #
7
+ # Code coverage
8
+ #
9
+ require 'simplecov'
10
+ SimpleCov.start
11
+
12
+ require 'bundler/setup'
13
+ require 'active_support/all'
14
+ require 'rack/test'
15
+ require 'delorean'
16
+ require 'rspec'
17
+
18
+ require 'khronos'
metadata ADDED
@@ -0,0 +1,194 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: khronos
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Endel Dreyer
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-09-04 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: sinatra
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 1.3.3
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 1.3.3
30
+ - !ruby/object:Gem::Dependency
31
+ name: mongoid
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 3.0.5
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 3.0.5
46
+ - !ruby/object:Gem::Dependency
47
+ name: activerecord
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: 3.2.8
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 3.2.8
62
+ - !ruby/object:Gem::Dependency
63
+ name: json
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 1.7.5
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 1.7.5
78
+ - !ruby/object:Gem::Dependency
79
+ name: activesupport
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ~>
84
+ - !ruby/object:Gem::Version
85
+ version: 3.2.8
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: 3.2.8
94
+ description: Advanced Cron replacement for the cloud.
95
+ email:
96
+ - endel@ocapi.com.br
97
+ executables: []
98
+ extensions: []
99
+ extra_rdoc_files: []
100
+ files:
101
+ - .rspec
102
+ - Gemfile
103
+ - bin/khronos
104
+ - config.ru
105
+ - config/.config.yml.un~
106
+ - config/.environment.yml.un~
107
+ - config/.redis.yml.un~
108
+ - config/.storage.yml.un~
109
+ - config/environment.yml
110
+ - khronos.gemspec
111
+ - lib/.khronos.rb.un~
112
+ - lib/.scheduler.rb.swp
113
+ - lib/.scheduler.rb.un~
114
+ - lib/khronos.rb
115
+ - lib/khronos/.config.rb.un~
116
+ - lib/khronos/.controller.rb.un~
117
+ - lib/khronos/.runner.rb.un~
118
+ - lib/khronos/.schedule.rb.un~
119
+ - lib/khronos/.scheduler.rb.un~
120
+ - lib/khronos/.server.rb.un~
121
+ - lib/khronos/.storage.rb.un~
122
+ - lib/khronos/.task.rb.un~
123
+ - lib/khronos/.version.rb.swp
124
+ - lib/khronos/.version.rb.un~
125
+ - lib/khronos/config.rb
126
+ - lib/khronos/controller.rb
127
+ - lib/khronos/runner.rb
128
+ - lib/khronos/scheduler.rb
129
+ - lib/khronos/server.rb
130
+ - lib/khronos/storage.rb
131
+ - lib/khronos/storage/adapter.rb
132
+ - lib/khronos/storage/adapter/.client.rb.un~
133
+ - lib/khronos/storage/adapter/.memcached.rb.swp
134
+ - lib/khronos/storage/adapter/.memcached.rb.un~
135
+ - lib/khronos/storage/adapter/.mongo.rb.un~
136
+ - lib/khronos/storage/adapter/.mongodb.rb.swp
137
+ - lib/khronos/storage/adapter/.mongodb.rb.un~
138
+ - lib/khronos/storage/adapter/.postgres.rb.un~
139
+ - lib/khronos/storage/adapter/.redis.rb.swp
140
+ - lib/khronos/storage/adapter/.redis.rb.un~
141
+ - lib/khronos/storage/adapter/mongo.rb
142
+ - lib/khronos/storage/adapter/mongo/.mongo.rb.un~
143
+ - lib/khronos/storage/adapter/mongo/.schedule.rb.un~
144
+ - lib/khronos/storage/adapter/mongo/.schedule_log.rb.un~
145
+ - lib/khronos/storage/adapter/mongo/schedule.rb
146
+ - lib/khronos/storage/adapter/mongo/schedule_log.rb
147
+ - lib/khronos/storage/adapter/postgres.rb
148
+ - lib/khronos/storage/adapter/postgres/.schedule.rb.un~
149
+ - lib/khronos/storage/adapter/postgres/.schedule_log.rb.un~
150
+ - lib/khronos/storage/adapter/postgres/schedule.rb
151
+ - lib/khronos/storage/adapter/postgres/schedule_log.rb
152
+ - lib/khronos/storage/db/migrate/.schedule.rb.un~
153
+ - lib/khronos/storage/db/migrate/.schedule_log.rb.un~
154
+ - lib/khronos/storage/db/migrate/schedule.rb
155
+ - lib/khronos/storage/db/migrate/schedule_log.rb
156
+ - lib/khronos/version.rb
157
+ - spec/.spec_helper.rb.un~
158
+ - spec/functional/.client_spec.rb.un~
159
+ - spec/functional/client_spec.rb
160
+ - spec/integration/.server_spec.rb.un~
161
+ - spec/integration/server_spec.rb
162
+ - spec/spec_helper.rb
163
+ homepage: http://github.com/ocapi/scraper
164
+ licenses:
165
+ - MIT
166
+ post_install_message:
167
+ rdoc_options: []
168
+ require_paths:
169
+ - lib
170
+ required_ruby_version: !ruby/object:Gem::Requirement
171
+ none: false
172
+ requirements:
173
+ - - ! '>='
174
+ - !ruby/object:Gem::Version
175
+ version: '0'
176
+ required_rubygems_version: !ruby/object:Gem::Requirement
177
+ none: false
178
+ requirements:
179
+ - - ! '>='
180
+ - !ruby/object:Gem::Version
181
+ version: '0'
182
+ requirements: []
183
+ rubyforge_project:
184
+ rubygems_version: 1.8.24
185
+ signing_key:
186
+ specification_version: 3
187
+ summary: Ruby HTTP Job Scheduler Interface.
188
+ test_files:
189
+ - spec/functional/.client_spec.rb.un~
190
+ - spec/functional/client_spec.rb
191
+ - spec/integration/.server_spec.rb.un~
192
+ - spec/integration/server_spec.rb
193
+ - spec/spec_helper.rb
194
+ has_rdoc: