lib/mindee/product/us/us_mail/us_mail_v3_document.rb
# frozen_string_literal: true require_relative '../../../parsing' require_relative 'us_mail_v3_sender_address' require_relative 'us_mail_v3_recipient_addresses' module Mindee module Product module US module UsMail # US Mail API version 3.0 document data. class UsMailV3Document < Mindee::Parsing::Common::Prediction include Mindee::Parsing::Standard # Whether the mailing is marked as return to sender. # @return [Mindee::Parsing::Standard::BooleanField] attr_reader :is_return_to_sender # The addresses of the recipients. # @return [Mindee::Product::US::UsMail::UsMailV3RecipientAddresses] attr_reader :recipient_addresses # The names of the recipients. # @return [Array<Mindee::Parsing::Standard::StringField>] attr_reader :recipient_names # The address of the sender. # @return [Mindee::Product::US::UsMail::UsMailV3SenderAddress] attr_reader :sender_address # The name of the sender. # @return [Mindee::Parsing::Standard::StringField] attr_reader :sender_name # @param prediction [Hash] # @param page_id [Integer, nil] def initialize(prediction, page_id) super @is_return_to_sender = Parsing::Standard::BooleanField.new( prediction['is_return_to_sender'], page_id ) @recipient_addresses = Product::US::UsMail::UsMailV3RecipientAddresses.new( prediction['recipient_addresses'], page_id ) @recipient_names = [] # : Array[Parsing::Standard::StringField] prediction['recipient_names'].each do |item| @recipient_names.push(Parsing::Standard::StringField.new(item, page_id)) end @sender_address = Product::US::UsMail::UsMailV3SenderAddress.new( prediction['sender_address'], page_id ) @sender_name = Parsing::Standard::StringField.new( prediction['sender_name'], page_id ) end # @return [String] def to_s sender_address = @sender_address.to_s recipient_names = @recipient_names.join("\n #{' ' * 17}") recipient_addresses = recipient_addresses_to_s out_str = String.new out_str << "\n:Sender Name: #{@sender_name}".rstrip out_str << "\n:Sender Address:" out_str << sender_address out_str << "\n:Recipient Names: #{recipient_names}".rstrip out_str << "\n:Recipient Addresses:" out_str << recipient_addresses out_str << "\n:Return to Sender: #{@is_return_to_sender}".rstrip out_str[1..].to_s end private # @param char [String] # @return [String] def recipient_addresses_separator(char) out_str = String.new out_str << ' ' out_str << "+#{char * 17}" out_str << "+#{char * 37}" out_str << "+#{char * 19}" out_str << "+#{char * 13}" out_str << "+#{char * 24}" out_str << "+#{char * 7}" out_str << "+#{char * 27}" out_str << "+#{char * 17}" out_str << '+' out_str end # @return [String] def recipient_addresses_to_s return '' if @recipient_addresses.empty? line_items = @recipient_addresses.map(&:to_table_line).join("\n#{recipient_addresses_separator('-')}\n ") out_str = String.new out_str << "\n#{recipient_addresses_separator('-')}" out_str << "\n |" out_str << ' City |' out_str << ' Complete Address |' out_str << ' Is Address Change |' out_str << ' Postal Code |' out_str << ' Private Mailbox Number |' out_str << ' State |' out_str << ' Street |' out_str << ' Unit |' out_str << "\n#{recipient_addresses_separator('=')}" out_str << "\n #{line_items}" out_str << "\n#{recipient_addresses_separator('-')}" out_str end end end end end end