From 698a0d94ac402fee3e2e0cfc2fd35627b74dedb2 Mon Sep 17 00:00:00 2001 From: Yegor Bugayenko Date: Tue, 4 Nov 2014 16:39:31 +0100 Subject: [PATCH] #18 file name visible --- lib/pdd/source.rb | 18 ++++++++++++++++++ lib/pdd/sources.rb | 5 ++++- test/test_source.rb | 19 ++++++++++++++++++- 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/lib/pdd/source.rb b/lib/pdd/source.rb index 20c1538..f280543 100644 --- a/lib/pdd/source.rb +++ b/lib/pdd/source.rb @@ -92,4 +92,22 @@ def tail(lines, prefix) .map { |txt| txt[1, txt.length] } end end + + # Verbose Source. + class VerboseSource + # Ctor. + # +file+:: Absolute file name with source code + # +source+:: Instance of source + def initialize(file, source) + @file = file + @source = source + end + + # Fetch all puzzles. + def puzzles + @source.puzzles + rescue Error => ex + raise Error, "#{ex.message} in #{@file}" + end + end end diff --git a/lib/pdd/sources.rb b/lib/pdd/sources.rb index 1b1bbbf..566a7fa 100644 --- a/lib/pdd/sources.rb +++ b/lib/pdd/sources.rb @@ -50,7 +50,10 @@ def fetch files .select { |f| types.index { |re| @magic.file(f) =~ re } } .map do |file| - Source.new(file, file[@dir.length + 1, file.length]) + VerboseSource.new( + file, + Source.new(file, file[@dir.length + 1, file.length]) + ) end end diff --git a/test/test_source.rb b/test/test_source.rb index 78d6d67..9ba14ee 100644 --- a/test/test_source.rb +++ b/test/test_source.rb @@ -43,7 +43,7 @@ def test_parsing ~~ and it also has to work ' ) - list = PDD::Source.new(file, 'hey').puzzles + list = PDD::VerboseSource.new(file, PDD::Source.new(file, 'hey')).puzzles assert_equal 2, list.size puzzle = list.first assert_equal '2-3', puzzle.props[:lines] @@ -51,4 +51,21 @@ def test_parsing assert_equal '44', puzzle.props[:ticket] end end + + def test_failing_on_invalid_puzzle + Dir.mktmpdir 'test' do |dir| + file = File.join(dir, 'a.txt') + File.write( + file, + ' + * @todo #44 this is an incorrectly formatted puzzle, + * with a second line without a leading space + ' + ) + error = assert_raises PDD::Error do + PDD::VerboseSource.new(file, PDD::Source.new(file, 'hey')).puzzles + end + assert !error.message.index('Space expected').nil? + end + end end