lib/avmtrf1/forponto/parsers/espelho/day_node.rb



# frozen_string_literal: true

require_relative 'sub_node'

module Avmtrf1
  module Forponto
    module Parsers
      class Espelho < ::Aranha::Parsers::Html::Item
        class DayNode < SubNode
          include MethodsAsFields

          FIELDS = %w[date marcacoes summaries].freeze
          SUMMARIES_XPATH = './following-sibling::tr[1]//font[@class="fontetabptodados"]/p/text()'

          def initialize(*args)
            super
            @summaries = []
          end

          def add_summary(summary)
            @summaries << summary
          end

          def date_string
            node.at_xpath('.//font[@class="fontetabptodata"]/text()').to_s
          end

          def date
            m = %r{(\d{2})/(\d{2})/(\d{4})}.match(date_string)
            return Date.new(m[3].to_i, m[2].to_i, m[1].to_i) if m

            raise "Date not found at \"#{date_string}\""
          end

          def marcacoes_string
            node.at_xpath('.//font[@class="fontetabptomarc"]/text()').to_s
          end

          def marcacoes
            marcacoes_string.scan(/\d{2}:\d{2}/)
          end

          def summaries
            @summaries.map(&:data)
          end
        end
      end
    end
  end
end