shelly 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/lib/shelly/app.rb CHANGED
@@ -207,6 +207,14 @@ module Shelly
207
207
  attributes["mail_server_ip"]
208
208
  end
209
209
 
210
+ def git_info
211
+ attributes["git_info"]
212
+ end
213
+
214
+ def state
215
+ attributes["state"]
216
+ end
217
+
210
218
  def self.inside_git_repository?
211
219
  system("git status > /dev/null 2>&1")
212
220
  end
@@ -222,5 +230,9 @@ module Shelly
222
230
  def open
223
231
  Launchy.open("http://#{attributes["domain"]}")
224
232
  end
233
+
234
+ def console
235
+ shelly.console(code_name)
236
+ end
225
237
  end
226
238
  end
@@ -16,7 +16,7 @@ module Shelly
16
16
  check_unknown_options!(:except => :rake)
17
17
 
18
18
  # FIXME: it should be possible to pass single symbol, instead of one element array
19
- before_hook :logged_in?, :only => [:add, :status, :list, :start, :stop, :logs, :delete, :ip, :logout, :execute, :rake, :setup]
19
+ before_hook :logged_in?, :only => [:add, :status, :list, :start, :stop, :logs, :delete, :info, :ip, :logout, :execute, :rake, :setup, :console]
20
20
  before_hook :inside_git_repository?, :only => [:add, :setup]
21
21
 
22
22
  map %w(-v --version) => :version
@@ -132,13 +132,23 @@ module Shelly
132
132
  end
133
133
 
134
134
  map "status" => :list
135
+ map "ip" => :info
135
136
  method_option :cloud, :type => :string, :aliases => "-c", :desc => "Specify cloud"
136
- desc "ip", "List cloud's IP addresses"
137
- def ip
138
- app = multiple_clouds(options[:cloud], "ip")
139
- web_server_ip = app.web_server_ip
140
- say "Cloud #{app}:", :green
141
- print_wrapped "Web server IP: #{web_server_ip}", :ident => 2
137
+ desc "info", "Show basic information about cloud"
138
+ def info
139
+ app = multiple_clouds(options[:cloud], "info")
140
+ msg = if app.state == "deploy_failed" || app.state == "configuration_failed"
141
+ " (deployment log: `shelly deploys show last -c #{app}`)"
142
+ end
143
+ say "Cloud #{app}:", msg.present? ? :red : :green
144
+ print_wrapped "State: #{app.state}#{msg}", :ident => 2
145
+ say_new_line
146
+ print_wrapped "Deployed commit sha: #{app.git_info["deployed_commit_sha"]}", :ident => 2
147
+ print_wrapped "Deployed commit message: #{app.git_info["deployed_commit_message"]}", :ident => 2
148
+ print_wrapped "Deployed by: #{app.git_info["deployed_push_author"]}", :ident => 2
149
+ say_new_line
150
+ print_wrapped "Repository URL: #{app.git_info["repository_url"]}", :ident => 2
151
+ print_wrapped "Web server IP: #{app.web_server_ip}", :ident => 2
142
152
  print_wrapped "Mail server IP: #{app.mail_server_ip}", :ident => 2
143
153
  rescue Client::NotFoundException => e
144
154
  raise unless e.resource == :cloud
@@ -333,6 +343,19 @@ We have been notified about it. We will be adding new resources shortly}
333
343
  app.open
334
344
  end
335
345
 
346
+ desc "console", "Open application console"
347
+ method_option :cloud, :type => :string, :aliases => "-c", :desc => "Specify cloud"
348
+ def console
349
+ app = multiple_clouds(options[:cloud], "console")
350
+ console = app.console
351
+ exec "ssh -o StrictHostKeyChecking=no -p #{console['port']} -l #{console['user']} #{console['node_ip']}"
352
+ rescue Client::NotFoundException => e
353
+ raise unless e.resource == :cloud
354
+ say_error "You have no access to '#{app}' cloud defined in Cloudfile"
355
+ rescue Client::APIException => e
356
+ say_error "Cloud #{app} is not running. Cannot run console."
357
+ end
358
+
336
359
  # FIXME: move to helpers
337
360
  no_tasks do
338
361
  # Returns valid arguments for rake, removes shelly gem arguments
data/lib/shelly/client.rb CHANGED
@@ -124,6 +124,10 @@ module Shelly
124
124
  post("/apps/#{cloud}/command", {:body => body, :type => type})
125
125
  end
126
126
 
127
+ def console(code_name)
128
+ get("/apps/#{code_name}/console")
129
+ end
130
+
127
131
  def deploy_logs(cloud)
128
132
  get("/apps/#{cloud}/deployment_logs")
129
133
  end
@@ -1,3 +1,3 @@
1
1
  module Shelly
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
data/shelly.gemspec CHANGED
@@ -28,7 +28,7 @@ Gem::Specification.new do |s|
28
28
  s.add_runtime_dependency "json"
29
29
  s.add_runtime_dependency "progressbar"
30
30
  s.add_runtime_dependency "launchy"
31
- s.add_runtime_dependency "shelly-dependencies", "~> 0.1.0"
31
+ s.add_runtime_dependency "shelly-dependencies", "~> 0.1.1"
32
32
 
33
33
  s.files = `git ls-files`.split("\n")
34
34
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
@@ -134,7 +134,14 @@ describe Shelly::App do
134
134
 
135
135
  describe "#attributes" do
136
136
  before do
137
- @response = {"web_server_ip" => "192.0.2.1", "mail_server_ip" => "192.0.2.3"}
137
+ @response = {"web_server_ip" => "192.0.2.1",
138
+ "mail_server_ip" => "192.0.2.3",
139
+ "state" => "running",
140
+ "git_info" => {
141
+ "deployed_commit_message" => "Commit message",
142
+ "deployed_commit_sha" => "52e65ed2d085eaae560cdb81b2b56a7d76",
143
+ "repository_url" => "git@winniecloud.net:example-cloud",
144
+ "deployed_push_author" => "megan@example.com"}}
138
145
  @client.stub(:app).and_return(@response)
139
146
  end
140
147
 
@@ -154,6 +161,22 @@ describe Shelly::App do
154
161
  @app.mail_server_ip.should == "192.0.2.3"
155
162
  end
156
163
  end
164
+
165
+ describe "#state" do
166
+ it "should return state of cloud" do
167
+ @app.state.should == "running"
168
+ end
169
+ end
170
+
171
+ describe "#git_info" do
172
+ it "should return git info" do
173
+ @app.git_info.should == {
174
+ "deployed_commit_message" => "Commit message",
175
+ "deployed_commit_sha" => "52e65ed2d085eaae560cdb81b2b56a7d76",
176
+ "repository_url" => "git@winniecloud.net:example-cloud",
177
+ "deployed_push_author" => "megan@example.com"}
178
+ end
179
+ end
157
180
  end
158
181
 
159
182
  describe "#generate_cloudfile" do
@@ -382,4 +405,11 @@ config
382
405
  @app.open
383
406
  end
384
407
  end
408
+
409
+ describe "#console" do
410
+ it "should fetch instance data from Api" do
411
+ @client.should_receive(:console).with("foo-staging")
412
+ @app.console
413
+ end
414
+ end
385
415
  end
@@ -27,11 +27,12 @@ Tasks:
27
27
  shelly add # Add a new cloud
28
28
  shelly backup <command> # Manage database backups
29
29
  shelly config <command> # Manage application configuration files
30
+ shelly console # Open application console
30
31
  shelly delete # Delete the cloud
31
32
  shelly deploys <command> # View deploy logs
32
33
  shelly execute CODE # Run code on one of application servers
33
34
  shelly help [TASK] # Describe available tasks or one specific task
34
- shelly ip # List cloud's IP addresses
35
+ shelly info # Show basic information about cloud
35
36
  shelly list # List available clouds
36
37
  shelly login [EMAIL] # Log into Shelly Cloud
37
38
  shelly logout # Logout from Shelly Cloud
@@ -739,37 +740,67 @@ We have been notified about it. We will be adding new resources shortly")
739
740
 
740
741
  end
741
742
 
742
- describe "#ip" do
743
+ describe "#info" do
743
744
  before do
744
745
  File.open("Cloudfile", 'w') { |f| f.write("foo-production:\n") }
745
- @app = Shelly::App.new("foo-staging")
746
+ @app = Shelly::App.new("foo-production")
746
747
  @main.stub(:logged_in?).and_return(true)
748
+ @app.stub(:attributes).and_return(response)
747
749
  end
748
750
 
749
751
  it "should ensure user has logged in" do
750
- hooks(@main, :ip).should include(:logged_in?)
752
+ hooks(@main, :info).should include(:logged_in?)
751
753
  end
752
754
 
753
755
  # multiple_clouds is tested in main_spec.rb in describe "#start" block
754
756
  it "should ensure multiple_clouds check" do
755
- @app.should_receive(:web_server_ip).and_return("11.11")
756
- @app.should_receive(:mail_server_ip).and_return("22.22")
757
757
  @main.should_receive(:multiple_clouds).and_return(@app)
758
- invoke(@main, :ip)
758
+ invoke(@main, :info)
759
759
  end
760
760
 
761
761
  context "on success" do
762
- it "should display mail and web server ip's" do
763
- @client.stub(:app).and_return(response)
764
- $stdout.should_receive(:puts).with("\e[32mCloud foo-production:\e[0m")
762
+ it "should display basic information about cloud" do
763
+ @main.should_receive(:multiple_clouds).and_return(@app)
764
+ $stdout.should_receive(:puts).with(green "Cloud foo-production:")
765
+ $stdout.should_receive(:puts).with(" State: running")
766
+ $stdout.should_receive(:puts).with(" Deployed commit sha: 52e65ed2d085eaae560cdb81b2b56a7d76")
767
+ $stdout.should_receive(:puts).with(" Deployed commit message: Commit message")
768
+ $stdout.should_receive(:puts).with(" Deployed by: megan@example.com")
769
+ $stdout.should_receive(:puts).with(" Repository URL: git@winniecloud.net:example-cloud")
765
770
  $stdout.should_receive(:puts).with(" Web server IP: 22.22.22.22")
766
771
  $stdout.should_receive(:puts).with(" Mail server IP: 11.11.11.11")
767
- invoke(@main, :ip)
768
- end
769
- end
772
+ invoke(@main, :info)
773
+ end
774
+
775
+ context "when deploy failed or configuration failed" do
776
+ it "should display basic information about information and command to last log" do
777
+ @app.stub(:attributes).and_return(response({"state" => "deploy_failed"}))
778
+ @main.should_receive(:multiple_clouds).and_return(@app)
779
+ $stdout.should_receive(:puts).with(red "Cloud foo-production:")
780
+ $stdout.should_receive(:puts).with(" State: deploy_failed (deployment log: `shelly deploys show last -c foo-production`)")
781
+ $stdout.should_receive(:puts).with(" Deployed commit sha: 52e65ed2d085eaae560cdb81b2b56a7d76")
782
+ $stdout.should_receive(:puts).with(" Deployed commit message: Commit message")
783
+ $stdout.should_receive(:puts).with(" Deployed by: megan@example.com")
784
+ $stdout.should_receive(:puts).with(" Repository URL: git@winniecloud.net:example-cloud")
785
+ $stdout.should_receive(:puts).with(" Web server IP: 22.22.22.22")
786
+ $stdout.should_receive(:puts).with(" Mail server IP: 11.11.11.11")
787
+ invoke(@main, :info)
788
+ end
770
789
 
771
- def response
772
- {'mail_server_ip' => '11.11.11.11', 'web_server_ip' => '22.22.22.22'}
790
+ it "should display basic information about information and command to last log" do
791
+ @app.stub(:attributes).and_return(response({"state" => "configuration_failed"}))
792
+ @main.should_receive(:multiple_clouds).and_return(@app)
793
+ $stdout.should_receive(:puts).with(red "Cloud foo-production:")
794
+ $stdout.should_receive(:puts).with(" State: configuration_failed (deployment log: `shelly deploys show last -c foo-production`)")
795
+ $stdout.should_receive(:puts).with(" Deployed commit sha: 52e65ed2d085eaae560cdb81b2b56a7d76")
796
+ $stdout.should_receive(:puts).with(" Deployed commit message: Commit message")
797
+ $stdout.should_receive(:puts).with(" Deployed by: megan@example.com")
798
+ $stdout.should_receive(:puts).with(" Repository URL: git@winniecloud.net:example-cloud")
799
+ $stdout.should_receive(:puts).with(" Web server IP: 22.22.22.22")
800
+ $stdout.should_receive(:puts).with(" Mail server IP: 11.11.11.11")
801
+ invoke(@main, :info)
802
+ end
803
+ end
773
804
  end
774
805
 
775
806
  context "on failure" do
@@ -780,6 +811,20 @@ We have been notified about it. We will be adding new resources shortly")
780
811
  lambda { invoke(@main, :ip) }.should raise_error(SystemExit)
781
812
  end
782
813
  end
814
+
815
+ def response(options = {})
816
+ { "code_name" => "foo-production",
817
+ "state" => "running",
818
+ "git_info" =>
819
+ {
820
+ "deployed_commit_message" => "Commit message",
821
+ "deployed_commit_sha" => "52e65ed2d085eaae560cdb81b2b56a7d76",
822
+ "repository_url" => "git@winniecloud.net:example-cloud",
823
+ "deployed_push_author" => "megan@example.com"
824
+ },
825
+ "mail_server_ip" => "11.11.11.11",
826
+ "web_server_ip" => "22.22.22.22" }.merge(options)
827
+ end
783
828
  end
784
829
 
785
830
  describe "#setup" do
@@ -1278,4 +1323,41 @@ We have been notified about it. We will be adding new resources shortly")
1278
1323
  invoke(@main, :open)
1279
1324
  end
1280
1325
  end
1326
+
1327
+ describe "#console" do
1328
+ before do
1329
+ @user = Shelly::User.new
1330
+ @client.stub(:token).and_return("abc")
1331
+ @app = Shelly::App.new("foo-production")
1332
+ @app.stub(:open)
1333
+ Shelly::App.stub(:new).and_return(@app)
1334
+ FileUtils.mkdir_p("/projects/foo")
1335
+ Dir.chdir("/projects/foo")
1336
+ File.open("Cloudfile", 'w') { |f| f.write("foo-production:\n") }
1337
+ end
1338
+
1339
+ it "execute ssh command" do
1340
+ expected = {"port" => "40010", "node_ip" => "10.0.0.10", "user"=>"foo-production"}
1341
+ @client.stub(:console).and_return(expected)
1342
+ @main.should_receive(:exec).with("ssh -o StrictHostKeyChecking=no -p 40010 -l foo-production 10.0.0.10")
1343
+ invoke(@main, :console)
1344
+ end
1345
+
1346
+ it "should exit if user doesn't have access to clouds in Cloudfile" do
1347
+ exception = Shelly::Client::NotFoundException.new("resource" => "cloud")
1348
+ @client.stub(:console).and_raise(exception)
1349
+ $stdout.should_receive(:puts).with(red "You have no access to 'foo-production' cloud defined in Cloudfile")
1350
+ lambda { invoke(@main, :console) }.should raise_error(SystemExit)
1351
+ end
1352
+
1353
+ context "Instances are not running" do
1354
+ it "should display error" do
1355
+ @client.stub(:console).and_raise(Shelly::Client::APIException)
1356
+ $stdout.should_receive(:puts).with(red "Cloud foo-production is not running. Cannot run console.")
1357
+ lambda {
1358
+ invoke(@main, :console)
1359
+ }.should raise_error(SystemExit)
1360
+ end
1361
+ end
1362
+ end
1281
1363
  end
@@ -199,6 +199,16 @@ describe Shelly::Client do
199
199
  end
200
200
  end
201
201
 
202
+ describe "#console" do
203
+ it "should fetch instance data from API" do
204
+ body = {:port => "40010", :node_ip => "10.0.0.10", :user => "foo-production"}
205
+ FakeWeb.register_uri(:get, api_url("apps/staging-foo/console"),
206
+ :body => body.to_json)
207
+ response = @client.console("staging-foo")
208
+ response.should == {"port" => "40010", "node_ip" => "10.0.0.10", "user"=>"foo-production"}
209
+ end
210
+ end
211
+
202
212
  describe "#send_invitation" do
203
213
  it "should send post with developer's email" do
204
214
  FakeWeb.register_uri(:post, api_url("apps/staging-foo/collaborations"), :body => {}.to_json)
metadata CHANGED
@@ -1,264 +1,220 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: shelly
3
- version: !ruby/object:Gem::Version
4
- version: 0.1.0
3
+ version: !ruby/object:Gem::Version
4
+ hash: 25
5
5
  prerelease:
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 1
10
+ version: 0.1.1
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - Shelly Cloud team
9
14
  autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
- date: 2012-04-24 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: rspec
16
- requirement: !ruby/object:Gem::Requirement
17
+
18
+ date: 2012-04-24 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ version_requirements: &id001 !ruby/object:Gem::Requirement
17
22
  none: false
18
- requirements:
23
+ requirements:
19
24
  - - ~>
20
- - !ruby/object:Gem::Version
25
+ - !ruby/object:Gem::Version
26
+ hash: 47
27
+ segments:
28
+ - 2
29
+ - 8
30
+ - 0
21
31
  version: 2.8.0
22
- type: :development
32
+ requirement: *id001
23
33
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
34
+ type: :development
35
+ name: rspec
36
+ - !ruby/object:Gem::Dependency
37
+ version_requirements: &id002 !ruby/object:Gem::Requirement
25
38
  none: false
26
- requirements:
27
- - - ~>
28
- - !ruby/object:Gem::Version
29
- version: 2.8.0
30
- - !ruby/object:Gem::Dependency
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ hash: 3
43
+ segments:
44
+ - 0
45
+ version: "0"
46
+ requirement: *id002
47
+ prerelease: false
48
+ type: :development
31
49
  name: rake
32
- requirement: !ruby/object:Gem::Requirement
50
+ - !ruby/object:Gem::Dependency
51
+ version_requirements: &id003 !ruby/object:Gem::Requirement
33
52
  none: false
34
- requirements:
35
- - - ! '>='
36
- - !ruby/object:Gem::Version
37
- version: '0'
38
- type: :development
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ hash: 3
57
+ segments:
58
+ - 0
59
+ version: "0"
60
+ requirement: *id003
39
61
  prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
45
- version: '0'
46
- - !ruby/object:Gem::Dependency
62
+ type: :development
47
63
  name: guard
48
- requirement: !ruby/object:Gem::Requirement
64
+ - !ruby/object:Gem::Dependency
65
+ version_requirements: &id004 !ruby/object:Gem::Requirement
49
66
  none: false
50
- requirements:
51
- - - ! '>='
52
- - !ruby/object:Gem::Version
53
- version: '0'
54
- type: :development
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ hash: 3
71
+ segments:
72
+ - 0
73
+ version: "0"
74
+ requirement: *id004
55
75
  prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ! '>='
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- - !ruby/object:Gem::Dependency
76
+ type: :development
63
77
  name: guard-rspec
64
- requirement: !ruby/object:Gem::Requirement
78
+ - !ruby/object:Gem::Dependency
79
+ version_requirements: &id005 !ruby/object:Gem::Requirement
65
80
  none: false
66
- requirements:
67
- - - ! '>='
68
- - !ruby/object:Gem::Version
69
- version: '0'
70
- type: :development
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ hash: 3
85
+ segments:
86
+ - 0
87
+ version: "0"
88
+ requirement: *id005
71
89
  prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ! '>='
76
- - !ruby/object:Gem::Version
77
- version: '0'
78
- - !ruby/object:Gem::Dependency
79
- name: simplecov
80
- requirement: !ruby/object:Gem::Requirement
81
- none: false
82
- requirements:
83
- - - ! '>='
84
- - !ruby/object:Gem::Version
85
- version: '0'
86
90
  type: :development
87
- prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
91
- - - ! '>='
92
- - !ruby/object:Gem::Version
93
- version: '0'
94
- - !ruby/object:Gem::Dependency
95
- name: ruby_gntp
96
- requirement: !ruby/object:Gem::Requirement
91
+ name: simplecov
92
+ - !ruby/object:Gem::Dependency
93
+ version_requirements: &id006 !ruby/object:Gem::Requirement
97
94
  none: false
98
- requirements:
99
- - - ! '>='
100
- - !ruby/object:Gem::Version
101
- version: '0'
102
- type: :development
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ hash: 3
99
+ segments:
100
+ - 0
101
+ version: "0"
102
+ requirement: *id006
103
103
  prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
- requirements:
107
- - - ! '>='
108
- - !ruby/object:Gem::Version
109
- version: '0'
110
- - !ruby/object:Gem::Dependency
111
- name: rb-fsevent
112
- requirement: !ruby/object:Gem::Requirement
113
- none: false
114
- requirements:
115
- - - ! '>='
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
104
  type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
- requirements:
123
- - - ! '>='
124
- - !ruby/object:Gem::Version
125
- version: '0'
126
- - !ruby/object:Gem::Dependency
127
105
  name: fakefs
128
- requirement: !ruby/object:Gem::Requirement
106
+ - !ruby/object:Gem::Dependency
107
+ version_requirements: &id007 !ruby/object:Gem::Requirement
129
108
  none: false
130
- requirements:
131
- - - ! '>='
132
- - !ruby/object:Gem::Version
133
- version: '0'
134
- type: :development
109
+ requirements:
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ hash: 3
113
+ segments:
114
+ - 0
115
+ version: "0"
116
+ requirement: *id007
135
117
  prerelease: false
136
- version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
- requirements:
139
- - - ! '>='
140
- - !ruby/object:Gem::Version
141
- version: '0'
142
- - !ruby/object:Gem::Dependency
143
- name: fakeweb
144
- requirement: !ruby/object:Gem::Requirement
145
- none: false
146
- requirements:
147
- - - ! '>='
148
- - !ruby/object:Gem::Version
149
- version: '0'
150
118
  type: :development
151
- prerelease: false
152
- version_requirements: !ruby/object:Gem::Requirement
153
- none: false
154
- requirements:
155
- - - ! '>='
156
- - !ruby/object:Gem::Version
157
- version: '0'
158
- - !ruby/object:Gem::Dependency
159
- name: wijet-thor
160
- requirement: !ruby/object:Gem::Requirement
119
+ name: fakeweb
120
+ - !ruby/object:Gem::Dependency
121
+ version_requirements: &id008 !ruby/object:Gem::Requirement
161
122
  none: false
162
- requirements:
123
+ requirements:
163
124
  - - ~>
164
- - !ruby/object:Gem::Version
125
+ - !ruby/object:Gem::Version
126
+ hash: 41
127
+ segments:
128
+ - 0
129
+ - 14
130
+ - 7
165
131
  version: 0.14.7
166
- type: :runtime
132
+ requirement: *id008
167
133
  prerelease: false
168
- version_requirements: !ruby/object:Gem::Requirement
134
+ type: :runtime
135
+ name: wijet-thor
136
+ - !ruby/object:Gem::Dependency
137
+ version_requirements: &id009 !ruby/object:Gem::Requirement
169
138
  none: false
170
- requirements:
171
- - - ~>
172
- - !ruby/object:Gem::Version
173
- version: 0.14.7
174
- - !ruby/object:Gem::Dependency
139
+ requirements:
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ hash: 3
143
+ segments:
144
+ - 0
145
+ version: "0"
146
+ requirement: *id009
147
+ prerelease: false
148
+ type: :runtime
175
149
  name: rest-client
176
- requirement: !ruby/object:Gem::Requirement
150
+ - !ruby/object:Gem::Dependency
151
+ version_requirements: &id010 !ruby/object:Gem::Requirement
177
152
  none: false
178
- requirements:
179
- - - ! '>='
180
- - !ruby/object:Gem::Version
181
- version: '0'
182
- type: :runtime
153
+ requirements:
154
+ - - ">="
155
+ - !ruby/object:Gem::Version
156
+ hash: 3
157
+ segments:
158
+ - 0
159
+ version: "0"
160
+ requirement: *id010
183
161
  prerelease: false
184
- version_requirements: !ruby/object:Gem::Requirement
185
- none: false
186
- requirements:
187
- - - ! '>='
188
- - !ruby/object:Gem::Version
189
- version: '0'
190
- - !ruby/object:Gem::Dependency
162
+ type: :runtime
191
163
  name: json
192
- requirement: !ruby/object:Gem::Requirement
164
+ - !ruby/object:Gem::Dependency
165
+ version_requirements: &id011 !ruby/object:Gem::Requirement
193
166
  none: false
194
- requirements:
195
- - - ! '>='
196
- - !ruby/object:Gem::Version
197
- version: '0'
198
- type: :runtime
167
+ requirements:
168
+ - - ">="
169
+ - !ruby/object:Gem::Version
170
+ hash: 3
171
+ segments:
172
+ - 0
173
+ version: "0"
174
+ requirement: *id011
199
175
  prerelease: false
200
- version_requirements: !ruby/object:Gem::Requirement
201
- none: false
202
- requirements:
203
- - - ! '>='
204
- - !ruby/object:Gem::Version
205
- version: '0'
206
- - !ruby/object:Gem::Dependency
176
+ type: :runtime
207
177
  name: progressbar
208
- requirement: !ruby/object:Gem::Requirement
178
+ - !ruby/object:Gem::Dependency
179
+ version_requirements: &id012 !ruby/object:Gem::Requirement
209
180
  none: false
210
- requirements:
211
- - - ! '>='
212
- - !ruby/object:Gem::Version
213
- version: '0'
214
- type: :runtime
181
+ requirements:
182
+ - - ">="
183
+ - !ruby/object:Gem::Version
184
+ hash: 3
185
+ segments:
186
+ - 0
187
+ version: "0"
188
+ requirement: *id012
215
189
  prerelease: false
216
- version_requirements: !ruby/object:Gem::Requirement
217
- none: false
218
- requirements:
219
- - - ! '>='
220
- - !ruby/object:Gem::Version
221
- version: '0'
222
- - !ruby/object:Gem::Dependency
223
- name: launchy
224
- requirement: !ruby/object:Gem::Requirement
225
- none: false
226
- requirements:
227
- - - ! '>='
228
- - !ruby/object:Gem::Version
229
- version: '0'
230
190
  type: :runtime
231
- prerelease: false
232
- version_requirements: !ruby/object:Gem::Requirement
233
- none: false
234
- requirements:
235
- - - ! '>='
236
- - !ruby/object:Gem::Version
237
- version: '0'
238
- - !ruby/object:Gem::Dependency
239
- name: shelly-dependencies
240
- requirement: !ruby/object:Gem::Requirement
191
+ name: launchy
192
+ - !ruby/object:Gem::Dependency
193
+ version_requirements: &id013 !ruby/object:Gem::Requirement
241
194
  none: false
242
- requirements:
195
+ requirements:
243
196
  - - ~>
244
- - !ruby/object:Gem::Version
245
- version: 0.1.0
246
- type: :runtime
197
+ - !ruby/object:Gem::Version
198
+ hash: 25
199
+ segments:
200
+ - 0
201
+ - 1
202
+ - 1
203
+ version: 0.1.1
204
+ requirement: *id013
247
205
  prerelease: false
248
- version_requirements: !ruby/object:Gem::Requirement
249
- none: false
250
- requirements:
251
- - - ~>
252
- - !ruby/object:Gem::Version
253
- version: 0.1.0
206
+ type: :runtime
207
+ name: shelly-dependencies
254
208
  description: Tool for managing applications and clouds at shellycloud.com
255
- email:
209
+ email:
256
210
  - support@shellycloud.com
257
- executables:
211
+ executables:
258
212
  - shelly
259
213
  extensions: []
214
+
260
215
  extra_rdoc_files: []
261
- files:
216
+
217
+ files:
262
218
  - .gitignore
263
219
  - .travis.yml
264
220
  - Gemfile
@@ -311,49 +267,36 @@ files:
311
267
  - spec/thor/options_spec.rb
312
268
  homepage: http://shellycloud.com
313
269
  licenses: []
270
+
314
271
  post_install_message:
315
272
  rdoc_options: []
316
- require_paths:
273
+
274
+ require_paths:
317
275
  - lib
318
- required_ruby_version: !ruby/object:Gem::Requirement
276
+ required_ruby_version: !ruby/object:Gem::Requirement
319
277
  none: false
320
- requirements:
321
- - - ! '>='
322
- - !ruby/object:Gem::Version
323
- version: '0'
324
- segments:
278
+ requirements:
279
+ - - ">="
280
+ - !ruby/object:Gem::Version
281
+ hash: 3
282
+ segments:
325
283
  - 0
326
- hash: -3064116673417660281
327
- required_rubygems_version: !ruby/object:Gem::Requirement
284
+ version: "0"
285
+ required_rubygems_version: !ruby/object:Gem::Requirement
328
286
  none: false
329
- requirements:
330
- - - ! '>='
331
- - !ruby/object:Gem::Version
332
- version: '0'
333
- segments:
287
+ requirements:
288
+ - - ">="
289
+ - !ruby/object:Gem::Version
290
+ hash: 3
291
+ segments:
334
292
  - 0
335
- hash: -3064116673417660281
293
+ version: "0"
336
294
  requirements: []
295
+
337
296
  rubyforge_project: shelly
338
- rubygems_version: 1.8.23
297
+ rubygems_version: 1.8.10
339
298
  signing_key:
340
299
  specification_version: 3
341
300
  summary: Shelly Cloud command line tool
342
- test_files:
343
- - spec/helpers.rb
344
- - spec/input_faker.rb
345
- - spec/shelly/app_spec.rb
346
- - spec/shelly/backup_spec.rb
347
- - spec/shelly/cli/backup_spec.rb
348
- - spec/shelly/cli/config_spec.rb
349
- - spec/shelly/cli/deploys_spec.rb
350
- - spec/shelly/cli/main_spec.rb
351
- - spec/shelly/cli/runner_spec.rb
352
- - spec/shelly/cli/user_spec.rb
353
- - spec/shelly/client_spec.rb
354
- - spec/shelly/cloudfile_spec.rb
355
- - spec/shelly/download_progress_bar_spec.rb
356
- - spec/shelly/model_spec.rb
357
- - spec/shelly/user_spec.rb
358
- - spec/spec_helper.rb
359
- - spec/thor/options_spec.rb
301
+ test_files: []
302
+