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 62 63 64 65 66 |
# File 'lib/pdd/source.rb', line 38 def puzzles PDD.log.info "Reading #{@path}..." puzzles = [] lines = File.readlines(@file, encoding: 'UTF-8') 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 /\x40todo\s+#\s/.match(line) do |_| raise Error, "\x40todo found, but there is an unexpected space \ after the hash sign, it should not be there, \ see 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.message}" end end puzzles end |