shelly 0.1.35 → 0.1.36

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -1,4 +1,12 @@
1
- ## 0.1.34 / 2012-12-06
1
+ ## 0.1.36 / 2012-12-18
2
+
3
+ * [feature] Let user choose organization when adding new cloud
4
+
5
+ * [feature] When displaying user list, `--organization=ORGANIZATION_NAME` limits the list to users from a single organization
6
+
7
+ * [feature] Support for deleting files from disk - `shelly file delete`
8
+
9
+ ## 0.1.35 / 2012-12-06
2
10
 
3
11
  * [feature] Support for organizations
4
12
 
data/lib/shelly/app.rb CHANGED
@@ -227,6 +227,10 @@ module Shelly
227
227
  rsync(source, destination)
228
228
  end
229
229
 
230
+ def delete_file(remote_path)
231
+ ssh_command("delete_file #{remote_path}")
232
+ end
233
+
230
234
  # Public: Return databases for given Cloud in Cloudfile
231
235
  # Returns Array of databases
232
236
  def cloud_databases
@@ -6,7 +6,7 @@ module Shelly
6
6
  namespace :file
7
7
  include Helpers
8
8
 
9
- before_hook :logged_in?, :only => [:upload, :download]
9
+ before_hook :logged_in?, :only => [:upload, :download, :delete]
10
10
  before_hook :require_rsync, :only => [:upload, :download]
11
11
  class_option :cloud, :type => :string, :aliases => "-c", :desc => "Specify cloud"
12
12
 
@@ -31,6 +31,19 @@ module Shelly
31
31
  say_error "Cloud #{app} is not running. Cannot download files."
32
32
  end
33
33
 
34
+ desc "delete PATH", "Delete files from persistent data storage"
35
+ def delete(path)
36
+ app = multiple_clouds(options[:cloud], "file delete #{path}")
37
+
38
+ question = "Do you want to permanently delete #{path} (yes/no):"
39
+ delete_files = ask(question)
40
+ exit 1 unless delete_files == "yes"
41
+
42
+ app.delete_file(path)
43
+ rescue Client::ConflictException
44
+ say_error "Cloud #{app} is not running. Cannot delete files."
45
+ end
46
+
34
47
  no_tasks do
35
48
  def require_rsync
36
49
  unless command_exists?("rsync")
@@ -96,7 +96,7 @@ module Shelly
96
96
  app.databases = options["databases"] || ask_for_databases
97
97
  app.size = options["size"] || "large"
98
98
  app.redeem_code = options["redeem-code"]
99
- app.organization = options["organization"]
99
+ app.organization = options["organization"] || ask_for_organization(app.code_name)
100
100
  app.create
101
101
 
102
102
  if overwrite_remote?(app)
@@ -129,7 +129,7 @@ module Shelly
129
129
  say_error "You have to be the owner of '#{options[:organization]}' organization to add clouds"
130
130
  rescue Client::NotFoundException => e
131
131
  raise unless e.resource == :organization
132
- say_error "Organization '#{options[:organization]}' not found", :with_exit => false
132
+ say_error "Organization '#{app.organization}' not found", :with_exit => false
133
133
  say_error "You can list organizations you have access to with `shelly organization list`"
134
134
  end
135
135
 
@@ -549,6 +549,34 @@ We have been notified about it. We will be adding new resources shortly}
549
549
  databases.empty? ? ["postgresql"] : databases
550
550
  end
551
551
 
552
+ def ask_for_organization(default_name)
553
+ organizations = Shelly::User.new.organizations
554
+ if organizations.count > 1
555
+ count = organizations.count
556
+ option_selected = 0
557
+ loop do
558
+ say "Select organization for this cloud:"
559
+ say_new_line
560
+ say "existing organizations:"
561
+
562
+ organizations.each_with_index do |organization, i|
563
+ print_wrapped "#{i + 1}) #{organization.name}", :ident => 2
564
+ end
565
+ say_new_line
566
+ say "new organization (default as code name):"
567
+
568
+ print_wrapped "#{count + 1}) #{default_name}", :ident => 2
569
+
570
+ option_selected = ask("Option:")
571
+ break if ('1'..(count + 1).to_s).include?(option_selected)
572
+ end
573
+
574
+ if (1..count).include?(option_selected.to_i)
575
+ return organizations[option_selected.to_i - 1].name
576
+ end
577
+ end
578
+ end
579
+
552
580
  def info_adding_cloudfile_to_repository
553
581
  say_new_line
554
582
  say "Project is now configured for use with Shell Cloud:", :green
@@ -9,23 +9,30 @@ module Shelly
9
9
 
10
10
  before_hook :logged_in?, :only => [:list, :add, :delete]
11
11
 
12
+ method_option :organization, :type => :string, :aliases => "-o", :desc => "Specify organization"
12
13
  desc "list", "List users with access to organizations"
13
14
  def list
14
- user = Shelly::User.new
15
- organizations = user.organizations
16
-
17
- say "Organizations with users:"
15
+ organizations = if options[:organization]
16
+ organization = fetch_organization(options[:organization])
17
+ [organization]
18
+ else
19
+ Shelly::User.new.organizations
20
+ end
18
21
 
19
22
  organizations.each do |organization|
20
- say " #{organization.name}", :green
23
+ say organization.name, :green
21
24
  if organization.memberships.present?
22
25
  members_table = organization.owners.map { |owner| [owner["email"], " | owner"] }
23
26
  members_table += organization.members.map { |member| [member["email"], " | member"] }
24
- members_table += organization.inactive_members.map { |inactive| [inactive["email"] + " (invited)", " | #{humman_owner(inactive["owner"])}"] }
25
- print_table(members_table, :ident => 4, :colwidth => 45)
27
+ members_table += organization.inactive_members.map { |inactive| [inactive["email"] + " (invited)", " | #{human_owner(inactive["owner"])}"] }
28
+ print_table(members_table, :ident => 2, :colwidth => 45)
26
29
  say_new_line
27
30
  end
28
31
  end
32
+ rescue Client::NotFoundException => e
33
+ raise unless e.resource == :organization
34
+ say_error "Organization '#{options[:organization]}' not found", :with_exit => false
35
+ say_error "You can list organizations you have access to with `shelly organization list`"
29
36
  end
30
37
 
31
38
  method_option :organization, :type => :string, :aliases => "-o", :desc => "Specify organization"
@@ -79,7 +86,7 @@ module Shelly
79
86
  end
80
87
 
81
88
  no_tasks do
82
- def humman_owner(owner)
89
+ def human_owner(owner)
83
90
  owner ? "owner" : "member"
84
91
  end
85
92
 
@@ -90,9 +97,13 @@ module Shelly
90
97
  Shelly::CLI::Organization.new.list
91
98
  exit 1
92
99
  else
93
- Shelly::Organization.new("name" => name).tap do |org|
94
- org.members
95
- end
100
+ fetch_organization(name)
101
+ end
102
+ end
103
+
104
+ def fetch_organization(name)
105
+ Shelly::Organization.new("name" => name).tap do |org|
106
+ org.members
96
107
  end
97
108
  end
98
109
  end
@@ -1,3 +1,3 @@
1
1
  module Shelly
2
- VERSION = "0.1.35"
2
+ VERSION = "0.1.36"
3
3
  end
@@ -368,6 +368,13 @@ describe Shelly::App do
368
368
  end
369
369
  end
370
370
 
371
+ describe "#delete_file" do
372
+ it "should delete file over ssh" do
373
+ @app.should_receive(:ssh_command).with("delete_file foo/bar")
374
+ @app.delete_file("foo/bar")
375
+ end
376
+ end
377
+
371
378
  describe "#create_cloudfile" do
372
379
  it "should create cloudfile with app attributes" do
373
380
  @app.ruby_version = "1.9.3"
@@ -63,4 +63,39 @@ describe Shelly::CLI::File do
63
63
  invoke(@cli_files, :download, "some/path", "/destination")
64
64
  end
65
65
  end
66
+
67
+ describe "#delete" do
68
+ before do
69
+ @app.stub(:delete_file => true)
70
+ $stdout.stub(:puts)
71
+ $stdout.stub(:print)
72
+ end
73
+
74
+ it "should ensure user has logged in" do
75
+ hooks(@cli_files, :download).should include(:logged_in?)
76
+ end
77
+
78
+ it "should ask about delete application parts" do
79
+ $stdout.should_receive(:print).with("Do you want to permanently delete some/path (yes/no): ")
80
+ fake_stdin(["yes"]) do
81
+ invoke(@cli_files, :delete, "some/path")
82
+ end
83
+ end
84
+
85
+ it "should delete files" do
86
+ @app.should_receive(:delete_file).with("some/path")
87
+ fake_stdin(["yes"]) do
88
+ invoke(@cli_files, :delete, "some/path")
89
+ end
90
+ end
91
+
92
+ it "should return exit 1 when user doesn't type 'yes'" do
93
+ @app.should_not_receive(:delete_file)
94
+ lambda{
95
+ fake_stdin(["no"]) do
96
+ invoke(@cli_files, :delete, "some/path")
97
+ end
98
+ }.should raise_error(SystemExit)
99
+ end
100
+ end
66
101
  end
@@ -295,6 +295,7 @@ describe Shelly::CLI::Main do
295
295
  @app.stub(:attributes).and_return({"trial" => false})
296
296
  @app.stub(:git_remote_exist?).and_return(false)
297
297
  @main.stub(:check => true)
298
+ @main.stub(:ask_for_organization)
298
299
  end
299
300
 
300
301
  # This spec tests inside_git_repository? hook
@@ -546,21 +547,71 @@ More info at http://git-scm.com/book/en/Git-Basics-Getting-a-Git-Repository\e[0m
546
547
  end.to raise_error(SystemExit)
547
548
  end
548
549
 
549
- it "should show that organization was not found" do
550
- @main.options = {:organization => "foo"}
551
- response = {"resource" => "organization"}
552
- exception = Shelly::Client::NotFoundException.new(response)
553
- @app.should_receive(:create).and_raise(exception)
554
- $stdout.should_receive(:puts).with(red "Organization 'foo' not found")
555
- $stdout.should_receive(:puts).with(red "You can list organizations you have access to with `shelly organization list`")
550
+ context "organizations" do
551
+ before do
552
+ @main.unstub(:ask_for_organization)
553
+ end
556
554
 
557
- expect do
555
+ it "should use --organization option" do
556
+ @main.options = {"organization" => "foo"}
557
+ @app.should_receive(:organization=).with("foo")
558
558
  fake_stdin(["foooo", "none"]) do
559
559
  invoke(@main, :add)
560
560
  end
561
- end.to raise_error(SystemExit)
562
- end
561
+ end
562
+
563
+ context "ask user for organization" do
564
+ before do
565
+ @client.stub(:organizations).and_return([
566
+ {"name" => "aaa"},
567
+ {"name" => "ccc"}
568
+ ])
569
+ end
563
570
 
571
+ it "should ask user to choose organization if present and use chosen organization" do
572
+ @app.should_receive(:organization=).with("aaa")
573
+ $stdout.should_receive(:puts).with("Select organization for this cloud:")
574
+ $stdout.should_receive(:puts).with("existing organizations:")
575
+ $stdout.should_receive(:puts).with(" 1) aaa")
576
+ $stdout.should_receive(:puts).with(" 2) ccc")
577
+ $stdout.should_receive(:puts).with("new organization (default as code name):")
578
+ $stdout.should_receive(:puts).with(" 3) foooo")
579
+ $stdout.should_receive(:print).with("Option: ")
580
+ fake_stdin(["foooo", "none", "1"]) do
581
+ invoke(@main, :add)
582
+ end
583
+ end
584
+
585
+ it "should ask user to choose organization if present" do
586
+ @app.should_receive(:organization=).with(nil)
587
+ $stdout.should_receive(:puts).with("Select organization for this cloud:")
588
+ $stdout.should_receive(:puts).with("existing organizations:")
589
+ $stdout.should_receive(:puts).with(" 1) aaa")
590
+ $stdout.should_receive(:puts).with(" 2) ccc")
591
+ $stdout.should_receive(:puts).with("new organization (default as code name):")
592
+ $stdout.should_receive(:puts).with(" 3) foooo")
593
+ $stdout.should_receive(:print).with("Option: ")
594
+ fake_stdin(["foooo", "none", "3"]) do
595
+ invoke(@main, :add)
596
+ end
597
+ end
598
+ end
599
+
600
+ it "should show that organization was not found" do
601
+ @main.options = {"organization" => "foo"}
602
+ response = {"resource" => "organization"}
603
+ exception = Shelly::Client::NotFoundException.new(response)
604
+ @app.should_receive(:create).and_raise(exception)
605
+ $stdout.should_receive(:puts).with(red "Organization 'foo' not found")
606
+ $stdout.should_receive(:puts).with(red "You can list organizations you have access to with `shelly organization list`")
607
+
608
+ expect do
609
+ fake_stdin(["foooo", "none"]) do
610
+ invoke(@main, :add)
611
+ end
612
+ end.to raise_error(SystemExit)
613
+ end
614
+ end
564
615
  end
565
616
 
566
617
  describe "#list" do
@@ -31,33 +31,79 @@ describe Shelly::CLI::User do
31
31
  end
32
32
 
33
33
  describe "#list" do
34
- let(:organizations){
35
- [{"name" => "org1"}]
34
+ let(:organizations) {
35
+ [{"name" => "org1"}, {"name" => "org2"}]
36
36
  }
37
37
 
38
- let(:response) {
39
- [{'email' => 'user@example.com', 'active' => true, "owner" => true},
40
- {'email' => 'user2@example2.com', 'active' => true, "owner" => false},
41
- {'email' => 'user3@example3.com', 'active' => false, "owner" => true}]
38
+ let(:org1_members) {
39
+ [{'email' => 'user-org1@example.com', 'active' => true, "owner" => true},
40
+ {'email' => 'user2-org1@example2.com', 'active' => true, "owner" => false},
41
+ {'email' => 'user3-org1@example3.com', 'active' => false, "owner" => true}]
42
42
  }
43
43
 
44
+ let(:org2_members) {
45
+ [{'email' => 'user-org2@example.com', 'active' => true, "owner" => true},
46
+ {'email' => 'user2-org2@example2.com', 'active' => true, "owner" => false},
47
+ {'email' => 'user3-org2@example3.com', 'active' => false, "owner" => true}]
48
+ }
49
+
50
+ before do
51
+ @client.stub(:members).with("org1").and_return(org1_members)
52
+ @client.stub(:members).with("org2").and_return(org2_members)
53
+ @client.stub(:organizations).and_return(organizations)
54
+ end
55
+
44
56
  it "should ensure user has logged in" do
45
57
  hooks(@cli_user, :list).should include(:logged_in?)
46
58
  end
47
59
 
48
- context "on success" do
49
- it "should display organization's users" do
50
- @cli_user.options = {:organization => "foo-org"}
51
- @client.stub(:organizations).and_return(organizations)
52
- @client.stub(:members).and_return(response)
53
- $stdout.should_receive(:puts).with("Organizations with users:")
54
- $stdout.should_receive(:puts).with(green " org1")
55
- $stdout.should_receive(:puts).with(/user@example.com\s+ \| owner/)
56
- $stdout.should_receive(:puts).with(/user2@example2.com\s+ \| member/)
57
- $stdout.should_receive(:puts).with(/user3@example3.com \(invited\)\s+ \| owner/)
60
+ context "without --organization option" do
61
+ it "displays all organizations' users" do
62
+ $stdout.should_receive(:puts).with(green "org1")
63
+ $stdout.should_receive(:puts).with(/user-org1@example.com\s+ \| owner/)
64
+ $stdout.should_receive(:puts).with(/user2-org1@example2.com\s+ \| member/)
65
+ $stdout.should_receive(:puts).with(/user3-org1@example3.com \(invited\)\s+ \| owner/)
66
+ $stdout.should_receive(:puts).with("\n").twice
67
+ $stdout.should_receive(:puts).with(green "org2")
68
+ $stdout.should_receive(:puts).with(/user-org2@example.com\s+ \| owner/)
69
+ $stdout.should_receive(:puts).with(/user2-org2@example2.com\s+ \| member/)
70
+ $stdout.should_receive(:puts).with(/user3-org2@example3.com \(invited\)\s+ \| owner/)
58
71
  invoke(@cli_user, :list)
59
72
  end
60
73
  end
74
+
75
+ context "with --organization option" do
76
+ context "when given organization exists" do
77
+ it "displays organization's users" do
78
+ organization = Shelly::Organization.new("name" => "org1")
79
+ Shelly::Organization.should_receive(:new).with("name" => "org1").
80
+ and_return(organization)
81
+ organization.stub(:members => org1_members)
82
+ @cli_user.options = {:organization => "org1"}
83
+ $stdout.should_receive(:puts).with(green "org1")
84
+ $stdout.should_receive(:puts).with(/user-org1@example.com\s+ \| owner/)
85
+ $stdout.should_receive(:puts).with(/user2-org1@example2.com\s+ \| member/)
86
+ $stdout.should_receive(:puts).with(/user3-org1@example3.com \(invited\)\s+ \| owner/)
87
+ invoke(@cli_user, :list)
88
+ end
89
+ end
90
+
91
+ context "when given organization doesn't exist" do
92
+ it "shows an error" do
93
+ @cli_user.options = {:organization => "org3"}
94
+ not_found = Shelly::Client::NotFoundException.new(
95
+ {"resource" => "organization"})
96
+ Shelly::Organization.should_receive(:new).with("name" => "org3").
97
+ and_raise(not_found)
98
+
99
+ $stdout.should_receive(:puts).with(red "Organization 'org3' not found")
100
+ $stdout.should_receive(:puts).with(red "You can list organizations you have access to with `shelly organization list`")
101
+ lambda do
102
+ invoke(@cli_user, :list)
103
+ end.should raise_error(SystemExit)
104
+ end
105
+ end
106
+ end
61
107
  end
62
108
 
63
109
  describe "#add" 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.1.35
4
+ version: 0.1.36
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-06 00:00:00.000000000Z
12
+ date: 2012-12-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70132417380280 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: 2.11.0
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70132417380280
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 2.11.0
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: rake
27
- requirement: &70132417379600 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ! '>='
@@ -32,10 +37,15 @@ dependencies:
32
37
  version: '0'
33
38
  type: :development
34
39
  prerelease: false
35
- version_requirements: *70132417379600
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: guard
38
- requirement: &70132417378500 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
51
  - - ! '>='
@@ -43,10 +53,15 @@ dependencies:
43
53
  version: '0'
44
54
  type: :development
45
55
  prerelease: false
46
- version_requirements: *70132417378500
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
47
62
  - !ruby/object:Gem::Dependency
48
63
  name: guard-rspec
49
- requirement: &70132417377580 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
50
65
  none: false
51
66
  requirements:
52
67
  - - ! '>='
@@ -54,10 +69,15 @@ dependencies:
54
69
  version: '0'
55
70
  type: :development
56
71
  prerelease: false
57
- version_requirements: *70132417377580
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
58
78
  - !ruby/object:Gem::Dependency
59
79
  name: simplecov
60
- requirement: &70132417377160 !ruby/object:Gem::Requirement
80
+ requirement: !ruby/object:Gem::Requirement
61
81
  none: false
62
82
  requirements:
63
83
  - - ! '>='
@@ -65,10 +85,15 @@ dependencies:
65
85
  version: '0'
66
86
  type: :development
67
87
  prerelease: false
68
- version_requirements: *70132417377160
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
69
94
  - !ruby/object:Gem::Dependency
70
95
  name: ruby_gntp
71
- requirement: &70132417376420 !ruby/object:Gem::Requirement
96
+ requirement: !ruby/object:Gem::Requirement
72
97
  none: false
73
98
  requirements:
74
99
  - - ! '>='
@@ -76,10 +101,15 @@ dependencies:
76
101
  version: '0'
77
102
  type: :development
78
103
  prerelease: false
79
- version_requirements: *70132417376420
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
80
110
  - !ruby/object:Gem::Dependency
81
111
  name: rb-fsevent
82
- requirement: &70132417375560 !ruby/object:Gem::Requirement
112
+ requirement: !ruby/object:Gem::Requirement
83
113
  none: false
84
114
  requirements:
85
115
  - - ! '>='
@@ -87,10 +117,15 @@ dependencies:
87
117
  version: '0'
88
118
  type: :development
89
119
  prerelease: false
90
- version_requirements: *70132417375560
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
91
126
  - !ruby/object:Gem::Dependency
92
127
  name: fakefs
93
- requirement: &70132417374940 !ruby/object:Gem::Requirement
128
+ requirement: !ruby/object:Gem::Requirement
94
129
  none: false
95
130
  requirements:
96
131
  - - ! '>='
@@ -98,10 +133,15 @@ dependencies:
98
133
  version: '0'
99
134
  type: :development
100
135
  prerelease: false
101
- version_requirements: *70132417374940
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
102
142
  - !ruby/object:Gem::Dependency
103
143
  name: fakeweb
104
- requirement: &70132417374360 !ruby/object:Gem::Requirement
144
+ requirement: !ruby/object:Gem::Requirement
105
145
  none: false
106
146
  requirements:
107
147
  - - ! '>='
@@ -109,10 +149,15 @@ dependencies:
109
149
  version: '0'
110
150
  type: :development
111
151
  prerelease: false
112
- version_requirements: *70132417374360
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ! '>='
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
113
158
  - !ruby/object:Gem::Dependency
114
159
  name: wijet-thor
115
- requirement: &70132417373460 !ruby/object:Gem::Requirement
160
+ requirement: !ruby/object:Gem::Requirement
116
161
  none: false
117
162
  requirements:
118
163
  - - ~>
@@ -120,10 +165,15 @@ dependencies:
120
165
  version: 0.14.7
121
166
  type: :runtime
122
167
  prerelease: false
123
- version_requirements: *70132417373460
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ none: false
170
+ requirements:
171
+ - - ~>
172
+ - !ruby/object:Gem::Version
173
+ version: 0.14.7
124
174
  - !ruby/object:Gem::Dependency
125
175
  name: rest-client
126
- requirement: &70132417372800 !ruby/object:Gem::Requirement
176
+ requirement: !ruby/object:Gem::Requirement
127
177
  none: false
128
178
  requirements:
129
179
  - - ! '>='
@@ -131,10 +181,15 @@ dependencies:
131
181
  version: '0'
132
182
  type: :runtime
133
183
  prerelease: false
134
- version_requirements: *70132417372800
184
+ version_requirements: !ruby/object:Gem::Requirement
185
+ none: false
186
+ requirements:
187
+ - - ! '>='
188
+ - !ruby/object:Gem::Version
189
+ version: '0'
135
190
  - !ruby/object:Gem::Dependency
136
191
  name: json
137
- requirement: &70132417371760 !ruby/object:Gem::Requirement
192
+ requirement: !ruby/object:Gem::Requirement
138
193
  none: false
139
194
  requirements:
140
195
  - - ! '>='
@@ -142,10 +197,15 @@ dependencies:
142
197
  version: '0'
143
198
  type: :runtime
144
199
  prerelease: false
145
- version_requirements: *70132417371760
200
+ version_requirements: !ruby/object:Gem::Requirement
201
+ none: false
202
+ requirements:
203
+ - - ! '>='
204
+ - !ruby/object:Gem::Version
205
+ version: '0'
146
206
  - !ruby/object:Gem::Dependency
147
207
  name: progressbar
148
- requirement: &70132417371300 !ruby/object:Gem::Requirement
208
+ requirement: !ruby/object:Gem::Requirement
149
209
  none: false
150
210
  requirements:
151
211
  - - ! '>='
@@ -153,10 +213,15 @@ dependencies:
153
213
  version: '0'
154
214
  type: :runtime
155
215
  prerelease: false
156
- version_requirements: *70132417371300
216
+ version_requirements: !ruby/object:Gem::Requirement
217
+ none: false
218
+ requirements:
219
+ - - ! '>='
220
+ - !ruby/object:Gem::Version
221
+ version: '0'
157
222
  - !ruby/object:Gem::Dependency
158
223
  name: grit
159
- requirement: &70132417370880 !ruby/object:Gem::Requirement
224
+ requirement: !ruby/object:Gem::Requirement
160
225
  none: false
161
226
  requirements:
162
227
  - - ! '>='
@@ -164,10 +229,15 @@ dependencies:
164
229
  version: '0'
165
230
  type: :runtime
166
231
  prerelease: false
167
- version_requirements: *70132417370880
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ none: false
234
+ requirements:
235
+ - - ! '>='
236
+ - !ruby/object:Gem::Version
237
+ version: '0'
168
238
  - !ruby/object:Gem::Dependency
169
239
  name: launchy
170
- requirement: &70132417370280 !ruby/object:Gem::Requirement
240
+ requirement: !ruby/object:Gem::Requirement
171
241
  none: false
172
242
  requirements:
173
243
  - - ! '>='
@@ -175,10 +245,15 @@ dependencies:
175
245
  version: '0'
176
246
  type: :runtime
177
247
  prerelease: false
178
- version_requirements: *70132417370280
248
+ version_requirements: !ruby/object:Gem::Requirement
249
+ none: false
250
+ requirements:
251
+ - - ! '>='
252
+ - !ruby/object:Gem::Version
253
+ version: '0'
179
254
  - !ruby/object:Gem::Dependency
180
255
  name: shelly-dependencies
181
- requirement: &70132417369580 !ruby/object:Gem::Requirement
256
+ requirement: !ruby/object:Gem::Requirement
182
257
  none: false
183
258
  requirements:
184
259
  - - ~>
@@ -186,7 +261,12 @@ dependencies:
186
261
  version: 0.2.1
187
262
  type: :runtime
188
263
  prerelease: false
189
- version_requirements: *70132417369580
264
+ version_requirements: !ruby/object:Gem::Requirement
265
+ none: false
266
+ requirements:
267
+ - - ~>
268
+ - !ruby/object:Gem::Version
269
+ version: 0.2.1
190
270
  description: Tool for managing applications and clouds at shellycloud.com
191
271
  email:
192
272
  - devs@shellycloud.com
@@ -267,15 +347,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
267
347
  - - ! '>='
268
348
  - !ruby/object:Gem::Version
269
349
  version: '0'
350
+ segments:
351
+ - 0
352
+ hash: -1906837567373860011
270
353
  required_rubygems_version: !ruby/object:Gem::Requirement
271
354
  none: false
272
355
  requirements:
273
356
  - - ! '>='
274
357
  - !ruby/object:Gem::Version
275
358
  version: '0'
359
+ segments:
360
+ - 0
361
+ hash: -1906837567373860011
276
362
  requirements: []
277
363
  rubyforge_project: shelly
278
- rubygems_version: 1.8.10
364
+ rubygems_version: 1.8.24
279
365
  signing_key:
280
366
  specification_version: 3
281
367
  summary: Shelly Cloud command line tool