shelly 0.0.17 → 0.0.18
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 +3 -2
- data/lib/shelly/cli/users.rb +2 -0
- data/lib/shelly/cloudfile.rb +4 -0
- data/lib/shelly/version.rb +1 -1
- data/spec/shelly/app_spec.rb +3 -2
- data/spec/shelly/cli/main_spec.rb +10 -6
- data/spec/shelly/cli/users_spec.rb +16 -1
- metadata +148 -132
data/lib/shelly/app.rb
CHANGED
@@ -12,7 +12,7 @@ module Shelly
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def add_git_remote
|
15
|
-
system("git remote rm production
|
15
|
+
system("git remote rm production > /dev/null 2>&1")
|
16
16
|
system("git remote add production #{git_url}")
|
17
17
|
end
|
18
18
|
|
@@ -35,7 +35,7 @@ module Shelly
|
|
35
35
|
:code_name => code_name,
|
36
36
|
:environment => environment,
|
37
37
|
:ruby_version => ruby_version,
|
38
|
-
:domain_name => domains
|
38
|
+
:domain_name => domains ? domains.join(" ") : nil
|
39
39
|
}
|
40
40
|
response = shelly.create_app(attributes)
|
41
41
|
self.git_url = response["git_url"]
|
@@ -69,3 +69,4 @@ module Shelly
|
|
69
69
|
end
|
70
70
|
end
|
71
71
|
end
|
72
|
+
|
data/lib/shelly/cli/users.rb
CHANGED
@@ -11,6 +11,7 @@ module Shelly
|
|
11
11
|
desc "list", "List users who have access to current application"
|
12
12
|
def list
|
13
13
|
say_error "Must be run inside your project git repository" unless App.inside_git_repository?
|
14
|
+
say_error "No Cloudfile found" unless Cloudfile.present?
|
14
15
|
@cloudfile = Shelly::Cloudfile.new
|
15
16
|
@cloudfile.fetch_users.each do |app, users|
|
16
17
|
say "Cloud #{app}:"
|
@@ -24,6 +25,7 @@ module Shelly
|
|
24
25
|
desc "add [EMAIL]", "Add new developer to applications defined in Cloudfile"
|
25
26
|
def add(email = nil)
|
26
27
|
say_error "Must be run inside your project git repository" unless App.inside_git_repository?
|
28
|
+
say_error "No Cloudfile found" unless Cloudfile.present?
|
27
29
|
user_email = email || ask_for_email({:guess_email => false})
|
28
30
|
@cloudfile = Shelly::Cloudfile.new
|
29
31
|
@user = Shelly::User.new
|
data/lib/shelly/cloudfile.rb
CHANGED
data/lib/shelly/version.rb
CHANGED
data/spec/shelly/app_spec.rb
CHANGED
@@ -41,7 +41,7 @@ describe Shelly::App do
|
|
41
41
|
end
|
42
42
|
|
43
43
|
it "should try to remove existing git remote" do
|
44
|
-
@app.should_receive(:system).with("git remote rm production
|
44
|
+
@app.should_receive(:system).with("git remote rm production > /dev/null 2>&1")
|
45
45
|
@app.add_git_remote
|
46
46
|
end
|
47
47
|
|
@@ -154,7 +154,7 @@ config
|
|
154
154
|
:name => "boo",
|
155
155
|
:environment => "production",
|
156
156
|
:ruby_version => "MRI-1.9.2",
|
157
|
-
:domain_name =>
|
157
|
+
:domain_name => "boo.shellyapp.com boo.example.com"
|
158
158
|
}
|
159
159
|
@client.should_receive(:create_app).with(attributes).and_return("git_url" => "git@git.shellycloud.com:fooo.git",
|
160
160
|
"domain_name" => "boo.shellyapp.com boo.example.com")
|
@@ -170,3 +170,4 @@ config
|
|
170
170
|
end
|
171
171
|
end
|
172
172
|
end
|
173
|
+
|
@@ -40,14 +40,16 @@ OUT
|
|
40
40
|
@client.stub(:register_user)
|
41
41
|
@key_path = File.expand_path("~/.ssh/id_rsa.pub")
|
42
42
|
@user = Shelly::User.new
|
43
|
-
|
43
|
+
FileUtils.mkdir_p("~/.ssh")
|
44
|
+
File.open("~/.ssh/id_rsa.pub", "w") { |f| f << "ssh-key AAbbcc" }
|
45
|
+
@client.stub(:ssh_key_available?)
|
44
46
|
Shelly::User.stub(:new).and_return(@user)
|
45
47
|
end
|
46
48
|
|
47
49
|
it "should return false if ssh key don't exist on local hard drive" do
|
48
|
-
|
49
|
-
File.exists?(
|
50
|
-
$stdout.should_receive(:puts).with("\e[31mNo such file or directory\e[0m")
|
50
|
+
FileUtils.rm_rf(@key_path)
|
51
|
+
File.exists?(@key_path).should be_false
|
52
|
+
$stdout.should_receive(:puts).with("\e[31mNo such file or directory - " + @key_path + "\e[0m")
|
51
53
|
$stdout.should_receive(:puts).with("\e[31mUse ssh-keygen to generate ssh key pair\e[0m")
|
52
54
|
lambda {
|
53
55
|
@main.register
|
@@ -75,14 +77,14 @@ OUT
|
|
75
77
|
it "should suggest email and use it if user enters blank email" do
|
76
78
|
Shelly::User.stub(:guess_email).and_return("kate@example.com")
|
77
79
|
$stdout.should_receive(:print).with("Email (kate@example.com - default): ")
|
78
|
-
@client.should_receive(:register_user).with("kate@example.com", "secret",
|
80
|
+
@client.should_receive(:register_user).with("kate@example.com", "secret", "ssh-key AAbbcc")
|
79
81
|
fake_stdin(["", "secret", "secret"]) do
|
80
82
|
@main.register
|
81
83
|
end
|
82
84
|
end
|
83
85
|
|
84
86
|
it "should use email provided by user" do
|
85
|
-
@client.should_receive(:register_user).with("better@example.com", "secret",
|
87
|
+
@client.should_receive(:register_user).with("better@example.com", "secret", "ssh-key AAbbcc")
|
86
88
|
fake_stdin(["better@example.com", "secret", "secret"]) do
|
87
89
|
@main.register
|
88
90
|
end
|
@@ -120,6 +122,8 @@ OUT
|
|
120
122
|
|
121
123
|
context "public SSH key doesn't exist" do
|
122
124
|
it "should register user without the public SSH key" do
|
125
|
+
@user.stub(:ssh_key_registered?)
|
126
|
+
FileUtils.rm_rf(@key_path)
|
123
127
|
$stdout.should_not_receive(:puts).with("Uploading your public SSH key from #{@key_path}")
|
124
128
|
fake_stdin(["kate@example.com", "secret", "secret"]) do
|
125
129
|
@main.register
|
@@ -30,7 +30,6 @@ describe Shelly::CLI::Users do
|
|
30
30
|
end
|
31
31
|
|
32
32
|
it "should exit with message if command run outside git repository" do
|
33
|
-
@client.stub(:app_users).and_return(response)
|
34
33
|
Shelly::App.stub(:inside_git_repository?).and_return(false)
|
35
34
|
$stdout.should_receive(:puts).with("\e[31mMust be run inside your project git repository\e[0m")
|
36
35
|
lambda {
|
@@ -38,6 +37,14 @@ describe Shelly::CLI::Users do
|
|
38
37
|
}.should raise_error(SystemExit)
|
39
38
|
end
|
40
39
|
|
40
|
+
it "should exit with message if there is no Cloudfile" do
|
41
|
+
File.delete("Cloudfile")
|
42
|
+
$stdout.should_receive(:puts).with("\e[31mNo Cloudfile found\e[0m")
|
43
|
+
lambda {
|
44
|
+
@users.list
|
45
|
+
}.should raise_error(SystemExit)
|
46
|
+
end
|
47
|
+
|
41
48
|
context "on success" do
|
42
49
|
it "should receive clouds from the Cloudfile" do
|
43
50
|
@client.should_receive(:app_users).with(["foo-production", "foo-staging"]).
|
@@ -83,6 +90,14 @@ describe Shelly::CLI::Users do
|
|
83
90
|
Shelly::User.stub(:new).and_return(@user)
|
84
91
|
end
|
85
92
|
|
93
|
+
it "should exit with message if there is no Cloudfile" do
|
94
|
+
File.delete("Cloudfile")
|
95
|
+
$stdout.should_receive(:puts).with("\e[31mNo Cloudfile found\e[0m")
|
96
|
+
lambda {
|
97
|
+
@users.list
|
98
|
+
}.should raise_error(SystemExit)
|
99
|
+
end
|
100
|
+
|
86
101
|
it "should exit with message if command run outside git repository" do
|
87
102
|
Shelly::App.stub(:inside_git_repository?).and_return(false)
|
88
103
|
$stdout.should_receive(:puts).with("\e[31mMust be run inside your project git repository\e[0m")
|
metadata
CHANGED
@@ -1,156 +1,172 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: shelly
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 59
|
5
5
|
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 18
|
10
|
+
version: 0.0.18
|
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
|
-
|
13
|
-
|
14
|
-
|
17
|
+
|
18
|
+
date: 2011-11-07 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
15
21
|
name: rspec
|
16
|
-
requirement: &2156677640 !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
|
-
requirements:
|
19
|
-
- - ! '>='
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
version: '0'
|
22
|
-
type: :development
|
23
22
|
prerelease: false
|
24
|
-
|
25
|
-
- !ruby/object:Gem::Dependency
|
26
|
-
name: rake
|
27
|
-
requirement: &2156677220 !ruby/object:Gem::Requirement
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
28
24
|
none: false
|
29
|
-
requirements:
|
30
|
-
- -
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
- !ruby/object:Gem::Dependency
|
37
|
-
name: guard
|
38
|
-
requirement: &2156676800 !ruby/object:Gem::Requirement
|
39
|
-
none: false
|
40
|
-
requirements:
|
41
|
-
- - ! '>='
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
version: '0'
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 3
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
version: "0"
|
44
32
|
type: :development
|
33
|
+
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: rake
|
45
36
|
prerelease: false
|
46
|
-
|
47
|
-
- !ruby/object:Gem::Dependency
|
48
|
-
name: guard-rspec
|
49
|
-
requirement: &2156676380 !ruby/object:Gem::Requirement
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
50
38
|
none: false
|
51
|
-
requirements:
|
52
|
-
- -
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
hash: 3
|
43
|
+
segments:
|
44
|
+
- 0
|
45
|
+
version: "0"
|
55
46
|
type: :development
|
47
|
+
version_requirements: *id002
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: guard
|
56
50
|
prerelease: false
|
57
|
-
|
58
|
-
- !ruby/object:Gem::Dependency
|
59
|
-
name: growl_notify
|
60
|
-
requirement: &2156675920 !ruby/object:Gem::Requirement
|
51
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
61
52
|
none: false
|
62
|
-
requirements:
|
63
|
-
- -
|
64
|
-
- !ruby/object:Gem::Version
|
65
|
-
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
hash: 3
|
57
|
+
segments:
|
58
|
+
- 0
|
59
|
+
version: "0"
|
66
60
|
type: :development
|
61
|
+
version_requirements: *id003
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: guard-rspec
|
67
64
|
prerelease: false
|
68
|
-
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: rb-fsevent
|
71
|
-
requirement: &2156675500 !ruby/object:Gem::Requirement
|
65
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
72
66
|
none: false
|
73
|
-
requirements:
|
74
|
-
- -
|
75
|
-
- !ruby/object:Gem::Version
|
76
|
-
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
hash: 3
|
71
|
+
segments:
|
72
|
+
- 0
|
73
|
+
version: "0"
|
77
74
|
type: :development
|
78
|
-
|
79
|
-
|
80
|
-
- !ruby/object:Gem::Dependency
|
75
|
+
version_requirements: *id004
|
76
|
+
- !ruby/object:Gem::Dependency
|
81
77
|
name: fakefs
|
82
|
-
|
78
|
+
prerelease: false
|
79
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
83
80
|
none: false
|
84
|
-
requirements:
|
85
|
-
- -
|
86
|
-
- !ruby/object:Gem::Version
|
87
|
-
|
81
|
+
requirements:
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
hash: 3
|
85
|
+
segments:
|
86
|
+
- 0
|
87
|
+
version: "0"
|
88
88
|
type: :development
|
89
|
-
|
90
|
-
|
91
|
-
- !ruby/object:Gem::Dependency
|
89
|
+
version_requirements: *id005
|
90
|
+
- !ruby/object:Gem::Dependency
|
92
91
|
name: fakeweb
|
93
|
-
|
92
|
+
prerelease: false
|
93
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
|
-
requirements:
|
96
|
-
- -
|
97
|
-
- !ruby/object:Gem::Version
|
98
|
-
|
95
|
+
requirements:
|
96
|
+
- - ">="
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
hash: 3
|
99
|
+
segments:
|
100
|
+
- 0
|
101
|
+
version: "0"
|
99
102
|
type: :development
|
100
|
-
|
101
|
-
|
102
|
-
- !ruby/object:Gem::Dependency
|
103
|
+
version_requirements: *id006
|
104
|
+
- !ruby/object:Gem::Dependency
|
103
105
|
name: thor
|
104
|
-
|
106
|
+
prerelease: false
|
107
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
105
108
|
none: false
|
106
|
-
requirements:
|
107
|
-
- -
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
|
109
|
+
requirements:
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
hash: 3
|
113
|
+
segments:
|
114
|
+
- 0
|
115
|
+
version: "0"
|
110
116
|
type: :runtime
|
111
|
-
|
112
|
-
|
113
|
-
- !ruby/object:Gem::Dependency
|
117
|
+
version_requirements: *id007
|
118
|
+
- !ruby/object:Gem::Dependency
|
114
119
|
name: rest-client
|
115
|
-
|
120
|
+
prerelease: false
|
121
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
116
122
|
none: false
|
117
|
-
requirements:
|
118
|
-
- -
|
119
|
-
- !ruby/object:Gem::Version
|
120
|
-
|
123
|
+
requirements:
|
124
|
+
- - ">="
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
hash: 3
|
127
|
+
segments:
|
128
|
+
- 0
|
129
|
+
version: "0"
|
121
130
|
type: :runtime
|
122
|
-
|
123
|
-
|
124
|
-
- !ruby/object:Gem::Dependency
|
131
|
+
version_requirements: *id008
|
132
|
+
- !ruby/object:Gem::Dependency
|
125
133
|
name: json
|
126
|
-
|
134
|
+
prerelease: false
|
135
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
127
136
|
none: false
|
128
|
-
requirements:
|
129
|
-
- -
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
|
137
|
+
requirements:
|
138
|
+
- - ">="
|
139
|
+
- !ruby/object:Gem::Version
|
140
|
+
hash: 3
|
141
|
+
segments:
|
142
|
+
- 0
|
143
|
+
version: "0"
|
132
144
|
type: :runtime
|
133
|
-
|
134
|
-
|
135
|
-
- !ruby/object:Gem::Dependency
|
145
|
+
version_requirements: *id009
|
146
|
+
- !ruby/object:Gem::Dependency
|
136
147
|
name: launchy
|
137
|
-
|
148
|
+
prerelease: false
|
149
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
138
150
|
none: false
|
139
|
-
requirements:
|
140
|
-
- -
|
141
|
-
- !ruby/object:Gem::Version
|
142
|
-
|
151
|
+
requirements:
|
152
|
+
- - ">="
|
153
|
+
- !ruby/object:Gem::Version
|
154
|
+
hash: 3
|
155
|
+
segments:
|
156
|
+
- 0
|
157
|
+
version: "0"
|
143
158
|
type: :runtime
|
144
|
-
|
145
|
-
version_requirements: *2156672840
|
159
|
+
version_requirements: *id010
|
146
160
|
description: Tool for managing applications and clouds at shellycloud.com
|
147
|
-
email:
|
161
|
+
email:
|
148
162
|
- support@shellycloud.com
|
149
|
-
executables:
|
163
|
+
executables:
|
150
164
|
- shelly
|
151
165
|
extensions: []
|
166
|
+
|
152
167
|
extra_rdoc_files: []
|
153
|
-
|
168
|
+
|
169
|
+
files:
|
154
170
|
- .gitignore
|
155
171
|
- .travis.yml
|
156
172
|
- Gemfile
|
@@ -185,36 +201,36 @@ files:
|
|
185
201
|
- spec/spec_helper.rb
|
186
202
|
homepage: http://shellycloud.com
|
187
203
|
licenses: []
|
204
|
+
|
188
205
|
post_install_message:
|
189
206
|
rdoc_options: []
|
190
|
-
|
207
|
+
|
208
|
+
require_paths:
|
191
209
|
- lib
|
192
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
210
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
193
211
|
none: false
|
194
|
-
requirements:
|
195
|
-
- -
|
196
|
-
- !ruby/object:Gem::Version
|
197
|
-
|
198
|
-
|
212
|
+
requirements:
|
213
|
+
- - ">="
|
214
|
+
- !ruby/object:Gem::Version
|
215
|
+
hash: 3
|
216
|
+
segments:
|
217
|
+
- 0
|
218
|
+
version: "0"
|
219
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
199
220
|
none: false
|
200
|
-
requirements:
|
201
|
-
- -
|
202
|
-
- !ruby/object:Gem::Version
|
203
|
-
|
221
|
+
requirements:
|
222
|
+
- - ">="
|
223
|
+
- !ruby/object:Gem::Version
|
224
|
+
hash: 3
|
225
|
+
segments:
|
226
|
+
- 0
|
227
|
+
version: "0"
|
204
228
|
requirements: []
|
229
|
+
|
205
230
|
rubyforge_project: shelly
|
206
231
|
rubygems_version: 1.8.10
|
207
232
|
signing_key:
|
208
233
|
specification_version: 3
|
209
234
|
summary: Shelly Cloud command line tool
|
210
|
-
test_files:
|
211
|
-
|
212
|
-
- spec/input_faker.rb
|
213
|
-
- spec/shelly/app_spec.rb
|
214
|
-
- spec/shelly/base_spec.rb
|
215
|
-
- spec/shelly/cli/main_spec.rb
|
216
|
-
- spec/shelly/cli/users_spec.rb
|
217
|
-
- spec/shelly/client_spec.rb
|
218
|
-
- spec/shelly/cloudfile_spec.rb
|
219
|
-
- spec/shelly/user_spec.rb
|
220
|
-
- spec/spec_helper.rb
|
235
|
+
test_files: []
|
236
|
+
|