ruby-ares 0.0.1
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/README.md +24 -0
- data/Rakefile +31 -0
- data/lib/ruby-ares.rb +8 -0
- data/lib/ruby-ares/address.rb +51 -0
- data/lib/ruby-ares/http.rb +25 -0
- data/lib/ruby-ares/parser.rb +70 -0
- data/lib/ruby-ares/subject.rb +35 -0
- data/test/test_ares.rb +35 -0
- data/test/test_ares_address.rb +23 -0
- data/test/test_ares_http.rb +8 -0
- data/test/test_ares_parser.rb +14 -0
- data/test/test_ares_subject.rb +8 -0
- metadata +59 -0
data/README.md
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
## Usage
|
2
|
+
|
3
|
+
subject = ARES::Subject.get ic
|
4
|
+
|
5
|
+
puts subject
|
6
|
+
puts subject.name
|
7
|
+
puts subject.ic
|
8
|
+
puts subject.address # same as puts subject.addresses[0].to_str
|
9
|
+
|
10
|
+
#require './lib/ares.rb'
|
11
|
+
require 'xml'
|
12
|
+
require 'libxml'
|
13
|
+
require 'net/http'
|
14
|
+
require './lib/ares/subject.rb'
|
15
|
+
require './lib/ares/address.rb'
|
16
|
+
require './lib/ares/parser.rb'
|
17
|
+
require './lib/ares/http.rb'
|
18
|
+
|
19
|
+
subject = ARES::Subject.get(74948440)
|
20
|
+
|
21
|
+
puts subject.name
|
22
|
+
puts subject.ic
|
23
|
+
puts subject.dic
|
24
|
+
puts subject.address
|
data/Rakefile
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'rubygems/package_task'
|
2
|
+
require 'rake'
|
3
|
+
require 'rake/testtask'
|
4
|
+
|
5
|
+
gemspec = Gem::Specification.new do |s|
|
6
|
+
s.name = "ruby-ares"
|
7
|
+
s.version = "0.0.1"
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.summary = "Gem for accesing business information from ARES database."
|
10
|
+
s.description = <<-EOF
|
11
|
+
ARES is the Czech business database maintained by Ministry of Finance of the Czech Republic.
|
12
|
+
This gem helps to retrieve data provided by this database.
|
13
|
+
EOF
|
14
|
+
s.licenses = ["GPLv3"]
|
15
|
+
s.author = "Josef Strzibny"
|
16
|
+
s.email = "strzibny@strzibny.name"
|
17
|
+
s.homepage = "http://github.com/strzibny/ares"
|
18
|
+
s.required_ruby_version = ">= 1.8.7"
|
19
|
+
s.required_rubygems_version = ">= 1.8.0"
|
20
|
+
s.files = FileList["README.md", "Rakefile",
|
21
|
+
"lib/**/*.rb", "test/**/test*.rb"]
|
22
|
+
end
|
23
|
+
|
24
|
+
Gem::PackageTask.new gemspec do |pkg|
|
25
|
+
end
|
26
|
+
|
27
|
+
Rake::TestTask.new('test') do |t|
|
28
|
+
t.libs << 'test'
|
29
|
+
t.pattern = 'test/**/test*.rb'
|
30
|
+
t.verbose = true
|
31
|
+
end
|
data/lib/ruby-ares.rb
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module RubyARES
|
4
|
+
class Address
|
5
|
+
attr_reader :id, # ID_adresy
|
6
|
+
:city, # nazev_obce
|
7
|
+
:city_part, # Nazev_casti_obce
|
8
|
+
:street, # Nazev_ulice
|
9
|
+
:house_number, # Cislo_domovni
|
10
|
+
:house_number_type, # Typ_cislo_domovni
|
11
|
+
:orientational_number, # Cislo_orientacni
|
12
|
+
:postcode # PSC
|
13
|
+
|
14
|
+
def initialize(id, street, postcode, city, city_part,
|
15
|
+
house_number, house_number_type, orientational_number)
|
16
|
+
@id = id
|
17
|
+
@street = street
|
18
|
+
@postcode = postcode
|
19
|
+
@city = city
|
20
|
+
@city_part = city_part
|
21
|
+
@house_number = house_number
|
22
|
+
@house_number_type = house_number_type
|
23
|
+
@orientational_number = orientational_number
|
24
|
+
end
|
25
|
+
|
26
|
+
def to_str
|
27
|
+
@city_part = '' if @city == @city_part
|
28
|
+
<<EOF
|
29
|
+
#{self.street} #{self.street_number}
|
30
|
+
#{self.postcode} #{self.city}
|
31
|
+
#{self.city_part}
|
32
|
+
EOF
|
33
|
+
end
|
34
|
+
|
35
|
+
def street_number
|
36
|
+
unless @orientational_number
|
37
|
+
@house_number
|
38
|
+
else
|
39
|
+
"#{@orientational_number}/#{@house_number}"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def street_line
|
44
|
+
"#{@street} #{street_number}"
|
45
|
+
end
|
46
|
+
|
47
|
+
def city_line
|
48
|
+
"#{@postcode} #{@city}"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'net/http'
|
4
|
+
|
5
|
+
module RubyARES
|
6
|
+
class HTTP
|
7
|
+
|
8
|
+
class ConnectionError < StandardError; end
|
9
|
+
|
10
|
+
def self.fetch_subject_xml(ic)
|
11
|
+
# Get a subject info from ARES[http://wwwinfo.mfcr.cz/ares/]
|
12
|
+
uri = URI('http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_rzp.cgi')
|
13
|
+
params = { :ico => ic, :ver => '1.0.4' }
|
14
|
+
uri.query = URI.encode_www_form(params)
|
15
|
+
|
16
|
+
begin
|
17
|
+
res = Net::HTTP.get_response uri
|
18
|
+
@xml = res.body if res.is_a? Net::HTTPSuccess
|
19
|
+
rescue Timeout::Error, Errno::EINVAL, Errno::ECONNRESET, EOFError,
|
20
|
+
Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError => e
|
21
|
+
raise ConnectionError, e
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'xml'
|
4
|
+
require 'libxml'
|
5
|
+
require 'ruby-ares/subject'
|
6
|
+
|
7
|
+
module RubyARES
|
8
|
+
class Parser
|
9
|
+
|
10
|
+
class ARESDatabaseError < StandardError; end
|
11
|
+
class ParseError < StandardError; end
|
12
|
+
|
13
|
+
def self.get_subject(xml)
|
14
|
+
begin
|
15
|
+
doc = self.parse_document xml
|
16
|
+
|
17
|
+
# Basic info
|
18
|
+
doc.find('//dtt:Zakladni_udaje').each do |node|
|
19
|
+
attrs = node.children()
|
20
|
+
|
21
|
+
# Attributes of the subject
|
22
|
+
@status = node.find('dtt:Stav').to_a[0].content unless node.find('dtt:Stav') == 0
|
23
|
+
@updated_at = node.find('dtt:Datum_zmeny').to_a[0].content unless node.find('dtt:Datum_zmeny').to_a.size == 0
|
24
|
+
@ic = node.find('dtt:ICO').to_a[0].content
|
25
|
+
@dic = node.find('dtt:DIC').to_a[0].content unless node.find('dtt:DIC').to_a.size == 0
|
26
|
+
@name = node.find('dtt:Obchodni_firma').to_a[0].content unless node.find('dtt:Obchodni_firma').to_a.size == 0
|
27
|
+
end
|
28
|
+
|
29
|
+
# Corresponding addresses
|
30
|
+
@addresses = self.find_addresses doc
|
31
|
+
rescue
|
32
|
+
raise ParseError, "Can't parse the given document."
|
33
|
+
end
|
34
|
+
|
35
|
+
if doc.find('//dtt:Error').to_a.size > 0
|
36
|
+
raise ARESDatabaseError, 'ARES returned an error.'
|
37
|
+
end
|
38
|
+
|
39
|
+
# Create and return subject
|
40
|
+
return RubyARES::Subject.new(@ic, @dic, @name, @status, @addresses, @updated_at)
|
41
|
+
end
|
42
|
+
|
43
|
+
protected
|
44
|
+
|
45
|
+
def self.find_addresses(doc)
|
46
|
+
@addresses = []
|
47
|
+
|
48
|
+
doc.find('//dtt:Adresa').each do |node|
|
49
|
+
id = node.find('dtt:ID_adresy').to_a[0].content
|
50
|
+
street = node.find('dtt:Nazev_ulice').to_a[0].content unless node.find('dtt:Nazev_ulice').to_a.size == 0
|
51
|
+
postcode = node.find('dtt:PSC').to_a[0].content unless node.find('dtt:PSC').to_a.size == 0
|
52
|
+
city = node.find('dtt:Nazev_obce').to_a[0].content unless node.find('dtt:Nazev_obce').to_a.size == 0
|
53
|
+
city_part = node.find('dtt:Nazev_casti_obce').to_a[0].content unless node.find('dtt:Nazev_casti_obce').to_a.size == 0
|
54
|
+
house_number = node.find('dtt:Cislo_domovni').to_a[0].content unless node.find('dtt:Cislo_domovni').to_a.size == 0
|
55
|
+
house_number_type = node.find('dtt:Typ_cislo_domovni').to_a[0].content unless node.find('dtt:Typ_cislo_domovni').to_a.size == 0
|
56
|
+
orientational_number = node.find('dtt:Cislo_orientacni').to_a[0].content unless node.find('dtt:Cislo_orientacni').to_a.size == 0
|
57
|
+
|
58
|
+
@addresses << RubyARES::Address.new(id, street, postcode, city, city_part,
|
59
|
+
house_number, house_number_type, orientational_number)
|
60
|
+
end
|
61
|
+
|
62
|
+
return @addresses
|
63
|
+
end
|
64
|
+
|
65
|
+
def self.parse_document(xml)
|
66
|
+
parser = XML::Parser.string xml
|
67
|
+
parser.parse
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'ruby-ares/parser'
|
4
|
+
require 'ruby-ares/http'
|
5
|
+
|
6
|
+
module RubyARES
|
7
|
+
class Subject
|
8
|
+
attr_reader :ico, # ICO
|
9
|
+
:ic, # alias for ic
|
10
|
+
:dic, # DIC
|
11
|
+
:name, # Obchodni_firma
|
12
|
+
:company, # alias for name
|
13
|
+
:status, # Stav
|
14
|
+
:addresses,
|
15
|
+
:updated_at # Datum_zmeny
|
16
|
+
|
17
|
+
def self.get(ic)
|
18
|
+
xml = RubyARES::HTTP.fetch_subject_xml ic
|
19
|
+
RubyARES::Parser.get_subject xml
|
20
|
+
end
|
21
|
+
|
22
|
+
def initialize(ic, dic, name, status, addresses, updated_at)
|
23
|
+
@ic, @ico = ic, ic
|
24
|
+
@dic = dic
|
25
|
+
@name, @company = name
|
26
|
+
@status = status
|
27
|
+
@addresses = addresses
|
28
|
+
@updated_at = updated_at
|
29
|
+
end
|
30
|
+
|
31
|
+
def address
|
32
|
+
@addresses[0]
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/test/test_ares.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'helper'
|
5
|
+
require 'ruby-ares'
|
6
|
+
|
7
|
+
class RubyARESTest < Test::Unit::TestCase
|
8
|
+
def setup
|
9
|
+
@subject = RubyARES::Parser.get_subject RubyARESTestHelper.subject_xml
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_subject_address_house_number
|
13
|
+
assert_equal '2178 1', "#{@subject.addresses[0].house_number} #{@subject.addresses[0].house_number_type}"
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_subject_address_street
|
17
|
+
assert_equal 'Podvinný mlýn 6/2178', "#{@subject.addresses[0].street} #{@subject.addresses[0].street_number}"
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_subject_address_city
|
21
|
+
assert_equal 'Praha Libeň', "#{@subject.addresses[0].city} #{@subject.addresses[0].city_part}"
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_subject_address_postcode
|
25
|
+
assert_equal '19000', @subject.addresses[0].postcode
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_subject_name
|
29
|
+
assert_equal 'Asseco Central Europe, a.s.', @subject.name
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_number_of_subject_addresses
|
33
|
+
assert_equal 1, @subject.addresses.size
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'ruby-ares/address'
|
5
|
+
|
6
|
+
class RubyARESAddressTest < Test::Unit::TestCase
|
7
|
+
|
8
|
+
def setup
|
9
|
+
@address = RubyARES::Address.new(1, 'Kunzova', '10010', 'Brno', 'Královo pole', 1, 1, nil)
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_address_to_string
|
13
|
+
assert_equal "Kunzova 1\n10010 Brno\nKrálovo pole\n", @address.to_str
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_address_street_line
|
17
|
+
assert_equal "Kunzova 1", @address.street_line
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_address_city_line
|
21
|
+
assert_equal "10010 Brno", @address.city_line
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'helper'
|
5
|
+
require 'ruby-ares/parser'
|
6
|
+
|
7
|
+
class RubyARESParserTest < Test::Unit::TestCase
|
8
|
+
|
9
|
+
def test_parser_should_fail
|
10
|
+
assert_raise(RubyARES::Parser::ARESDatabaseError) {
|
11
|
+
RubyARES::Parser.get_subject(RubyARESTestHelper.error_responce_xml)
|
12
|
+
}
|
13
|
+
end
|
14
|
+
end
|
metadata
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ruby-ares
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Josef Strzibny
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-12-02 00:00:00.000000000Z
|
13
|
+
dependencies: []
|
14
|
+
description: ! " ARES is the Czech business database maintained
|
15
|
+
by Ministry of Finance of the Czech Republic.\n This gem helps
|
16
|
+
to retrieve data provided by this database.\n"
|
17
|
+
email: strzibny@strzibny.name
|
18
|
+
executables: []
|
19
|
+
extensions: []
|
20
|
+
extra_rdoc_files: []
|
21
|
+
files:
|
22
|
+
- README.md
|
23
|
+
- Rakefile
|
24
|
+
- lib/ruby-ares.rb
|
25
|
+
- lib/ruby-ares/address.rb
|
26
|
+
- lib/ruby-ares/http.rb
|
27
|
+
- lib/ruby-ares/parser.rb
|
28
|
+
- lib/ruby-ares/subject.rb
|
29
|
+
- test/test_ares.rb
|
30
|
+
- test/test_ares_address.rb
|
31
|
+
- test/test_ares_http.rb
|
32
|
+
- test/test_ares_parser.rb
|
33
|
+
- test/test_ares_subject.rb
|
34
|
+
homepage: http://github.com/strzibny/ares
|
35
|
+
licenses:
|
36
|
+
- GPLv3
|
37
|
+
post_install_message:
|
38
|
+
rdoc_options: []
|
39
|
+
require_paths:
|
40
|
+
- lib
|
41
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ! '>='
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 1.8.7
|
47
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
48
|
+
none: false
|
49
|
+
requirements:
|
50
|
+
- - ! '>='
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 1.8.0
|
53
|
+
requirements: []
|
54
|
+
rubyforge_project:
|
55
|
+
rubygems_version: 1.8.6
|
56
|
+
signing_key:
|
57
|
+
specification_version: 3
|
58
|
+
summary: Gem for accesing business information from ARES database.
|
59
|
+
test_files: []
|