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)



35
36
37
38
# File 'lib/pdd/source.rb', line 35

def initialize(file, path)
  @file = file
  @path = path
end

Instance Method Details

#match_markers(line) ⇒ Object



40
41
42
43
44
# File 'lib/pdd/source.rb', line 40

def match_markers(line)
  MARKERS.map do |mkr|
    %r{(.*(?:^|\s))#{mkr}\s+#([\w\-.:/]+)\s+(.+)}.match(line)
  end.compact
end

#puzzlesObject

Fetch all puzzles.



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/pdd/source.rb', line 47

def puzzles
  PDD.log.info "Reading #{@path} ..."
  puzzles = []
  lines = File.readlines(@file, encoding: 'UTF-8')
  lines.each_with_index do |line, idx|
    begin
      check_rules(line)
      match_markers(line).each do |m|
        puzzles << puzzle(lines.drop(idx + 1), m, idx)
      end
    rescue Error, ArgumentError => ex
      message = "#{@path}:#{idx + 1} #{ex.message}"
      raise Error, message unless PDD.opts && PDD.opts['skip-errors']
      PDD.log.warn message
    end
  end
  puzzles
end