af 0.3.18.4 → 0.3.18.5
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/cli/commands/apps.rb +81 -1
- data/lib/cli/commands/services.rb +25 -5
- data/lib/cli/runner.rb +21 -0
- data/lib/cli/services_helper.rb +13 -0
- data/lib/cli/tunnel_helper.rb +4 -1
- data/lib/cli/usage.rb +5 -1
- data/lib/cli/version.rb +1 -1
- data/lib/vmc/client.rb +24 -1
- data/lib/vmc/const.rb +4 -0
- metadata +86 -27
data/lib/cli/commands/apps.rb
CHANGED
@@ -208,6 +208,14 @@ module VMC::Cli::Command
|
|
208
208
|
rescue VMC::Client::NotFound, VMC::Client::TargetError
|
209
209
|
err 'No such file or directory'
|
210
210
|
end
|
211
|
+
|
212
|
+
def download(appname, path=nil)
|
213
|
+
path = File.expand_path(path || "#{appname}.zip" )
|
214
|
+
banner = "Downloading last pushed source code to #{path}: "
|
215
|
+
display banner, false
|
216
|
+
client.app_download(appname, path)
|
217
|
+
display 'OK'.green
|
218
|
+
end
|
211
219
|
|
212
220
|
def pull(appname, path=nil)
|
213
221
|
path = File.expand_path(path || appname)
|
@@ -217,6 +225,78 @@ module VMC::Cli::Command
|
|
217
225
|
display 'OK'.green
|
218
226
|
end
|
219
227
|
|
228
|
+
def clone(src_appname, dest_appname, dest_infra=nil)
|
229
|
+
|
230
|
+
# FIXME need to ask for dest_appname if nil
|
231
|
+
|
232
|
+
err "Application '#{dest_appname}' already exists" if app_exists?(dest_appname)
|
233
|
+
|
234
|
+
app = client.app_info(src_appname)
|
235
|
+
|
236
|
+
if client.infra_supported?
|
237
|
+
dest_infra = @options[:infra] || client.infra_name_for_description(
|
238
|
+
ask("Select Infrastructure",:indexed => true, :choices => client.infra_descriptions))
|
239
|
+
client.infra = dest_infra
|
240
|
+
end
|
241
|
+
|
242
|
+
url_template = "#{dest_appname}.${target-base}"
|
243
|
+
url_resolved = url_template.dup
|
244
|
+
resolve_lexically(url_resolved)
|
245
|
+
|
246
|
+
url = @options[:url] || ask("Application Deployed URL", :default => url_resolved)
|
247
|
+
|
248
|
+
Dir.mktmpdir do |dir|
|
249
|
+
zip_path = File.join(dir,src_appname)
|
250
|
+
pull(src_appname,zip_path)
|
251
|
+
|
252
|
+
display "Cloning '#{src_appname}' to '#{dest_appname}': "
|
253
|
+
|
254
|
+
manifest = {
|
255
|
+
:name => "#{dest_appname}",
|
256
|
+
:staging => app[:staging],
|
257
|
+
:uris => [ url ],
|
258
|
+
:instances => app[:instances],
|
259
|
+
:resources => app[:resources]
|
260
|
+
}
|
261
|
+
manifest[:staging][:command] = app[:staging][:command] if app[:staging][:command]
|
262
|
+
manifest[:infra] = { :provider => dest_infra } if dest_infra
|
263
|
+
|
264
|
+
client.create_app(dest_appname, manifest)
|
265
|
+
|
266
|
+
# Stage and upload the app bits.
|
267
|
+
upload_app_bits(dest_appname, zip_path, dest_infra)
|
268
|
+
|
269
|
+
# Clone services
|
270
|
+
client.services.select { |s| app[:services].include?(s[:name])}.each do |service|
|
271
|
+
display "Exporting data from #{service[:name]}: ", false
|
272
|
+
export_info = client.export_service(service[:name])
|
273
|
+
if export_info
|
274
|
+
display 'OK'.green
|
275
|
+
else
|
276
|
+
err "Export data from '#{service}': failed"
|
277
|
+
end
|
278
|
+
cloned_service_name = generate_cloned_service_name(src_appname,dest_appname,service[:name],dest_infra)
|
279
|
+
display "Creating service #{cloned_service_name}: ", false
|
280
|
+
client.create_service(dest_infra, service[:vendor], cloned_service_name)
|
281
|
+
display 'OK'.green
|
282
|
+
display "Binding service #{cloned_service_name}: ", false
|
283
|
+
client.bind_service(cloned_service_name, dest_appname)
|
284
|
+
display 'OK'.green
|
285
|
+
display "Importing data to #{cloned_service_name}: ", false
|
286
|
+
import_info = client.import_service(cloned_service_name,export_info[:uri])
|
287
|
+
if import_info
|
288
|
+
display 'OK'.green
|
289
|
+
else
|
290
|
+
err "Import data into '#{service}' failed"
|
291
|
+
end
|
292
|
+
end
|
293
|
+
|
294
|
+
no_start = @options[:nostart]
|
295
|
+
start(dest_appname, true) unless no_start
|
296
|
+
|
297
|
+
end
|
298
|
+
end
|
299
|
+
|
220
300
|
def logs(appname)
|
221
301
|
# Check if we have an app before progressing further
|
222
302
|
client.app_info(appname)
|
@@ -946,7 +1026,7 @@ module VMC::Cli::Command
|
|
946
1026
|
runtime = info(:runtime)
|
947
1027
|
infra = info(:infra)
|
948
1028
|
|
949
|
-
if infra
|
1029
|
+
if client.infra_supported? && infra
|
950
1030
|
err "Infra '#{infra}' is not valid" unless client.infra_valid?(infra)
|
951
1031
|
end
|
952
1032
|
|
@@ -93,7 +93,28 @@ module VMC::Cli::Command
|
|
93
93
|
services.each { |service| bind_service_banner(service, dest_app, false) }
|
94
94
|
check_app_for_restart(dest_app)
|
95
95
|
end
|
96
|
-
|
96
|
+
|
97
|
+
def export_service(service)
|
98
|
+
display "Exporting data from '#{service}': ", false
|
99
|
+
export_info = client.export_service(service)
|
100
|
+
if export_info
|
101
|
+
display 'OK'.green
|
102
|
+
puts export_info[:uri]
|
103
|
+
else
|
104
|
+
err "Export data from '#{service}': failed"
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def import_service(service,url)
|
109
|
+
display "Importing data into '#{service}': ", false
|
110
|
+
import_info = client.import_service(service,url)
|
111
|
+
if import_info
|
112
|
+
display 'OK'.green
|
113
|
+
else
|
114
|
+
err "Import data into '#{service}' failed"
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
97
118
|
def tunnel(service=nil, client_name=nil)
|
98
119
|
unless defined? Caldecott
|
99
120
|
display "To use `af tunnel', you must first install Caldecott:"
|
@@ -128,12 +149,11 @@ module VMC::Cli::Command
|
|
128
149
|
|
129
150
|
raise VMC::Client::AuthError unless client.logged_in?
|
130
151
|
|
131
|
-
infra_name =
|
132
|
-
|
133
|
-
|
152
|
+
infra_name = nil
|
153
|
+
if client.infra_supported?
|
154
|
+
infra_name = info[:infra] ? info[:infra][:name] : default_infra
|
134
155
|
err "Infra '#{infra_name}' is not valid" unless client.infra_valid?(infra_name)
|
135
156
|
end
|
136
|
-
|
137
157
|
|
138
158
|
if not tunnel_pushed?(infra_name)
|
139
159
|
display "Deploying tunnel application '#{tunnel_appname(infra_name)}'."
|
data/lib/cli/runner.rb
CHANGED
@@ -286,6 +286,14 @@ class VMC::Cli::Runner
|
|
286
286
|
set_cmd(:apps, :files, 2)
|
287
287
|
end
|
288
288
|
|
289
|
+
when 'download'
|
290
|
+
usage('af download <appname> [path]')
|
291
|
+
if @args.size == 1
|
292
|
+
set_cmd(:apps, :download, 1)
|
293
|
+
else
|
294
|
+
set_cmd(:apps, :download, 2)
|
295
|
+
end
|
296
|
+
|
289
297
|
when 'pull'
|
290
298
|
usage('af pull <appname> [path]')
|
291
299
|
if @args.size == 1
|
@@ -374,6 +382,19 @@ class VMC::Cli::Runner
|
|
374
382
|
usage('af clone-services <src-app> <dest-app>')
|
375
383
|
set_cmd(:services, :clone_services, 2)
|
376
384
|
|
385
|
+
when 'export-service'
|
386
|
+
usage('af export-service <service-name>')
|
387
|
+
set_cmd(:services, :export_service, 1)
|
388
|
+
|
389
|
+
when 'import-service'
|
390
|
+
usage('af import-service <service-name> <url>')
|
391
|
+
set_cmd(:services, :import_service, 2)
|
392
|
+
|
393
|
+
when 'clone'
|
394
|
+
usage('af clone <src-app> <dest-app> [<infra>]')
|
395
|
+
set_cmd(:apps, :clone, 2) if @args.size == 2
|
396
|
+
set_cmd(:apps, :clone, 3) if @args.size == 3
|
397
|
+
|
377
398
|
when 'aliases'
|
378
399
|
usage('af aliases')
|
379
400
|
set_cmd(:misc, :aliases)
|
data/lib/cli/services_helper.rb
CHANGED
@@ -80,6 +80,19 @@ module VMC::Cli
|
|
80
80
|
r = "%04x" % [rand(0x0100000)]
|
81
81
|
"#{service.to_s}-#{r}"
|
82
82
|
end
|
83
|
+
|
84
|
+
def generate_cloned_service_name(src_appname,dest_appname,src_servicename,dest_infra)
|
85
|
+
r = "%04x" % [rand(0x0100000)]
|
86
|
+
dest_servicename = src_servicename.sub(src_appname,dest_appname).sub(/-\h{4,5}/,"-#{r}")
|
87
|
+
if src_servicename == dest_servicename
|
88
|
+
if dest_infra
|
89
|
+
dest_servicename = "#{dest_servicename}-#{dest_infra}"
|
90
|
+
else
|
91
|
+
dest_servicename = "#{dest_servicename}-#{r}"
|
92
|
+
end
|
93
|
+
end
|
94
|
+
dest_servicename
|
95
|
+
end
|
83
96
|
|
84
97
|
def check_app_for_restart(appname)
|
85
98
|
app = client.app_info(appname)
|
data/lib/cli/tunnel_helper.rb
CHANGED
@@ -101,7 +101,10 @@ module VMC::Cli
|
|
101
101
|
begin
|
102
102
|
response = RestClient.get(tunnel_url(infra) + "/" + VMC::Client.path("services", service), "Auth-Token" => token)
|
103
103
|
break
|
104
|
-
rescue RestClient::Exception
|
104
|
+
rescue RestClient::Exception => e
|
105
|
+
puts "Error infra: #{infra}, url: #{tunnel_url(infra)}"
|
106
|
+
display tunnel_url(infra)
|
107
|
+
puts e.message.red
|
105
108
|
sleep 1
|
106
109
|
end
|
107
110
|
|
data/lib/cli/usage.rb
CHANGED
@@ -48,6 +48,7 @@ Currently available af commands are:
|
|
48
48
|
stop <appname> Stop the application
|
49
49
|
restart <appname> [--debug [MODE]] Restart the application
|
50
50
|
delete <appname> Delete the application
|
51
|
+
clone <src-app> <dest-app> [infra] Clone the application and services
|
51
52
|
|
52
53
|
Application Updates
|
53
54
|
update <appname> [--path,--debug [MODE]] Update the application bits
|
@@ -66,6 +67,7 @@ Currently available af commands are:
|
|
66
67
|
|
67
68
|
Application Download
|
68
69
|
pull <appname> [path] Downloads last pushed source to <appname> or [path]
|
70
|
+
download <appname> [path] Downloads last pushed source to zipfile
|
69
71
|
|
70
72
|
Application Environment
|
71
73
|
env <appname> List application environment variables
|
@@ -75,13 +77,15 @@ Currently available af commands are:
|
|
75
77
|
Services
|
76
78
|
services Lists of services available and provisioned
|
77
79
|
create-service <service> [--name,--bind] Create a provisioned service
|
78
|
-
create-service <service> --infra
|
80
|
+
create-service <service> --infra Create a provisioned service on a specified infrastructure
|
79
81
|
create-service <service> <name> Create a provisioned service and assign it <name>
|
80
82
|
create-service <service> <name> <app> Create a provisioned service and assign it <name>, and bind to <app>
|
81
83
|
delete-service [servicename] Delete a provisioned service
|
82
84
|
bind-service <servicename> <appname> Bind a service to an application
|
83
85
|
unbind-service <servicename> <appname> Unbind service from the application
|
84
86
|
clone-services <src-app> <dest-app> Clone service bindings from <src-app> application to <dest-app>
|
87
|
+
export-service <service> Export the data from a service
|
88
|
+
import-service <service> <url> Import data into a service
|
85
89
|
tunnel <servicename> [--port] Create a local tunnel to a service
|
86
90
|
tunnel <servicename> <clientcmd> Create a local tunnel to a service and start a local client
|
87
91
|
|
data/lib/cli/version.rb
CHANGED
data/lib/vmc/client.rb
CHANGED
@@ -159,11 +159,21 @@ class VMC::Client
|
|
159
159
|
body
|
160
160
|
end
|
161
161
|
|
162
|
+
def app_download(name,path)
|
163
|
+
check_login_status
|
164
|
+
url = path(VMC::APPS_PATH, name, "application")
|
165
|
+
status, body, headers = http_get(url,'application/octet-stream')
|
166
|
+
file = File.new(path,"wb")
|
167
|
+
file.write(body)
|
168
|
+
file.close
|
169
|
+
end
|
170
|
+
|
162
171
|
def app_pull(name, dir)
|
163
172
|
check_login_status
|
164
173
|
url = path(VMC::APPS_PATH, name, "application")
|
165
174
|
status, body, headers = http_get(url,'application/octet-stream')
|
166
175
|
file = Tempfile.new(name)
|
176
|
+
file.binmode
|
167
177
|
file.write(body)
|
168
178
|
file.close
|
169
179
|
::VMC::Cli::ZipUtil.unpack(file.path, dir)
|
@@ -237,6 +247,14 @@ class VMC::Client
|
|
237
247
|
app[:services] = services
|
238
248
|
update_app(appname, app)
|
239
249
|
end
|
250
|
+
|
251
|
+
def export_service(service)
|
252
|
+
json_get(path(VMC::SERVICE_EXPORT_PATH, service))
|
253
|
+
end
|
254
|
+
|
255
|
+
def import_service(service,uri)
|
256
|
+
json_post(path(VMC::SERVICE_IMPORT_PATH, service),{uri:uri})
|
257
|
+
end
|
240
258
|
|
241
259
|
######################################################
|
242
260
|
# Resources
|
@@ -360,9 +378,14 @@ class VMC::Client
|
|
360
378
|
|
361
379
|
def base_for_infra(name)
|
362
380
|
info = infras.detect { |i| i[:infra] == name }
|
363
|
-
info ? info[:base] :
|
381
|
+
info ? info[:base] : default_base
|
364
382
|
end
|
365
383
|
|
384
|
+
def default_base
|
385
|
+
return "vcap.me" if @target =~ /https?:\/\/api.vcap.me/
|
386
|
+
"aws.af.cm"
|
387
|
+
end
|
388
|
+
|
366
389
|
def infra_valid?(name)
|
367
390
|
infras.detect { |i| i[:infra] == name }
|
368
391
|
end
|
data/lib/vmc/const.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: af
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.18.
|
4
|
+
version: 0.3.18.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,12 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
13
|
-
default_executable:
|
12
|
+
date: 2012-09-19 00:00:00.000000000 Z
|
14
13
|
dependencies:
|
15
14
|
- !ruby/object:Gem::Dependency
|
16
15
|
name: json_pure
|
17
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
18
17
|
none: false
|
19
18
|
requirements:
|
20
19
|
- - ! '>='
|
@@ -25,10 +24,18 @@ dependencies:
|
|
25
24
|
version: 1.7.0
|
26
25
|
type: :runtime
|
27
26
|
prerelease: false
|
28
|
-
version_requirements:
|
27
|
+
version_requirements: !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 1.5.1
|
33
|
+
- - <
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: 1.7.0
|
29
36
|
- !ruby/object:Gem::Dependency
|
30
37
|
name: rubyzip
|
31
|
-
requirement:
|
38
|
+
requirement: !ruby/object:Gem::Requirement
|
32
39
|
none: false
|
33
40
|
requirements:
|
34
41
|
- - ~>
|
@@ -36,10 +43,15 @@ dependencies:
|
|
36
43
|
version: 0.9.4
|
37
44
|
type: :runtime
|
38
45
|
prerelease: false
|
39
|
-
version_requirements:
|
46
|
+
version_requirements: !ruby/object:Gem::Requirement
|
47
|
+
none: false
|
48
|
+
requirements:
|
49
|
+
- - ~>
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
version: 0.9.4
|
40
52
|
- !ruby/object:Gem::Dependency
|
41
53
|
name: rest-client
|
42
|
-
requirement:
|
54
|
+
requirement: !ruby/object:Gem::Requirement
|
43
55
|
none: false
|
44
56
|
requirements:
|
45
57
|
- - ! '>='
|
@@ -50,10 +62,18 @@ dependencies:
|
|
50
62
|
version: 1.7.0
|
51
63
|
type: :runtime
|
52
64
|
prerelease: false
|
53
|
-
version_requirements:
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
67
|
+
requirements:
|
68
|
+
- - ! '>='
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: 1.6.1
|
71
|
+
- - <
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: 1.7.0
|
54
74
|
- !ruby/object:Gem::Dependency
|
55
75
|
name: terminal-table
|
56
|
-
requirement:
|
76
|
+
requirement: !ruby/object:Gem::Requirement
|
57
77
|
none: false
|
58
78
|
requirements:
|
59
79
|
- - ~>
|
@@ -61,10 +81,15 @@ dependencies:
|
|
61
81
|
version: 1.4.2
|
62
82
|
type: :runtime
|
63
83
|
prerelease: false
|
64
|
-
version_requirements:
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
none: false
|
86
|
+
requirements:
|
87
|
+
- - ~>
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 1.4.2
|
65
90
|
- !ruby/object:Gem::Dependency
|
66
91
|
name: interact
|
67
|
-
requirement:
|
92
|
+
requirement: !ruby/object:Gem::Requirement
|
68
93
|
none: false
|
69
94
|
requirements:
|
70
95
|
- - ~>
|
@@ -72,10 +97,15 @@ dependencies:
|
|
72
97
|
version: 0.4.0
|
73
98
|
type: :runtime
|
74
99
|
prerelease: false
|
75
|
-
version_requirements:
|
100
|
+
version_requirements: !ruby/object:Gem::Requirement
|
101
|
+
none: false
|
102
|
+
requirements:
|
103
|
+
- - ~>
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: 0.4.0
|
76
106
|
- !ruby/object:Gem::Dependency
|
77
107
|
name: addressable
|
78
|
-
requirement:
|
108
|
+
requirement: !ruby/object:Gem::Requirement
|
79
109
|
none: false
|
80
110
|
requirements:
|
81
111
|
- - ~>
|
@@ -83,10 +113,15 @@ dependencies:
|
|
83
113
|
version: 2.2.6
|
84
114
|
type: :runtime
|
85
115
|
prerelease: false
|
86
|
-
version_requirements:
|
116
|
+
version_requirements: !ruby/object:Gem::Requirement
|
117
|
+
none: false
|
118
|
+
requirements:
|
119
|
+
- - ~>
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
version: 2.2.6
|
87
122
|
- !ruby/object:Gem::Dependency
|
88
123
|
name: uuidtools
|
89
|
-
requirement:
|
124
|
+
requirement: !ruby/object:Gem::Requirement
|
90
125
|
none: false
|
91
126
|
requirements:
|
92
127
|
- - ~>
|
@@ -94,10 +129,15 @@ dependencies:
|
|
94
129
|
version: 2.1.0
|
95
130
|
type: :runtime
|
96
131
|
prerelease: false
|
97
|
-
version_requirements:
|
132
|
+
version_requirements: !ruby/object:Gem::Requirement
|
133
|
+
none: false
|
134
|
+
requirements:
|
135
|
+
- - ~>
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
version: 2.1.0
|
98
138
|
- !ruby/object:Gem::Dependency
|
99
139
|
name: rb-readline
|
100
|
-
requirement:
|
140
|
+
requirement: !ruby/object:Gem::Requirement
|
101
141
|
none: false
|
102
142
|
requirements:
|
103
143
|
- - ~>
|
@@ -105,10 +145,15 @@ dependencies:
|
|
105
145
|
version: 0.4.2
|
106
146
|
type: :runtime
|
107
147
|
prerelease: false
|
108
|
-
version_requirements:
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
none: false
|
150
|
+
requirements:
|
151
|
+
- - ~>
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: 0.4.2
|
109
154
|
- !ruby/object:Gem::Dependency
|
110
155
|
name: rake
|
111
|
-
requirement:
|
156
|
+
requirement: !ruby/object:Gem::Requirement
|
112
157
|
none: false
|
113
158
|
requirements:
|
114
159
|
- - ! '>='
|
@@ -116,10 +161,15 @@ dependencies:
|
|
116
161
|
version: '0'
|
117
162
|
type: :development
|
118
163
|
prerelease: false
|
119
|
-
version_requirements:
|
164
|
+
version_requirements: !ruby/object:Gem::Requirement
|
165
|
+
none: false
|
166
|
+
requirements:
|
167
|
+
- - ! '>='
|
168
|
+
- !ruby/object:Gem::Version
|
169
|
+
version: '0'
|
120
170
|
- !ruby/object:Gem::Dependency
|
121
171
|
name: rspec
|
122
|
-
requirement:
|
172
|
+
requirement: !ruby/object:Gem::Requirement
|
123
173
|
none: false
|
124
174
|
requirements:
|
125
175
|
- - ~>
|
@@ -127,10 +177,15 @@ dependencies:
|
|
127
177
|
version: 1.3.0
|
128
178
|
type: :development
|
129
179
|
prerelease: false
|
130
|
-
version_requirements:
|
180
|
+
version_requirements: !ruby/object:Gem::Requirement
|
181
|
+
none: false
|
182
|
+
requirements:
|
183
|
+
- - ~>
|
184
|
+
- !ruby/object:Gem::Version
|
185
|
+
version: 1.3.0
|
131
186
|
- !ruby/object:Gem::Dependency
|
132
187
|
name: webmock
|
133
|
-
requirement:
|
188
|
+
requirement: !ruby/object:Gem::Requirement
|
134
189
|
none: false
|
135
190
|
requirements:
|
136
191
|
- - ~>
|
@@ -138,7 +193,12 @@ dependencies:
|
|
138
193
|
version: 1.5.0
|
139
194
|
type: :development
|
140
195
|
prerelease: false
|
141
|
-
version_requirements:
|
196
|
+
version_requirements: !ruby/object:Gem::Requirement
|
197
|
+
none: false
|
198
|
+
requirements:
|
199
|
+
- - ~>
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: 1.5.0
|
142
202
|
description: AppFog.com CLI
|
143
203
|
email: support@appfog.com
|
144
204
|
executables:
|
@@ -190,7 +250,6 @@ files:
|
|
190
250
|
- caldecott_helper/Gemfile.lock
|
191
251
|
- caldecott_helper/server.rb
|
192
252
|
- bin/af
|
193
|
-
has_rdoc: true
|
194
253
|
homepage: http://appfog.com
|
195
254
|
licenses: []
|
196
255
|
post_install_message:
|
@@ -211,7 +270,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
211
270
|
version: '0'
|
212
271
|
requirements: []
|
213
272
|
rubyforge_project:
|
214
|
-
rubygems_version: 1.
|
273
|
+
rubygems_version: 1.8.24
|
215
274
|
signing_key:
|
216
275
|
specification_version: 3
|
217
276
|
summary: AppFog.com CLI
|