class DopCommon::PreProcessor
Constants
- REGEXP
Public Class Methods
load_plan(file)
click to toggle source
# File lib/dop_common/pre_processor.rb, line 13 def self.load_plan(file) file_abs = Pathname.new(file).expand_path.to_s parse_file(file_abs, []).join end
Private Class Methods
absolute_filepath(file, new_file)
click to toggle source
# File lib/dop_common/pre_processor.rb, line 41 def self.absolute_filepath(file, new_file) if Pathname.new(new_file).absolute? new_file else base_dir = Pathname.new(file).expand_path.dirname File.join(base_dir, new_file) end end
detect_loop(file_stack, file)
click to toggle source
# File lib/dop_common/pre_processor.rb, line 63 def self.detect_loop(file_stack, file) files = file_stack.map{|f| f[0] } if files.include?(file) files_i = file_stack.map{|f| "#{f[0]}:#{f[1]}" } files_i << file raise PlanParsingError, "PreProcessor: Include loop detected [ #{files_i.join(' --> ')} ]" end end
filter_name(file)
click to toggle source
# File lib/dop_common/pre_processor.rb, line 50 def self.filter_name(file) file[/^"(.*)"$/, 1] or file[/^'(.*)'$/, 1] or file end
parse_file(file, file_stack)
click to toggle source
# File lib/dop_common/pre_processor.rb, line 20 def self.parse_file(file, file_stack) detect_loop(file_stack, file) validate_file(file) content = [] File.readlines(file).each_with_index do |line, i| new_file_stack = file_stack.dup new_file_stack << [file, i] position = (line =~ REGEXP) if position position += 1 if position > 0 filtered_name = filter_name(line[REGEXP, 1]) new_file = absolute_filepath(file, filtered_name) spacer = ' ' * position content += parse_file(new_file, new_file_stack).map {|l| spacer + l} else content << line end end content end
validate_file(file)
click to toggle source
# File lib/dop_common/pre_processor.rb, line 56 def self.validate_file(file) File.exist?(file) or raise PlanParsingError, "PreProcessor: The included file #{file} does not exist!" File.readable?(file) or raise PlanParsingError, "PreProcessor: The included file #{file} is not readable!" end