abr_lookup 0.1.0

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.
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,11 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in abn_lookup.gemspec
4
+ gemspec
5
+
6
+ gem 'rspec', '2.6.0'
7
+ gem 'rake', '0.8.7'
8
+ gem 'webmock', '1.7.6'
9
+ gem 'rack'
10
+ gem 'rack-test'
11
+ gem 'json'
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ Copyright (c) 2011 Daniel Neighman
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+
@@ -0,0 +1,86 @@
1
+ # AbrLookup
2
+
3
+ A simple Gem to perform ABN and ACN lookups for Australian Businesses
4
+
5
+ ## What you get
6
+
7
+ ### Successful Lookup
8
+
9
+ <pre><code>
10
+ lookup = AbrLookup::Lookup.new('my abn').lookup_abn!
11
+ lookup.abn # abn number
12
+ lookup.current # true if the abn is currently active
13
+ lookup.lookup_number # The number that was given to query
14
+
15
+ # Entity Information
16
+ lookup.entity_status # Active for active abns
17
+ lookup.entity_type # A code to indicate the type of entity
18
+ lookup.entity_type_description
19
+ lookup.effective_from # The date the abn was registered
20
+ lookup.effective_to # Not usable if the abn is still active
21
+ lookup.trading_name
22
+ lookup.state_code # The state the abn is registered in
23
+ lookup.postcode
24
+
25
+ # Business Registerer
26
+ lookup.given_name
27
+ lookup.family_name
28
+ </code></pre>
29
+
30
+ ### Failed Request
31
+
32
+ When a request fails, the lookup object implements an ActiveModel errors
33
+ object.
34
+
35
+ <pre><code>
36
+ lookup = AbrLookup::Lookup.new('something bad').lookup_abn!
37
+ lookup.errors.full_messages # Array of messages
38
+ </code></pre>
39
+
40
+ ### Use as middleware
41
+
42
+ You can use AbrLookup as middleware in your Rack application to respond
43
+ to JSON requests at "/abn\_lookup" and takes a parameter of 'abn'
44
+ containig the number to search for
45
+
46
+ #### Example
47
+
48
+ /abn\_lookup?abn=12345677 #=> A JSON response
49
+
50
+ To setup the middleware
51
+
52
+ #### Rack
53
+
54
+ <pre><code>use AbrLookup::Server
55
+ run app
56
+ </code></pre>
57
+
58
+ #### Rails
59
+
60
+ <pre><code>Rails.configuration.middleware.insert AbrLookup::Server</code></pre>
61
+
62
+
63
+
64
+ ## Configuration
65
+
66
+ There is only one configuration option at the moment that is valid.
67
+
68
+ guid - The guid that you get when you apply for access to the web
69
+ service from http://abr.business.gov.au/
70
+
71
+ By default, if there is a file config/abr.yml present, it will be loaded
72
+ and used as the configuration.
73
+
74
+ Customize the the configuration path with
75
+ <pre><code>AbrLookup.config_path = "my_path"</code></pre>
76
+
77
+ Configuration can also be set via a hash
78
+ <pre><code>AbrLookup.configuration = {'guid' => 'some
79
+ guid'}</code></pre>
80
+
81
+ ## Requirements
82
+
83
+ In order to use this gem, you'll need to get an authorized guid from http://www.abr.business.gov.au/Webservices.aspx
84
+
85
+ This is unfortunately a bit of a manual process, but it's not too
86
+ painful.
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,26 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "abr_lookup/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "abr_lookup"
7
+ s.version = AbrLookup::VERSION
8
+ s.authors = ["Daniel Neighman"]
9
+ s.email = ["has.sox@gmail.com"]
10
+ s.homepage = ""
11
+ s.summary = %q{A simple ABN / ACN lookup utility}
12
+ s.description = %q{An ABN / ACN lookup utility that includes middleware}
13
+
14
+ s.rubyforge_project = "abr_lookup"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ # specify any dependencies here; for example:
22
+
23
+ s.add_runtime_dependency "nokogiri"
24
+ s.add_runtime_dependency "activemodel"
25
+ s.add_runtime_dependency 'rack'
26
+ end
@@ -0,0 +1 @@
1
+ guid: 123
@@ -0,0 +1 @@
1
+ guid: alternative
@@ -0,0 +1,52 @@
1
+ require "abr_lookup/version"
2
+ require 'yaml'
3
+ require 'uri'
4
+ require 'erb'
5
+
6
+ module AbrLookup
7
+ autoload :Lookup, 'abr_lookup/lookup'
8
+ autoload :Server, 'abr_lookup/server'
9
+
10
+ def self.abn_lookup_uri
11
+ @abn_lookup_url ||= URI.parse("http://abr.business.gov.au/ABRXMLSearchRPC/ABRXMLSearch.asmx/ABRSearchByABN")
12
+ end
13
+
14
+ def self.guid
15
+ (configuration['guid'] || configuration[:guid]).to_s
16
+ end
17
+
18
+ # The configuration for abn lookup
19
+ # The available options are
20
+ # :guid - the authentication guid http://abr.business.gov.au/
21
+ # :path - the path to match when using middleware
22
+ def self.configuration
23
+ @configuration ||= setup_config
24
+ end
25
+
26
+ # Set the configuration for the abn lookup
27
+ # The options that are useful are
28
+ # @see AbrLookup
29
+ def self.configuration=(config)
30
+ @configuration = config
31
+ end
32
+
33
+ # The path to find the configuration file
34
+ def self.config_path
35
+ @config_path ||= 'config/abr.yml'
36
+ end
37
+
38
+ # Set the path to the configuration file
39
+ def self.config_path=(path)
40
+ @config_path = path
41
+ end
42
+
43
+ private
44
+
45
+ def self.setup_config
46
+ config = {}
47
+ if File.exists?(config_path)
48
+ config = YAML.load(ERB.new(File.read(config_path)).result)
49
+ end
50
+ config
51
+ end
52
+ end
@@ -0,0 +1,81 @@
1
+ require 'net/http'
2
+ require 'nokogiri'
3
+ require 'active_model'
4
+
5
+ module AbrLookup
6
+ class Lookup
7
+ include ActiveModel::Conversion
8
+ include ActiveModel::Validations
9
+ include ActiveModel::Naming
10
+ include ActiveModel::Serializers::JSON
11
+
12
+ ATTRIBUTES = [:abn, :current, :effective_from, :effective_to, :entity_status, :entity_type, :entity_type_description, :given_name, :family_name, :trading_name, :state_code, :postcode]
13
+
14
+ attr_reader :lookup_number
15
+ attr_accessor *ATTRIBUTES
16
+
17
+ def initialize(lookup_number)
18
+ @lookup_number = lookup_number.to_s.gsub(/([^\w]|_)/, '')
19
+ end
20
+
21
+ def attributes
22
+ attrs = {:lookup_number => lookup_number}
23
+ if errors.present?
24
+ attrs[:errors] = errors.full_messages.join(", ")
25
+ else
26
+ ATTRIBUTES.inject(attrs){|hash, attr| hash[attr] = send(attr) if send(attr).present?; hash }
27
+ end
28
+ attrs
29
+ end
30
+
31
+ def as_json(*args)
32
+ attributes.stringify_keys
33
+ end
34
+
35
+ def lookup_abn!
36
+ parse_abn_response(perform_abn_lookup)
37
+ self
38
+ end
39
+
40
+ private
41
+ def parse_abn_response(response)
42
+ doc = Nokogiri::XML(response)
43
+ doc.css('response').each do |node|
44
+ # Get the returned abn
45
+ self.abn = node.css('ABN identifierValue').text
46
+
47
+ # Get the effective dates
48
+ effective_from, effective_to = node.css('entityStatus effectiveFrom').text, node.css('entityStatus effectiveTo').text
49
+ self.effective_from = Date.parse(effective_from) if effective_from.present?
50
+ self.effective_to = Date.parse(effective_to ) if effective_to.present?
51
+
52
+ # Is this abn current
53
+ is_current = node.css('ABN isCurrentIndicator').text
54
+ self.current = !!(is_current && is_current =~ /Y/i)
55
+
56
+
57
+ self.entity_status = node.css('entityStatus entityStatusCode' ).text.strip
58
+ self.entity_type = node.css('entityType entityTypeCode' ).text.strip
59
+ self.entity_type_description = node.css('entityType entityDescription' ).text.strip
60
+
61
+ self.given_name = node.css('legalName givenName').text.strip
62
+ self.family_name = node.css('legalName familyName').text.strip
63
+
64
+ self.trading_name = node.css('mainTradingName organisationName' ).text.strip
65
+ self.state_code = node.css('mainBusinessPhysicalAddress stateCode' ).text.strip
66
+ self.postcode = node.css('mainBusinessPhysicalAddress postcode' ).text.strip
67
+
68
+ node.css('exception').each do |exception|
69
+ errors.add(exception.css('exceptionCode').text.strip, exception.css('exceptionDescription').text.strip)
70
+ end
71
+ end
72
+ end
73
+
74
+ def perform_abn_lookup
75
+ query = "searchString=#{lookup_number}&includeHistoricalDetails=Y&authenticationGuid=#{AbrLookup.guid}"
76
+ uri = AbrLookup.abn_lookup_uri.dup
77
+ uri.query = query
78
+ Net::HTTP.get_response(uri).body
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,40 @@
1
+ require 'rack'
2
+ module AbrLookup
3
+ class Server
4
+ attr_reader :match_path
5
+ DEFAULT_PATH = /^\/abn_lookup(\..+)?$/
6
+
7
+ def initialize(app, opts={})
8
+ @app = app
9
+ @match_path = opts.fetch(:match_path, DEFAULT_PATH)
10
+ end
11
+
12
+ def call(env)
13
+ req = Rack::Request.new env
14
+ if req.path =~ match_path
15
+ lookup = Lookup.new(req.params['abn']).lookup_abn!
16
+ body = lookup.to_json
17
+ status = status_from_lookup(lookup)
18
+ res = Rack::Response.new lookup.to_json, status, 'Content-Type' => 'application/json'
19
+ res.finish
20
+ else
21
+ @app.call(env)
22
+ end
23
+ end
24
+
25
+ private
26
+ def status_from_lookup(lookup)
27
+ if lookup.errors.blank?
28
+ 200
29
+ else
30
+ if lookup.errors['WebServices'] && lookup.errors['WebServices'].any?{ |err| err =~ /guid/im }
31
+ 401
32
+ elsif lookup.errors['Search'] && lookup.errors['Search'].any?{ |err| err =~ /not.+valid/im }
33
+ 404
34
+ else
35
+ 400
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,3 @@
1
+ module AbrLookup
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,90 @@
1
+ require 'spec_helper'
2
+
3
+ describe AbrLookup::Lookup do
4
+ it "should load with a business number to lookup" do
5
+ lookup = AbrLookup::Lookup.new '12345'
6
+ lookup.lookup_number.should == '12345'
7
+ end
8
+
9
+ it "should strip out non alpha numeric chars" do
10
+ lookup = AbrLookup::Lookup.new '123 4_ab5'
11
+ lookup.lookup_number.should == '1234ab5'
12
+ end
13
+
14
+ describe "with lookup" do
15
+ it "should lookup the business number with the guid number" do
16
+ stub_abn_request('searchString' => '98765')
17
+ lookup = AbrLookup::Lookup.new '98765'
18
+ lookup.lookup_abn!
19
+ WebMock.should have_requested_abn('searchString' => '98765')
20
+ end
21
+
22
+ it "should parse a successful response" do
23
+ stub_abn_request('searchString' => '18406500889').to_return(:body => fixture('successful.xml'), :status => 200)
24
+ result = AbrLookup::Lookup.new('18406500889').lookup_abn!
25
+ result.abn.should == '18406500889'
26
+ result.effective_from.to_s.should == Date.parse('2002-12-01').to_s
27
+ result.effective_to.to_s.should == Date.parse('0001-01-01').to_s
28
+ result.entity_status.should == 'Active'
29
+ result.entity_type.should == 'IND'
30
+ result.entity_type_description.should == 'Individual/Sole Trader'
31
+ result.given_name.should == 'CHRISANTHY'
32
+ result.family_name.should == 'BARONE'
33
+ result.trading_name.should == 'CLARITY - Create Inner Space & Clarity'
34
+ result.state_code.should == 'SA'
35
+ result.postcode.should == '5067'
36
+ result.current.should be_true
37
+ end
38
+
39
+ it "should provide a successful response as an attributes hash" do
40
+ stub_abn_request('searchString' => '18406500889').to_return(:body => fixture('successful.xml'), :status => 200)
41
+ result = AbrLookup::Lookup.new('18406500889').lookup_abn!
42
+ attrs = result.attributes
43
+ attrs[:abn].should == '18406500889'
44
+ attrs[:effective_from].to_s.should == Date.parse('2002-12-01').to_s
45
+ attrs[:effective_to].to_s.should == Date.parse('0001-01-01').to_s
46
+ attrs[:entity_status].should == 'Active'
47
+ attrs[:entity_type].should == 'IND'
48
+ attrs[:entity_type_description].should == 'Individual/Sole Trader'
49
+ attrs[:given_name].should == 'CHRISANTHY'
50
+ attrs[:family_name].should == 'BARONE'
51
+ attrs[:trading_name].should == 'CLARITY - Create Inner Space & Clarity'
52
+ attrs[:state_code].should == 'SA'
53
+ attrs[:postcode].should == '5067'
54
+ attrs[:current].should be_true
55
+ attrs.keys.should_not include(:errors, :exceptions)
56
+ end
57
+
58
+ it "should handle an incorrect abn" do
59
+ stub_abn_request('searchString' => '18406500889').to_return(:body => fixture('failed_abn.xml'), :status => 200)
60
+ result = AbrLookup::Lookup.new('18406500889').lookup_abn!
61
+ result.errors['Search'].should be_present
62
+ result.errors['Search'].should include('Search text is not a valid ABN or ACN')
63
+ end
64
+
65
+ it "should not return anything but the errors and query string in the attributes" do
66
+ stub_abn_request('searchString' => '18406500889').to_return(:body => fixture('failed_abn.xml'), :status => 200)
67
+ result = AbrLookup::Lookup.new('18406500889').lookup_abn!
68
+ attrs = result.attributes
69
+ attrs.keys.size.should == 2
70
+ attrs.keys.should include(:errors, :lookup_number)
71
+ attrs[:errors].should include('Search text is not a valid ABN or ACN')
72
+ end
73
+
74
+ it "should handle incorrect credentials" do
75
+ stub_abn_request('searchString' => '18406500889').to_return(:body => fixture('failed_guid.xml'), :status => 200)
76
+ result = AbrLookup::Lookup.new('18406500889').lookup_abn!
77
+ result.errors['WebServices'].should be_present
78
+ result.errors['WebServices'].should include('The GUID entered is not recognised as a Registered Party. : abcde')
79
+ end
80
+
81
+ it "should not return anything but the errors and query string in the attributes with a failed guid" do
82
+ stub_abn_request('searchString' => '18406500889').to_return(:body => fixture('failed_guid.xml'), :status => 200)
83
+ result = AbrLookup::Lookup.new('18406500889').lookup_abn!
84
+ attrs = result.attributes
85
+ attrs.keys.size.should == 2
86
+ attrs.keys.should include(:errors, :lookup_number)
87
+ attrs[:errors].should include('The GUID entered is not recognised as a Registered Party. : abcde')
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,47 @@
1
+ require 'spec_helper'
2
+
3
+ require 'rack'
4
+ require 'rack/test'
5
+ require 'json'
6
+
7
+ describe AbrLookup::Server do
8
+ include Rack::Test::Methods
9
+
10
+ let(:app) do
11
+ _app_ = lambda{|e| Rack::Response.new('ok').finish }
12
+ Rack::Builder.new do
13
+ use AbrLookup::Server
14
+ run _app_
15
+ end.to_app
16
+ end
17
+
18
+ it "should let the request pass through when the path doesn't match" do
19
+ res = get "/not_an_abn_lookup"
20
+ res.body.should == 'ok'
21
+ res.status.should == 200
22
+ end
23
+
24
+ it "should match on the path and perform a lookup with the given param" do
25
+ stub_abn_request('searchString' => '1234').to_return(:body => fixture('successful.xml'), :status => 200)
26
+ res = get '/abn_lookup', :abn => '1234'
27
+ res.status.should == 200
28
+ result = JSON.parse(res.body)
29
+ result['abn'].should_not be_empty
30
+ end
31
+
32
+ it "should return a 401 if the guid is not correct" do
33
+ stub_abn_request('searchString' => '1234').to_return(:body => fixture('failed_guid.xml'), :status => 200)
34
+ res = get '/abn_lookup', :abn => '1234'
35
+ res.status.should == 401
36
+ result = JSON.parse(res.body)
37
+ result['errors'].should_not be_blank
38
+ end
39
+
40
+ it "should return a 404 if the abn is not found" do
41
+ stub_abn_request('searchString' => '1234').to_return(:body => fixture('failed_abn.xml'), :status => 200)
42
+ res = get '/abn_lookup', :abn => '1234'
43
+ res.status.should == 404
44
+ result = JSON.parse(res.body)
45
+ result['errors'].should_not be_blank
46
+ end
47
+ end
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ describe AbrLookup do
4
+ describe "Config" do
5
+ after do
6
+ AbrLookup.config_path = nil
7
+ AbrLookup.configuration = nil
8
+ end
9
+
10
+ it "should have the abn_lookup_uri" do
11
+ AbrLookup.abn_lookup_uri.to_s.should == 'http://abr.business.gov.au/ABRXMLSearchRPC/ABRXMLSearch.asmx/ABRSearchByABN'
12
+ end
13
+
14
+ it "should load the configuration from the default path" do
15
+ AbrLookup.configuration['guid'].should == 123
16
+ end
17
+
18
+ it "should load the configuration from an alternative path" do
19
+ AbrLookup.config_path = 'config/alt.yml'
20
+ AbrLookup.configuration['guid'].should == 'alternative'
21
+ end
22
+
23
+ it "should load the configuration when set manually" do
24
+ AbrLookup.configuration = {'guid' => 'foo'}
25
+ AbrLookup.configuration.should == {'guid' => 'foo'}
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,19 @@
1
+ <ABRPayloadSearchResults xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://abr.business.gov.au/ABRXMLSearchRPC/literalTypes">
2
+ <request>
3
+ <identifierSearchRequest>
4
+ <authenticationGUID>abcde</authenticationGUID>
5
+ <identifierType>ABN</identifierType>
6
+ <identifierValue>98765</identifierValue>
7
+ <history>Y</history>
8
+ </identifierSearchRequest>
9
+ </request>
10
+ <response>
11
+ <dateRegisterLastUpdated>0001-01-01</dateRegisterLastUpdated>
12
+ <dateTimeRetrieved>2011-09-17T22:06:14.994085+10:00</dateTimeRetrieved>
13
+ <exception>
14
+ <exceptionDescription>Search text is not a valid ABN or ACN</exceptionDescription>
15
+ <exceptionCode>Search</exceptionCode>
16
+ </exception>
17
+ </response>
18
+ </ABRPayloadSearchResults>
19
+
@@ -0,0 +1,23 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <ABRPayloadSearchResults xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://abr.business.gov.au/ABRXMLSearchRPC/literalTypes">
3
+ <request>
4
+ <identifierSearchRequest>
5
+ <authenticationGUID>abcde</authenticationGUID>
6
+ <identifierType>ABN</identifierType>
7
+ <identifierValue>98765</identifierValue>
8
+ <history>Y</history>
9
+ </identifierSearchRequest>
10
+ </request>
11
+ <response>
12
+ <dateRegisterLastUpdated>0001-01-01</dateRegisterLastUpdated>
13
+ <dateTimeRetrieved>2011-09-17T12:49:21.0937904+10:00</dateTimeRetrieved>
14
+ <exception>
15
+ <exceptionDescription>
16
+ The GUID entered is not recognised as a Registered Party. : abcde
17
+ </exceptionDescription>
18
+ <exceptionCode>WebServices</exceptionCode>
19
+ </exception>
20
+ </response>
21
+ </ABRPayloadSearchResults>
22
+
23
+
@@ -0,0 +1,55 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <ABRPayloadSearchResults xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://abr.business.gov.au/ABRXMLSearchRPC/literalTypes">
3
+ <request>
4
+ <identifierSearchRequest>
5
+ <authenticationGUID>xxxxxxxxxxxxxxxx</authenticationGUID>
6
+ <identifierType>ABN</identifierType>
7
+ <identifierValue>18 406 500 889</identifierValue>
8
+ <history>N</history>
9
+ </identifierSearchRequest>
10
+ </request>
11
+ <response>
12
+ <usageStatement>This extract is based on information that was supplied by businesses to the
13
+ Registrar of the Australian Business Register. Neither the Registrar of the ABR
14
+ nor the Commonwealth guarantee that this information is accurate, up to date or
15
+ complete. You should consider verifying this information from other sources.</usageStatement>
16
+ <dateRegisterLastUpdated>2011-09-19</dateRegisterLastUpdated>
17
+ <dateTimeRetrieved>2011-09-19T15:12:07.0503404+10:00</dateTimeRetrieved>
18
+ <businessEntity>
19
+ <recordLastUpdatedDate>2010-09-17</recordLastUpdatedDate>
20
+ <ABN>
21
+ <identifierValue>18406500889</identifierValue>
22
+ <isCurrentIndicator>Y</isCurrentIndicator>
23
+ <replacedFrom>0001-01-01</replacedFrom>
24
+ </ABN>
25
+ <entityStatus>
26
+ <entityStatusCode>Active</entityStatusCode>
27
+ <effectiveFrom>2002-12-01</effectiveFrom>
28
+ <effectiveTo>0001-01-01</effectiveTo>
29
+ </entityStatus>
30
+ <ASICNumber />
31
+ <entityType>
32
+ <entityTypeCode>IND </entityTypeCode>
33
+ <entityDescription>Individual/Sole Trader</entityDescription>
34
+ </entityType>
35
+ <legalName>
36
+ <givenName>CHRISANTHY</givenName>
37
+ <otherGivenName />
38
+ <familyName>BARONE</familyName>
39
+ <effectiveFrom>2010-09-16</effectiveFrom>
40
+ <effectiveTo>0001-01-01</effectiveTo>
41
+ </legalName>
42
+ <mainTradingName>
43
+ <organisationName>CLARITY - Create Inner Space &amp; Clarity</organisationName>
44
+ <effectiveFrom>2003-02-28</effectiveFrom>
45
+ </mainTradingName>
46
+ <mainBusinessPhysicalAddress>
47
+ <stateCode>SA</stateCode>
48
+ <postcode>5067</postcode>
49
+ <effectiveFrom>2002-12-01</effectiveFrom>
50
+ <effectiveTo>0001-01-01</effectiveTo>
51
+ </mainBusinessPhysicalAddress>
52
+ </businessEntity>
53
+ </response>
54
+ </ABRPayloadSearchResults>
55
+
@@ -0,0 +1,26 @@
1
+ require 'rspec'
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require 'abr_lookup'
4
+ require 'webmock/rspec'
5
+
6
+ module AbrSpecHelpers
7
+ def stub_abn_request(params={})
8
+ stub = stub_request(:get, AbrLookup.abn_lookup_uri.to_s).with(:query => {'searchString' => '12345', 'includeHistoricalDetails' => 'Y', 'authenticationGuid' => AbrLookup.guid}.merge(params))
9
+ yield stub if block_given?
10
+ stub
11
+ end
12
+
13
+ def have_requested_abn(params={})
14
+ have_requested(:get, AbrLookup.abn_lookup_uri.to_s).with(:query => {'searchString' => '12345', 'includeHistoricalDetails' => 'Y', 'authenticationGuid' => AbrLookup.guid}.merge(params))
15
+ end
16
+
17
+ def fixture(name)
18
+ File.read(File.join('spec/fixtures', name.to_s))
19
+ end
20
+ end
21
+
22
+
23
+ RSpec.configure do |c|
24
+ c.include AbrSpecHelpers
25
+ end
26
+
metadata ADDED
@@ -0,0 +1,131 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: abr_lookup
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
11
+ platform: ruby
12
+ authors:
13
+ - Daniel Neighman
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-09-19 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: nokogiri
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ hash: 3
29
+ segments:
30
+ - 0
31
+ version: "0"
32
+ type: :runtime
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: activemodel
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ hash: 3
43
+ segments:
44
+ - 0
45
+ version: "0"
46
+ type: :runtime
47
+ version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: rack
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ hash: 3
57
+ segments:
58
+ - 0
59
+ version: "0"
60
+ type: :runtime
61
+ version_requirements: *id003
62
+ description: An ABN / ACN lookup utility that includes middleware
63
+ email:
64
+ - has.sox@gmail.com
65
+ executables: []
66
+
67
+ extensions: []
68
+
69
+ extra_rdoc_files: []
70
+
71
+ files:
72
+ - .gitignore
73
+ - Gemfile
74
+ - LICENSE
75
+ - README.md
76
+ - Rakefile
77
+ - abr_lookup.gemspec
78
+ - config/abr.yml
79
+ - config/alt.yml
80
+ - lib/abr_lookup.rb
81
+ - lib/abr_lookup/lookup.rb
82
+ - lib/abr_lookup/server.rb
83
+ - lib/abr_lookup/version.rb
84
+ - spec/abr_lookup/lookup_spec.rb
85
+ - spec/abr_lookup/server_spec.rb
86
+ - spec/abr_lookup_spec.rb
87
+ - spec/fixtures/failed_abn.xml
88
+ - spec/fixtures/failed_guid.xml
89
+ - spec/fixtures/successful.xml
90
+ - spec/spec_helper.rb
91
+ homepage: ""
92
+ licenses: []
93
+
94
+ post_install_message:
95
+ rdoc_options: []
96
+
97
+ require_paths:
98
+ - lib
99
+ required_ruby_version: !ruby/object:Gem::Requirement
100
+ none: false
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ hash: 3
105
+ segments:
106
+ - 0
107
+ version: "0"
108
+ required_rubygems_version: !ruby/object:Gem::Requirement
109
+ none: false
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ hash: 3
114
+ segments:
115
+ - 0
116
+ version: "0"
117
+ requirements: []
118
+
119
+ rubyforge_project: abr_lookup
120
+ rubygems_version: 1.8.6
121
+ signing_key:
122
+ specification_version: 3
123
+ summary: A simple ABN / ACN lookup utility
124
+ test_files:
125
+ - spec/abr_lookup/lookup_spec.rb
126
+ - spec/abr_lookup/server_spec.rb
127
+ - spec/abr_lookup_spec.rb
128
+ - spec/fixtures/failed_abn.xml
129
+ - spec/fixtures/failed_guid.xml
130
+ - spec/fixtures/successful.xml
131
+ - spec/spec_helper.rb