module RSpec::Puppet::FunctionExampleGroup
Public Instance Methods
call_function(function_name, *args)
click to toggle source
# File lib/rspec-puppet/example/function_example_group.rb, line 108 def call_function(function_name, *args) scope.call_function(function_name, args) end
catalogue()
click to toggle source
# File lib/rspec-puppet/example/function_example_group.rb, line 116 def catalogue @catalogue ||= compiler.catalog end
find_function(function_name = self.class.top_level_description)
click to toggle source
# File lib/rspec-puppet/example/function_example_group.rb, line 87 def find_function(function_name = self.class.top_level_description) with_vardir do env = adapter.current_environment context_overrides = compiler.context_overrides func = nil loaders = Puppet.lookup(:loaders) Puppet.override(context_overrides, 'rspec-test scope') do func = V4FunctionWrapper.new(function_name, loaders.private_environment_loader.load(:function, function_name), context_overrides) @scope = context_overrides[:global_scope] end return func if func.func if Puppet::Parser::Functions.function(function_name) V3FunctionWrapper.new(function_name, scope.method(:"function_#{function_name}")) end end end
rspec_puppet_cleanup()
click to toggle source
# File lib/rspec-puppet/example/function_example_group.rb, line 120 def rspec_puppet_cleanup @subject = nil @catalogue = nil @compiler = nil @scope = nil end
scope()
click to toggle source
# File lib/rspec-puppet/example/function_example_group.rb, line 112 def scope @scope ||= build_scope(compiler, nodename(:function)) end
subject()
click to toggle source
(at least) rspec 3.5 doesn’t seem to memoize ‘subject` when called from a before(:each) hook, so we need to memoize it ourselves.
# File lib/rspec-puppet/example/function_example_group.rb, line 83 def subject @subject ||= find_function end
Private Instance Methods
build_compiler()
click to toggle source
get a compiler with an attached compiled catalog
# File lib/rspec-puppet/example/function_example_group.rb, line 134 def build_compiler node_name = nodename(:function) fact_values = facts_hash(node_name) trusted_values = trusted_facts_hash(node_name) # Allow different Hiera configurations: HieraPuppet.instance_variable_set(:@hiera, nil) if defined? HieraPuppet # if we specify a pre_condition, we should ensure that we compile that # code into a catalog that is accessible from the scope where the # function is called Puppet[:code] = pre_cond node_facts = Puppet::Node::Facts.new(node_name, fact_values.dup) node_options = { parameters: fact_values, facts: node_facts } stub_facts! fact_values node = build_node(node_name, node_options) Puppet.push_context( { trusted_information: Puppet::Context::TrustedInformation.new('remote', node_name, trusted_values) }, 'Context for spec trusted hash' ) compiler = Puppet::Parser::Compiler.new(node) compiler.compile loaders = Puppet::Pops::Loaders.new(adapter.current_environment) Puppet.push_context( { loaders: loaders, global_scope: compiler.context_overrides[:global_scope] }, 'set globals' ) compiler end
build_node(name, opts = {})
click to toggle source
# File lib/rspec-puppet/example/function_example_group.rb, line 182 def build_node(name, opts = {}) node_environment = adapter.current_environment opts[:environment] = node_environment Puppet::Node.new(name, opts) end
build_scope(compiler, _node_name)
click to toggle source
# File lib/rspec-puppet/example/function_example_group.rb, line 178 def build_scope(compiler, _node_name) compiler.context_overrides[:global_scope] end
compiler()
click to toggle source
# File lib/rspec-puppet/example/function_example_group.rb, line 129 def compiler @compiler ||= build_compiler end