craftyclicks 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/lib/address.rb ADDED
@@ -0,0 +1,27 @@
1
+ module CraftyClicks
2
+ class Address
3
+
4
+ include ActiveModel::Validations
5
+ include ActiveModel::AttributeMethods
6
+
7
+ attr_accessor :name_number, :street, :town_city, :post_code, :player
8
+
9
+ validates :name_number, :street, :town_city, :post_code, presence: true
10
+
11
+ def initialize(params)
12
+ params.each do |k, v|
13
+ if respond_to?("#{k}=")
14
+ send("#{k}=", v)
15
+ end
16
+ end
17
+ end
18
+
19
+ def to_s
20
+ "#{self.name_number} #{self.street}, #{self.town_city}, #{self.post_code}"
21
+ end
22
+
23
+ def post_code
24
+ @post_code.upcase
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,62 @@
1
+ module CraftyClicks
2
+
3
+ class AddressResponse
4
+
5
+ def initialize(post_code)
6
+ @post_code = post_code
7
+ response = Curl.get("http://pcls1.craftyclicks.co.uk/xml/rapidaddress?postcode=#{URI::escape(@post_code)}&key=#{CraftyClicks.key}")
8
+ @document = Nokogiri::XML::Document.parse(response.body_str)
9
+ @addresses = []
10
+ end
11
+
12
+ def addresses
13
+ thoroughfares.each do |thoroughfare|
14
+ delivery_points(thoroughfare).each { |point| address_from_point(point, thoroughfare) }
15
+ end
16
+ if @addresses.count == 0
17
+ raise "No Addresses Returned"
18
+ else
19
+ @addresses
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ def address_from_point(point, thoroughfare)
26
+ address = Address.new(name_number: house_name_or_number(point), street: street(thoroughfare), town_city: town.titlecase, post_code: code)
27
+ @addresses.push address if address.valid?
28
+ end
29
+
30
+ def street(thoroughfare)
31
+ if thoroughfare.css('thoroughfare_descriptor').inner_text.titlecase == ''
32
+ thoroughfare.css('thoroughfare_name').inner_text.titlecase
33
+ else
34
+ thoroughfare.css('thoroughfare_name').inner_text.titlecase + ' ' + thoroughfare.css('thoroughfare_descriptor').inner_text.titlecase
35
+ end
36
+ end
37
+
38
+ def delivery_points(thoroughfare)
39
+ thoroughfare.css('delivery_point')
40
+ end
41
+
42
+ def thoroughfares
43
+ @document.css('thoroughfare')
44
+ end
45
+
46
+ def code
47
+ @document.css('postcode').inner_html
48
+ end
49
+
50
+ def town
51
+ @document.css('town').inner_html
52
+ end
53
+
54
+ def house_name_or_number(delivery_point)
55
+ number = delivery_point.css('building_number').inner_text
56
+ if number.to_s.empty?
57
+ number = delivery_point.css('building_name').inner_text
58
+ end
59
+ number.titlecase
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,9 @@
1
+ module CraftyClicks
2
+ mattr_accessor :key
3
+ end
4
+
5
+ require 'active_model'
6
+ require 'curb'
7
+ require 'nokogiri'
8
+ require 'address'
9
+ require 'address_response'
metadata ADDED
@@ -0,0 +1,95 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: craftyclicks
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Dom Barker
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-02-06 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: activemodel
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: nokogiri
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: curb
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ description: Simple wrapper for the craftyclicks address lookupservice
63
+ email: dom.barker808@gmail.com
64
+ executables: []
65
+ extensions: []
66
+ extra_rdoc_files: []
67
+ files:
68
+ - lib/craftyclicks.rb
69
+ - lib/address_response.rb
70
+ - lib/address.rb
71
+ homepage: https://github.com/UnomeeLtd/craftyclicks
72
+ licenses: []
73
+ post_install_message:
74
+ rdoc_options: []
75
+ require_paths:
76
+ - lib
77
+ required_ruby_version: !ruby/object:Gem::Requirement
78
+ none: false
79
+ requirements:
80
+ - - ! '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ required_rubygems_version: !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ! '>='
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ requirements: []
90
+ rubyforge_project:
91
+ rubygems_version: 1.8.24
92
+ signing_key:
93
+ specification_version: 3
94
+ summary: parsing XML on the client sucks
95
+ test_files: []