shelly 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/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
+