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)
32 33 34 35 |
# File 'lib/pdd/source.rb', line 32 def initialize(file, path) @file = file @path = path end |
Instance Method Details
#puzzles ⇒ Object
Fetch all puzzles.
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/pdd/source.rb', line 38 def puzzles PDD.log.info "Reading #{@path}..." puzzles = [] lines = File.readlines(@file) lines.each_with_index do |line, idx| begin /[^\s]\x40todo/.match(line) do |_| raise Error, "\x40todo must have a leading space to become \ a puzzle, as this page explains: https://github.com/yegor256/pdd#how-to-format" end /\x40todo(?!\s+#)/.match(line) do |_| raise Error, "\x40todo found, but puzzle can't be parsed, \ most probably because \x40todo is not followed by a puzzle marker, \ as this page explains: https://github.com/yegor256/pdd#how-to-format" end %r{(.*(?:^|\s))\x40todo\s+#([\w\-\.:/]+)\s+(.+)}.match(line) do |m| puzzles << puzzle(lines.drop(idx + 1), m, idx) end rescue Error, ArgumentError => ex raise Error, "puzzle at line ##{idx + 1}; #{ex.}" end end puzzles end |