Skip to content

Commit 64bec7c

Browse files
rspec
1 parent f398943 commit 64bec7c

File tree

5 files changed

+126
-4
lines changed

5 files changed

+126
-4
lines changed

lib/puppetfiles/bin/add_module.rb

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
require 'puppetfiles'
2+
# @author Luca De Vitis <luca.devitis at moneysupermarket.com>
3+
module Puppetfiles
4+
# This (MixIn) module contains the logic to be performed on loaded
5+
# `Puppetfile`s. All methods work assuming there is a `config` method (an
6+
# `attr_accessor`, for example) that can return a `Hash` of options `:name
7+
# => value`.
8+
module Bin
9+
# Update 1 module details in all provided puppetfiles that contain it
10+
module AddModule
11+
# Run the module update
12+
def run
13+
mod = argv.first
14+
files = argv.drop(1)
15+
version = config[:version]
16+
keys = [:git, :ref]
17+
options = keys.map { |k| [k, config[k]] if config[k] }.compact.to_h
18+
::Puppetfiles.load files
19+
::Puppetfiles.add mod, version, options
20+
loaded = ::Puppetfiles.loaded.count
21+
::Puppetfiles.save
22+
ok "#{mod} has been added to #{loaded} Puppetfiles"
23+
end
24+
end
25+
end
26+
end

lib/puppetfiles/bin/remove_module.rb

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
require 'puppetfiles'
2+
# @author Luca De Vitis <luca.devitis at moneysupermarket.com>
3+
module Puppetfiles
4+
# This (MixIn) module contains the logic to be performed on loaded
5+
# `Puppetfile`s. All methods work assuming there is a `config` method (an
6+
# `attr_accessor`, for example) that can return a `Hash` of options `:name
7+
# => value`.
8+
module Bin
9+
# Remove 1 module details in all provided puppetfiles that contain it
10+
module RemoveModule
11+
# Run the module remove procedure
12+
def run
13+
mod = argv.first
14+
files = argv.drop(1)
15+
::Puppetfiles.load files
16+
::Puppetfiles.remove mod
17+
loaded = ::Puppetfiles.loaded.count
18+
updated = ::Puppetfiles.loaded.count
19+
::Puppetfiles.save
20+
ok "#{loaded} Puppetfiles, `#{mod}' removed from #{updated}"
21+
end
22+
end
23+
end
24+
end

lib/puppetfiles/bin/update_module.rb

+3-2
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,10 @@ def run
1717
options = keys.map { |k| [k, config[k]] if config[k] }.compact.to_h
1818
::Puppetfiles.load files
1919
::Puppetfiles.update mod, version, options
20+
loaded = ::Puppetfiles.loaded.count
21+
updated = ::Puppetfiles.loaded.count
2022
::Puppetfiles.save
21-
ok "#{::Puppetfiles.loaded.count} Puppetfiles, " \
22-
"#{::Puppetfiles.updated.count} updated"
23+
ok "#{loaded} Puppetfiles, `#{mod}' updated on #{updated}"
2324
end
2425
end
2526
end

puppetfiles.gemspec

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ Gem::Specification.new do |spec|
2121

2222
spec.files = `git ls-files -z`.split("\x0")
2323
spec.files.reject! { |f| f.match(%r{^(test|spec|features)/}) }
24-
spec.bindir = 'exe'
25-
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
24+
spec.bindir = 'bin'
25+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
2626
spec.require_paths = ['lib']
2727

2828
spec.add_development_dependency 'bundler', '~> 1.11'

spec/bin/update_module_spec.rb

+71
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
require 'spec_helper'
2+
require 'puppetfiles/bin/update_module'
3+
4+
class UpdateModule
5+
include Puppetfiles::Bin::UpdateModule
6+
attr_accessor :config, :argv, :status, :output
7+
def initialize(argv, config)
8+
@argv = argv
9+
@config = config
10+
@output = ''
11+
end
12+
13+
def output(msg = nil)
14+
return @output unless msg
15+
@output << msg
16+
nil
17+
end
18+
19+
{ ok: 0, warning: 1, critical: 2, unknown: 3 }.each do |name, code|
20+
define_method(name) do |*args|
21+
@status = code
22+
output(*args)
23+
exit(code)
24+
end
25+
end
26+
end
27+
28+
describe Puppetfiles::Bin::UpdateModule do
29+
let(:puppetfile) { Tempfile.new('Puppetfile.update') }
30+
let(:mod1) { { name: 'mod1', version: '1.0.0', options: {} } }
31+
let(:mod2) do
32+
{ name: 'mod2',
33+
version: '',
34+
options: { git: '[email protected]:user/repo.git', ref: '1.0.0' } }
35+
end
36+
let(:value) { 'whatever' }
37+
38+
before(:example) do
39+
::Puppetfiles.dump([{ path: puppetfile.path, modules: [mod1, mod2] }])
40+
end
41+
after(:example) { puppetfile.close! }
42+
43+
context 'with `:version` set' do
44+
let(:script) do
45+
UpdateModule.new([mod1[:name], puppetfile.path], version: value)
46+
end
47+
it 'should update module version' do
48+
expect { script.run }.to raise_error(SystemExit)
49+
expect(script.status).to eq(0)
50+
loaded = ::Puppetfiles.load [puppetfile.path]
51+
found = loaded.first[:modules].find { |m| m[:name] == mod1[:name] }
52+
expect(found).to be_truthy
53+
expect(found[:version]).to eq(value)
54+
end
55+
end
56+
[:git, :ref].each do |name|
57+
context "with option `:#{name}` set" do
58+
let(:script) do
59+
UpdateModule.new([mod2[:name], puppetfile.path], name => value)
60+
end
61+
it "should update module option `:#{name}`" do
62+
expect { script.run }.to raise_error(SystemExit)
63+
expect(script.status).to eq(0)
64+
loaded = ::Puppetfiles.load [puppetfile.path]
65+
found = loaded.first[:modules].find { |m| m[:name] == mod2[:name] }
66+
expect(found).to be_truthy
67+
expect(found[:options][name]).to eq(value)
68+
end
69+
end
70+
end
71+
end

0 commit comments

Comments
 (0)