shelly 0.1.38 → 0.1.39

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/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## 0.1.39 / 2013-01-08
2
+
3
+ * [feature] Added `shelly deploys pending` - displays a list of commits which are not deployed to Shelly Cloud yet.
4
+
1
5
  ## 0.1.38 / 2012-12-20
2
6
 
3
7
  * [improvement] Using logs streaming server for logs tail (`shelly logs -f`). Logs are displayed more fluently.
data/lib/shelly/app.rb CHANGED
@@ -211,7 +211,7 @@ module Shelly
211
211
  end
212
212
 
213
213
  def edit_billing_url
214
- "#{shelly.shellyapp_url}/apps/#{code_name}/billing/edit"
214
+ "#{shelly.shellyapp_url}/organizations/#{attributes["organization_name"]}/edit"
215
215
  end
216
216
 
217
217
  def open
@@ -261,6 +261,22 @@ module Shelly
261
261
  cloud_databases - ['redis']
262
262
  end
263
263
 
264
+ # Public: Return true when app has been deployed
265
+ # false otherwise
266
+ def deployed?
267
+ git_info["deployed_commit_sha"].present?
268
+ end
269
+
270
+ # Public: Return list of not deployed commits
271
+ # Returns: A list of commits as a String with new line chars
272
+ # format: "#{short SHA} #{commit message} (#{time, ago notation})"
273
+ def pending_commits
274
+ current_commit = IO.popen("git rev-parse 'HEAD'").read.strip
275
+ format = "%C(yellow)%h%Creset %s %C(red)(%cr)%Creset"
276
+ range = "#{git_info["deployed_commit_sha"]}..#{current_commit}"
277
+ IO.popen(%Q{git log --no-merges --oneline --pretty=format:"#{format}" #{range}}).read.strip
278
+ end
279
+
264
280
  private
265
281
 
266
282
  # Internal: Checks if specified option is present in Cloudfile
@@ -8,6 +8,7 @@ module Shelly
8
8
  include Helpers
9
9
 
10
10
  before_hook :logged_in?, :only => [:list, :show]
11
+ before_hook :inside_git_repository?, :only => [:pending]
11
12
  class_option :cloud, :type => :string, :aliases => "-c", :desc => "Specify cloud"
12
13
 
13
14
  desc "list", "Lists deploy logs"
@@ -56,6 +57,22 @@ module Shelly
56
57
  say_error "Log not found, list all deploy logs using `shelly deploys list --cloud=#{app.code_name}`"
57
58
  end
58
59
 
60
+ desc "pending", "Show commits which haven't been deployed yet"
61
+ def pending
62
+ app = multiple_clouds(options[:cloud], "deploy pending")
63
+ if app.deployed?
64
+ commits = app.pending_commits
65
+ if commits.present?
66
+ say "Commits which are not deployed to Shelly"
67
+ say commits
68
+ else
69
+ say "All changes are deployed to Shelly", :green
70
+ end
71
+ else
72
+ say_error "No commits to show. Application hasn't been deployed yet"
73
+ end
74
+ end
75
+
59
76
  no_tasks do
60
77
  def specify_log(log)
61
78
  unless log
@@ -1,3 +1,3 @@
1
1
  module Shelly
2
- VERSION = "0.1.38"
2
+ VERSION = "0.1.39"
3
3
  end
@@ -328,7 +328,8 @@ describe Shelly::App do
328
328
 
329
329
  describe "#edit_billing_url" do
330
330
  it "should return link to edit billing page for app" do
331
- @app.edit_billing_url.should == "http://shellyapp.example.com/apps/foo-staging/billing/edit"
331
+ @app.stub(:attributes).and_return({"organization_name" => "example"})
332
+ @app.edit_billing_url.should == "http://shellyapp.example.com/organizations/example/edit"
332
333
  end
333
334
  end
334
335
 
@@ -447,4 +448,25 @@ describe Shelly::App do
447
448
  out.should == "GET / 127.0.0.1"
448
449
  end
449
450
  end
451
+
452
+ describe "#deployed?" do
453
+ it "should return true when app has been deployed" do
454
+ @app.stub(:attributes => {"git_info" => {"deployed_commit_sha" => "d1b8bec"}})
455
+ @app.should be_deployed
456
+ end
457
+
458
+ it "should return false when app hasn't been deployed yet" do
459
+ @app.stub(:attributes => {"git_info" => {"deployed_commit_sha" => ""}})
460
+ @app.should_not be_deployed
461
+ end
462
+ end
463
+
464
+ describe "#pending_commits" do
465
+ it "should return list of not deployed commits" do
466
+ IO.stub_chain(:popen, :read => "c10c5f6\n")
467
+ IO.should_receive(:popen).with(%Q{git log --no-merges --oneline --pretty=format:\"%C(yellow)%h%Creset %s %C(red)(%cr)%Creset\" c213697..c10c5f6}).and_return(mock(:read => "c10c5f6 Some changes\n"))
468
+ @app.stub(:attributes => {"git_info" => {"deployed_commit_sha" => "c213697"}})
469
+ @app.pending_commits.should == "c10c5f6 Some changes"
470
+ end
471
+ end
450
472
  end
@@ -103,7 +103,43 @@ describe Shelly::CLI::Deploy do
103
103
  "whenever" => "Looking up schedule.rb", "thin_restart" => "thins up and running",
104
104
  "delayed_job" => "delayed jobs", "callbacks" => "rake db:migrate"}
105
105
  end
106
-
107
106
  end
108
107
 
108
+ describe "#pending" do
109
+ before do
110
+ @app.stub(:deployed? => true)
111
+ @deploys.stub(:multiple_clouds => @app)
112
+ end
113
+
114
+ it "should ensure that user is inside git repo" do
115
+ hooks(@deploys, :pending).should include(:inside_git_repository?)
116
+ end
117
+
118
+ context "when application has been deployed" do
119
+ context "and has pending commits to deploy" do
120
+ it "should display them" do
121
+ text = "643124c Something (2 days ago)\nd1b8bec Something new (10 days ago)"
122
+ $stdout.should_receive(:puts).with(text)
123
+ @app.stub(:pending_commits => text)
124
+ invoke(@deploys, :pending)
125
+ end
126
+ end
127
+
128
+ context "and doesn't have pending commits to deploy" do
129
+ it "should display a message that everything is deployed" do
130
+ $stdout.should_receive(:puts).with(green "All changes are deployed to Shelly")
131
+ @app.stub(:pending_commits => "")
132
+ invoke(@deploys, :pending)
133
+ end
134
+ end
135
+ end
136
+
137
+ context "when application hasn't been deployed" do
138
+ it "should display error" do
139
+ @app.stub(:deployed? => false)
140
+ $stdout.should_receive(:puts).with(red "No commits to show. Application hasn't been deployed yet")
141
+ lambda { invoke(@deploys, :pending) }.should raise_error(SystemExit)
142
+ end
143
+ end
144
+ end
109
145
  end
@@ -411,13 +411,13 @@ More info at http://git-scm.com/book/en/Git-Basics-Getting-a-Git-Repository\e[0m
411
411
  end
412
412
 
413
413
  it "should create the app on shelly cloud and show trial information" do
414
- @app.stub(:attributes).and_return({"trial" => true, "credit" => 40})
414
+ @app.stub(:attributes).and_return({"trial" => true, "credit" => 40, "organization_name" => "example"})
415
415
  @client.stub(:shellyapp_url).and_return("http://example.com")
416
416
  @app.should_receive(:create)
417
417
  $stdout.should_receive(:puts).with(green "Billing information")
418
418
  $stdout.should_receive(:puts).with("Cloud created with 40 Euro credit.")
419
419
  $stdout.should_receive(:puts).with("Remember to provide billing details before trial ends.")
420
- $stdout.should_receive(:puts).with("http://example.com/apps/foo-staging/billing/edit")
420
+ $stdout.should_receive(:puts).with("http://example.com/organizations/example/edit")
421
421
 
422
422
  fake_stdin(["", ""]) do
423
423
  invoke(@main, :add)
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.1.38
4
+ version: 0.1.39
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: 2012-12-20 00:00:00.000000000 Z
12
+ date: 2013-01-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
@@ -349,7 +349,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
349
349
  version: '0'
350
350
  segments:
351
351
  - 0
352
- hash: 385526009396201718
352
+ hash: -285970216853493916
353
353
  required_rubygems_version: !ruby/object:Gem::Requirement
354
354
  none: false
355
355
  requirements:
@@ -358,7 +358,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
358
358
  version: '0'
359
359
  segments:
360
360
  - 0
361
- hash: 385526009396201718
361
+ hash: -285970216853493916
362
362
  requirements: []
363
363
  rubyforge_project: shelly
364
364
  rubygems_version: 1.8.24