Class: Postnummer::Parser

Inherits:
Object
  • Object
show all
Defined in:
lib/postnummer/parser.rb

Overview

Class that do the parsing from posten.se

Instance Method Summary collapse

Constructor Details

#initialize(zip_code) ⇒ Parser

Returns a new instance of Parser.

Parameters:

  • zip_code (String)

    a swedish zip_code



7
8
9
# File 'lib/postnummer/parser.rb', line 7

def initialize(zip_code)
  @zip_code = zip_code
end

Instance Method Details

#parseArray<Street>

Makes the web call and parses out a list of Streets

Returns:

  • (Array<Street>)

    a list of Street objects. Returns empty array if no streets found



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/postnummer/parser.rb', line 13

def parse
  url = "http://www.posten.se/soktjanst/postnummersok/resultat.jspv?pnr=#{@zip_code}"
  agent = Mechanize.new

  streets = []

  agent.get url do |page|
    rows = page.search 'table.result tr'
    rows.each do |tr|
      name = tr.search('td[1]').text
      street_numbers_string = tr.search('td[2]').text
      zip_code = tr.search('td[3]').text
      city = tr.search('td[4]').text

      street_numbers = parse_street_numbers(street_numbers_string)
      streets << Street.new(name, street_numbers[:first], street_numbers[:last], zip_code, city)
    end
  end

  streets
end

#parse_street_numbers(street_numbers) ⇒ Hash

Parses the street numbers from a street_numbers string

Returns:

  • (Hash)

    hash that has the start and end values. Use key :first and :last to access



38
39
40
41
# File 'lib/postnummer/parser.rb', line 38

def parse_street_numbers(street_numbers)
  numbers = street_numbers.split ' - '
  { first: numbers[0], last: numbers[1] }
end