Sha256: 4ee1a5d2e9508fe5629391a91b33829596081edc0ae4b813bec41df50cd9e963

Contents?: true

Size: 960 Bytes

Versions: 2

Compression:

Stored size: 960 Bytes

Contents

module SEPOMEX
  class Strategy
    ACROGENESIS = 'acrogenesis'.freeze
    HCKDRK = 'hckdrk'.freeze

    def self.call(*args, &block)
      new(*args, &block).call
    end

    def initialize(zip_code)
      @zip_code = zip_code
      @clients = [HCKDRK, ACROGENESIS]
    end

    def call
      raise ArgumentError if @zip_code.blank?

      zip_code_result = {}
      @clients.each do |client|
        strategy = processor(client)
        zip_code_result = strategy.query
        break if zip_code_result.settlement.present?
      rescue StandardError => e
      end
      raise DataNotFoundError if zip_code_result.blank? || zip_code_result.settlement.blank?

      zip_code_result
    end

    private

    def processor(client)
      case client
      when HCKDRK
        SEPOMEX::Clients::Hckdrk.new(@zip_code)
      when ACROGENESIS
        SEPOMEX::Clients::Acrogenesis.new(@zip_code)
      else
        raise ArgumentError
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
sepomex_client-0.2.0 lib/sepomex/strategy.rb
sepomex_client-0.1.1 lib/sepomex/strategy.rb