Class: PDD::Source
- Inherits:
-
Object
- Object
- PDD::Source
- Defined in:
- lib/pdd/source.rb
Overview
Source.
Instance Method Summary collapse
-
#initialize(file, path) ⇒ Source
constructor
Ctor.
-
#puzzles ⇒ Object
Fetch all puzzles.
Constructor Details
#initialize(file, path) ⇒ Source
Ctor.
file-
Absolute file name with source code
path-
Path to show (without full file name)
34 35 36 37 |
# File 'lib/pdd/source.rb', line 34 def initialize(file, path) @file = file @path = path end |
Instance Method Details
#puzzles ⇒ Object
Fetch all puzzles.
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/pdd/source.rb', line 40 def puzzles PDD.log.info "reading #{@path}..." re = %r{(.*(?:^|\s))@todo\s+#([\w\-\.:/]+)\s+(.+)} puzzles = [] lines = File.readlines(@file) lines.each_with_index do |line, idx| begin re.match(line) do |match| puzzles << puzzle(lines.drop(idx + 1), match, idx) end rescue Error => ex raise Error, ["in line ##{idx + 1}", ex] rescue ArgumentError => ex raise Error, ["in line ##{idx + 1}", ex] end end lines.each_with_index do |line, idx| next unless line =~ /.*(^|\s)@todo\s+[^#]/ raise Error, "@todo found, but puzzle can't be parsed in line ##{idx}, \ most probably because TODO is not followed by a puzzle marker, as this page \ explains: https://github.com/yegor256/pdd#how-to-format" end puzzles end |