shelly 0.1.35 → 0.1.36
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 +9 -1
- data/lib/shelly/app.rb +4 -0
- data/lib/shelly/cli/file.rb +14 -1
- data/lib/shelly/cli/main.rb +30 -2
- data/lib/shelly/cli/user.rb +22 -11
- data/lib/shelly/version.rb +1 -1
- data/spec/shelly/app_spec.rb +7 -0
- data/spec/shelly/cli/file_spec.rb +35 -0
- data/spec/shelly/cli/main_spec.rb +61 -10
- data/spec/shelly/cli/user_spec.rb +62 -16
- metadata +121 -35
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,12 @@
|
|
1
|
-
## 0.1.
|
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
|
data/lib/shelly/cli/file.rb
CHANGED
@@ -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")
|
data/lib/shelly/cli/main.rb
CHANGED
@@ -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 '#{
|
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
|
data/lib/shelly/cli/user.rb
CHANGED
@@ -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
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
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
|
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)", " | #{
|
25
|
-
print_table(members_table, :ident =>
|
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
|
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
|
-
|
94
|
-
|
95
|
-
|
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
|
data/lib/shelly/version.rb
CHANGED
data/spec/shelly/app_spec.rb
CHANGED
@@ -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
|
-
|
550
|
-
|
551
|
-
|
552
|
-
|
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
|
-
|
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
|
562
|
-
|
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(:
|
39
|
-
[{'email' => 'user@example.com', 'active' => true, "owner" => true},
|
40
|
-
|
41
|
-
|
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 "
|
49
|
-
it "
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
$stdout.should_receive(:puts).with(
|
54
|
-
$stdout.should_receive(:puts).with(
|
55
|
-
$stdout.should_receive(:puts).with(
|
56
|
-
$stdout.should_receive(:puts).with(/
|
57
|
-
$stdout.should_receive(:puts).with(/
|
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.
|
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-
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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.
|
364
|
+
rubygems_version: 1.8.24
|
279
365
|
signing_key:
|
280
366
|
specification_version: 3
|
281
367
|
summary: Shelly Cloud command line tool
|