mirror of
https://github.com/inspec/inspec
synced 2024-09-20 14:31:58 +00:00
add flat source reader
This commit is contained in:
parent
c9d1272f49
commit
c79d9f7777
4 changed files with 101 additions and 1 deletions
|
@ -33,7 +33,7 @@ module Inspec
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class RelFetcher
|
class RelFetcher < Fetcher
|
||||||
attr_reader :files
|
attr_reader :files
|
||||||
|
|
||||||
def initialize(fetcher)
|
def initialize(fetcher)
|
||||||
|
|
|
@ -29,3 +29,4 @@ module Inspec
|
||||||
end
|
end
|
||||||
|
|
||||||
require 'source_readers/inspec'
|
require 'source_readers/inspec'
|
||||||
|
require 'source_readers/flat'
|
||||||
|
|
38
lib/source_readers/flat.rb
Normal file
38
lib/source_readers/flat.rb
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
# encoding: utf-8
|
||||||
|
# author: Dominik Richter
|
||||||
|
# author: Christoph Hartmann
|
||||||
|
|
||||||
|
require 'inspec/fetcher'
|
||||||
|
require 'inspec/metadata'
|
||||||
|
|
||||||
|
module SourceReaders
|
||||||
|
class Flat < Inspec.source_reader(1)
|
||||||
|
name 'flat'
|
||||||
|
priority 5
|
||||||
|
|
||||||
|
def self.resolve(target)
|
||||||
|
# TODO: eventually remove the metadata.rb exception here
|
||||||
|
# when we have fully phased out metadata.rb in 1.0
|
||||||
|
files = target.files.find_all { |x|
|
||||||
|
x.end_with?('.rb') && !x.include?('/') && x != 'metadata.rb'
|
||||||
|
}
|
||||||
|
return nil if files.empty?
|
||||||
|
new(target, files)
|
||||||
|
end
|
||||||
|
|
||||||
|
attr_reader :metadata, :tests, :libraries
|
||||||
|
|
||||||
|
def initialize(target, files)
|
||||||
|
@target = target
|
||||||
|
@metadata = ::Inspec::Metadata.new(nil)
|
||||||
|
@tests = load_tests(files)
|
||||||
|
@libraries = {}
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def load_tests(files)
|
||||||
|
Hash[files.map { |x| [x, @target.read(x)] }]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
61
test/unit/source_readers/flat_test.rb
Normal file
61
test/unit/source_readers/flat_test.rb
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
# encoding: utf-8
|
||||||
|
# author: Dominik Richter
|
||||||
|
# author: Christoph Hartmann
|
||||||
|
|
||||||
|
require 'helper'
|
||||||
|
|
||||||
|
describe SourceReaders::Flat do
|
||||||
|
let(:reader) { SourceReaders::Flat }
|
||||||
|
|
||||||
|
it 'registers with the source readers registry' do
|
||||||
|
reg = Inspec::SourceReader.registry
|
||||||
|
_(reg['flat']).must_equal reader
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'with a flat file' do
|
||||||
|
let(:target) { Inspec::Fetcher.resolve(__FILE__) }
|
||||||
|
let(:res) { Inspec::SourceReader.resolve(target.relative_target) }
|
||||||
|
|
||||||
|
it 'resolves the target' do
|
||||||
|
_(res).must_be_kind_of reader
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'has no metadata' do
|
||||||
|
_(res.metadata.params).must_equal({})
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'retrieves all files' do
|
||||||
|
_(res.tests.keys).must_equal [File.basename(__FILE__)]
|
||||||
|
_(res.tests.values[0]).must_equal File.read(__FILE__)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'has no libraries' do
|
||||||
|
_(res.libraries).must_be_empty
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'with a flat folder' do
|
||||||
|
let(:target) { Inspec::Fetcher.resolve(File.dirname(__FILE__)) }
|
||||||
|
let(:res) { Inspec::SourceReader.resolve(target.relative_target) }
|
||||||
|
|
||||||
|
it 'resolves the target' do
|
||||||
|
_(res).must_be_kind_of reader
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'has no metadata' do
|
||||||
|
_(res.metadata.params).must_equal({})
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'retrieves all files' do
|
||||||
|
dir = File.dirname(__FILE__)
|
||||||
|
full_files = Dir[File.join(dir, '**')]
|
||||||
|
files = full_files.map { |x| x.sub(dir+'/', '') }
|
||||||
|
_(res.tests.keys).must_equal files
|
||||||
|
_(res.tests.values[0]).must_equal File.read(full_files[0])
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'has no libraries' do
|
||||||
|
_(res.libraries).must_be_empty
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue