shelly 0.0.37 → 0.0.38

Sign up to get free protection for your applications and to get access to all the features.
@@ -3,6 +3,7 @@ require "shelly/cli/runner"
3
3
 
4
4
  describe Shelly::CLI::Runner do
5
5
  before do
6
+ ENV['SHELLY_DEBUG'] = "false"
6
7
  @runner = Shelly::CLI::Runner.new(%w(version --debug))
7
8
  end
8
9
 
@@ -21,8 +22,15 @@ describe Shelly::CLI::Runner do
21
22
  it "should be true if args include --debug option" do
22
23
  @runner.should be_debug
23
24
  end
25
+
26
+ it "should be true if SHELLY_DEBUG is set to true" do
27
+ runner = Shelly::CLI::Runner.new
28
+ runner.should_not be_debug
29
+ ENV['SHELLY_DEBUG'] = "true"
30
+ runner.should be_debug
31
+ end
24
32
 
25
- it "should be failse if args doesn't include --debug option" do
33
+ it "should be false if args doesn't include --debug option" do
26
34
  runner = Shelly::CLI::Runner.new(%w(version))
27
35
  runner.should_not be_debug
28
36
  end
@@ -5,11 +5,13 @@ describe Shelly::CLI::User do
5
5
  before do
6
6
  FileUtils.stub(:chmod)
7
7
  @cli_user = Shelly::CLI::User.new
8
+ Shelly::CLI::User.stub(:new).and_return(@cli_user)
8
9
  @client = mock
9
10
  Shelly::Client.stub(:new).and_return(@client)
10
11
  Shelly::User.stub(:guess_email).and_return("")
11
12
  $stdout.stub(:puts)
12
13
  $stdout.stub(:print)
14
+ @client.stub(:token).and_return("abc")
13
15
  end
14
16
 
15
17
  describe "#help" do
@@ -17,7 +19,7 @@ describe Shelly::CLI::User do
17
19
  $stdout.should_receive(:puts).with("Tasks:")
18
20
  $stdout.should_receive(:puts).with(/add \[EMAIL\]\s+# Add new developer to clouds defined in Cloudfile/)
19
21
  $stdout.should_receive(:puts).with(/list\s+# List users with access to clouds defined in Cloudfile/)
20
- @cli_user.help
22
+ invoke(@cli_user, :help)
21
23
  end
22
24
  end
23
25
 
@@ -35,7 +37,7 @@ describe Shelly::CLI::User do
35
37
  Shelly::App.stub(:inside_git_repository?).and_return(false)
36
38
  $stdout.should_receive(:puts).with("\e[31mMust be run inside your project git repository\e[0m")
37
39
  lambda {
38
- @cli_user.list
40
+ invoke(@cli_user, :list)
39
41
  }.should raise_error(SystemExit)
40
42
  end
41
43
 
@@ -43,7 +45,18 @@ describe Shelly::CLI::User do
43
45
  File.delete("Cloudfile")
44
46
  $stdout.should_receive(:puts).with("\e[31mNo Cloudfile found\e[0m")
45
47
  lambda {
46
- @cli_user.list
48
+ invoke(@cli_user, :list)
49
+ }.should raise_error(SystemExit)
50
+ end
51
+
52
+ it "should exit if user is not logged in" do
53
+ response = {"message" => "Unauthorized", "url" => "https://admin.winniecloud.com/users/password/new"}
54
+ exception = Shelly::Client::APIError.new(response.to_json, 404)
55
+ @client.stub(:token).and_raise(exception)
56
+ $stdout.should_receive(:puts).with(red "You are not logged in. To log in use:")
57
+ $stdout.should_receive(:puts).with(" shelly login")
58
+ lambda {
59
+ invoke(@cli_user, :list)
47
60
  }.should raise_error(SystemExit)
48
61
  end
49
62
 
@@ -51,14 +64,14 @@ describe Shelly::CLI::User do
51
64
  it "should receive clouds from the Cloudfile" do
52
65
  @client.stub(:app_users).and_return(response)
53
66
  @cloudfile.should_receive(:clouds).and_return(["foo-staging", "foo-production"])
54
- @cli_user.list
67
+ invoke(@cli_user, :list)
55
68
  end
56
69
 
57
70
  it "should display clouds and users" do
58
71
  @client.stub(:app_users).and_return(response)
59
72
  $stdout.should_receive(:puts).with("Cloud foo-production:")
60
73
  $stdout.should_receive(:puts).with(" user@example.com")
61
- @cli_user.list
74
+ invoke(@cli_user, :list)
62
75
  end
63
76
  end
64
77
 
@@ -72,7 +85,7 @@ describe Shelly::CLI::User do
72
85
  exception = Shelly::Client::APIError.new(response.to_json, 404)
73
86
  @client.stub(:app_users).and_raise(exception)
74
87
  $stdout.should_receive(:puts).with(red "You have no access to 'foo-staging' cloud defined in Cloudfile")
75
- @cli_user.list
88
+ invoke(@cli_user, :list)
76
89
  end
77
90
  end
78
91
  end
@@ -93,7 +106,7 @@ describe Shelly::CLI::User do
93
106
  File.delete("Cloudfile")
94
107
  $stdout.should_receive(:puts).with("\e[31mNo Cloudfile found\e[0m")
95
108
  lambda {
96
- @cli_user.add
109
+ invoke(@cli_user, :add)
97
110
  }.should raise_error(SystemExit)
98
111
  end
99
112
 
@@ -101,7 +114,7 @@ describe Shelly::CLI::User do
101
114
  Shelly::App.stub(:inside_git_repository?).and_return(false)
102
115
  $stdout.should_receive(:puts).with("\e[31mMust be run inside your project git repository\e[0m")
103
116
  lambda {
104
- @cli_user.add
117
+ invoke(@cli_user, :add)
105
118
  }.should raise_error(SystemExit)
106
119
  end
107
120
 
@@ -113,17 +126,17 @@ describe Shelly::CLI::User do
113
126
 
114
127
  it "should ask about email" do
115
128
  fake_stdin(["megan@example.com"]) do
116
- @cli_user.add
129
+ invoke(@cli_user, :add)
117
130
  end
118
131
  end
119
132
 
120
133
  it "should receive clouds from the Cloudfile" do
121
- @cli_user.add("megan@example.com")
134
+ invoke(@cli_user, :add, "megan@example.com")
122
135
  end
123
136
 
124
137
  it "should receive clouds from the Cloudfile" do
125
138
  $stdout.should_receive(:puts).with("\e[32mSending invitation to megan@example.com to work on foo-production\e[0m")
126
- @cli_user.add("megan@example.com")
139
+ invoke(@cli_user, :add, "megan@example.com")
127
140
  end
128
141
  end
129
142
 
@@ -133,7 +146,7 @@ describe Shelly::CLI::User do
133
146
  exception = Shelly::Client::APIError.new(response.to_json, 404)
134
147
  @client.stub(:send_invitation).and_raise(exception)
135
148
  $stdout.should_receive(:puts).with(red "You have no access to 'foo-staging' cloud defined in Cloudfile")
136
- @cli_user.add("megan@example.com")
149
+ invoke(@cli_user, :add, "megan@example.com")
137
150
  end
138
151
  end
139
152
  end
@@ -167,12 +167,13 @@ describe Shelly::Client do
167
167
  response.should == [{"email" => "test@example.com"}, {"email" => "test2@example.com"}]
168
168
  end
169
169
  end
170
-
171
- describe "#app_ips" do
172
- it "should send get request with app code_name" do
173
- FakeWeb.register_uri(:get, api_url("apps/staging-foo/ips"), :body => {:mail_server_ip => "10.0.1.1", :web_server_ip => "88.198.21.187"}.to_json)
174
- response = @client.app_ips("staging-foo")
175
- response.should == {"mail_server_ip" => "10.0.1.1", "web_server_ip" => "88.198.21.187"}
170
+
171
+ describe "#app" do
172
+ it "should fetch app from API" do
173
+ FakeWeb.register_uri(:get, api_url("apps/staging-foo"),
174
+ :body => {:web_server_ip => "192.0.2.1", :mail_server_ip => "192.0.2.3"}.to_json)
175
+ response = @client.app("staging-foo")
176
+ response.should == {"web_server_ip" => "192.0.2.1", "mail_server_ip" => "192.0.2.3"}
176
177
  end
177
178
  end
178
179
 
@@ -22,4 +22,15 @@ describe Shelly::Cloudfile do
22
22
  end
23
23
  end
24
24
 
25
+ it "should allow improper yaml that works with syck" do
26
+ yaml = %Q{domains:
27
+ - *.example.com
28
+ - example.com
29
+ }
30
+ expect {
31
+ yaml = YAML.load(yaml)
32
+ }.to_not raise_error
33
+ yaml.should == {"domains" => ["*.example.com", "example.com"]}
34
+ end
35
+
25
36
  end
metadata CHANGED
@@ -1,188 +1,167 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: shelly
3
- version: !ruby/object:Gem::Version
4
- hash: 85
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.38
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 0
9
- - 37
10
- version: 0.0.37
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Shelly Cloud team
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-12-27 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2011-12-30 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: rspec
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &70097785241300 !ruby/object:Gem::Requirement
24
17
  none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 3
29
- segments:
30
- - 0
31
- version: "0"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
32
22
  type: :development
33
- version_requirements: *id001
34
- - !ruby/object:Gem::Dependency
35
- name: rake
36
23
  prerelease: false
37
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: *70097785241300
25
+ - !ruby/object:Gem::Dependency
26
+ name: rake
27
+ requirement: &70097785240660 !ruby/object:Gem::Requirement
38
28
  none: false
39
- requirements:
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- hash: 3
43
- segments:
44
- - 0
45
- version: "0"
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
46
33
  type: :development
47
- version_requirements: *id002
48
- - !ruby/object:Gem::Dependency
49
- name: guard
50
34
  prerelease: false
51
- requirement: &id003 !ruby/object:Gem::Requirement
35
+ version_requirements: *70097785240660
36
+ - !ruby/object:Gem::Dependency
37
+ name: guard
38
+ requirement: &70097785239600 !ruby/object:Gem::Requirement
52
39
  none: false
53
- requirements:
54
- - - ">="
55
- - !ruby/object:Gem::Version
56
- hash: 3
57
- segments:
58
- - 0
59
- version: "0"
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
60
44
  type: :development
61
- version_requirements: *id003
62
- - !ruby/object:Gem::Dependency
45
+ prerelease: false
46
+ version_requirements: *70097785239600
47
+ - !ruby/object:Gem::Dependency
63
48
  name: guard-rspec
49
+ requirement: &70097785238660 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :development
64
56
  prerelease: false
65
- requirement: &id004 !ruby/object:Gem::Requirement
57
+ version_requirements: *70097785238660
58
+ - !ruby/object:Gem::Dependency
59
+ name: growl_notify
60
+ requirement: &70097785238000 !ruby/object:Gem::Requirement
66
61
  none: false
67
- requirements:
68
- - - ">="
69
- - !ruby/object:Gem::Version
70
- hash: 3
71
- segments:
72
- - 0
73
- version: "0"
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
74
66
  type: :development
75
- version_requirements: *id004
76
- - !ruby/object:Gem::Dependency
77
- name: fakefs
78
67
  prerelease: false
79
- requirement: &id005 !ruby/object:Gem::Requirement
68
+ version_requirements: *70097785238000
69
+ - !ruby/object:Gem::Dependency
70
+ name: rb-fsevent
71
+ requirement: &70097785237460 !ruby/object:Gem::Requirement
80
72
  none: false
81
- requirements:
82
- - - ">="
83
- - !ruby/object:Gem::Version
84
- hash: 3
85
- segments:
86
- - 0
87
- version: "0"
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *70097785237460
80
+ - !ruby/object:Gem::Dependency
81
+ name: fakefs
82
+ requirement: &70097785236940 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
88
  type: :development
89
- version_requirements: *id005
90
- - !ruby/object:Gem::Dependency
91
- name: fakeweb
92
89
  prerelease: false
93
- requirement: &id006 !ruby/object:Gem::Requirement
90
+ version_requirements: *70097785236940
91
+ - !ruby/object:Gem::Dependency
92
+ name: fakeweb
93
+ requirement: &70097785236460 !ruby/object:Gem::Requirement
94
94
  none: false
95
- requirements:
96
- - - ">="
97
- - !ruby/object:Gem::Version
98
- hash: 3
99
- segments:
100
- - 0
101
- version: "0"
95
+ requirements:
96
+ - - ! '>='
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
102
99
  type: :development
103
- version_requirements: *id006
104
- - !ruby/object:Gem::Dependency
105
- name: wijet-thor
106
100
  prerelease: false
107
- requirement: &id007 !ruby/object:Gem::Requirement
101
+ version_requirements: *70097785236460
102
+ - !ruby/object:Gem::Dependency
103
+ name: wijet-thor
104
+ requirement: &70097785235820 !ruby/object:Gem::Requirement
108
105
  none: false
109
- requirements:
106
+ requirements:
110
107
  - - ~>
111
- - !ruby/object:Gem::Version
112
- hash: 41
113
- segments:
114
- - 0
115
- - 14
116
- - 7
108
+ - !ruby/object:Gem::Version
117
109
  version: 0.14.7
118
110
  type: :runtime
119
- version_requirements: *id007
120
- - !ruby/object:Gem::Dependency
121
- name: rest-client
122
111
  prerelease: false
123
- requirement: &id008 !ruby/object:Gem::Requirement
112
+ version_requirements: *70097785235820
113
+ - !ruby/object:Gem::Dependency
114
+ name: rest-client
115
+ requirement: &70097785235340 !ruby/object:Gem::Requirement
124
116
  none: false
125
- requirements:
126
- - - ">="
127
- - !ruby/object:Gem::Version
128
- hash: 3
129
- segments:
130
- - 0
131
- version: "0"
117
+ requirements:
118
+ - - ! '>='
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
132
121
  type: :runtime
133
- version_requirements: *id008
134
- - !ruby/object:Gem::Dependency
135
- name: json
136
122
  prerelease: false
137
- requirement: &id009 !ruby/object:Gem::Requirement
123
+ version_requirements: *70097785235340
124
+ - !ruby/object:Gem::Dependency
125
+ name: json
126
+ requirement: &70097785234800 !ruby/object:Gem::Requirement
138
127
  none: false
139
- requirements:
140
- - - ">="
141
- - !ruby/object:Gem::Version
142
- hash: 3
143
- segments:
144
- - 0
145
- version: "0"
128
+ requirements:
129
+ - - ! '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
146
132
  type: :runtime
147
- version_requirements: *id009
148
- - !ruby/object:Gem::Dependency
149
- name: wijet-launchy
150
133
  prerelease: false
151
- requirement: &id010 !ruby/object:Gem::Requirement
134
+ version_requirements: *70097785234800
135
+ - !ruby/object:Gem::Dependency
136
+ name: wijet-launchy
137
+ requirement: &70097785234140 !ruby/object:Gem::Requirement
152
138
  none: false
153
- requirements:
154
- - - ">="
155
- - !ruby/object:Gem::Version
156
- hash: 3
157
- segments:
158
- - 0
159
- version: "0"
139
+ requirements:
140
+ - - ! '>='
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
160
143
  type: :runtime
161
- version_requirements: *id010
162
- - !ruby/object:Gem::Dependency
163
- name: progressbar
164
144
  prerelease: false
165
- requirement: &id011 !ruby/object:Gem::Requirement
145
+ version_requirements: *70097785234140
146
+ - !ruby/object:Gem::Dependency
147
+ name: progressbar
148
+ requirement: &70097785233260 !ruby/object:Gem::Requirement
166
149
  none: false
167
- requirements:
168
- - - ">="
169
- - !ruby/object:Gem::Version
170
- hash: 3
171
- segments:
172
- - 0
173
- version: "0"
150
+ requirements:
151
+ - - ! '>='
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
174
154
  type: :runtime
175
- version_requirements: *id011
155
+ prerelease: false
156
+ version_requirements: *70097785233260
176
157
  description: Tool for managing applications and clouds at shellycloud.com
177
- email:
158
+ email:
178
159
  - support@shellycloud.com
179
- executables:
160
+ executables:
180
161
  - shelly
181
162
  extensions: []
182
-
183
163
  extra_rdoc_files: []
184
-
185
- files:
164
+ files:
186
165
  - .gitignore
187
166
  - .travis.yml
188
167
  - Gemfile
@@ -213,6 +192,7 @@ files:
213
192
  - lib/thor/arguments.rb
214
193
  - lib/thor/basic.rb
215
194
  - lib/thor/options.rb
195
+ - lib/thor/thor.rb
216
196
  - shelly.gemspec
217
197
  - spec/helpers.rb
218
198
  - spec/input_faker.rb
@@ -233,36 +213,49 @@ files:
233
213
  - spec/thor/options_spec.rb
234
214
  homepage: http://shellycloud.com
235
215
  licenses: []
236
-
237
216
  post_install_message:
238
217
  rdoc_options: []
239
-
240
- require_paths:
218
+ require_paths:
241
219
  - lib
242
- required_ruby_version: !ruby/object:Gem::Requirement
220
+ required_ruby_version: !ruby/object:Gem::Requirement
243
221
  none: false
244
- requirements:
245
- - - ">="
246
- - !ruby/object:Gem::Version
247
- hash: 3
248
- segments:
222
+ requirements:
223
+ - - ! '>='
224
+ - !ruby/object:Gem::Version
225
+ version: '0'
226
+ segments:
249
227
  - 0
250
- version: "0"
251
- required_rubygems_version: !ruby/object:Gem::Requirement
228
+ hash: -2891070154681735828
229
+ required_rubygems_version: !ruby/object:Gem::Requirement
252
230
  none: false
253
- requirements:
254
- - - ">="
255
- - !ruby/object:Gem::Version
256
- hash: 3
257
- segments:
231
+ requirements:
232
+ - - ! '>='
233
+ - !ruby/object:Gem::Version
234
+ version: '0'
235
+ segments:
258
236
  - 0
259
- version: "0"
237
+ hash: -2891070154681735828
260
238
  requirements: []
261
-
262
239
  rubyforge_project: shelly
263
- rubygems_version: 1.8.10
240
+ rubygems_version: 1.8.11
264
241
  signing_key:
265
242
  specification_version: 3
266
243
  summary: Shelly Cloud command line tool
267
- test_files: []
268
-
244
+ test_files:
245
+ - spec/helpers.rb
246
+ - spec/input_faker.rb
247
+ - spec/shelly/app_spec.rb
248
+ - spec/shelly/backup_spec.rb
249
+ - spec/shelly/cli/backup_spec.rb
250
+ - spec/shelly/cli/config_spec.rb
251
+ - spec/shelly/cli/deploys_spec.rb
252
+ - spec/shelly/cli/main_spec.rb
253
+ - spec/shelly/cli/runner_spec.rb
254
+ - spec/shelly/cli/user_spec.rb
255
+ - spec/shelly/client_spec.rb
256
+ - spec/shelly/cloudfile_spec.rb
257
+ - spec/shelly/download_progress_bar_spec.rb
258
+ - spec/shelly/model_spec.rb
259
+ - spec/shelly/user_spec.rb
260
+ - spec/spec_helper.rb
261
+ - spec/thor/options_spec.rb