Class: Prolenea::ProleneaResponseMiddleware

Inherits:
Faraday::Response::Middleware
  • Object
show all
Defined in:
lib/prolenea/middleware/prolenea_response_middleware.rb

Constant Summary collapse

PORTED_DATE_TIMEZONE =
'-0500'
PORTED_DATE_FORMAT =
'%Y%m%d%H'
RESPONSE_ROW_NAMES =
%w(
  number
  local_routing_number
  ported_date
  alternative_spid
  alternative_spid_name
  line_type
  operating_company_number
  operating_company_name
  lata
  city
  state
)

Instance Method Summary collapse

Instance Method Details

#on_complete(env) ⇒ Object



22
23
24
25
26
27
28
29
30
31
# File 'lib/prolenea/middleware/prolenea_response_middleware.rb', line 22

def on_complete(env)
  case env[:status]
  when 200
    env[:parsed_body] = self.parse_body env[:body]
  else
    raise ProleneaRequestError.new({}), "Recieved an unexpected HTTP response code #{env[:status]}"
  end

  env
end

#parse_body(body) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/prolenea/middleware/prolenea_response_middleware.rb', line 33

def parse_body(body)
  number_info = {}
  rows = body.split("\r\n")

  if rows.length != RESPONSE_ROW_NAMES.length
    raise ProleneaRequestError.new({}), "Unable to parse HTTP response body"
  end

  rows.each_with_index do |row, i|
    number_info[RESPONSE_ROW_NAMES[i]] = (row == '-' ? nil : row)
  end

  self.parse_number_info number_info
end

#parse_number_info(number_info) ⇒ Object



48
49
50
51
52
53
54
55
56
# File 'lib/prolenea/middleware/prolenea_response_middleware.rb', line 48

def parse_number_info(number_info)
  if number_info['ported_date']
    parsed_ported_date = self.parse_ported_date number_info['ported_date']

    number_info['ported_date'] = parsed_ported_date.iso8601
  end

  number_info
end

#parse_ported_date(s) ⇒ Object



58
59
60
61
62
# File 'lib/prolenea/middleware/prolenea_response_middleware.rb', line 58

def parse_ported_date(s)
  if !s.nil? && !s.empty?
    DateTime.parse "#{s} #{PORTED_DATE_TIMEZONE}", "#{PORTED_DATE_FORMAT} %z"
  end
end