ruby-postcodeanywhere 0.0.2 → 0.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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"