add flat source reader

This commit is contained in:
Dominik Richter 2016-02-21 18:03:48 +01:00 committed by Stephan Renatus
parent c9d1272f49
commit c79d9f7777
4 changed files with 101 additions and 1 deletions

View file

@ -33,7 +33,7 @@ module Inspec
end
end
class RelFetcher
class RelFetcher < Fetcher
attr_reader :files
def initialize(fetcher)

View file

@ -29,3 +29,4 @@ module Inspec
end
require 'source_readers/inspec'
require 'source_readers/flat'

View 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

View 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