terrafile 0.1.1
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.
- checksums.yaml +7 -0
- data/.gitignore +11 -0
- data/.rspec +3 -0
- data/.rubocop.yml +51 -0
- data/.ruby-version +1 -0
- data/.travis.yml +7 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +105 -0
- data/LICENSE.txt +21 -0
- data/README.md +60 -0
- data/Rakefile +12 -0
- data/bin/setup +8 -0
- data/bin/terrafile +3 -0
- data/lib/terrafile.rb +12 -0
- data/lib/terrafile/dependency.rb +35 -0
- data/lib/terrafile/errors.rb +3 -0
- data/lib/terrafile/helper.rb +50 -0
- data/lib/terrafile/installer.rb +47 -0
- data/lib/terrafile/version.rb +3 -0
- data/spec/integration/runs_terrafile_executable_spec.rb +47 -0
- data/spec/spec_helper.rb +20 -0
- data/spec/terrafile_spec.rb +5 -0
- data/spec/unit/dependency_spec.rb +152 -0
- data/spec/unit/helper_spec.rb +182 -0
- data/spec/unit/installer_spec.rb +157 -0
- data/terrafile.gemspec +48 -0
- metadata +176 -0
@@ -0,0 +1,157 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
|
3
|
+
module Terrafile
|
4
|
+
RSpec.describe Installer do
|
5
|
+
let(:yml) { '' }
|
6
|
+
|
7
|
+
before { allow(Kernel).to receive(:puts) }
|
8
|
+
before { allow(YAML).to receive(:safe_load) }
|
9
|
+
before { allow(File).to receive(:read).and_return(yml) }
|
10
|
+
before { allow(FileUtils).to receive(:makedirs) }
|
11
|
+
|
12
|
+
describe 'initialisation' do
|
13
|
+
before { allow(Kernel).to receive(:exit) }
|
14
|
+
|
15
|
+
context 'when the expected Terrafile is found' do
|
16
|
+
before do
|
17
|
+
allow(File).to receive(:exist?)
|
18
|
+
.with(TERRAFILE_PATH).and_return(true)
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'reads the file from the conventional location' do
|
22
|
+
Installer.new
|
23
|
+
expect(File).to have_received(:read).with(TERRAFILE_PATH)
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'loads the read yml safely' do
|
27
|
+
Installer.new
|
28
|
+
expect(YAML).to have_received(:safe_load).with(yml)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context 'when the expected Terrafile is not found' do
|
33
|
+
before do
|
34
|
+
allow(Helper).to receive(:file_exists?)
|
35
|
+
.with(TERRAFILE_PATH).and_return(false)
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'tells us that the file is missing' do
|
39
|
+
Installer.new
|
40
|
+
expect(Kernel).to have_received(:puts).with(/Terrafile does not exist/)
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'does not attempt to read the file' do
|
44
|
+
Installer.new
|
45
|
+
expect(File).not_to have_received(:read)
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'does not attempt to load the yml' do
|
49
|
+
Installer.new
|
50
|
+
expect(YAML).not_to have_received(:safe_load)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe '#call' do
|
56
|
+
before do
|
57
|
+
allow(Helper).to receive(:file_exists?).with(TERRAFILE_PATH).and_return(true)
|
58
|
+
allow(Dir).to receive(:chdir).and_yield
|
59
|
+
end
|
60
|
+
|
61
|
+
describe 'creating the modules directory' do
|
62
|
+
before { allow(FileUtils).to receive(:makedirs) }
|
63
|
+
before { allow(YAML).to receive(:safe_load).and_return([]) }
|
64
|
+
|
65
|
+
context 'when the directory already exists' do
|
66
|
+
before do
|
67
|
+
allow(Helper).to receive(:dir_exists?)
|
68
|
+
.with(Installer::MODULES_PATH).and_return(true)
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'does not attempt to make the directory' do
|
72
|
+
Installer.new.call
|
73
|
+
expect(FileUtils).not_to have_received(:makedirs)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
context 'when the directory does NOT exist' do
|
78
|
+
before do
|
79
|
+
allow(Helper).to receive(:dir_exists?)
|
80
|
+
.with(Installer::MODULES_PATH).and_return(false)
|
81
|
+
end
|
82
|
+
|
83
|
+
it 'notifies us of its intention to make the directory' do
|
84
|
+
Installer.new.call
|
85
|
+
expect(Kernel).to have_received(:puts).with(/Creating .+ modules directory/)
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'makes the directory' do
|
89
|
+
Installer.new.call
|
90
|
+
expect(FileUtils).to have_received(:makedirs).with(Installer::MODULES_PATH)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
describe 'fetching the listed modules' do
|
96
|
+
let(:dependencies) do
|
97
|
+
[
|
98
|
+
instance_double(
|
99
|
+
Dependency,
|
100
|
+
name: 'terraform-aws-name1',
|
101
|
+
source: 'git@github.com:org1/repo1',
|
102
|
+
version: '0.8.0',
|
103
|
+
fetch: true,
|
104
|
+
checkout: true
|
105
|
+
),
|
106
|
+
instance_double(
|
107
|
+
Dependency,
|
108
|
+
name: 'terraform-aws-name2',
|
109
|
+
source: 'git@github.com:org2/repo2',
|
110
|
+
version: '004e5791',
|
111
|
+
fetch: true,
|
112
|
+
checkout: true
|
113
|
+
),
|
114
|
+
]
|
115
|
+
end
|
116
|
+
|
117
|
+
before do
|
118
|
+
allow(Dependency).to receive(:build_from_terrafile).and_return(dependencies)
|
119
|
+
end
|
120
|
+
before { allow(Dir).to receive(:chdir).and_yield }
|
121
|
+
before { allow(Helper).to receive(:fetch) }
|
122
|
+
before { allow(Helper).to receive(:checkout) }
|
123
|
+
|
124
|
+
it 'notifies its intention to checkout the dependency' do
|
125
|
+
msg1 = 'Checking out 0.8.0 from git@github.com:org1/repo1'
|
126
|
+
msg2 = 'Checking out 004e5791 from git@github.com:org2/repo2'
|
127
|
+
|
128
|
+
Installer.new.call
|
129
|
+
|
130
|
+
expect(Kernel).to have_received(:puts).with(/#{msg1}/)
|
131
|
+
expect(Kernel).to have_received(:puts).with(/#{msg2}/)
|
132
|
+
end
|
133
|
+
|
134
|
+
it 'changes to the module installation directory' do
|
135
|
+
Installer.new.call
|
136
|
+
expect(Dir).to have_received(:chdir).with(Installer::MODULES_PATH)
|
137
|
+
end
|
138
|
+
|
139
|
+
describe 'for each dependency' do
|
140
|
+
it 'fetches the latest version of the dependency\'s code' do
|
141
|
+
Installer.new.call
|
142
|
+
|
143
|
+
expect(dependencies.first).to have_received(:fetch)
|
144
|
+
expect(dependencies.last).to have_received(:fetch)
|
145
|
+
end
|
146
|
+
|
147
|
+
it 'checks out the latest version of the dependency\'s code' do
|
148
|
+
Installer.new.call
|
149
|
+
|
150
|
+
expect(dependencies.first).to have_received(:checkout)
|
151
|
+
expect(dependencies.last).to have_received(:checkout)
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
data/terrafile.gemspec
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
lib = File.expand_path('lib', __dir__)
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
+
|
4
|
+
require 'terrafile/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'terrafile'
|
8
|
+
spec.version = Terrafile::VERSION
|
9
|
+
spec.platform = Gem::Platform::RUBY
|
10
|
+
spec.required_ruby_version = '>= 2.5.1'
|
11
|
+
spec.authors = ['dxw']
|
12
|
+
spec.email = ['systems@dxw.com']
|
13
|
+
spec.summary = 'Installs the modules listed in Terrafile'
|
14
|
+
spec.description = 'Terraform modules listed in Terrafile are installed in ' \
|
15
|
+
'vendor/terraform_modules'
|
16
|
+
# spec.homepage = "TODO: Put your gem's website or public repo URL here."
|
17
|
+
spec.license = 'MIT'
|
18
|
+
spec.post_install_message = 'Thanks for installing terrafile.'
|
19
|
+
|
20
|
+
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
21
|
+
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
22
|
+
# if spec.respond_to?(:metadata)
|
23
|
+
spec.metadata['credit'] = 'Original code and rationale found at: ' \
|
24
|
+
'http://bensnape.com/2016/01/14/terraform-design-patterns-the-terrafile/'
|
25
|
+
# spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
|
26
|
+
|
27
|
+
# spec.metadata["homepage_uri"] = spec.homepage
|
28
|
+
# spec.metadata["source_code_uri"] = "TODO: Put your gem's public repo URL here."
|
29
|
+
# spec.metadata["changelog_uri"] = "TODO: Put your gem's CHANGELOG.md URL here."
|
30
|
+
# else
|
31
|
+
# raise "RubyGems 2.0 or newer is required to protect against " \
|
32
|
+
# "public gem pushes."
|
33
|
+
# end
|
34
|
+
|
35
|
+
spec.files = `git ls-files`.split("\n")
|
36
|
+
spec.test_files = `git ls-files -- spec/*`.split("\n")
|
37
|
+
spec.bindir = 'bin'
|
38
|
+
spec.require_paths = ['lib']
|
39
|
+
spec.executables = ['terrafile']
|
40
|
+
|
41
|
+
spec.add_development_dependency 'aruba', '~> 0.14'
|
42
|
+
spec.add_development_dependency 'bundler', '~> 1.17'
|
43
|
+
spec.add_development_dependency 'pry-byebug', '~> 3.6'
|
44
|
+
spec.add_development_dependency 'rake', '~> 10.5'
|
45
|
+
spec.add_development_dependency 'rspec', '~> 3.8'
|
46
|
+
spec.add_development_dependency 'rubocop', '~> 0.58'
|
47
|
+
spec.add_development_dependency 'simplecov', '~> 0.16'
|
48
|
+
end
|
metadata
ADDED
@@ -0,0 +1,176 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: terrafile
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- dxw
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-11-13 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: aruba
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.14'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.14'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.17'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.17'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: pry-byebug
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.6'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.6'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '10.5'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '10.5'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '3.8'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '3.8'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rubocop
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0.58'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0.58'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: simplecov
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0.16'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0.16'
|
111
|
+
description: Terraform modules listed in Terrafile are installed in vendor/terraform_modules
|
112
|
+
email:
|
113
|
+
- systems@dxw.com
|
114
|
+
executables:
|
115
|
+
- terrafile
|
116
|
+
extensions: []
|
117
|
+
extra_rdoc_files: []
|
118
|
+
files:
|
119
|
+
- ".gitignore"
|
120
|
+
- ".rspec"
|
121
|
+
- ".rubocop.yml"
|
122
|
+
- ".ruby-version"
|
123
|
+
- ".travis.yml"
|
124
|
+
- CODE_OF_CONDUCT.md
|
125
|
+
- Gemfile
|
126
|
+
- Gemfile.lock
|
127
|
+
- LICENSE.txt
|
128
|
+
- README.md
|
129
|
+
- Rakefile
|
130
|
+
- bin/setup
|
131
|
+
- bin/terrafile
|
132
|
+
- lib/terrafile.rb
|
133
|
+
- lib/terrafile/dependency.rb
|
134
|
+
- lib/terrafile/errors.rb
|
135
|
+
- lib/terrafile/helper.rb
|
136
|
+
- lib/terrafile/installer.rb
|
137
|
+
- lib/terrafile/version.rb
|
138
|
+
- spec/integration/runs_terrafile_executable_spec.rb
|
139
|
+
- spec/spec_helper.rb
|
140
|
+
- spec/terrafile_spec.rb
|
141
|
+
- spec/unit/dependency_spec.rb
|
142
|
+
- spec/unit/helper_spec.rb
|
143
|
+
- spec/unit/installer_spec.rb
|
144
|
+
- terrafile.gemspec
|
145
|
+
homepage:
|
146
|
+
licenses:
|
147
|
+
- MIT
|
148
|
+
metadata:
|
149
|
+
credit: 'Original code and rationale found at: http://bensnape.com/2016/01/14/terraform-design-patterns-the-terrafile/'
|
150
|
+
post_install_message: Thanks for installing terrafile.
|
151
|
+
rdoc_options: []
|
152
|
+
require_paths:
|
153
|
+
- lib
|
154
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
155
|
+
requirements:
|
156
|
+
- - ">="
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
version: 2.5.1
|
159
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
160
|
+
requirements:
|
161
|
+
- - ">="
|
162
|
+
- !ruby/object:Gem::Version
|
163
|
+
version: '0'
|
164
|
+
requirements: []
|
165
|
+
rubyforge_project:
|
166
|
+
rubygems_version: 2.7.6
|
167
|
+
signing_key:
|
168
|
+
specification_version: 4
|
169
|
+
summary: Installs the modules listed in Terrafile
|
170
|
+
test_files:
|
171
|
+
- spec/integration/runs_terrafile_executable_spec.rb
|
172
|
+
- spec/spec_helper.rb
|
173
|
+
- spec/terrafile_spec.rb
|
174
|
+
- spec/unit/dependency_spec.rb
|
175
|
+
- spec/unit/helper_spec.rb
|
176
|
+
- spec/unit/installer_spec.rb
|