vscripts 0.1.3 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -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) }