ruby-postcodeanywhere 0.0.2 → 0.0.10

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.2
1
+ 0.0.10
@@ -2,10 +2,10 @@ require 'httparty'
2
2
 
3
3
  module PostcodeAnywhere
4
4
 
5
- ADDRESS_LOOKUP = "http://services.postcodeanywhere.co.uk/xml.aspx"
6
- ADDRESS_FETCH = "http://services.postcodeanywhere.co.uk/dataset.aspx?action=fetch"
5
+ ADDRESS_LOOKUP = "https://services.postcodeanywhere.co.uk/PostcodeAnywhere/Interactive/Find/v1.10/xmla.ws"
6
+ ADDRESS_FETCH = "https://services.postcodeanywhere.co.uk/PostcodeAnywhere/Interactive/RetrieveById/v1.20/xmla.ws"
7
7
 
8
- RETRIEVE_BY_PARTS_URL = "http://services.postcodeanywhere.co.uk/PostcodeAnywhere/Interactive/RetrieveByParts/v1.00/xmla.ws?"
8
+ RETRIEVE_BY_PARTS_URL = "https://services.postcodeanywhere.co.uk/PostcodeAnywhere/Interactive/RetrieveByParts/v1.00/xmla.ws"
9
9
 
10
10
  # Account codes to access the PostcodeAnywhere Service
11
11
  mattr_accessor :account_code
@@ -22,112 +22,98 @@ module PostcodeAnywhere
22
22
  include HTTParty
23
23
  format :xml
24
24
 
25
- attr_accessor :postcode, :country_code, :fetch_id, :building
26
-
27
- def initialize(args={})
28
- self.postcode = args[:postcode]
29
- self.country_code = args[:country_code]
30
- self.fetch_id = args[:fetch_id]
31
- end
32
-
33
- def lookup
34
- data = PostcodeSearch.get self.lookup_url
25
+ def lookup(postcode)
26
+ options={ "SearchTerm" => postcode }
27
+ options.merge!(self.license_information)
28
+
29
+ data = PostcodeSearch.get( ADDRESS_LOOKUP, {:query => options} )
35
30
  formatted_data = []
36
- unless data["PostcodeAnywhere"]["Schema"]["Field"][0]["Name"] == "error_number"
37
- formatted_data = data["PostcodeAnywhere"]["Data"]["Item"]
31
+
32
+ raise 'No Data Found' if data.parsed_response['Table']['Columns']['Column'][0]['Name'] == "Error"
33
+
34
+ unless data.parsed_response['Table']['Columns']['Column'][0]['Name'] == "Error"
35
+ data.parsed_response["Table"]["Rows"]["Row"].each do |item|
36
+ data_item = AddressListItem.new
37
+ data_item.id = item['Id']
38
+ data_item.street_address = item['StreetAddress']
39
+ data_item.place = item['Place']
40
+
41
+ formatted_data << data_item
42
+ end
38
43
  end
39
44
  formatted_data
40
45
  end
41
46
 
42
- def fetch_by_parts
43
- data = PostcodeSearch.get self.fetch_by_parts_url
44
- formatted_data = data["NewDataSet"]["Data"]
45
- @address_lookup = AddressLookup.new
47
+ def fetch_by_parts(options={})
48
+ options.merge!(self.license_information)
46
49
 
47
- if self.country_code == 'GB'
48
- @address_lookup.postcode = formatted_data["postcode"]
49
- @address_lookup.address_line_1 = formatted_data["line1"]
50
- @address_lookup.address_line_2 = formatted_data["line2"]
51
- @address_lookup.address_line_3 = formatted_data["line3"]
52
- @address_lookup.post_town = formatted_data["post_town"]
53
- @address_lookup.county = formatted_data["county"].blank? ? formatted_data["post_town"] : formatted_data["county"]
50
+ if options['postcode']
51
+ options['postcode'] = options['postcode'].gsub(/\s/, '')
54
52
  end
55
53
 
56
- @address_lookup
57
- end
58
-
59
- def fetch
60
- data = PostcodeSearch.get self.fetch_url
61
- formatted_data = data["NewDataSet"]["Data"]
62
- @address_lookup = AddressLookup.new
63
- if self.country_code == 'GB'
64
- @address_lookup.postcode = formatted_data["postcode"]
65
- @address_lookup.address_line_1 = formatted_data["line1"]
66
- @address_lookup.address_line_2 = formatted_data["line2"]
67
- @address_lookup.address_line_3 = formatted_data["line3"]
68
- @address_lookup.post_town = formatted_data["post_town"]
69
- @address_lookup.county = formatted_data["county"].blank? ? formatted_data["post_town"] : formatted_data["county"]
70
- elsif self.country_code == 'US'
71
- @address_lookup.postcode = formatted_data["zip4"].blank? ? @postcode_search.postcode : formatted_data["zip4"]
72
- @address_lookup.address_line_1 = formatted_data["line1"]
73
- @address_lookup.address_line_2 = formatted_data["line2"]
74
- @address_lookup.address_line_3 = formatted_data["line3"]
75
- @address_lookup.post_town = formatted_data["city"]
76
- @address_lookup.county = formatted_data["county_name"]+", "+formatted_data["state"]
77
- else
78
-
79
- end
80
- @address_lookup
81
- end
82
-
83
- def lookup_url
84
- ADDRESS_LOOKUP+"?"+self.lookup_type+"&"+self.postcode_with_no_spaces+self.selected_country+"&"+self.license_information
85
- end
86
-
87
- def fetch_by_parts_url
88
- RETRIEVE_BY_PARTS_URL+"&"+self.address_building+"&"+self.address_fetch_id+self.selected_country+"&"+self.license_information
89
- end
90
-
91
- def selected_country
92
- if self.country_code == "GB"
93
- ""
94
- else
95
- "&country="+self.country_code
96
- end
97
- end
98
-
99
- def address_fetch_id
100
- "id="+self.fetch_id
101
- end
102
-
103
- def address_building
104
- "building="+self.building
105
- end
106
-
107
- def lookup_type
108
- if self.country_code == "GB"
109
- "action=lookup&type=by_postcode"
110
- elsif self.country_code == "US"
111
- "action=lookup&type=by_zip"
112
- else
113
- "action=international&type=fetch_streets"
114
- end
54
+ data = PostcodeSearch.get( RETRIEVE_BY_PARTS_URL, {:query => options} )
55
+
56
+ process_address(data)
115
57
  end
116
58
 
117
- def postcode_with_no_spaces
118
- (self.country_code=="US" ? "zip=" : "postcode=")+self.postcode.gsub(/\s/, '')
59
+ def fetch(id)
60
+ options={ :id => id }
61
+ options.merge!(self.license_information)
62
+
63
+ data = PostcodeSearch.get( ADDRESS_FETCH, {:query => options} )
64
+
65
+ process_address(data)
119
66
  end
120
67
 
121
68
  def license_information
122
- "account_code="+PostcodeAnywhere.account_code+"&license_code="+PostcodeAnywhere.license_code
69
+ {:account_code => PostcodeAnywhere.account_code, :license_code => PostcodeAnywhere.license_code}
123
70
  end
71
+
72
+
73
+ private
74
+ def process_address(data)
75
+
76
+ raise 'No Data Found' if data.parsed_response['Table']['Columns']['Column'][0]['Name'] == "Error"
77
+
78
+ formatted_data = data.parsed_response["Table"]["Rows"]["Row"]
79
+
80
+ address_lookup = AddressLookup.new
81
+
82
+ address_lookup.mailsort = formatted_data["Mailsort"]
83
+ address_lookup.barcode = formatted_data["Barcode"]
84
+ address_lookup.type = formatted_data["Type"]
85
+
86
+ address_lookup.udprn = formatted_data["Udprn"]
87
+ address_lookup.company = formatted_data["Company"]
88
+ address_lookup.department = formatted_data["Department"]
89
+ address_lookup.postcode = formatted_data["Postcode"]
90
+ address_lookup.address_line_1 = formatted_data["Line1"]
91
+ address_lookup.address_line_2 = formatted_data["Line2"]
92
+ address_lookup.address_line_3 = formatted_data["Line3"]
93
+ address_lookup.address_line_4 = formatted_data["Line4"]
94
+ address_lookup.address_line_5 = formatted_data["Line5"]
95
+ address_lookup.post_town = formatted_data["PostTown"]
96
+ address_lookup.county = formatted_data["County"].blank? ? formatted_data["PostTown"] : formatted_data["County"]
97
+
98
+
99
+ address_lookup
100
+ end
101
+
124
102
 
125
103
  end
126
104
 
127
105
  class AddressLookup
128
106
 
129
- attr_accessor :postcode, :address_line_1, :address_line_2, :address_line_3, :post_town, :county
130
- attr_accessor :city, :county_name, :zip4, :state
107
+ attr_accessor :postcode, :address_line_1, :address_line_2, :address_line_3, :address_line_4, :address_line_5
108
+ attr_accessor :post_town, :county, :city, :county_name, :zip4, :state, :udprn, :company, :department
109
+ attr_accessor :mailsort, :barcode, :type
131
110
 
111
+ end
112
+
113
+ class AddressListItem
114
+
115
+ attr_accessor :id, :street_address, :place
116
+
132
117
  end
118
+
133
119
  end
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{ruby-postcodeanywhere}
8
- s.version = "0.0.2"
8
+ s.version = "0.0.10"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = [%q{Chris Norman}]
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: ruby-postcodeanywhere
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.2
5
+ version: 0.0.10
6
6
  platform: ruby
7
7
  authors:
8
8
  - Chris Norman
@@ -103,7 +103,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
103
103
  requirements:
104
104
  - - ">="
105
105
  - !ruby/object:Gem::Version
106
- hash: 46236617627018293
106
+ hash: 3507365170554414100
107
107
  segments:
108
108
  - 0
109
109
  version: "0"