squidward 0.5 → 0.6
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/squidward/command.rb +1 -0
- data/lib/squidward/commands/base.rb +1 -62
- data/lib/squidward/commands/bucket.rb +1 -1
- data/lib/squidward/commands/credentials.rb +6 -1
- data/lib/squidward/commands/domain.rb +1 -1
- data/lib/squidward/commands/info.rb +12 -0
- data/lib/squidward/commands/run.rb +1 -1
- data/lib/squidward/commands/secured.rb +68 -0
- data/lib/squidward/commands/version.rb +1 -1
- data/rakefile +15 -0
- data/spec/commands/base_test.rb +0 -45
- data/spec/commands/bucket_test.rb +1 -1
- data/spec/commands/credentials_test.rb +10 -1
- data/spec/commands/info_test.rb +13 -0
- data/spec/commands/logs_test.rb +1 -9
- data/spec/commands/secured_test.rb +47 -0
- data/spec/commands/version_test.rb +1 -5
- metadata +6 -3
data/lib/squidward/command.rb
CHANGED
@@ -3,53 +3,7 @@ module Squidward
|
|
3
3
|
# Base command from where all the other commands inherit
|
4
4
|
# it contains the most used methods (stout, sterror, etc) and
|
5
5
|
# also handles the configuration, hence AWS credentials
|
6
|
-
class Base
|
7
|
-
# Creates a new instance and prompts the user for the
|
8
|
-
# credentials if they aren't stored
|
9
|
-
def initialize()
|
10
|
-
unless (@credentials = read_credentials)
|
11
|
-
@credentials = ask_for_credentials
|
12
|
-
store_credentials(@credentials)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
# Gets the AWS Credentials from the user
|
17
|
-
def ask_for_credentials
|
18
|
-
puts "Enter your AWS credentials."
|
19
|
-
|
20
|
-
print "Access Key ID: "
|
21
|
-
user = ask
|
22
|
-
|
23
|
-
print "Secret Access Key: "
|
24
|
-
password = ask_for_password
|
25
|
-
|
26
|
-
return [user, password]
|
27
|
-
end
|
28
|
-
|
29
|
-
# Turns off the standard output while writting the password
|
30
|
-
def echo_off
|
31
|
-
system "stty -echo"
|
32
|
-
end
|
33
|
-
|
34
|
-
# Turns on the standard output after writting the password
|
35
|
-
def echo_on
|
36
|
-
system "stty echo"
|
37
|
-
end
|
38
|
-
|
39
|
-
# Gets trimmed input from the user
|
40
|
-
def ask
|
41
|
-
gets.strip
|
42
|
-
end
|
43
|
-
|
44
|
-
# Gets trimmed input from the user but with echoing off
|
45
|
-
def ask_for_password
|
46
|
-
echo_off
|
47
|
-
password = ask
|
48
|
-
puts
|
49
|
-
echo_on
|
50
|
-
return password
|
51
|
-
end
|
52
|
-
|
6
|
+
class Base
|
53
7
|
# Reads the configuration from the profile, if the reload parameter is set to true, it will
|
54
8
|
# read it again, if not it will just return what it's already in-memory.
|
55
9
|
def configuration(reload = false)
|
@@ -61,13 +15,6 @@ module Squidward
|
|
61
15
|
@configuration = YAML.load_file(path)
|
62
16
|
end
|
63
17
|
|
64
|
-
# Reads credentials from the configuration file
|
65
|
-
def read_credentials
|
66
|
-
conf = self.configuration
|
67
|
-
return nil unless conf[:credentials]
|
68
|
-
return [conf[:credentials][:access_key], conf[:credentials][:secret_key]]
|
69
|
-
end
|
70
|
-
|
71
18
|
# Dumps configuration file contents to the user profile
|
72
19
|
def store_configuration(new_configuration)
|
73
20
|
FileUtils.mkpath(File.expand_path(CONF_PATH))
|
@@ -76,14 +23,6 @@ module Squidward
|
|
76
23
|
end
|
77
24
|
end
|
78
25
|
|
79
|
-
# Stores the users credentials on the configuration.
|
80
|
-
def store_credentials(credentials)
|
81
|
-
conf = configuration
|
82
|
-
conf[:credentials] = {}
|
83
|
-
conf[:credentials][:access_key], conf[:credentials][:secret_key] = credentials[0], credentials[1]
|
84
|
-
store_configuration(conf)
|
85
|
-
end
|
86
|
-
|
87
26
|
# Nice and clean way of echoing
|
88
27
|
def display(msg, newline=true)
|
89
28
|
if newline
|
@@ -1,13 +1,18 @@
|
|
1
1
|
module Squidward
|
2
2
|
module Command
|
3
3
|
# Handles all the commands related to credentials
|
4
|
-
class Credentials <
|
4
|
+
class Credentials < Secured
|
5
5
|
# Removes the stored credentials from the current configuration
|
6
6
|
def clear(args = nil)
|
7
7
|
new_configuration = configuration
|
8
8
|
new_configuration[:credentials] = nil
|
9
9
|
store_configuration(new_configuration)
|
10
10
|
end
|
11
|
+
|
12
|
+
# Stores the credentials to the current configuration
|
13
|
+
def set(args = nil)
|
14
|
+
# don't do anything, already handles it the parent class
|
15
|
+
end
|
11
16
|
end
|
12
17
|
end
|
13
18
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Squidward
|
2
2
|
module Command
|
3
3
|
# Handles everything related to AWS SimpleDB Domains for Backup
|
4
|
-
class Domain <
|
4
|
+
class Domain < Secured
|
5
5
|
# Configures a SimpleDB domain for backup. When given the second parameter is
|
6
6
|
# the virtual path inside the bucket to be stored.
|
7
7
|
def backup(args)
|
@@ -4,6 +4,11 @@ module Squidward
|
|
4
4
|
class Info < Base
|
5
5
|
# Goes thru the settings and echos their values.
|
6
6
|
def index(args = nil)
|
7
|
+
return show_info if (read_credentials)
|
8
|
+
puts("Not yet configured. Run 'squidward credentials:set' for configuring credentials.")
|
9
|
+
end
|
10
|
+
|
11
|
+
def show_info
|
7
12
|
display("=== Current Settings")
|
8
13
|
display("Amazon Web Services Account: #{configuration[:credentials][:access_key]}")
|
9
14
|
display("Amazon S3 Bucket: #{configuration[:default_bucket]}")
|
@@ -21,6 +26,13 @@ module Squidward
|
|
21
26
|
end
|
22
27
|
display("")
|
23
28
|
end
|
29
|
+
|
30
|
+
# Reads credentials from the configuration file
|
31
|
+
def read_credentials
|
32
|
+
conf = self.configuration
|
33
|
+
return nil unless conf[:credentials]
|
34
|
+
return [conf[:credentials][:access_key], conf[:credentials][:secret_key]]
|
35
|
+
end
|
24
36
|
end
|
25
37
|
end
|
26
38
|
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
module Squidward
|
2
|
+
module Command
|
3
|
+
# Base command from where all the commands
|
4
|
+
# are secured and need credentials, hence it handles AWS credentials
|
5
|
+
class Secured < Base
|
6
|
+
# Creates a new instance and prompts the user for the
|
7
|
+
# credentials if they aren't stored
|
8
|
+
def initialize()
|
9
|
+
unless (@credentials = read_credentials)
|
10
|
+
@credentials = ask_for_credentials
|
11
|
+
store_credentials(@credentials)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
# Gets the AWS Credentials from the user
|
16
|
+
def ask_for_credentials
|
17
|
+
puts "Enter your AWS credentials."
|
18
|
+
|
19
|
+
print "Access Key ID: "
|
20
|
+
user = ask
|
21
|
+
|
22
|
+
print "Secret Access Key: "
|
23
|
+
password = ask_for_password
|
24
|
+
|
25
|
+
return [user, password]
|
26
|
+
end
|
27
|
+
|
28
|
+
# Turns off the standard output while writting the password
|
29
|
+
def echo_off
|
30
|
+
system "stty -echo"
|
31
|
+
end
|
32
|
+
|
33
|
+
# Turns on the standard output after writting the password
|
34
|
+
def echo_on
|
35
|
+
system "stty echo"
|
36
|
+
end
|
37
|
+
|
38
|
+
# Gets trimmed input from the user
|
39
|
+
def ask
|
40
|
+
gets.strip
|
41
|
+
end
|
42
|
+
|
43
|
+
# Gets trimmed input from the user but with echoing off
|
44
|
+
def ask_for_password
|
45
|
+
echo_off
|
46
|
+
password = ask
|
47
|
+
puts
|
48
|
+
echo_on
|
49
|
+
return password
|
50
|
+
end
|
51
|
+
|
52
|
+
# Reads credentials from the configuration file
|
53
|
+
def read_credentials
|
54
|
+
conf = self.configuration
|
55
|
+
return nil unless conf[:credentials]
|
56
|
+
return [conf[:credentials][:access_key], conf[:credentials][:secret_key]]
|
57
|
+
end
|
58
|
+
|
59
|
+
# Stores the users credentials on the configuration.
|
60
|
+
def store_credentials(credentials)
|
61
|
+
conf = configuration
|
62
|
+
conf[:credentials] = {}
|
63
|
+
conf[:credentials][:access_key], conf[:credentials][:secret_key] = credentials[0], credentials[1]
|
64
|
+
store_configuration(conf)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
data/rakefile
CHANGED
@@ -19,6 +19,16 @@ task :specs do
|
|
19
19
|
Rake::Task['specs_run'].invoke
|
20
20
|
end
|
21
21
|
|
22
|
+
namespace :docs do
|
23
|
+
Rake::RDocTask.new do |t|
|
24
|
+
t.rdoc_dir = 'sdk/public/'
|
25
|
+
t.options << '--line-numbers' << '--inline-source' << '-A cattr_accessor=object'
|
26
|
+
t.options << '--charset' << 'utf-8'
|
27
|
+
t.rdoc_files.include('README.rdoc')
|
28
|
+
t.rdoc_files.include('lib/**/*.rb')
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
22
32
|
namespace :dist do
|
23
33
|
spec = Gem::Specification.new do |s|
|
24
34
|
s.name = 'squidward'
|
@@ -48,4 +58,9 @@ namespace :dist do
|
|
48
58
|
Rake::GemPackageTask.new(spec) do |pkg|
|
49
59
|
pkg.need_tar = true
|
50
60
|
end
|
61
|
+
end
|
62
|
+
|
63
|
+
task :cleanup do
|
64
|
+
`rm -rf pkg`
|
65
|
+
`rm -rf coverage`
|
51
66
|
end
|
data/spec/commands/base_test.rb
CHANGED
@@ -4,36 +4,7 @@ require 'spec_config'
|
|
4
4
|
|
5
5
|
describe "base commands functionality" do
|
6
6
|
|
7
|
-
it "should prompt for AWS Credentials when they do not exist" do
|
8
|
-
Squidward::Command::Base.any_instance.expects(:read_credentials).returns(false)
|
9
|
-
Squidward::Command::Base.any_instance.expects(:ask_for_credentials).returns(["access_key", "secret_key"])
|
10
|
-
Squidward::Command::Base.any_instance.expects(:store_credentials).with(["access_key", "secret_key"])
|
11
|
-
my_command = Squidward::Command::Base.new()
|
12
|
-
end
|
13
|
-
|
14
|
-
it "should ask for credentials" do
|
15
|
-
Squidward::Command::Base.any_instance.expects(:read_credentials).returns(true)
|
16
|
-
my_command = Squidward::Command::Base.new()
|
17
|
-
my_command.expects(:puts).with("Enter your AWS credentials.")
|
18
|
-
my_command.expects(:print).with("Access Key ID: ")
|
19
|
-
my_command.expects(:print).with("Secret Access Key: ")
|
20
|
-
my_command.expects(:ask).returns("user")
|
21
|
-
my_command.expects(:ask_for_password).returns("password")
|
22
|
-
my_command.ask_for_credentials.should == ["user", "password"]
|
23
|
-
end
|
24
|
-
|
25
|
-
it "when asking for password should turn off echo and turn it on" do
|
26
|
-
Squidward::Command::Base.any_instance.expects(:read_credentials).returns(true)
|
27
|
-
my_command = Squidward::Command::Base.new()
|
28
|
-
my_command.expects(:echo_off)
|
29
|
-
my_command.expects(:echo_on)
|
30
|
-
my_command.expects(:puts)
|
31
|
-
my_command.expects(:ask).returns("password")
|
32
|
-
my_command.ask_for_password.should == "password"
|
33
|
-
end
|
34
|
-
|
35
7
|
it "should read the configuration when its prompted for config (no relaod)" do
|
36
|
-
Squidward::Command::Base.any_instance.expects(:read_credentials).returns(true)
|
37
8
|
configuration_path = File.expand_path(File.join(CONF_PATH, SETTINGS_FILE))
|
38
9
|
File.expects(:exists?).with(configuration_path).returns(true)
|
39
10
|
YAML::expects(:load_file).with(configuration_path)
|
@@ -42,7 +13,6 @@ describe "base commands functionality" do
|
|
42
13
|
end
|
43
14
|
|
44
15
|
it "should return the existing configuration when its prompted for config (no relaod)" do
|
45
|
-
Squidward::Command::Base.any_instance.expects(:read_credentials).returns(true)
|
46
16
|
configuration_path = File.expand_path(File.join(CONF_PATH, SETTINGS_FILE))
|
47
17
|
File.expects(:exists?).with(configuration_path).returns(true)
|
48
18
|
YAML::expects(:load_file).with(configuration_path).returns({:key => "value"})
|
@@ -53,24 +23,9 @@ describe "base commands functionality" do
|
|
53
23
|
end
|
54
24
|
|
55
25
|
it "should store configuration" do
|
56
|
-
Squidward::Command::Base.any_instance.expects(:read_credentials).returns(true)
|
57
26
|
File.expects(:open).with(File.expand_path(File.join(CONF_PATH, SETTINGS_FILE)), "w+")
|
58
27
|
FileUtils.expects(:mkpath).with(File.expand_path(CONF_PATH))
|
59
28
|
my_command = Squidward::Command::Base.new()
|
60
29
|
my_command.store_configuration({})
|
61
30
|
end
|
62
|
-
|
63
|
-
it "should read credentials when already there" do
|
64
|
-
Squidward::Command::Base.any_instance.expects(:configuration).returns({:credentials => {:secret_key => "secret", :access_key => "access"}}).twice
|
65
|
-
my_command = Squidward::Command::Base.new()
|
66
|
-
my_command.read_credentials.should == ["access", "secret"]
|
67
|
-
end
|
68
|
-
|
69
|
-
it "should store credentials after getting them" do
|
70
|
-
Squidward::Command::Base.any_instance.expects(:read_credentials).returns(false)
|
71
|
-
Squidward::Command::Base.any_instance.expects(:ask_for_credentials).returns(["access_key", "secret_key"])
|
72
|
-
Squidward::Command::Base.any_instance.expects(:configuration).returns({:credentials => {}})
|
73
|
-
Squidward::Command::Base.any_instance.expects(:store_configuration).returns()
|
74
|
-
my_command = Squidward::Command::Base.new()
|
75
|
-
end
|
76
31
|
end
|
@@ -2,7 +2,7 @@
|
|
2
2
|
$LOAD_PATH.unshift(File.dirname(__FILE__) + '/../')
|
3
3
|
require 'spec_config'
|
4
4
|
|
5
|
-
describe "
|
5
|
+
describe "bucket command functionality" do
|
6
6
|
before do
|
7
7
|
Squidward::Command::Bucket.any_instance.expects(:read_credentials).returns(["access_key", "secret_key"])
|
8
8
|
end
|
@@ -2,11 +2,20 @@
|
|
2
2
|
$LOAD_PATH.unshift(File.dirname(__FILE__) + '/../')
|
3
3
|
require 'spec_config'
|
4
4
|
|
5
|
-
describe "
|
5
|
+
describe "credentials command functionality" do
|
6
6
|
it "should clear the stored credentials" do
|
7
7
|
my_command = Squidward::Command::Credentials.new()
|
8
8
|
my_command.expects(:configuration).returns({:credentials => ["foo", "bar"]})
|
9
9
|
my_command.expects(:store_configuration).with({:credentials => nil})
|
10
10
|
my_command.clear
|
11
11
|
end
|
12
|
+
|
13
|
+
it "should store credentials" do
|
14
|
+
Squidward::Command::Credentials.any_instance.expects(:read_credentials).returns(false)
|
15
|
+
Squidward::Command::Credentials.any_instance.expects(:ask_for_credentials).returns({:credentials => ["foo", "bar"]})
|
16
|
+
Squidward::Command::Credentials.any_instance.expects(:store_credentials).returns(true)
|
17
|
+
|
18
|
+
my_command = Squidward::Command::Credentials.new()
|
19
|
+
my_command.set
|
20
|
+
end
|
12
21
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# enabling the load of files from root (on RSpec)
|
2
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__) + '/../')
|
3
|
+
require 'spec_config'
|
4
|
+
|
5
|
+
describe "info command functionality" do
|
6
|
+
it "should tell that is not configured when not configured" do
|
7
|
+
Squidward::Command::Info.any_instance.expects(:read_credentials).returns(false)
|
8
|
+
|
9
|
+
my_command = Squidward::Command::Info.new()
|
10
|
+
my_command.expects(:puts).with("Not yet configured. Run 'squidward credentials:set' for configuring credentials.")
|
11
|
+
my_command.index
|
12
|
+
end
|
13
|
+
end
|
data/spec/commands/logs_test.rb
CHANGED
@@ -2,15 +2,7 @@
|
|
2
2
|
$LOAD_PATH.unshift(File.dirname(__FILE__) + '/../')
|
3
3
|
require 'spec_config'
|
4
4
|
|
5
|
-
describe "
|
6
|
-
before do
|
7
|
-
Squidward::Command::Logs.any_instance.expects(:read_credentials).returns(["access_key", "secret_key"])
|
8
|
-
end
|
9
|
-
|
10
|
-
it "should inherit the Base functionality" do
|
11
|
-
my_command = Squidward::Command::Logs.new()
|
12
|
-
end
|
13
|
-
|
5
|
+
describe "log command functionality" do
|
14
6
|
it "should set backup default bucket" do
|
15
7
|
my_command = Squidward::Command::Logs.new()
|
16
8
|
my_command.expects(:system).with("tail -n 25 #{File.expand_path(File.join(CONF_PATH, LOG_FILE))}")
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# enabling the load of files from root (on RSpec)
|
2
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__) + '/../')
|
3
|
+
require 'spec_config'
|
4
|
+
|
5
|
+
describe "secured commands functionality" do
|
6
|
+
it "should prompt for AWS Credentials when they do not exist" do
|
7
|
+
Squidward::Command::Secured.any_instance.expects(:read_credentials).returns(false)
|
8
|
+
Squidward::Command::Secured.any_instance.expects(:ask_for_credentials).returns(["access_key", "secret_key"])
|
9
|
+
Squidward::Command::Secured.any_instance.expects(:store_credentials).with(["access_key", "secret_key"])
|
10
|
+
my_command = Squidward::Command::Secured.new()
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should ask for credentials" do
|
14
|
+
Squidward::Command::Secured.any_instance.expects(:read_credentials).returns(true)
|
15
|
+
my_command = Squidward::Command::Secured.new()
|
16
|
+
my_command.expects(:puts).with("Enter your AWS credentials.")
|
17
|
+
my_command.expects(:print).with("Access Key ID: ")
|
18
|
+
my_command.expects(:print).with("Secret Access Key: ")
|
19
|
+
my_command.expects(:ask).returns("user")
|
20
|
+
my_command.expects(:ask_for_password).returns("password")
|
21
|
+
my_command.ask_for_credentials.should == ["user", "password"]
|
22
|
+
end
|
23
|
+
|
24
|
+
it "when asking for password should turn off echo and turn it on" do
|
25
|
+
Squidward::Command::Secured.any_instance.expects(:read_credentials).returns(true)
|
26
|
+
my_command = Squidward::Command::Secured.new()
|
27
|
+
my_command.expects(:echo_off)
|
28
|
+
my_command.expects(:echo_on)
|
29
|
+
my_command.expects(:puts)
|
30
|
+
my_command.expects(:ask).returns("password")
|
31
|
+
my_command.ask_for_password.should == "password"
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should read credentials when already there" do
|
35
|
+
Squidward::Command::Secured.any_instance.expects(:configuration).returns({:credentials => {:secret_key => "secret", :access_key => "access"}}).twice
|
36
|
+
my_command = Squidward::Command::Secured.new()
|
37
|
+
my_command.read_credentials.should == ["access", "secret"]
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should store credentials after getting them" do
|
41
|
+
Squidward::Command::Secured.any_instance.expects(:read_credentials).returns(false)
|
42
|
+
Squidward::Command::Secured.any_instance.expects(:ask_for_credentials).returns(["access_key", "secret_key"])
|
43
|
+
Squidward::Command::Secured.any_instance.expects(:configuration).returns({:credentials => {}})
|
44
|
+
Squidward::Command::Secured.any_instance.expects(:store_configuration).returns()
|
45
|
+
my_command = Squidward::Command::Secured.new()
|
46
|
+
end
|
47
|
+
end
|
@@ -2,11 +2,7 @@
|
|
2
2
|
$LOAD_PATH.unshift(File.dirname(__FILE__) + '/../')
|
3
3
|
require 'spec_config'
|
4
4
|
|
5
|
-
describe "
|
6
|
-
before do
|
7
|
-
Squidward::Command::Version.any_instance.expects(:read_credentials).returns(["access_key", "secret_key"])
|
8
|
-
end
|
9
|
-
|
5
|
+
describe "version command functionality" do
|
10
6
|
it "should show version string as {gem_name}-{version}" do
|
11
7
|
my_command = Squidward::Command::Version.new()
|
12
8
|
my_command.expects(:display).with("squidward-#{Squidward::Command::Version::GEM_VERSION}")
|
metadata
CHANGED
@@ -4,8 +4,8 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
8
|
-
version: "0.
|
7
|
+
- 6
|
8
|
+
version: "0.6"
|
9
9
|
platform: ruby
|
10
10
|
authors:
|
11
11
|
- Johnny G. Halife
|
@@ -13,7 +13,7 @@ autorequire:
|
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
15
|
|
16
|
-
date: 2010-
|
16
|
+
date: 2010-05-03 00:00:00 -03:00
|
17
17
|
default_executable: squidward
|
18
18
|
dependencies:
|
19
19
|
- !ruby/object:Gem::Dependency
|
@@ -60,14 +60,17 @@ files:
|
|
60
60
|
- lib/squidward/commands/info.rb
|
61
61
|
- lib/squidward/commands/logs.rb
|
62
62
|
- lib/squidward/commands/run.rb
|
63
|
+
- lib/squidward/commands/secured.rb
|
63
64
|
- lib/squidward/commands/version.rb
|
64
65
|
- lib/squidward.rb
|
65
66
|
- spec/commands/base_test.rb
|
66
67
|
- spec/commands/bucket_test.rb
|
67
68
|
- spec/commands/credentials_test.rb
|
68
69
|
- spec/commands/domain_test.rb
|
70
|
+
- spec/commands/info_test.rb
|
69
71
|
- spec/commands/logs_test.rb
|
70
72
|
- spec/commands/run_test.rb
|
73
|
+
- spec/commands/secured_test.rb
|
71
74
|
- spec/commands/version_test.rb
|
72
75
|
- spec/mock_command.rb
|
73
76
|
- spec/spec_config.rb
|