shelly 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## 0.2.4 / 2013-02-18
2
+
3
+ * [feature] Require sidekiq gem if present in Cloudfile when running `shelly check`
4
+ * Changes reflecting new API
5
+
1
6
  ## 0.2.3 / 2013-02-12
2
7
 
3
8
  * [improvement] Handle stopping clouds in different states
data/lib/shelly/app.rb CHANGED
@@ -251,6 +251,12 @@ module Shelly
251
251
  option?("whenever")
252
252
  end
253
253
 
254
+ # Public: Sidekiq enabled?
255
+ # Returns true if sidekiq is present
256
+ def sidekiq?
257
+ option?("sidekiq")
258
+ end
259
+
254
260
  # Public: Return databases to backup for given Cloud in Cloudfile
255
261
  # Returns Array of databases, except redis db
256
262
  def backup_databases
@@ -301,6 +301,8 @@ Wait until cloud is in 'turned off' state and try again.}
301
301
  else
302
302
  say "Missing git remote"
303
303
  end
304
+ rescue Client::ConflictException => e
305
+ say_error e[:message]
304
306
  end
305
307
 
306
308
  desc "logs", "Show latest application logs"
@@ -455,6 +457,13 @@ Wait until cloud is in 'turned off' state and try again.}
455
457
  "Gem 'whenever' is missing in the Gemfile for '#{app}' cloud",
456
458
  :show_fulfilled => verbose)
457
459
  end
460
+
461
+ if app.sidekiq?
462
+ print_check(structure.gem?("sidekiq"),
463
+ "Gem 'sidekiq' is present for '#{app}' cloud",
464
+ "Gem 'sidekiq' is missing in the Gemfile for '#{app}' cloud",
465
+ :show_fulfilled => verbose)
466
+ end
458
467
  end
459
468
  end
460
469
 
data/lib/shelly/client.rb CHANGED
@@ -188,6 +188,10 @@ module Shelly
188
188
  post("/apps/#{code_name}/database_backups", :kind => kind)
189
189
  end
190
190
 
191
+ def download_backup_url(code_name, filename)
192
+ get("/apps/#{code_name}/database_backups/#{filename}/download_url")["url"]
193
+ end
194
+
191
195
  def members(name)
192
196
  get("/organizations/#{name}/memberships")
193
197
  end
@@ -226,9 +230,12 @@ module Shelly
226
230
  end
227
231
  end
228
232
 
229
- options = request_parameters("/apps/#{cloud}/database_backups/#{filename}", :get)
230
- options = options.merge(:block_response => process_response,
231
- :headers => {:accept => "application/x-gzip"})
233
+ options = {
234
+ :url => download_backup_url(cloud, filename),
235
+ :method => :get,
236
+ :block_response => process_response,
237
+ :headers => {:accept => "application/x-gzip"}
238
+ }.merge(http_basic_auth_options)
232
239
 
233
240
  RestClient::Request.execute(options)
234
241
  end
@@ -1,3 +1,3 @@
1
1
  module Shelly
2
- VERSION = "0.2.3"
2
+ VERSION = "0.2.4"
3
3
  end
@@ -430,6 +430,20 @@ describe Shelly::App do
430
430
  end
431
431
  end
432
432
 
433
+ describe "#sidekiq?" do
434
+ it "should return true if present" do
435
+ content = {"servers" => {"app1" => {"sidekiq" => true}}}
436
+ @app.stub(:content).and_return(content)
437
+ @app.sidekiq?.should be_true
438
+ end
439
+
440
+ it "should return false if not present" do
441
+ content = {"servers" => {"app1" => {"size" => "small"}}}
442
+ @app.stub(:content).and_return(content)
443
+ @app.sidekiq?.should be_false
444
+ end
445
+ end
446
+
433
447
  describe "#application_logs_tail" do
434
448
  it "should execute given block for logs fetched from API" do
435
449
  @client.should_receive(:application_logs_tail).with("foo-staging").and_yield("GET / 127.0.0.1")
@@ -1423,7 +1423,7 @@ Wait until cloud is in 'turned off' state and try again.")
1423
1423
  before do
1424
1424
  Shelly::App.stub(:inside_git_repository?).and_return(true)
1425
1425
  Bundler::Definition.stub_chain(:build, :specs, :map) \
1426
- .and_return(["thin", "pg", "delayed_job", "whenever"])
1426
+ .and_return(["thin", "pg", "delayed_job", "whenever", "sidekiq"])
1427
1427
  Shelly::StructureValidator.any_instance.stub(:repo_paths) \
1428
1428
  .and_return(["config.ru", "Gemfile", "Gemfile.lock"])
1429
1429
  end
@@ -1495,7 +1495,8 @@ Wait until cloud is in 'turned off' state and try again.")
1495
1495
  context "cloudfile" do
1496
1496
  before do
1497
1497
  cloud = mock(:code_name => "foo-staging", :cloud_databases => ["postgresql"],
1498
- :whenever? => true, :delayed_job? => true, :to_s => "foo-staging")
1498
+ :whenever? => true, :delayed_job? => true, :sidekiq? => true,
1499
+ :to_s => "foo-staging")
1499
1500
  cloudfile = mock(:clouds => [cloud])
1500
1501
 
1501
1502
  Shelly::Cloudfile.stub(:new).and_return(cloudfile)
@@ -1527,6 +1528,19 @@ Wait until cloud is in 'turned off' state and try again.")
1527
1528
  end
1528
1529
  end
1529
1530
 
1531
+ context "sidekiq is enabled" do
1532
+ it "should show that necessary gem doesn't exist" do
1533
+ Bundler::Definition.stub_chain(:build, :specs, :map).and_return([])
1534
+ $stdout.should_receive(:puts).with(" #{red("✗")} Gem 'sidekiq' is missing in the Gemfile for 'foo-staging' cloud")
1535
+ invoke(@main, :check)
1536
+ end
1537
+
1538
+ it "should show that necessary gem exists" do
1539
+ $stdout.should_receive(:puts).with(" #{green("✓")} Gem 'sidekiq' is present for 'foo-staging' cloud")
1540
+ invoke(@main, :check)
1541
+ end
1542
+ end
1543
+
1530
1544
  context "postgresql is enabled" do
1531
1545
  it "should show that necessary gem doesn't exist" do
1532
1546
  Bundler::Definition.stub_chain(:build, :specs, :map).and_return([])
@@ -321,14 +321,29 @@ describe Shelly::Client do
321
321
  end
322
322
  end
323
323
 
324
+ describe "#download_backup_url" do
325
+ it "should return download backup url" do
326
+ filename = "2011.11.26.04.00.10.foo.postgres.tar.gz"
327
+ url = api_url("apps/foo/database_backups/#{filename}/download_url")
328
+ FakeWeb.register_uri(:get, url, :body => {"url" => "https://backup.example.com/file.gz"}.to_json)
329
+ @client.download_backup_url("foo", filename).should == "https://backup.example.com/file.gz"
330
+ end
331
+ end
332
+
324
333
  describe "#download_backup" do
325
334
  before do
326
335
  @filename = "2011.11.26.04.00.10.foo.postgres.tar.gz"
327
- url = api_url("apps/foo/database_backups/#{@filename}")
336
+ @client.stub(:download_backup_url => "https://backup.example.com/file.gz")
328
337
  response = Net::HTTPResponse.new('', '', '')
329
338
  # Streaming
330
339
  response.stub(:read_body).and_yield("aaa").and_yield("bbbbb").and_yield("dddf")
331
- FakeWeb.register_uri(:get, url, :response => response)
340
+ FakeWeb.register_uri(:get, "https://bob%40example.com:secret@backup.example.com/file.gz
341
+ ", :response => response)
342
+ end
343
+
344
+ it "should fetch from API backup url" do
345
+ @client.should_receive(:download_backup_url).with("foo", @filename)
346
+ @client.download_backup("foo", @filename)
332
347
  end
333
348
 
334
349
  it "should write streamed database backup to file" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shelly
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.2.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-12 00:00:00.000000000 Z
12
+ date: 2013-02-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
@@ -317,7 +317,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
317
317
  version: '0'
318
318
  segments:
319
319
  - 0
320
- hash: -2582762142314582273
320
+ hash: 2571553387249649782
321
321
  required_rubygems_version: !ruby/object:Gem::Requirement
322
322
  none: false
323
323
  requirements:
@@ -326,10 +326,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
326
326
  version: '0'
327
327
  segments:
328
328
  - 0
329
- hash: -2582762142314582273
329
+ hash: 2571553387249649782
330
330
  requirements: []
331
331
  rubyforge_project: shelly
332
- rubygems_version: 1.8.25
332
+ rubygems_version: 1.8.24
333
333
  signing_key:
334
334
  specification_version: 3
335
335
  summary: Shelly Cloud command line tool