class Statements::Reader
Attributes
classes[R]
document[R]
pages[R]
Public Class Methods
cell_pattern()
click to toggle source
# File lib/statements/reader.rb, line 52 def self.cell_pattern raise NotImplementedError end
for_file(file)
click to toggle source
# File lib/statements/reader.rb, line 16 def self.for_file(file) file = file.to_s pages = (file =~ /\.pdf$/i) ? PdfReader.read(file) : File.read(file).split(/-{5,}/) classes.each do |klass| reader = klass.new(pages) return reader if reader.valid? end nil end
new(pages)
click to toggle source
# File lib/statements/reader.rb, line 43 def initialize(pages) @pages = pages @document = pages.join("\n").freeze end
read_dir(dir)
click to toggle source
# File lib/statements/reader.rb, line 26 def self.read_dir(dir) base = Pathname(dir).realpath Dir[base.join('**/*.{pdf,txt}')].each do |path| rel_path = Pathname(path).relative_path_from(base) begin doc = Document.find_or_initialize_by(path: rel_path.to_s) doc.scan base: base rescue => e puts "error: #{e.class.name} #{e.message}\n #{e.backtrace.join "\n "}" end end end
Public Instance Methods
cell_pattern()
click to toggle source
# File lib/statements/reader.rb, line 48 def cell_pattern self.class.cell_pattern end
search_for_transactions()
click to toggle source
# File lib/statements/reader.rb, line 60 def search_for_transactions index = 0 result = [] pages.each.with_index do |page, page_index| page.scan(cell_pattern).each do |cells| result << Transaction.new(document_line: index += 1).tap do |transaction| args = [cells, transaction, page_index] arity = method(:parse_cells).arity parse_cells *args[0..(arity - 1)] end end end result end
transactions()
click to toggle source
# File lib/statements/reader.rb, line 56 def transactions @transactions ||= search_for_transactions end