iron_worker_ng 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +22 -0
- data/README.md +34 -0
- data/VERSION +1 -0
- data/bin/iron_worker_ng +164 -0
- data/lib/iron_worker_ng.rb +6 -0
- data/lib/iron_worker_ng/api_client.rb +143 -0
- data/lib/iron_worker_ng/api_client_error.rb +4 -0
- data/lib/iron_worker_ng/client.rb +55 -0
- data/lib/iron_worker_ng/code/base.rb +95 -0
- data/lib/iron_worker_ng/code/java.rb +51 -0
- data/lib/iron_worker_ng/code/node.rb +39 -0
- data/lib/iron_worker_ng/code/ruby.rb +86 -0
- data/lib/iron_worker_ng/feature/base.rb +12 -0
- data/lib/iron_worker_ng/feature/common/merge_dir.rb +43 -0
- data/lib/iron_worker_ng/feature/common/merge_file.rb +35 -0
- data/lib/iron_worker_ng/feature/java/merge_jar.rb +37 -0
- data/lib/iron_worker_ng/feature/java/merge_worker.rb +48 -0
- data/lib/iron_worker_ng/feature/node/merge_worker.rb +46 -0
- data/lib/iron_worker_ng/feature/ruby/merge_gem.rb +71 -0
- data/lib/iron_worker_ng/feature/ruby/merge_gemfile.rb +42 -0
- data/lib/iron_worker_ng/feature/ruby/merge_worker.rb +52 -0
- data/lib/iron_worker_ng/version.rb +7 -0
- metadata +139 -0
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2012 Iron.io, Inc
|
2
|
+
All rights reserved.
|
3
|
+
|
4
|
+
Redistribution and use in source and binary forms, with or without
|
5
|
+
modification, are permitted provided that the following conditions are met:
|
6
|
+
|
7
|
+
1. Redistributions of source code must retain the above copyright notice, this
|
8
|
+
list of conditions and the following disclaimer.
|
9
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
10
|
+
this list of conditions and the following disclaimer in the documentation
|
11
|
+
and/or other materials provided with the distribution.
|
12
|
+
|
13
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
14
|
+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
15
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
16
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
17
|
+
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
18
|
+
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
19
|
+
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
20
|
+
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
21
|
+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
22
|
+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
data/README.md
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
# Basic Usage
|
2
|
+
|
3
|
+
Visit http://iron.io for more details.
|
4
|
+
|
5
|
+
## Create Worker
|
6
|
+
|
7
|
+
You can just put any code into worker or can create class with name matching file name (e.g MyWorker class in my_worker.rb) and run method.
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
require 'active_record'
|
11
|
+
|
12
|
+
# @params hash is available here
|
13
|
+
# do something fun
|
14
|
+
```
|
15
|
+
|
16
|
+
## Create Runner
|
17
|
+
|
18
|
+
```ruby
|
19
|
+
require 'iron_worker_ng'
|
20
|
+
|
21
|
+
client = IronWorkerNG::Client.new('IRON_IO_PROJECT_ID', 'IRON_IO_TOKEN')
|
22
|
+
|
23
|
+
code = IronWorkerNG::Code::Ruby.new
|
24
|
+
code.merge_worker 'path/to/my_worker.rb'
|
25
|
+
code.merge_gem 'activerecord'
|
26
|
+
|
27
|
+
# you can use hash_string to check if you need to reupload code
|
28
|
+
# note that hash_string check is fast while code upload can take a while (depends on how much things you merged)
|
29
|
+
puts code.hash_string
|
30
|
+
|
31
|
+
client.codes.create(code)
|
32
|
+
|
33
|
+
client.tasks.create('MyWorker', 'foo' => 'bar')
|
34
|
+
```
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.0
|
data/bin/iron_worker_ng
ADDED
@@ -0,0 +1,164 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'optparse'
|
4
|
+
require 'time'
|
5
|
+
require 'iron_worker_ng'
|
6
|
+
|
7
|
+
if $*.size == 0 || (not ['upload', 'queue', 'schedule'].include?($*[0]))
|
8
|
+
puts 'usage: iron_worker_ng COMMAND [OPTIONS]'
|
9
|
+
puts ' COMMAND: upload, queue, schedule'
|
10
|
+
puts ' run iron_worker_ng COMMAND --help to get more information about each command'
|
11
|
+
exit 1
|
12
|
+
end
|
13
|
+
|
14
|
+
command = $*[0]
|
15
|
+
$*.shift
|
16
|
+
|
17
|
+
if ENV['IRON_IO_PROJECT_ID'].nil? || ENV['IRON_IO_TOKEN'].nil?
|
18
|
+
puts "please set $IRON_IO_PROJECT_ID and $IRON_IO_TOKEN environment variables"
|
19
|
+
exit 1
|
20
|
+
end
|
21
|
+
|
22
|
+
client = IronWorkerNG::Client.new(ENV['IRON_IO_PROJECT_ID'], ENV['IRON_IO_TOKEN'])
|
23
|
+
|
24
|
+
if command == 'upload'
|
25
|
+
runtimes = IronWorkerNG::Code::Base.registered_types
|
26
|
+
runtimes_help = runtimes[0][:name] + ' (default)' + (runtimes.size == 1 ? '' : ', ') + runtimes.map { |r| r[:name] }[1 .. -1].join(', ')
|
27
|
+
|
28
|
+
features = []
|
29
|
+
|
30
|
+
name = nil
|
31
|
+
runtime = nil
|
32
|
+
execute_features = []
|
33
|
+
|
34
|
+
opts = OptionParser.new do |opts|
|
35
|
+
opts.banner = 'usage: iron_worker_ng upload [OPTIONS]'
|
36
|
+
|
37
|
+
opts.on('-r', '--runtime RUNTIME', runtimes.map { |r| r[:name] }, "#{runtimes_help}") do |v|
|
38
|
+
runtime = v
|
39
|
+
end
|
40
|
+
|
41
|
+
opts.on('-n', '--name NAME', 'code name') do |v|
|
42
|
+
name = v
|
43
|
+
end
|
44
|
+
|
45
|
+
IronWorkerNG::Code::Base.registered_features.each do |f|
|
46
|
+
prefix = ''
|
47
|
+
|
48
|
+
if f[:for_klass] != IronWorkerNG::Code::Base
|
49
|
+
prefix = runtimes.find { |r| r[:klass] == f[:for_klass] }[:name] + '-'
|
50
|
+
end
|
51
|
+
|
52
|
+
opts.on("--#{prefix}#{f[:name].gsub('_', '-')} #{f[:args]}", Array) do |v|
|
53
|
+
execute_features << {:name => f[:name], :args => v}
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
begin
|
59
|
+
opts.parse!
|
60
|
+
rescue OptionParser::ParseError
|
61
|
+
puts $!.to_s
|
62
|
+
exit 1
|
63
|
+
end
|
64
|
+
|
65
|
+
if execute_features.size == 0
|
66
|
+
puts opts
|
67
|
+
exit 1
|
68
|
+
end
|
69
|
+
|
70
|
+
runtime = runtimes[0][:name] if runtime.nil?
|
71
|
+
|
72
|
+
code = runtimes.find { |r| r[:name] == runtime }[:klass].new(name)
|
73
|
+
|
74
|
+
execute_features.each do |f|
|
75
|
+
code.send(f[:name], *f[:args])
|
76
|
+
end
|
77
|
+
|
78
|
+
client.codes.create(code)
|
79
|
+
elsif command == 'queue' || command == 'schedule'
|
80
|
+
name = nil
|
81
|
+
params = {}
|
82
|
+
|
83
|
+
priority = nil
|
84
|
+
timeout = nil
|
85
|
+
delay = nil
|
86
|
+
|
87
|
+
start_at = nil
|
88
|
+
end_at = nil
|
89
|
+
run_times = nil
|
90
|
+
run_every = nil
|
91
|
+
|
92
|
+
opts = OptionParser.new do |opts|
|
93
|
+
opts.banner = "usage: iron_worker_ng #{command} [OPTIONS]"
|
94
|
+
|
95
|
+
opts.on('-n', '--name NAME', 'code name') do |v|
|
96
|
+
name = v
|
97
|
+
end
|
98
|
+
|
99
|
+
opts.on('-p', '--param NAME,VALUE', Array, 'parameters to pass') do |v|
|
100
|
+
params[v[0]] = v[1]
|
101
|
+
end
|
102
|
+
|
103
|
+
opts.on('--priority PRIORITY', Integer, '0 (default), 1, 2') do |v|
|
104
|
+
priority = v
|
105
|
+
end
|
106
|
+
|
107
|
+
opts.on('--timeout TIMEOUT', Integer, 'maximum run time in seconds from 0 to 3600 (default)') do |v|
|
108
|
+
timeout = v
|
109
|
+
end
|
110
|
+
|
111
|
+
opts.on('--delay DELAY', Integer, 'delay before start in seconds') do |v|
|
112
|
+
delay = v
|
113
|
+
end
|
114
|
+
|
115
|
+
if command == 'schedule'
|
116
|
+
opts.on('--start-at TIME', 'start task at specified time') do |v|
|
117
|
+
start_at = Time.parse(v)
|
118
|
+
end
|
119
|
+
|
120
|
+
opts.on('--end-at TIME', 'stop running task at specified time') do |v|
|
121
|
+
end_at = Time.parse(v)
|
122
|
+
end
|
123
|
+
|
124
|
+
opts.on('--run-times RUN_TIMES', Integer, 'run task no more times than specified') do |v|
|
125
|
+
run_times = v
|
126
|
+
end
|
127
|
+
|
128
|
+
opts.on('--run-every RUN_EVERY', Integer, 'run task every RUN_EVERY seconds') do |v|
|
129
|
+
run_every = v
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
begin
|
135
|
+
opts.parse!
|
136
|
+
rescue OptionParser::ParseError
|
137
|
+
puts $!.to_s
|
138
|
+
exit 1
|
139
|
+
end
|
140
|
+
|
141
|
+
if name.nil?
|
142
|
+
puts opts
|
143
|
+
exit 1
|
144
|
+
end
|
145
|
+
|
146
|
+
options = {}
|
147
|
+
|
148
|
+
options[:priority] = priority unless priority.nil?
|
149
|
+
options[:timeout] = timeout unless timeout.nil?
|
150
|
+
options[:delay] = delay unless delay.nil?
|
151
|
+
|
152
|
+
if command == 'schedule'
|
153
|
+
options[:start_at] = start_at unless start_at.nil?
|
154
|
+
options[:end_at] = end_at unless end_at.nil?
|
155
|
+
options[:run_times] = run_times unless run_times.nil?
|
156
|
+
options[:run_every] = run_every unless run_every.nil?
|
157
|
+
end
|
158
|
+
|
159
|
+
if command == 'queue'
|
160
|
+
client.tasks.create(name, params, options)
|
161
|
+
else
|
162
|
+
client.schedules.create(name, params, options)
|
163
|
+
end
|
164
|
+
end
|
@@ -0,0 +1,143 @@
|
|
1
|
+
require 'rest-client'
|
2
|
+
require 'rest'
|
3
|
+
require 'json'
|
4
|
+
require 'time'
|
5
|
+
|
6
|
+
require_relative 'api_client_error'
|
7
|
+
|
8
|
+
module IronWorkerNG
|
9
|
+
class APIClient
|
10
|
+
attr_reader :project_id
|
11
|
+
attr_reader :token
|
12
|
+
|
13
|
+
def initialize(project_id, token, params = {})
|
14
|
+
@project_id = project_id
|
15
|
+
@token = token
|
16
|
+
|
17
|
+
@user_agent = params[:user_agent] || 'iron_worker_ng-' + IronWorkerNG.version
|
18
|
+
|
19
|
+
scheme = params[:scheme] || 'https'
|
20
|
+
host = params[:host] || 'worker-aws-us-east-1.iron.io'
|
21
|
+
port = params[:port] || 443
|
22
|
+
api_version = params[:api_version] || 2
|
23
|
+
|
24
|
+
@url = "#{scheme}://#{host}:#{port}/#{api_version}/"
|
25
|
+
|
26
|
+
@rest = Rest::Client.new
|
27
|
+
end
|
28
|
+
|
29
|
+
def common_request_hash
|
30
|
+
{
|
31
|
+
'Content-Type' => 'application/json',
|
32
|
+
'Authorization' => "OAuth #{@token}",
|
33
|
+
'User-Agent' => @user_agent
|
34
|
+
}
|
35
|
+
end
|
36
|
+
|
37
|
+
def get(method, params = {})
|
38
|
+
request_hash = {}
|
39
|
+
request_hash[:headers] = common_request_hash
|
40
|
+
request_hash[:params] = params
|
41
|
+
|
42
|
+
@rest.get(@url + method, request_hash)
|
43
|
+
end
|
44
|
+
|
45
|
+
def post(method, params = {})
|
46
|
+
request_hash = {}
|
47
|
+
request_hash[:headers] = common_request_hash
|
48
|
+
request_hash[:body] = params.to_json
|
49
|
+
|
50
|
+
@rest.post(@url + method, request_hash)
|
51
|
+
end
|
52
|
+
|
53
|
+
def delete(method, params = {})
|
54
|
+
request_hash = {}
|
55
|
+
request_hash[:headers] = common_request_hash
|
56
|
+
request_hash[:params] = params
|
57
|
+
|
58
|
+
@rest.delete(@url + method, request_hash)
|
59
|
+
end
|
60
|
+
|
61
|
+
def post_file(method, file, params = {})
|
62
|
+
request_hash = common_request_hash
|
63
|
+
request_hash[:data] = params.to_json
|
64
|
+
request_hash[:file] = file
|
65
|
+
|
66
|
+
RestClient.post(@url + method + "?oauth=#{@token}", request_hash)
|
67
|
+
end
|
68
|
+
|
69
|
+
def parse_response(response, parse_json = true)
|
70
|
+
raise IronWorkerNG::APIClientError.new(response.body) if response.code != 200
|
71
|
+
|
72
|
+
return response.body unless parse_json
|
73
|
+
JSON.parse(response.body)
|
74
|
+
end
|
75
|
+
|
76
|
+
def codes_list(params = {})
|
77
|
+
parse_response(get("projects/#{@project_id}/codes", params))
|
78
|
+
end
|
79
|
+
|
80
|
+
def codes_get(id)
|
81
|
+
parse_response(get("projects/#{@project_id}/codes/#{id}"))
|
82
|
+
end
|
83
|
+
|
84
|
+
def codes_create(name, file, runtime, runner)
|
85
|
+
parse_response(post_file("projects/#{@project_id}/codes", File.new(file, 'rb'), {:name => name, :runtime => runtime, :file_name => runner}))
|
86
|
+
end
|
87
|
+
|
88
|
+
def codes_delete(id)
|
89
|
+
parse_response(delete("projects/#{@project_id}/codes/#{id}"))
|
90
|
+
end
|
91
|
+
|
92
|
+
def codes_revisions(id, params = {})
|
93
|
+
parse_response(get("projects/#{@project_id}/codes/#{id}/revisions", params))
|
94
|
+
end
|
95
|
+
|
96
|
+
def codes_download(id, params = {})
|
97
|
+
parse_response(get("projects/#{@project_id}/codes/#{id}/download", params), false)
|
98
|
+
end
|
99
|
+
|
100
|
+
def tasks_list(params = {})
|
101
|
+
parse_response(get("projects/#{@project_id}/tasks", params))
|
102
|
+
end
|
103
|
+
|
104
|
+
def tasks_get(id)
|
105
|
+
parse_response(get("projects/#{@project_id}/tasks/#{id}"))
|
106
|
+
end
|
107
|
+
|
108
|
+
def tasks_create(code_name, payload, params = {})
|
109
|
+
parse_response(post("projects/#{@project_id}/tasks", {:tasks => [{:code_name => code_name, :payload => payload}.merge(params)]}))
|
110
|
+
end
|
111
|
+
|
112
|
+
def tasks_cancel(id)
|
113
|
+
parse_response(post("projects/#{@project_id}/tasks/#{id}/cancel"))
|
114
|
+
end
|
115
|
+
|
116
|
+
def tasks_log(id)
|
117
|
+
parse_response(get("projects/#{@project_id}/tasks/#{id}/log"), false)
|
118
|
+
end
|
119
|
+
|
120
|
+
def tasks_set_progress(id, params = {})
|
121
|
+
parse_response(post("projects/#{@project_id}/tasks/#{id}/progress", params))
|
122
|
+
end
|
123
|
+
|
124
|
+
def schedules_list(params = {})
|
125
|
+
parse_response(get("projects/#{@project_id}/schedules", params))
|
126
|
+
end
|
127
|
+
|
128
|
+
def schedules_get(id)
|
129
|
+
parse_response(get("projects/#{@project_id}/schedules/#{id}"))
|
130
|
+
end
|
131
|
+
|
132
|
+
def schedules_create(code_name, payload, params = {})
|
133
|
+
params[:start_at] = params[:start_at].iso8601 if (not params[:start_at].nil?) && params[:start_at].class == Time
|
134
|
+
params[:end_at] = params[:end_at].iso8601 if (not params[:end_at].nil?) && params[:end_at].class == Time
|
135
|
+
|
136
|
+
parse_response(post("projects/#{@project_id}/schedules", {:schedules => [{:code_name => code_name, :payload => payload}.merge(params)]}))
|
137
|
+
end
|
138
|
+
|
139
|
+
def schedules_cancel(id)
|
140
|
+
parse_response(post("projects/#{@project_id}/schedules/#{id}/cancel"))
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require_relative 'api_client'
|
2
|
+
|
3
|
+
module IronWorkerNG
|
4
|
+
class ClientProxyCaller
|
5
|
+
def initialize(client, prefix)
|
6
|
+
@client = client
|
7
|
+
@prefix = prefix
|
8
|
+
end
|
9
|
+
|
10
|
+
def method_missing(name, *args, &block)
|
11
|
+
full_name = @prefix.to_s + '_' + name.to_s
|
12
|
+
if @client.respond_to?(full_name)
|
13
|
+
@client.send(full_name, *args, &block)
|
14
|
+
else
|
15
|
+
super
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
class Client
|
21
|
+
attr_reader :api
|
22
|
+
|
23
|
+
def initialize(project_id, token, params = {})
|
24
|
+
@api = IronWorkerNG::APIClient.new(project_id, token, params)
|
25
|
+
end
|
26
|
+
|
27
|
+
def method_missing(name, *args, &block)
|
28
|
+
if args.length == 0
|
29
|
+
IronWorkerNG::ClientProxyCaller.new(self, name)
|
30
|
+
else
|
31
|
+
super
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def codes_create(code)
|
36
|
+
zip_file = code.create_zip
|
37
|
+
@api.codes_create(code.name, zip_file, code.runtime, code.runner)
|
38
|
+
File.unlink(zip_file)
|
39
|
+
|
40
|
+
true
|
41
|
+
end
|
42
|
+
|
43
|
+
def tasks_create(code_name, params = {}, options = {})
|
44
|
+
res = @api.tasks_create(code_name, {:project_id => @api.project_id, :token => @api.token, :params => params}.to_json, options)
|
45
|
+
|
46
|
+
res['tasks'][0]['id']
|
47
|
+
end
|
48
|
+
|
49
|
+
def schedules_create(code_name, params = {}, options = {})
|
50
|
+
res = @api.schedules_create(code_name, {:project_id => @api.project_id, :token => @api.token, :params => params}.to_json, options)
|
51
|
+
|
52
|
+
res['schedules'][0]['id']
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
require 'tmpdir'
|
2
|
+
require 'zip/zip'
|
3
|
+
|
4
|
+
require_relative '../feature/base'
|
5
|
+
require_relative '../feature/common/merge_file'
|
6
|
+
require_relative '../feature/common/merge_dir'
|
7
|
+
|
8
|
+
module IronWorkerNG
|
9
|
+
module Code
|
10
|
+
class Base
|
11
|
+
attr_reader :name
|
12
|
+
attr_reader :features
|
13
|
+
|
14
|
+
@@registered_types = []
|
15
|
+
|
16
|
+
def self.registered_types
|
17
|
+
@@registered_types
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.register_type(type)
|
21
|
+
@@registered_types << type
|
22
|
+
end
|
23
|
+
|
24
|
+
@@registered_features = []
|
25
|
+
|
26
|
+
def self.registered_features
|
27
|
+
@@registered_features
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.register_feature(feature)
|
31
|
+
@@registered_features << feature
|
32
|
+
end
|
33
|
+
|
34
|
+
include IronWorkerNG::Feature::Common::MergeFile::InstanceMethods
|
35
|
+
include IronWorkerNG::Feature::Common::MergeDir::InstanceMethods
|
36
|
+
|
37
|
+
def initialize(name = nil)
|
38
|
+
@name = name
|
39
|
+
@features = []
|
40
|
+
end
|
41
|
+
|
42
|
+
def fixate
|
43
|
+
IronWorkerNG::Code::Base.registered_features.each do |rf|
|
44
|
+
if rf[:for_klass] == self.class && respond_to?(rf[:name] + '_fixate')
|
45
|
+
send(rf[:name] + '_fixate')
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def hash_string
|
51
|
+
fixate
|
52
|
+
|
53
|
+
Digest::MD5.hexdigest(@features.map { |f| f.hash_string }.join)
|
54
|
+
end
|
55
|
+
|
56
|
+
def bundle(zip)
|
57
|
+
@features.each do |feature|
|
58
|
+
feature.bundle(zip)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def create_zip
|
63
|
+
fixate
|
64
|
+
|
65
|
+
init_code = ''
|
66
|
+
|
67
|
+
@features.each do |f|
|
68
|
+
if f.respond_to?(:code_for_init)
|
69
|
+
init_code += f.send(:code_for_init) + "\n"
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
zip_name = Dir.tmpdir + '/' + Dir::Tmpname.make_tmpname("iron-worker-ng-", "code.zip")
|
74
|
+
|
75
|
+
Zip::ZipFile.open(zip_name, Zip::ZipFile::CREATE) do |zip|
|
76
|
+
bundle(zip)
|
77
|
+
create_runner(zip, init_code)
|
78
|
+
end
|
79
|
+
|
80
|
+
zip_name
|
81
|
+
end
|
82
|
+
|
83
|
+
def create_runner(zip)
|
84
|
+
end
|
85
|
+
|
86
|
+
def runtime
|
87
|
+
nil
|
88
|
+
end
|
89
|
+
|
90
|
+
def runner
|
91
|
+
nil
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require_relative '../feature/java/merge_jar'
|
2
|
+
require_relative '../feature/java/merge_worker'
|
3
|
+
|
4
|
+
module IronWorkerNG
|
5
|
+
module Code
|
6
|
+
class Java < IronWorkerNG::Code::Base
|
7
|
+
include IronWorkerNG::Feature::Java::MergeJar::InstanceMethods
|
8
|
+
include IronWorkerNG::Feature::Java::MergeWorker::InstanceMethods
|
9
|
+
|
10
|
+
def create_runner(zip, init_code)
|
11
|
+
classpath_array = []
|
12
|
+
|
13
|
+
@features.each do |f|
|
14
|
+
if f.respond_to?(:code_for_classpath)
|
15
|
+
classpath_array << f.send(:code_for_classpath)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
classpath = classpath_array.join(':')
|
20
|
+
|
21
|
+
zip.get_output_stream('runner.rb') do |runner|
|
22
|
+
runner.write <<RUNNER
|
23
|
+
# iron_worker_ng-#{IronWorkerNG.version}
|
24
|
+
|
25
|
+
root = nil
|
26
|
+
|
27
|
+
($*.length - 2).downto(0) do |i|
|
28
|
+
root = $*[i + 1] if $*[i] == '-d'
|
29
|
+
end
|
30
|
+
|
31
|
+
Dir.chdir(root)
|
32
|
+
|
33
|
+
#{init_code}
|
34
|
+
|
35
|
+
puts `java -cp #{classpath} #{worker.klass} \#{$*.join(' ')}`
|
36
|
+
RUNNER
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def runtime
|
41
|
+
'ruby'
|
42
|
+
end
|
43
|
+
|
44
|
+
def runner
|
45
|
+
'runner.rb'
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
IronWorkerNG::Code::Base.register_type(:name => 'java', :klass => IronWorkerNG::Code::Java)
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require_relative '../feature/node/merge_worker'
|
2
|
+
|
3
|
+
module IronWorkerNG
|
4
|
+
module Code
|
5
|
+
class Node < IronWorkerNG::Code::Base
|
6
|
+
include IronWorkerNG::Feature::Node::MergeWorker::InstanceMethods
|
7
|
+
|
8
|
+
def create_runner(zip, init_code)
|
9
|
+
zip.get_output_stream('runner.rb') do |runner|
|
10
|
+
runner.write <<RUNNER
|
11
|
+
# iron_worker_ng-#{IronWorkerNG.version}
|
12
|
+
|
13
|
+
root = nil
|
14
|
+
|
15
|
+
($*.length - 2).downto(0) do |i|
|
16
|
+
root = $*[i + 1] if $*[i] == '-d'
|
17
|
+
end
|
18
|
+
|
19
|
+
Dir.chdir(root)
|
20
|
+
|
21
|
+
#{init_code}
|
22
|
+
|
23
|
+
puts `node \#{worker_file_name} \#{$*.join(' ')}`
|
24
|
+
RUNNER
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def runtime
|
29
|
+
'ruby'
|
30
|
+
end
|
31
|
+
|
32
|
+
def runner
|
33
|
+
'runner.rb'
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
IronWorkerNG::Code::Base.register_type(:name => 'node', :klass => IronWorkerNG::Code::Node)
|
@@ -0,0 +1,86 @@
|
|
1
|
+
require_relative '../feature/ruby/merge_gem'
|
2
|
+
require_relative '../feature/ruby/merge_gemfile'
|
3
|
+
require_relative '../feature/ruby/merge_worker'
|
4
|
+
|
5
|
+
module IronWorkerNG
|
6
|
+
module Code
|
7
|
+
class Ruby < IronWorkerNG::Code::Base
|
8
|
+
include IronWorkerNG::Feature::Ruby::MergeGem::InstanceMethods
|
9
|
+
include IronWorkerNG::Feature::Ruby::MergeGemfile::InstanceMethods
|
10
|
+
include IronWorkerNG::Feature::Ruby::MergeWorker::InstanceMethods
|
11
|
+
|
12
|
+
def create_runner(zip, init_code)
|
13
|
+
zip.get_output_stream('runner.rb') do |runner|
|
14
|
+
runner.write <<RUNNER
|
15
|
+
# iron_worker_ng-#{IronWorkerNG.version}
|
16
|
+
|
17
|
+
root = nil
|
18
|
+
payload_file = nil
|
19
|
+
task_id = nil
|
20
|
+
|
21
|
+
($*.length - 2).downto(0) do |i|
|
22
|
+
root = $*[i + 1] if $*[i] == '-d'
|
23
|
+
payload_file = $*[i + 1] if $*[i] == '-payload'
|
24
|
+
task_id = $*[i + 1] if $*[i] == '-id'
|
25
|
+
end
|
26
|
+
|
27
|
+
Dir.chdir(root)
|
28
|
+
|
29
|
+
#{init_code}
|
30
|
+
$:.unshift("\#{root}")
|
31
|
+
|
32
|
+
def log(*args)
|
33
|
+
puts *args
|
34
|
+
end
|
35
|
+
|
36
|
+
require 'json'
|
37
|
+
|
38
|
+
payload = JSON.load(File.open(payload_file))
|
39
|
+
|
40
|
+
@iron_io_project_id = payload['project_id']
|
41
|
+
@iron_io_token = payload['token']
|
42
|
+
@iron_worker_task_id = task_id
|
43
|
+
@params = payload['params']
|
44
|
+
|
45
|
+
require worker_file_name
|
46
|
+
|
47
|
+
worker_class = nil
|
48
|
+
|
49
|
+
begin
|
50
|
+
worker_class = Kernel.const_get(worker_class_name)
|
51
|
+
rescue
|
52
|
+
end
|
53
|
+
|
54
|
+
unless worker_class.nil?
|
55
|
+
worker_inst = worker_class.new
|
56
|
+
|
57
|
+
class << worker_inst
|
58
|
+
attr_accessor :iron_io_project_id
|
59
|
+
attr_accessor :iron_io_token
|
60
|
+
attr_accessor :iron_worker_task_id
|
61
|
+
attr_accessor :params
|
62
|
+
end
|
63
|
+
|
64
|
+
worker_inst.iron_io_project_id = @iron_io_project_id
|
65
|
+
worker_inst.iron_io_token = @iron_io_token
|
66
|
+
worker_inst.iron_worker_task_id = @iron_worker_task_id
|
67
|
+
worker_inst.params = @params
|
68
|
+
|
69
|
+
worker_inst.run
|
70
|
+
end
|
71
|
+
RUNNER
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def runtime
|
76
|
+
'ruby'
|
77
|
+
end
|
78
|
+
|
79
|
+
def runner
|
80
|
+
'runner.rb'
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
IronWorkerNG::Code::Base.register_type(:name => 'ruby', :klass => IronWorkerNG::Code::Ruby)
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module IronWorkerNG
|
2
|
+
module Feature
|
3
|
+
module Common
|
4
|
+
module MergeDir
|
5
|
+
class Feature < IronWorkerNG::Feature::Base
|
6
|
+
attr_reader :path
|
7
|
+
attr_reader :dest
|
8
|
+
|
9
|
+
def initialize(path, dest)
|
10
|
+
@path = File.expand_path(path)
|
11
|
+
@dest = dest
|
12
|
+
end
|
13
|
+
|
14
|
+
def hash_string
|
15
|
+
s = @path + @dest + File.mtime(@path).to_i.to_s
|
16
|
+
|
17
|
+
Dir.glob(@path + '/**/**') do |path|
|
18
|
+
s += path + File.mtime(path).to_i.to_s
|
19
|
+
end
|
20
|
+
|
21
|
+
Digest::MD5.hexdigest(s)
|
22
|
+
end
|
23
|
+
|
24
|
+
def bundle(zip)
|
25
|
+
Dir.glob(@path + '/**/**') do |path|
|
26
|
+
zip.add(@dest + '/' + File.basename(@path) + path[@path.length .. -1], path)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
module InstanceMethods
|
32
|
+
def merge_dir(path, dest = '.')
|
33
|
+
@features << IronWorkerNG::Feature::Common::MergeDir::Feature.new(path, dest)
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.included(base)
|
37
|
+
IronWorkerNG::Code::Base.register_feature(:name => 'merge_dir', :for_klass => base, :args => 'PATH[,DEST]')
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module IronWorkerNG
|
2
|
+
module Feature
|
3
|
+
module Common
|
4
|
+
module MergeFile
|
5
|
+
class Feature < IronWorkerNG::Feature::Base
|
6
|
+
attr_reader :path
|
7
|
+
attr_reader :dest
|
8
|
+
|
9
|
+
def initialize(path, dest)
|
10
|
+
@path = File.expand_path(path)
|
11
|
+
@dest = dest
|
12
|
+
end
|
13
|
+
|
14
|
+
def hash_string
|
15
|
+
Digest::MD5.hexdigest(@path + @dest + File.mtime(@path).to_i.to_s)
|
16
|
+
end
|
17
|
+
|
18
|
+
def bundle(zip)
|
19
|
+
zip.add(@dest + '/' + File.basename(@path), @path)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
module InstanceMethods
|
24
|
+
def merge_file(path, dest = '.')
|
25
|
+
@features << IronWorkerNG::Feature::Common::MergerFile::Feature.new(path, dest)
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.included(base)
|
29
|
+
IronWorkerNG::Code::Base.register_feature(:name => 'merge_file', :for_klass => base, :args => 'PATH[,DEST]')
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module IronWorkerNG
|
2
|
+
module Feature
|
3
|
+
module Java
|
4
|
+
module MergeJar
|
5
|
+
class Feature < IronWorkerNG::Feature::Base
|
6
|
+
attr_reader :path
|
7
|
+
|
8
|
+
def initialize(path)
|
9
|
+
@path = File.expand_path(path)
|
10
|
+
end
|
11
|
+
|
12
|
+
def hash_string
|
13
|
+
Digest::MD5.hexdigest(@path + File.mtime(@path).to_i.to_s)
|
14
|
+
end
|
15
|
+
|
16
|
+
def bundle(zip)
|
17
|
+
zip.add(File.basename(@path), @path)
|
18
|
+
end
|
19
|
+
|
20
|
+
def code_for_classpath
|
21
|
+
File.basename(@path)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
module InstanceMethods
|
26
|
+
def merge_jar(path)
|
27
|
+
@features << IronWorkerNG::Feature::Java::MergeJar::Feature.new(path)
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.included(base)
|
31
|
+
IronWorkerNG::Code::Base.register_feature(:name => 'merge_jar', :for_klass => base, :args => 'PATH')
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module IronWorkerNG
|
2
|
+
module Feature
|
3
|
+
module Java
|
4
|
+
module MergeWorker
|
5
|
+
class Feature < IronWorkerNG::Feature::Base
|
6
|
+
attr_reader :path
|
7
|
+
attr_reader :klass
|
8
|
+
|
9
|
+
def initialize(path, klass)
|
10
|
+
@path = File.expand_path(path)
|
11
|
+
@klass = klass
|
12
|
+
end
|
13
|
+
|
14
|
+
def hash_string
|
15
|
+
Digest::MD5.hexdigest(@path + @klass + File.mtime(@path).to_i.to_s)
|
16
|
+
end
|
17
|
+
|
18
|
+
def bundle(zip)
|
19
|
+
zip.add(File.basename(@path), @path)
|
20
|
+
end
|
21
|
+
|
22
|
+
def code_for_classpath
|
23
|
+
File.basename(@path)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
module InstanceMethods
|
28
|
+
attr_reader :worker
|
29
|
+
|
30
|
+
def merge_worker(path, klass)
|
31
|
+
@worker ||= nil
|
32
|
+
|
33
|
+
return unless @worker.nil?
|
34
|
+
|
35
|
+
@name ||= klass.split('.')[-1]
|
36
|
+
|
37
|
+
@worker = IronWorkerNG::Feature::Java::MergeWorker::Feature.new(path, klass)
|
38
|
+
@features << @worker
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.included(base)
|
42
|
+
IronWorkerNG::Code::Base.register_feature(:name => 'merge_worker', :for_klass => base, :args => 'PATH,CLASS')
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module IronWorkerNG
|
2
|
+
module Feature
|
3
|
+
module Node
|
4
|
+
module MergeWorker
|
5
|
+
class Feature < IronWorkerNG::Feature::Base
|
6
|
+
attr_reader :path
|
7
|
+
|
8
|
+
def initialize(path)
|
9
|
+
@path = File.expand_path(path)
|
10
|
+
end
|
11
|
+
|
12
|
+
def hash_string
|
13
|
+
Digest::MD5.hexdigest(@path + File.mtime(@path).to_i.to_s)
|
14
|
+
end
|
15
|
+
|
16
|
+
def bundle(zip)
|
17
|
+
zip.add(File.basename(@path), @path)
|
18
|
+
end
|
19
|
+
|
20
|
+
def code_for_init
|
21
|
+
"worker_file_name = '#{File.basename(@path)}'"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
module InstanceMethods
|
26
|
+
attr_reader :worker
|
27
|
+
|
28
|
+
def merge_worker(path)
|
29
|
+
@worker ||= nil
|
30
|
+
|
31
|
+
return unless @worker.nil?
|
32
|
+
|
33
|
+
@name ||= File.basename(path).gsub(/\.js$/, '').capitalize.gsub(/_./) { |x| x[1].upcase }
|
34
|
+
|
35
|
+
@worker = IronWorkerNG::Feature::Node::MergeWorker::Feature.new(path)
|
36
|
+
@features << @worker
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.included(base)
|
40
|
+
IronWorkerNG::Code::Base.register_feature(:name => 'merge_worker', :for_klass => base, :args => 'PATH')
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'bundler'
|
2
|
+
|
3
|
+
module IronWorkerNG
|
4
|
+
module Feature
|
5
|
+
module Ruby
|
6
|
+
module MergeGem
|
7
|
+
class Feature < IronWorkerNG::Feature::Base
|
8
|
+
attr_reader :spec
|
9
|
+
|
10
|
+
def initialize(spec)
|
11
|
+
@spec = spec
|
12
|
+
end
|
13
|
+
|
14
|
+
def hash_string
|
15
|
+
Digest::MD5.hexdigest(@spec.full_name)
|
16
|
+
end
|
17
|
+
|
18
|
+
def bundle(zip)
|
19
|
+
if @spec.extensions.length == 0
|
20
|
+
zip.add('./gems/' + @spec.full_name, @spec.full_gem_path)
|
21
|
+
Dir.glob(@spec.full_gem_path + '/**/**') do |path|
|
22
|
+
zip.add('./gems/' + @spec.full_name + path[@spec.full_gem_path.length .. -1], path)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def code_for_init
|
28
|
+
if @spec.extensions.length == 0
|
29
|
+
'$:.unshift("#{root}/gems/' + @spec.full_name + '/lib")'
|
30
|
+
else
|
31
|
+
'# native gem ' + @spec.full_name
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
module InstanceMethods
|
37
|
+
attr_reader :merge_gem_reqs
|
38
|
+
|
39
|
+
def merge_gem(name, version = '>= 0')
|
40
|
+
@merge_gem_reqs ||= []
|
41
|
+
|
42
|
+
@merge_gem_reqs << Bundler::Dependency.new(name, version.split(', '))
|
43
|
+
end
|
44
|
+
|
45
|
+
def merge_gem_fixate
|
46
|
+
@merge_gem_reqs ||= []
|
47
|
+
|
48
|
+
@features.reject! { |f| f.class == IronWorkerNG::Feature::Ruby::MergeGem::Feature }
|
49
|
+
|
50
|
+
if @merge_gem_reqs.length > 0
|
51
|
+
reqs = @merge_gem_reqs.map { |req| Bundler::DepProxy.new(req, Gem::Platform::RUBY) }
|
52
|
+
|
53
|
+
source = Bundler::Source::Rubygems.new
|
54
|
+
index = Bundler::Index.build { |index| index.use source.specs }
|
55
|
+
|
56
|
+
spec_set = Bundler::Resolver.resolve(reqs, index)
|
57
|
+
|
58
|
+
spec_set.to_a.each do |spec|
|
59
|
+
@features << IronWorkerNG::Feature::Ruby::MergeGem::Feature.new(spec.__materialize__)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def self.included(base)
|
65
|
+
IronWorkerNG::Code::Base.register_feature(:name => 'merge_gem', :for_klass => base, :args => 'NAME[,VERSION]')
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'bundler'
|
2
|
+
|
3
|
+
module IronWorkerNG
|
4
|
+
module Feature
|
5
|
+
module Ruby
|
6
|
+
module MergeGemfile
|
7
|
+
class Feature < IronWorkerNG::Feature::Base
|
8
|
+
attr_reader :path
|
9
|
+
attr_reader :groups
|
10
|
+
|
11
|
+
def initialize(path, groups)
|
12
|
+
@path = File.expand_path(path)
|
13
|
+
@groups = groups
|
14
|
+
end
|
15
|
+
|
16
|
+
def hash_string
|
17
|
+
Digest::MD5.hexdigest(@path + File.mtime(@path).to_i.to_s + (File.exists?(@path + '.lock') ? File.mtime(@path + '.lock').to_i.to_s : '') + @groups.join)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
module InstanceMethods
|
22
|
+
def merge_gemfile(path, *groups)
|
23
|
+
groups = groups.map { |g| g.to_sym }
|
24
|
+
groups << :default if groups.length == 0
|
25
|
+
|
26
|
+
specs = Bundler::Definition.build(path, path + '.lock', nil).specs_for(groups)
|
27
|
+
|
28
|
+
specs.each do |spec|
|
29
|
+
merge_gem(spec.name, spec.version.to_s)
|
30
|
+
end
|
31
|
+
|
32
|
+
@features << IronWorkerNG::Feature::Ruby::MergeGemfile::Feature.new(path, groups)
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.included(base)
|
36
|
+
IronWorkerNG::Code::Base.register_feature(:name => 'merge_gemfile', :for_klass => base, :args => 'PATH[,GROUP...]')
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module IronWorkerNG
|
2
|
+
module Feature
|
3
|
+
module Ruby
|
4
|
+
module MergeWorker
|
5
|
+
class Feature < IronWorkerNG::Feature::Base
|
6
|
+
attr_reader :path
|
7
|
+
attr_reader :klass
|
8
|
+
|
9
|
+
def initialize(path, klass)
|
10
|
+
@path = File.expand_path(path)
|
11
|
+
@klass = klass
|
12
|
+
end
|
13
|
+
|
14
|
+
def hash_string
|
15
|
+
Digest::MD5.hexdigest(@path + @klass)
|
16
|
+
end
|
17
|
+
|
18
|
+
def bundle(zip)
|
19
|
+
zip.add('./' + File.basename(@path), @path)
|
20
|
+
end
|
21
|
+
|
22
|
+
def code_for_init
|
23
|
+
"worker_file_name = '#{File.basename(@path)}'\nworker_class_name='#{@klass}'"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
module InstanceMethods
|
28
|
+
attr_reader :worker
|
29
|
+
|
30
|
+
def merge_worker(path, klass = nil)
|
31
|
+
@worker ||= nil
|
32
|
+
|
33
|
+
return unless @worker.nil?
|
34
|
+
|
35
|
+
if klass == nil
|
36
|
+
klass = File.basename(path).gsub(/\.rb$/, '').capitalize.gsub(/_./) { |x| x[1].upcase }
|
37
|
+
end
|
38
|
+
|
39
|
+
@name ||= klass
|
40
|
+
|
41
|
+
@worker = IronWorkerNG::Feature::Ruby::MergeWorker::Feature.new(path, klass)
|
42
|
+
@features << @worker
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.included(base)
|
46
|
+
IronWorkerNG::Code::Base.register_feature(:name => 'merge_worker', :for_klass => base, :args => 'PATH[,CLASS]')
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
metadata
ADDED
@@ -0,0 +1,139 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: iron_worker_ng
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Andrew Kirilenko
|
9
|
+
- Iron.io, Inc
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2012-02-23 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: zip
|
17
|
+
requirement: &79402670 !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ! '>='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '0'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: *79402670
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: rest-client
|
28
|
+
requirement: &79402330 !ruby/object:Gem::Requirement
|
29
|
+
none: false
|
30
|
+
requirements:
|
31
|
+
- - ! '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: *79402330
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: rest
|
39
|
+
requirement: &79401930 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ! '>='
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: '0'
|
45
|
+
type: :runtime
|
46
|
+
prerelease: false
|
47
|
+
version_requirements: *79401930
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: json
|
50
|
+
requirement: &79401450 !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - ! '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
type: :runtime
|
57
|
+
prerelease: false
|
58
|
+
version_requirements: *79401450
|
59
|
+
- !ruby/object:Gem::Dependency
|
60
|
+
name: bundler
|
61
|
+
requirement: &79401140 !ruby/object:Gem::Requirement
|
62
|
+
none: false
|
63
|
+
requirements:
|
64
|
+
- - ~>
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: 1.0.0
|
67
|
+
type: :runtime
|
68
|
+
prerelease: false
|
69
|
+
version_requirements: *79401140
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: jeweler
|
72
|
+
requirement: &79400870 !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 1.8.3
|
78
|
+
type: :development
|
79
|
+
prerelease: false
|
80
|
+
version_requirements: *79400870
|
81
|
+
description: New generation ruby client for IronWorker
|
82
|
+
email: info@iron.io
|
83
|
+
executables:
|
84
|
+
- iron_worker_ng
|
85
|
+
extensions: []
|
86
|
+
extra_rdoc_files:
|
87
|
+
- LICENSE
|
88
|
+
- README.md
|
89
|
+
files:
|
90
|
+
- LICENSE
|
91
|
+
- README.md
|
92
|
+
- VERSION
|
93
|
+
- bin/iron_worker_ng
|
94
|
+
- lib/iron_worker_ng.rb
|
95
|
+
- lib/iron_worker_ng/api_client.rb
|
96
|
+
- lib/iron_worker_ng/api_client_error.rb
|
97
|
+
- lib/iron_worker_ng/client.rb
|
98
|
+
- lib/iron_worker_ng/code/base.rb
|
99
|
+
- lib/iron_worker_ng/code/java.rb
|
100
|
+
- lib/iron_worker_ng/code/node.rb
|
101
|
+
- lib/iron_worker_ng/code/ruby.rb
|
102
|
+
- lib/iron_worker_ng/feature/base.rb
|
103
|
+
- lib/iron_worker_ng/feature/common/merge_dir.rb
|
104
|
+
- lib/iron_worker_ng/feature/common/merge_file.rb
|
105
|
+
- lib/iron_worker_ng/feature/java/merge_jar.rb
|
106
|
+
- lib/iron_worker_ng/feature/java/merge_worker.rb
|
107
|
+
- lib/iron_worker_ng/feature/node/merge_worker.rb
|
108
|
+
- lib/iron_worker_ng/feature/ruby/merge_gem.rb
|
109
|
+
- lib/iron_worker_ng/feature/ruby/merge_gemfile.rb
|
110
|
+
- lib/iron_worker_ng/feature/ruby/merge_worker.rb
|
111
|
+
- lib/iron_worker_ng/version.rb
|
112
|
+
homepage: http://www.iron.io
|
113
|
+
licenses: []
|
114
|
+
post_install_message:
|
115
|
+
rdoc_options: []
|
116
|
+
require_paths:
|
117
|
+
- lib
|
118
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
119
|
+
none: false
|
120
|
+
requirements:
|
121
|
+
- - ! '>='
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: '0'
|
124
|
+
segments:
|
125
|
+
- 0
|
126
|
+
hash: 745459379
|
127
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
128
|
+
none: false
|
129
|
+
requirements:
|
130
|
+
- - ! '>='
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: '0'
|
133
|
+
requirements: []
|
134
|
+
rubyforge_project:
|
135
|
+
rubygems_version: 1.8.15
|
136
|
+
signing_key:
|
137
|
+
specification_version: 3
|
138
|
+
summary: New generation ruby client for IronWorker
|
139
|
+
test_files: []
|