117 lines
3.1 KiB
Ruby
117 lines
3.1 KiB
Ruby
module Noop
|
|
class Task
|
|
attr_accessor :report
|
|
|
|
# Generate the report of the currently using files in this spec
|
|
# @return [String]
|
|
def status_report(context)
|
|
task = context.task
|
|
template = <<-'eof'
|
|
Facts: <%= task.file_path_facts %>
|
|
Hiera: <%= task.file_path_hiera %>
|
|
Spec: <%= task.file_path_spec %>
|
|
Modules: <%= Noop::Config.list_path_modules.join(':') %>
|
|
Manifest: <%= task.file_path_manifest %>
|
|
|
|
Node: <%= task.hiera_lookup 'fqdn', '?' %>
|
|
Roles: <%= task.hiera_array('roles', ['?']).join(' ') %>
|
|
|
|
Hiera hierarchy:
|
|
<% task.hiera_hierarchy.each do |element| -%>
|
|
* <%= element %>
|
|
<% end -%>
|
|
|
|
Facts hierarchy:
|
|
<% task.facts_hierarchy.reverse.each do |element| -%>
|
|
* <%= element %>
|
|
<% end -%>
|
|
eof
|
|
ERB.new(template, nil, '-').result(binding)
|
|
end
|
|
|
|
# Get a loaded gem version
|
|
# @return [String,nil]
|
|
def gem_version(gem)
|
|
gem = gem.to_s
|
|
return unless Object.const_defined? 'Gem'
|
|
return unless Gem.loaded_specs.is_a? Hash
|
|
return unless Gem.loaded_specs[gem].respond_to? :version
|
|
Gem.loaded_specs[gem].version
|
|
end
|
|
|
|
# Gem a report about RSpec gems versions
|
|
# @return [String]
|
|
def gem_versions_report
|
|
versions = "Ruby version: #{RUBY_VERSION}"
|
|
%w(puppet rspec rspec-puppet rspec-puppet-utils puppetlabs_spec_helper).each do |gem|
|
|
version = gem_version gem
|
|
versions += "\n'#{gem}' gem version: #{version}"if version
|
|
end
|
|
versions
|
|
end
|
|
|
|
# Load a report file of this task if it's present
|
|
def file_load_report_json
|
|
self.report = file_data_report_json
|
|
end
|
|
|
|
# Check if this task has report loaded
|
|
# @return [true,false]
|
|
def has_report?
|
|
report.is_a? Hash and report['examples'].is_a? Array
|
|
end
|
|
|
|
# @return [Pathname]
|
|
def file_name_report_json
|
|
Noop::Utils.convert_to_path "#{file_name_base_task_report}.json"
|
|
end
|
|
|
|
# @return [Pathname]
|
|
def file_path_report_json
|
|
Noop::Config.dir_path_reports + file_name_report_json
|
|
end
|
|
|
|
# @return [Pathname]
|
|
def dir_name_coverage
|
|
Pathname.new 'coverage'
|
|
end
|
|
|
|
# @return [Pathname]
|
|
def dir_path_coverage
|
|
Noop::Config.dir_path_reports + dir_name_coverage
|
|
end
|
|
|
|
# @return [Pathname]
|
|
def file_path_coverage_report
|
|
dir_path_coverage + Noop::Utils.convert_to_path("#{file_name_base_task_report}.yaml")
|
|
end
|
|
|
|
# @return [Hash]
|
|
def file_data_report_json
|
|
return unless file_present_report_json?
|
|
file_data = nil
|
|
begin
|
|
# debug "Reading report file: #{file_path_report_json}"
|
|
file_content = File.read file_path_report_json.to_s
|
|
file_data = JSON.load file_content
|
|
return unless file_data.is_a? Hash
|
|
rescue
|
|
debug "Error parsing report file: #{file_path_report_json}"
|
|
nil
|
|
end
|
|
file_data
|
|
end
|
|
|
|
# Remove the report file
|
|
def file_remove_report_json
|
|
#debug "Removing report file: #{file_path_report_json}"
|
|
file_path_report_json.unlink if file_present_report_json?
|
|
end
|
|
|
|
# @return [true,false]
|
|
def file_present_report_json?
|
|
file_path_report_json.exist?
|
|
end
|
|
end
|
|
end
|