vscripts 0.1.3 → 0.1.5

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.
@@ -1,5 +1,4 @@
1
1
  require 'spec_helper'
2
- require 'aws_spec_helper'
3
2
  require 'vscripts/aws'
4
3
 
5
4
  describe VScripts::AWS::EC2 do
@@ -55,6 +54,15 @@ describe VScripts::AWS::EC2 do
55
54
  end
56
55
  end
57
56
 
57
+ describe '#all_tags_hash' do
58
+ it 'returns a Hash' do
59
+ allow(subject).to receive('all_tags')
60
+ .and_return(tags)
61
+ expect(subject.all_tags_hash).to be_an_instance_of Hash
62
+ expect(subject.all_tags_hash).to eq({"Name"=>"test"})
63
+ end
64
+ end
65
+
58
66
  describe '#tags_without' do
59
67
  it 'returns a filtered Hash' do
60
68
  allow(subject).to receive('all_tags')
@@ -1,5 +1,4 @@
1
1
  require 'spec_helper'
2
- require 'aws_spec_helper'
3
2
  require 'vscripts/aws'
4
3
 
5
4
  describe VScripts::AWS do
@@ -2,9 +2,10 @@ require 'spec_helper'
2
2
  require 'vscripts/command_line'
3
3
 
4
4
  describe VScripts::CommandLine do
5
- subject { VScripts::CommandLine.new([cmd, 'extra_args']) }
6
5
  let(:cmd) { VScripts::Commands.list.first.to_s }
7
6
 
7
+ subject { VScripts::CommandLine.new([cmd, 'extra_args']) }
8
+
8
9
  describe '#new' do
9
10
  it 'returns the command line arguments' do
10
11
  expect(subject).to be_an_instance_of VScripts::CommandLine
@@ -13,7 +14,7 @@ describe VScripts::CommandLine do
13
14
 
14
15
  describe '#global' do
15
16
  it 'returns the global options as a Hash' do
16
- expect(subject.global).to be_an_instance_of Hash
17
+ expect(subject.global).to be_a Hash
17
18
  end
18
19
  end
19
20
 
@@ -26,8 +27,8 @@ describe VScripts::CommandLine do
26
27
 
27
28
  describe '#extra' do
28
29
  it 'returns the rest of the arguments as an Array' do
29
- expect(subject.arguments).to be_an_instance_of Array
30
- expect(subject.arguments).to eql ['extra_args']
30
+ expect(subject.command_options).to be_an_instance_of Array
31
+ expect(subject.command_options).to eql ['extra_args']
31
32
  end
32
33
  end
33
34
 
@@ -15,6 +15,10 @@ describe VScripts::Commands::Identify do
15
15
  end
16
16
 
17
17
  describe '#new' do
18
+ it 'returns extra arguments' do
19
+ expect(subject.arguments).to be_an Array
20
+ end
21
+
18
22
  context 'when theme is not passed' do
19
23
  it 'returns the default theme' do
20
24
  expect(subject.theme).to eq('Group-Role-#')
@@ -23,8 +27,8 @@ describe VScripts::Commands::Identify do
23
27
 
24
28
  context 'when theme is passed' do
25
29
  it 'returns the theme' do
26
- subject1 = VScripts::Commands::Identify.new(['--ec2-tag-theme=test'])
27
- expect(subject1.theme).to eq('test')
30
+ subject = VScripts::Commands::Identify.new(['--ec2-tag-theme=test'])
31
+ expect(subject.theme).to eq('test')
28
32
  end
29
33
  end
30
34
 
@@ -36,8 +40,8 @@ describe VScripts::Commands::Identify do
36
40
 
37
41
  context 'when host is passed' do
38
42
  it 'returns the host' do
39
- subject2 = VScripts::Commands::Identify.new(['--host=test'])
40
- expect(subject2.host).to eq('test')
43
+ subject = VScripts::Commands::Identify.new(['--host=test'])
44
+ expect(subject.host).to eq('test')
41
45
  end
42
46
  end
43
47
 
@@ -49,8 +53,8 @@ describe VScripts::Commands::Identify do
49
53
 
50
54
  context 'when domain is passed' do
51
55
  it 'returns the domain' do
52
- subject3 = VScripts::Commands::Identify.new(['--domain=test'])
53
- expect(subject3.domain).to eq('test')
56
+ subject = VScripts::Commands::Identify.new(['--domain=test'])
57
+ expect(subject.domain).to eq('test')
54
58
  end
55
59
  end
56
60
  end
@@ -100,8 +104,8 @@ describe VScripts::Commands::Identify do
100
104
 
101
105
  context 'when host is passed' do
102
106
  it 'returns a string' do
103
- subject4 = VScripts::Commands::Identify.new(['--host=test'])
104
- expect(subject4.new_hostname).to eq('test')
107
+ subject = VScripts::Commands::Identify.new(['--host=test'])
108
+ expect(subject.new_hostname).to eq('test')
105
109
  end
106
110
  end
107
111
  end
@@ -127,8 +131,8 @@ describe VScripts::Commands::Identify do
127
131
 
128
132
  context 'when domain is passed' do
129
133
  it 'returns a string' do
130
- subject5 = VScripts::Commands::Identify.new(['--domain=test'])
131
- expect(subject5.new_domain).to eq('test')
134
+ subject = VScripts::Commands::Identify.new(['--domain=test'])
135
+ expect(subject.new_domain).to eq('test')
132
136
  end
133
137
  end
134
138
  end
@@ -171,8 +175,8 @@ describe VScripts::Commands::Identify do
171
175
  allow(subject).to receive(:set_name_tag)
172
176
  allow(subject).to receive(:set_hostname)
173
177
  allow(subject).to receive(:update_hosts)
174
- expect(STDOUT).to receive(:puts).with('Done.')
175
- subject.execute
178
+ allow(STDOUT).to receive(:puts)
179
+ expect(subject.execute).to be_nil
176
180
  end
177
181
  end
178
182
  end
@@ -11,6 +11,10 @@ describe VScripts::Commands::Tags2facts do
11
11
  end
12
12
 
13
13
  describe '#new' do
14
+ it 'returns extra arguments' do
15
+ expect(subject.arguments).to be_an Array
16
+ end
17
+
14
18
  it 'returns cli arguments' do
15
19
  expect(subject.cli).to be_a Hash
16
20
  end
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
  require 'vscripts/commands'
3
3
 
4
4
  describe VScripts::Commands do
5
- describe '#list' do
5
+ describe '.list' do
6
6
  it 'returns a list of available commands' do
7
7
  expect(VScripts::Commands.list).to be_an_instance_of Array
8
8
  end
@@ -0,0 +1,53 @@
1
+ require 'spec_helper'
2
+ require 'vscripts/config'
3
+
4
+ describe VScripts::Config do
5
+ include_context 'Temporary'
6
+ subject { VScripts::Config.new }
7
+
8
+ describe '#new' do
9
+ context 'when config file not passed' do
10
+ it 'returns nil' do
11
+ expect(subject.instance_variable_get(:@file)).to be_nil
12
+ end
13
+ end
14
+ context 'when config file passed' do
15
+ it 'returns the path' do
16
+ subject = VScripts::Config.new('/path/to/file')
17
+ expect(subject.instance_variable_get(:@file)).to eq('/path/to/file')
18
+ end
19
+ end
20
+ end
21
+
22
+ describe '#get' do
23
+ it 'returns a Hash' do
24
+ expect(subject.get).to be_a Hash
25
+ end
26
+ end
27
+
28
+ describe '#options' do
29
+ it 'returns a Hash' do
30
+ expect(subject.options).to be_a Hash
31
+ end
32
+ end
33
+
34
+ describe '#parse' do
35
+ it 'returns a Hash' do
36
+ allow(File).to receive(:exist?).and_return(true)
37
+ allow(File).to receive(:read).and_return('testkey: testvalue')
38
+ expect(subject.parse('test')).to be_a Hash
39
+ end
40
+ end
41
+
42
+ describe '#read' do
43
+ it 'returns a String' do
44
+ expect(subject.read(test_file)).to be_a String
45
+ end
46
+ end
47
+
48
+ describe '#check_config' do
49
+ it 'returns Boolean' do
50
+ expect(subject.check_config(test_file))
51
+ end
52
+ end
53
+ end
@@ -1,13 +1,10 @@
1
1
  require 'spec_helper'
2
- require 'tempfile'
3
2
  require 'vscripts/util'
4
3
 
5
4
  describe VScripts::Util::LocalSystem do
6
5
  subject { Object.new.extend VScripts::Util }
7
6
 
8
- let(:test_dir) { Dir::Tmpname.make_tmpname('/tmp/vscripts-test-', nil) }
9
- let(:test_file) { "#{test_dir}/test_file" }
10
- let(:test_cont) { 'testing content' }
7
+ include_context 'Temporary'
11
8
 
12
9
  describe '#hosts_path' do
13
10
  it 'returns the path to hosts file' do
@@ -21,13 +18,6 @@ describe VScripts::Util::LocalSystem do
21
18
  end
22
19
  end
23
20
 
24
- describe '#hosts_file' do
25
- it 'returns the an array' do
26
- allow(File).to receive(:read).and_return(test_cont)
27
- expect(subject.hosts_file).to be_a String
28
- end
29
- end
30
-
31
21
  describe '#local_fqdn' do
32
22
  it 'returns the local FQDN' do
33
23
  expect(subject.local_fqdn).to be_a String
@@ -43,6 +33,8 @@ describe VScripts::Util::LocalSystem do
43
33
  describe '#local_domain_name' do
44
34
  it 'returns the local domain name' do
45
35
  expect(subject.local_domain_name).to be_a String
36
+ allow(subject).to receive('`').and_raise(StandardError)
37
+ expect(subject.local_domain_name).to eq('local')
46
38
  end
47
39
  end
48
40
 
@@ -57,7 +49,7 @@ describe VScripts::Util::LocalSystem do
57
49
 
58
50
  describe '#ensure_file_dir' do
59
51
  it 'create a directory for the specified files' do
60
- subject.ensure_file_dir(test_file)
52
+ subject.ensure_file_dir(test_missing_file)
61
53
  expect(Dir.exists?(test_dir)).to be true
62
54
  end
63
55
  end
@@ -3,6 +3,18 @@ require 'vscripts/version'
3
3
 
4
4
  describe 'VScripts::VERSION' do
5
5
  it 'Should be a string' do
6
- expect(VScripts::VERSION).to be_an_instance_of String
6
+ expect(VScripts::VERSION::STRING).to be_a String
7
+ end
8
+ it 'Should have a major version' do
9
+ expect(VScripts::VERSION::MAJOR).to be_an Integer
10
+ end
11
+ it 'Should have a minor version' do
12
+ expect(VScripts::VERSION::MINOR).to be_an Integer
13
+ end
14
+ it 'Should have a patch version' do
15
+ expect(VScripts::VERSION::PATCH).to be_an Integer
16
+ end
17
+ it 'Should have a copyright version' do
18
+ expect(VScripts::VERSION::COPYRIGHT).to be_a String
7
19
  end
8
20
  end
@@ -2,26 +2,45 @@ require 'spec_helper'
2
2
  require 'vscripts'
3
3
 
4
4
  describe VScripts do
5
- before(:all) do
6
- $stdout = StringIO.new
7
- @cmd = VScripts::Commands.list.first.to_s.downcase
8
- end
5
+ include_context 'Suppressed output'
6
+ include_context 'VScripts'
9
7
 
10
- after(:all) do
11
- $stdout = STDOUT
12
- end
8
+ describe '.run' do
9
+ context 'when no command line arguments' do
10
+ it 'returns help' do
11
+ expect{stub_cli_with('')}.to raise_error(SystemExit)
12
+ expect($stdout.string).to match(/Available commands/)
13
+ end
14
+ end
13
15
 
14
- describe '#run' do
15
- it 'returns help' do
16
- expect{subject.run(['-h'])}.to raise_error(SystemExit)
16
+ context 'when \'-h\'' do
17
+ it 'returns help' do
18
+ expect{stub_cli_with('-h')}.to raise_error(SystemExit)
19
+ expect($stdout.string).to match(/Available commands/)
20
+ end
17
21
  end
18
22
 
19
- it 'returns version' do
20
- expect{subject.run(['-v'])}.to raise_error(SystemExit)
23
+ context 'when \'-v\'' do
24
+ it 'returns version' do
25
+ expect{stub_cli_with('-v')}.to raise_error(SystemExit)
26
+ expect($stdout.string).to match(/VScripts.*(c)/)
27
+ end
21
28
  end
29
+ end
30
+
31
+ describe '.cli' do
32
+ it 'returns subcommand and arguments' do
33
+ allow(VScripts::CommandLine).to receive(:new)
34
+ .and_return(VScripts::CommandLine.new("#{cmd} -h".split))
35
+ expect{subject.run}.to raise_error(SystemExit)
36
+ expect($stdout.string).to match(/USAGE:/)
37
+ expect($stdout.string).to match(/OPTIONS:/)
38
+ end
39
+ end
22
40
 
23
- it 'returns command help' do
24
- expect{subject.run([@cmd, '-h'])}.to raise_error(SystemExit)
41
+ describe '.config' do
42
+ it 'returns a hash' do
43
+ expect(subject.config.get).to be_a Hash
25
44
  end
26
45
  end
27
46
  end
@@ -1,27 +1,32 @@
1
+ require 'vscripts/version'
2
+
1
3
  DEV_BRANCH = 'development'
2
4
  LOG_RANGE = "master...#{DEV_BRANCH}"
3
- VERSION_FILE = 'VERSION'
4
5
  CHANGELOG_FILE = 'CHANGELOG.md'
5
6
 
6
7
  desc 'Automated deployment (increment patch)'
7
8
  task :deploy do
8
- bump_version('patch')
9
+ check_branch
10
+ bump_version
9
11
  deploy
10
12
  end
11
13
 
12
14
  namespace 'deploy' do
13
15
  desc 'Automated deployment (increment patch)'
14
16
  task :patch do
17
+ check_branch
15
18
  bump_version('patch')
16
19
  deploy
17
20
  end
18
21
  desc 'Automated deployment (increment minor)'
19
22
  task :minor do
23
+ check_branch
20
24
  bump_version('minor')
21
25
  deploy
22
26
  end
23
27
  desc 'Automated deployment (increment major)'
24
28
  task :major do
29
+ check_branch
25
30
  bump_version('major')
26
31
  deploy
27
32
  end
@@ -30,7 +35,6 @@ end
30
35
  def deploy
31
36
  commit_changelog
32
37
  merge_changes
33
- push_release
34
38
  end
35
39
 
36
40
  def check_branch
@@ -43,20 +47,23 @@ def check_branch
43
47
  end
44
48
 
45
49
  def bump_version(type = 'patch')
46
- check_branch
47
- @version = File.read(VERSION_FILE).strip
48
- @version.gsub(/(\d+)\.(\d+)\.(\d+)/) {
49
- @major, @minor, @patch = $1.to_i, $2.to_i, $3.to_i
50
- }
50
+ include VScripts::VERSION
51
51
  case type
52
52
  when 'patch'
53
- @new_version = "#{@major}.#{@minor}.#{@patch + 1}"
53
+ @new_version = "#{MAJOR}.#{MINOR}.#{PATCH + 1}"
54
54
  when 'minor'
55
- @new_version = "#{@major}.#{@minor + 1}.0"
55
+ @new_version = "#{MAJOR}.#{MINOR + 1}.0"
56
56
  when 'major'
57
- @new_version = "#{@major + 1}.0.0"
57
+ @new_version = "#{MAJOR + 1}.0.0"
58
58
  end
59
- File.write('VERSION', @new_version)
59
+ write_bumped_version
60
+ end
61
+
62
+ def write_bumped_version
63
+ version_file = 'lib/vscripts/version.rb'
64
+ version_content = File.read(version_file)
65
+ modified = version_content.gsub(/#{VScripts::VERSION::STRING}/, @new_version)
66
+ File.write(version_file, modified)
60
67
  end
61
68
 
62
69
  def changelog
@@ -91,7 +98,7 @@ def commit_changelog
91
98
  end
92
99
 
93
100
  def branch
94
- @branch ||= `git branch`.match(/^\* (\S+)/)[1]
101
+ `git branch`.match(/^\* (\S+)/)[1]
95
102
  end
96
103
 
97
104
  def switch_to_branch(name)
@@ -103,10 +110,12 @@ def merge
103
110
  end
104
111
 
105
112
  def merge_changes
113
+ previous = branch
106
114
  switch_to_branch('master')
107
115
  puts "Merging \"#{DEV_BRANCH}\" branch"
108
116
  abort 'ERROR: Conflicts found; Stopping!' if merge =~ /conflict/i
109
- switch_to_branch(branch) # Switch back to whatever branch was before
117
+ push_release
118
+ switch_to_branch(previous)
110
119
  end
111
120
 
112
121
  def push_release
@@ -5,20 +5,22 @@ require 'vscripts/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = 'vscripts'
8
- spec.version = VScripts::VERSION
8
+ spec.version = VScripts::VERSION::STRING
9
9
  spec.authors = ['Vlad Ghinea']
10
10
  spec.email = ['vlad@ghn.me']
11
11
  spec.summary = %q{VladGh.com's automation scripts}
12
+ spec.homepage = 'https://github.com/vghn/vscripts'
13
+ spec.license = 'Apache 2.0'
12
14
  spec.description = <<-EOF
13
15
  VScripts is a command line utility that performs a series of tasks used on
14
16
  VladGh.com's deployment.
15
17
  EOF
16
- spec.homepage = 'https://github.com/vghn/vscripts'
17
- spec.license = 'Apache 2.0'
18
18
 
19
- spec.metadata = {
20
- 'issue_tracker' => 'https://github.com/vghn/vscripts/issues'
21
- }
19
+ if spec.respond_to?(:metadata=)
20
+ spec.metadata = {
21
+ 'issue_tracker' => 'https://github.com/vghn/vscripts/issues'
22
+ }
23
+ end
22
24
 
23
25
  spec.files = `git ls-files -z`.split("\x0")
24
26
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }