Class: PDD::Source

Inherits:
Object
  • Object
show all
Defined in:
lib/pdd/source.rb

Overview

Source.

Instance Method Summary collapse

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

#puzzlesObject

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