lib/monolens/command.rb in monolens-0.6.0 vs lib/monolens/command.rb in monolens-0.6.1
- old
+ new
@@ -14,42 +14,58 @@
@enclose = []
@output_format = :json
@stream = false
@fail_strategy = 'fail'
@override = false
+ @execute_tests = false
#
@input_file = nil
@use_stdin = false
+ #
+ @use_paint = true
end
attr_reader :argv, :stdin, :stdout, :stderr
attr_reader :pretty, :stream, :override
attr_reader :enclose_map, :fail_strategy
attr_reader :input_file, :use_stdin
+ attr_reader :use_paint
+ alias :use_paint? :use_paint
+ attr_reader :execute_tests
+ alias :execute_tests? :execute_tests
def self.call(argv, stdin = $stdin, stdout = $stdout, stderr = $stderr)
new(argv, stdin, stdout, stderr).call
end
def call
lens, @input_file = options.parse!(argv)
- show_help_and_exit if lens.nil? || (@input_file.nil? && !use_stdin)
+ show_help_and_exit if lens.nil? || (@input_file.nil? && !use_stdin && !execute_tests?)
- lens_data, input = read_file(lens), read_input
- lens = build_lens(lens_data)
- error_handler = ErrorHandler.new
- result = lens.call(input, error_handler: error_handler)
+ lens = build_lens(read_file(lens))
+ if execute_tests?
+ execute_tests!(lens)
+ else
+ input = read_input
+ error_handler = ErrorHandler.new
+ result = lens.call(input, error_handler: error_handler)
- unless error_handler.empty?
- stderr.puts(error_handler.report)
- end
+ unless error_handler.empty?
+ stderr.puts(error_handler.report)
+ end
- output_result(result) if result
+ output_result(result) if result
+ end
rescue Monolens::LensError => ex
stderr.puts("[#{ex.location.join('/')}] #{ex.message}")
- do_exit(-2)
+ do_exit(1)
end
+ def execute_tests!(lens)
+ require_relative 'command/tester'
+ Tester.new(self).call(lens)
+ end
+
def read_input
if use_stdin
JSON.parse(stdin.read)
else
read_file(@input_file)
@@ -128,10 +144,16 @@
@output_format = :json
end
opts.on('--override', 'Write output back to the input file') do
@override = true
end
+ opts.on('--test', 'Execute tests embedded in the lens file') do
+ @execute_tests = true
+ end
+ opts.on('--[no-]paint', 'Do (not) paint error messages') do |flag|
+ @use_paint = flag
+ end
end
end
def build_lens(lens_data)
lens_data = @enclose.inject(lens_data) do |memo, lens_name|
@@ -148,10 +170,10 @@
'core.literal' => {
'defn' => memo,
}
}
end
- end
+ end unless execute_tests?
Monolens.lens(lens_data)
end
def output_result(result)
with_output_io do |io|