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 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
+