shelly 0.0.17 → 0.0.18

Sign up to get free protection for your applications and to get access to all the features.
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 &> /dev/null")
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
+
@@ -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
@@ -2,6 +2,10 @@ module Shelly
2
2
  class Cloudfile < Base
3
3
  attr_accessor :content
4
4
 
5
+ def self.present?
6
+ File.exists?(File.join(Dir.pwd, "Cloudfile"))
7
+ end
8
+
5
9
  def initialize
6
10
  open if File.exists?(path)
7
11
  end
@@ -1,3 +1,3 @@
1
1
  module Shelly
2
- VERSION = "0.0.17"
2
+ VERSION = "0.0.18"
3
3
  end
@@ -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 &> /dev/null")
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 => ["boo.shellyapp.com", "boo.example.com"]
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
- @user.stub(:ssh_key_registered?)
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
- @user.stub(:ssh_key_registered?).and_raise(Errno::ENOENT)
49
- File.exists?(File.expand_path("~/.ssh/id_rsa.pub")).should be_false
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", nil)
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", nil)
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
- version: 0.0.17
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
- date: 2011-11-03 00:00:00.000000000Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
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
- version_requirements: *2156677640
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
- version: '0'
33
- type: :development
34
- prerelease: false
35
- version_requirements: *2156677220
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
- version_requirements: *2156676800
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
- version: '0'
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
- version_requirements: *2156676380
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
- version: '0'
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
- version_requirements: *2156675920
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
- version: '0'
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ hash: 3
71
+ segments:
72
+ - 0
73
+ version: "0"
77
74
  type: :development
78
- prerelease: false
79
- version_requirements: *2156675500
80
- - !ruby/object:Gem::Dependency
75
+ version_requirements: *id004
76
+ - !ruby/object:Gem::Dependency
81
77
  name: fakefs
82
- requirement: &2156675080 !ruby/object:Gem::Requirement
78
+ prerelease: false
79
+ requirement: &id005 !ruby/object:Gem::Requirement
83
80
  none: false
84
- requirements:
85
- - - ! '>='
86
- - !ruby/object:Gem::Version
87
- version: '0'
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ hash: 3
85
+ segments:
86
+ - 0
87
+ version: "0"
88
88
  type: :development
89
- prerelease: false
90
- version_requirements: *2156675080
91
- - !ruby/object:Gem::Dependency
89
+ version_requirements: *id005
90
+ - !ruby/object:Gem::Dependency
92
91
  name: fakeweb
93
- requirement: &2156674660 !ruby/object:Gem::Requirement
92
+ prerelease: false
93
+ requirement: &id006 !ruby/object:Gem::Requirement
94
94
  none: false
95
- requirements:
96
- - - ! '>='
97
- - !ruby/object:Gem::Version
98
- version: '0'
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ hash: 3
99
+ segments:
100
+ - 0
101
+ version: "0"
99
102
  type: :development
100
- prerelease: false
101
- version_requirements: *2156674660
102
- - !ruby/object:Gem::Dependency
103
+ version_requirements: *id006
104
+ - !ruby/object:Gem::Dependency
103
105
  name: thor
104
- requirement: &2156674240 !ruby/object:Gem::Requirement
106
+ prerelease: false
107
+ requirement: &id007 !ruby/object:Gem::Requirement
105
108
  none: false
106
- requirements:
107
- - - ! '>='
108
- - !ruby/object:Gem::Version
109
- version: '0'
109
+ requirements:
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ hash: 3
113
+ segments:
114
+ - 0
115
+ version: "0"
110
116
  type: :runtime
111
- prerelease: false
112
- version_requirements: *2156674240
113
- - !ruby/object:Gem::Dependency
117
+ version_requirements: *id007
118
+ - !ruby/object:Gem::Dependency
114
119
  name: rest-client
115
- requirement: &2156673780 !ruby/object:Gem::Requirement
120
+ prerelease: false
121
+ requirement: &id008 !ruby/object:Gem::Requirement
116
122
  none: false
117
- requirements:
118
- - - ! '>='
119
- - !ruby/object:Gem::Version
120
- version: '0'
123
+ requirements:
124
+ - - ">="
125
+ - !ruby/object:Gem::Version
126
+ hash: 3
127
+ segments:
128
+ - 0
129
+ version: "0"
121
130
  type: :runtime
122
- prerelease: false
123
- version_requirements: *2156673780
124
- - !ruby/object:Gem::Dependency
131
+ version_requirements: *id008
132
+ - !ruby/object:Gem::Dependency
125
133
  name: json
126
- requirement: &2156673340 !ruby/object:Gem::Requirement
134
+ prerelease: false
135
+ requirement: &id009 !ruby/object:Gem::Requirement
127
136
  none: false
128
- requirements:
129
- - - ! '>='
130
- - !ruby/object:Gem::Version
131
- version: '0'
137
+ requirements:
138
+ - - ">="
139
+ - !ruby/object:Gem::Version
140
+ hash: 3
141
+ segments:
142
+ - 0
143
+ version: "0"
132
144
  type: :runtime
133
- prerelease: false
134
- version_requirements: *2156673340
135
- - !ruby/object:Gem::Dependency
145
+ version_requirements: *id009
146
+ - !ruby/object:Gem::Dependency
136
147
  name: launchy
137
- requirement: &2156672840 !ruby/object:Gem::Requirement
148
+ prerelease: false
149
+ requirement: &id010 !ruby/object:Gem::Requirement
138
150
  none: false
139
- requirements:
140
- - - ! '>='
141
- - !ruby/object:Gem::Version
142
- version: '0'
151
+ requirements:
152
+ - - ">="
153
+ - !ruby/object:Gem::Version
154
+ hash: 3
155
+ segments:
156
+ - 0
157
+ version: "0"
143
158
  type: :runtime
144
- prerelease: false
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
- files:
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
- require_paths:
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
- version: '0'
198
- required_rubygems_version: !ruby/object:Gem::Requirement
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
- version: '0'
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
- - spec/helpers.rb
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
+