ares.rb 0.3.2 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 86fcb669db898aaa5c0b99ca572e0400c1eaf3d1
4
- data.tar.gz: e7f779fba64ca7912a1802899108615e7ce01b73
2
+ SHA256:
3
+ metadata.gz: f91b5af9bca65eb5d80708b5abf1900fd66565e6132f1936e8a51c348c04d84e
4
+ data.tar.gz: fd81071e422c3ba4aa53325879774cf4bb36c0fa9a02399f1e1e6d1540f23cee
5
5
  SHA512:
6
- metadata.gz: 16c156fb20b4fbee8d5f4228a6428262e57fb76c92899ea1cf1df05738d9a422254f52ff248862699159d29bcd18394873366d9607716c58df5fd6d9b248b208
7
- data.tar.gz: 17230015bc4b2fb5b7f56b4e4e1aa47b9d39ee787838ad3dc5272322b343f1799fd4a62d74d3b233df730e7c5f93ccc45e6062b6ecfecb2b22f776a5c25e74fe
6
+ metadata.gz: e066a7e10bba0b844427f77ffc15f1bd20600fced8419971e413b5b95fa2ca5da13f4e3a3edcb63b4bd2e37cc92ad7df26c3f3eef1256594bc22e9980fcbf1be
7
+ data.tar.gz: a5a8e93814b4384c91c8aaba681db4e9ca24a8613ee39d7ebc59d180949aac589480aebbfe04d2ba241c1933f1ecf3ec9af8e6730b4e753e432439c5d291454e
@@ -0,0 +1,23 @@
1
+ AllCops:
2
+ Exclude:
3
+ - 'ares.gemspec'
4
+ - 'spec/**/*'
5
+ TargetRubyVersion: 2.3
6
+
7
+ Style/FrozenStringLiteralComment:
8
+ Enabled: false
9
+
10
+ Metrics/LineLength:
11
+ Max: 89
12
+
13
+ Documentation:
14
+ Enabled: false
15
+
16
+ Naming/VariableName:
17
+ Enabled: false
18
+
19
+ Naming/UncommunicativeMethodParamName:
20
+ Enabled: false
21
+
22
+ Style/MultilineIfModifier:
23
+ Enabled: false
@@ -1,7 +1,38 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - 2.3.1
4
- script: bundle exec rspec
5
- addons:
6
- code_climate:
7
- repo_token: 6a9c9df74fe9e772f1d98e955eaacd1804985c563ede95f401962917112884bf
4
+ - 2.4.5
5
+ - 2.5.3
6
+ - 2.6.0
7
+
8
+ stages:
9
+ - code-quality
10
+ - test
11
+
12
+ jobs:
13
+ include:
14
+ - rvm: 2.3.1
15
+ stage: code-quality
16
+ script: bundle exec rubocop
17
+ - rvm: 2.3.1
18
+ stage: test
19
+ script: bundle exec rspec
20
+ - rvm: 2.4.5
21
+ stage: code-quality
22
+ script: bundle exec rubocop
23
+ - rvm: 2.4.5
24
+ stage: test
25
+ script: bundle exec rspec
26
+ - rvm: 2.5.3
27
+ stage: code-quality
28
+ script: bundle exec rubocop
29
+ - rvm: 2.5.3
30
+ stage: test
31
+ script: bundle exec rspec
32
+ - rvm: 2.6.0
33
+ stage: code-quality
34
+ script: bundle exec rubocop
35
+ - rvm: 2.6.0
36
+ stage: test
37
+ script: bundle exec rspec
38
+
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in ares.gemspec
data/Rakefile CHANGED
@@ -1,6 +1,8 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/gem_tasks'
4
+ require 'rspec/core/rake_task'
3
5
 
4
6
  RSpec::Core::RakeTask.new(:spec)
5
7
 
6
- task :default => :spec
8
+ task default: :spec
@@ -1,30 +1,33 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'ares/version'
5
6
 
6
7
  Gem::Specification.new do |spec|
7
8
  spec.name = 'ares.rb'
8
9
  spec.version = Ares::VERSION
9
- spec.authors = ['Ondřej Svoboda','Bohuslav Blin']
10
+ spec.authors = ['Ondřej Svoboda', 'Bohuslav Blin']
10
11
  spec.email = ['blin@uol.cz']
11
12
 
12
13
  spec.summary = 'ARES library'
13
14
  spec.description = 'Gem for accesing business information from ARES database.'
14
- spec.homepage = "http://www.uol.cz"
15
+ spec.homepage = 'http://www.uol.cz'
15
16
 
16
17
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
18
  spec.require_paths = ['lib']
18
19
 
19
20
  spec.add_dependency 'ico-validator', '~> 0.4'
20
21
 
21
- spec.add_development_dependency 'bundler', '~> 1.7'
22
+ spec.add_development_dependency 'pry'
23
+ spec.add_development_dependency 'rails'
22
24
  spec.add_development_dependency 'rake', '~> 11.0'
23
25
  spec.add_development_dependency 'rspec'
24
- spec.add_development_dependency 'webmock'
26
+ spec.add_development_dependency 'rubocop'
25
27
  spec.add_development_dependency 'vcr'
26
- spec.add_development_dependency 'rails'
28
+ spec.add_development_dependency 'webmock'
27
29
 
28
30
  spec.add_runtime_dependency 'httparty'
29
31
  spec.add_runtime_dependency 'nokogiri'
32
+ spec.add_runtime_dependency 'activesupport'
30
33
  end
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'bundler/setup'
5
+ require 'ares'
6
+ require 'pry'
7
+ Pry.start
@@ -1,9 +1,23 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'httparty'
2
4
  require 'nokogiri'
5
+ require 'active_support/core_ext/hash'
6
+
3
7
  require 'ares/version'
4
8
  require 'ares/errors'
5
9
  require 'ares/logging'
6
- require 'ares/client'
10
+ require 'ares/http'
11
+
12
+ require 'ares/responses'
13
+ require 'ares/responses/base'
14
+ require 'ares/responses/standard'
15
+ require 'ares/responses/basic'
16
+
17
+ require 'ares/client/base'
18
+ require 'ares/client/standard'
19
+ require 'ares/client/basic'
20
+
7
21
  require 'ico-validator'
8
22
 
9
23
  module Ares
@@ -20,27 +34,30 @@ module Ares
20
34
  class << self
21
35
  include Ares::Logging
22
36
 
23
- # Returns standard client
24
- # @returns [Client::Standard]
25
- def client
26
- @client ||= Client.standard
27
- end
28
-
29
37
  # @see Client::Standard#call
30
38
  # @return [Responses::StandardResponse::Record]
31
39
  def standard(options)
32
40
  validate_ico_format(options[:ico])
33
- response = client.call(options)
34
- fail ArgumentError, "Arguments #{options} are invalid" if response.error?
41
+ response = Client::Standard.call(options)
42
+ raise ArgumentError, "Arguments #{options} are invalid" if response.error?
43
+
44
+ response.record
45
+ end
46
+
47
+ # @see Client::Basic#call
48
+ # @return [Responses::NoIdeaNow::Record]
49
+ def basic(options)
50
+ validate_ico_format(options[:ico])
51
+ response = Client::Basic.call(options)
52
+ raise ArgumentError, "Arguments #{options} are invalid" if response.error?
53
+
35
54
  response.record
36
55
  end
37
56
 
38
57
  private
39
58
 
40
59
  def validate_ico_format(ico)
41
- unless IcoValidation.valid_ico?(ico)
42
- fail ArgumentError, "ICO '#{ico}' is invalid"
43
- end
60
+ raise ArgumentError, "ICO '#{ico}' is invalid" unless IcoValidation.valid_ico?(ico)
44
61
  end
45
62
  end
46
63
  end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ # require 'ares/responses/standard_response'
4
+
5
+ module Ares
6
+ module Client
7
+ class Base
8
+ include Ares::Http
9
+
10
+ def self.call(opts)
11
+ new.call(opts)
12
+ end
13
+
14
+ def call(opts)
15
+ xml = get(self.class::ENDPOINT, opts)
16
+ document = Nokogiri::XML(xml)
17
+ process_response(document)
18
+ end
19
+
20
+ protected
21
+
22
+ def process_response(_document)
23
+ raise NotImplementedError, "#{self.class} must implement process_response}"
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ ##
4
+ # From what I can quickly find I can only search by ICO
5
+ # at least for the time being...
6
+ #
7
+ module Ares
8
+ module Client
9
+ class Basic < Base
10
+ ENDPOINT = 'https://wwwinfo.mfcr.cz/cgi-bin/ares/darv_bas.cgi'
11
+
12
+ def call(opts)
13
+ xml = get(self.class::ENDPOINT, opts.merge!(ver: '1.0.2'))
14
+ process_response(xml)
15
+ end
16
+
17
+ private
18
+
19
+ def process_response(document)
20
+ Ares::Responses::Basic.new(document)
21
+ end
22
+ end
23
+ end
24
+ end
@@ -1,11 +1,11 @@
1
- require 'ares/responses/standard_response'
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Ares
4
4
  module Client
5
- class Standard
5
+ class Standard < Base
6
6
  ENDPOINT = 'http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_std.cgi'
7
7
 
8
- include Ares::Http
8
+ private
9
9
 
10
10
  # Search for standard entity's identification data
11
11
  #
@@ -24,11 +24,9 @@ module Ares
24
24
  # @option opts [Integer] :diakritika (1) [0, 1]
25
25
  # @option opts [String] :czk (iso) Encoding [iso, utf]
26
26
  # @returns [Ares::Responses::StandardResponse]
27
- def call(opts)
28
- xml = get(ENDPOINT, opts)
29
- document = Nokogiri::XML(xml)
30
- Ares::Responses::StandardResponse.new(document)
27
+ def process_response(document)
28
+ Ares::Responses::Standard.new(document)
31
29
  end
32
30
  end
33
31
  end
34
- end
32
+ end
@@ -1,6 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Ares
2
- class AresError < RuntimeError;
4
+ class AresError < RuntimeError
3
5
  end
4
- class RecordNotFound < AresError;
6
+ class RecordNotFound < AresError
5
7
  end
6
- end
8
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Ares
2
4
  module Http
3
5
  def get(url, params = {})
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'logger'
2
4
 
3
5
  module Ares
@@ -6,4 +8,4 @@ module Ares
6
8
  @logger ||= Logger.new(STDOUT)
7
9
  end
8
10
  end
9
- end
11
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Ares
2
4
  module Responses
3
5
  class TextCode
@@ -19,9 +21,9 @@ module Ares
19
21
  end
20
22
 
21
23
  class Error < TextCode
22
- def error?; true end
24
+ def error?
25
+ true
26
+ end
23
27
  end
24
28
  end
25
29
  end
26
-
27
- require 'ares/responses/standard_response'
@@ -0,0 +1,64 @@
1
+ module Ares
2
+ module Responses
3
+ class Base
4
+ include Enumerable
5
+
6
+ # @!attribute [r] xml_document
7
+ # @return [String] XML Document returned by ares
8
+ # @!attribute [r] time
9
+ # @return [String] Created at
10
+ # @!attribute [r] count
11
+ # @return [String] Element count
12
+ # @!attribute [r] type
13
+ # @return [String] 'Standard'
14
+ # @!attribute [r] output_format
15
+ # @return [String] 'XML'
16
+ # @!attribute [r] xslt
17
+ # @return [String] 'klient'
18
+ # @!attribute [r] validation_xslt
19
+ # @return [String] Path to xsl document
20
+ # @!attribute [r] id
21
+ # @return [String] ID
22
+ attr_reader :xml_document, :time, :count, :type,
23
+ :output_format, :xslt, :validation_xslt, :id
24
+
25
+ # Returns response with found company
26
+ # or nil if not found.
27
+ #
28
+ # @returns [Response, NilClass] response
29
+ def response
30
+ @content.first
31
+ end
32
+
33
+ def record
34
+ response ? response.records.first : nil
35
+ end
36
+
37
+ def error?
38
+ any?(&:error?)
39
+ end
40
+
41
+ def each(&block)
42
+ @content.each(&block)
43
+ end
44
+
45
+ def to_xml
46
+ @xml_document.to_xml
47
+ end
48
+
49
+ protected
50
+
51
+ # rubocop:disable Metrics/AbcSize
52
+ def assign_base_attributes(attributes)
53
+ @time = attributes['odpoved_datum_cas'].to_s
54
+ @count = attributes['odpoved_pocet'].to_s
55
+ @type = attributes['odpoved_typ'].to_s # musi byt 'Standard'
56
+ @output_format = (attributes['vystup_format'] || 'XML').to_s
57
+ @xslt = (attributes['xslt'] || 'klient').to_s
58
+ @validation_xslt = attributes['validation_XSLT'].to_s
59
+ @id = attributes['Id'].to_s
60
+ end
61
+ # rubocop:enable Metrics/AbcSize
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,137 @@
1
+ module Ares
2
+ module Responses
3
+ class Basic < Base
4
+ def initialize(xml_document)
5
+ @response_hash = Hash.from_xml(xml_document)
6
+ @base_response = @response_hash.values.first
7
+
8
+ assign_base_attributes(@base_response)
9
+
10
+ @content = @base_response.map { |key, value| parse_elem(key, value) }.compact
11
+ end
12
+
13
+ def error?
14
+ @content.any? { |e| e.is_a? Ares::Responses::Error }
15
+ end
16
+
17
+ def record
18
+ response
19
+ end
20
+
21
+ def parse_elem(key, value)
22
+ case key
23
+ when 'Fault'
24
+ Ares::Responses::Error.new(
25
+ value,
26
+ value['faultcode'].to_s,
27
+ value['faultstring'].to_s
28
+ )
29
+ when 'Odpoved'
30
+ Response.new(value)
31
+ end
32
+ end
33
+
34
+ class Base
35
+ # rubocop:disable Metrics/MethodLength
36
+ # rubocop:disable Metrics/AbcSize
37
+ def initialize(value)
38
+ self.class.class_eval do
39
+ if const_defined?(:ATTRIBUTES)
40
+ attr_reader(*const_get(:ATTRIBUTES).map(&:parameterize))
41
+ end
42
+ if const_defined?(:COMPOSITE_ATTRIBUTES)
43
+ attr_reader(*const_get(:COMPOSITE_ATTRIBUTES)
44
+ .values.map(&:parameterize))
45
+ end
46
+ end
47
+
48
+ return unless value
49
+
50
+ if self.class.const_defined?(:ATTRIBUTES)
51
+ self.class::ATTRIBUTES.each do |attribute|
52
+ instance_variable_set("@#{attribute.parameterize}",
53
+ value[attribute].presence)
54
+ end
55
+ end
56
+ self.class::COMPOSITE_ATTRIBUTES.each do |class_name, key|
57
+ full_class = "Ares::Responses::Basic::#{class_name}".constantize
58
+ instance_variable_set("@#{key.parameterize}",
59
+ full_class.new(value[key].presence))
60
+ end if self.class.const_defined?(:COMPOSITE_ATTRIBUTES)
61
+ end
62
+ # rubocop:enable Metrics/AbcSize
63
+ # rubocop:enable Metrics/MethodLength
64
+ end
65
+
66
+ class Response < Base
67
+ ATTRIBUTES = %w[Pomocne_ID Vysledek_hledani Pocet_zaznamu].freeze
68
+
69
+ COMPOSITE_ATTRIBUTES = {
70
+ Introduction: 'Uvod',
71
+ Record: 'Vypis_basic'
72
+ }.freeze
73
+ end
74
+
75
+ class Record < Base
76
+ ATTRIBUTES = %w[ICO Obchodni_firma Datum_vzniku Adresa_ARES Priznaky_subjektu
77
+ Kategorie_poctu_pracovniku].freeze
78
+
79
+ COMPOSITE_ATTRIBUTES = {
80
+ LegalForm: 'Pravni_forma',
81
+ SendingAddress: 'Adresa_dorucovaci',
82
+ Address: 'Adresa_ARES',
83
+ CzNace: 'Nace',
84
+ RegisteredInstitution: 'Registrace_RZP'
85
+ }.freeze
86
+ end
87
+
88
+ class RegisteredInstitution < Base
89
+ COMPOSITE_ATTRIBUTES = {
90
+ BusinessOffice: 'Zivnostensky_urad',
91
+ FinanceOffice: 'Financni_urad'
92
+ }.freeze
93
+ end
94
+
95
+ class BusinessOffice < Base
96
+ ATTRIBUTES = %w[Kod_ZU Nazev_ZU].freeze
97
+ end
98
+
99
+ class FinanceOffice < Base
100
+ ATTRIBUTES = %w[Kod_FU Nazev_FU].freeze
101
+ end
102
+
103
+ class CzNace < Base
104
+ ATTRIBUTES = %w[NACE].freeze
105
+ end
106
+
107
+ class SendingAddress < Base
108
+ ATTRIBUTES = %w[zdroj Ulice_cislo PSC_obec].freeze
109
+ end
110
+
111
+ class Address < Base
112
+ ATTRIBUTES = %w[zdroj ID_adresy Kod_statu Nazev_statu Nazev_okresu Nazev_obce
113
+ Nazev_casti_obce Nazev_mestske_casti Nazev_ulice Cislo_domovni
114
+ Typ_cislo_domovni Cislo_orientacni PSC].freeze
115
+
116
+ COMPOSITE_ATTRIBUTES = {
117
+ AddressUIR: 'Adresa_UIR'
118
+ }.freeze
119
+ end
120
+
121
+ class AddressUIR < Base
122
+ ATTRIBUTES = %w[Kod_oblasti Kod_kraje Kod_okresu Kod_obce Kod_pobvod Kod_sobvod
123
+ Kod_casti_obce Kod_mestske_casti PSC Kod_ulice Cislo_domovni
124
+ Typ_cislo_domovni Cislo_orientacni Kod_adresy Kod_objektu
125
+ PCD].freeze
126
+ end
127
+
128
+ class LegalForm < Base
129
+ ATTRIBUTES = %w[zdroj Kod_PF Nazev_PF].freeze
130
+ end
131
+
132
+ class Introduction < Base
133
+ ATTRIBUTES = %w[Nadpis Aktualizace_DB Datum_vypisu Cas_vypisu Typ_odkazu].freeze
134
+ end
135
+ end
136
+ end
137
+ end
@@ -1,77 +1,32 @@
1
+ ##
2
+ # rubocop:disable Metrics/PerceivedComplexity
3
+ # rubocop:disable Metrics/CyclomaticComplexity
4
+ # rubocop:disable Metrics/MethodLength
5
+ # rubocop:disable Metrics/AbcSize
6
+ #
1
7
  module Ares
2
8
  module Responses
3
9
  # Coresponds to <are:Ares_odpovedi> element.
4
- class StandardResponse
5
- include Enumerable
6
-
7
- # @!attribute [r] xml_document
8
- # @return [String] XML Document returned by ares
9
- # @!attribute [r] time
10
- # @return [String] Created at
11
- # @!attribute [r] count
12
- # @return [String] Element count
13
- # @!attribute [r] type
14
- # @return [String] 'Standard'
15
- # @!attribute [r] output_format
16
- # @return [String] 'XML'
17
- # @!attribute [r] xslt
18
- # @return [String] 'klient'
19
- # @!attribute [r] validation_xslt
20
- # @return [String] Path to xsl document
21
- # @!attribute [r] id
22
- # @return [String] ID
23
- attr_reader :xml_document, :time, :count, :type,
24
- :output_format, :xslt, :validation_xslt, :id
25
-
10
+ class Standard < Base
26
11
  def initialize(xml_document)
27
12
  @xml_document = xml_document
28
13
 
29
- attributes = xml_document.root.attributes
30
- @time = attributes['odpoved_datum_cas'].to_s
31
- @count = attributes['odpoved_pocet'].to_s
32
- @type = attributes['odpoved_typ'].to_s # musí být 'Standard'
33
- @output_format = (attributes['vystup_format'] || 'XML').to_s
34
- @xslt = (attributes['xslt'] || 'klient').to_s
35
- @validation_xslt = attributes['validation_XSLT'].to_s
36
- @id = attributes['Id'].to_s
14
+ assign_base_attributes(xml_document.root.attributes)
37
15
 
38
16
  @content = xml_document.root.children.map { |elem| parse_elem elem }.compact
39
17
  end
40
18
 
41
- # Returns response with found company
42
- # or nil if not found.
43
- #
44
- # @returns [Response, NilClass] response
45
- def response
46
- @content.first
47
- end
48
-
49
- def record
50
- response ? response.records.first : nil
51
- end
52
-
53
- def error?
54
- any? { |c| c.error? }
55
- end
56
-
57
- def each(&block)
58
- @content.each(&block)
59
- end
60
-
61
- def to_xml
62
- @xml_document.to_xml
63
- end
64
-
65
19
  private
66
20
 
67
21
  def parse_elem(elem)
68
- if elem.name == 'Fault'
22
+ case elem.name
23
+ when 'Fault'
69
24
  Ares::Responses::Error.new(
70
- elem,
71
- elem.at_xpath('./faultcode/text()').to_s,
72
- elem.at_xpath('./faultstring/text()').to_s
25
+ elem,
26
+ elem.at_xpath('./faultcode/text()').to_s,
27
+ elem.at_xpath('./faultstring/text()').to_s
73
28
  )
74
- elsif elem.name == 'Odpoved'
29
+ when 'Odpoved'
75
30
  Response.new(elem)
76
31
  end
77
32
  end
@@ -86,7 +41,8 @@ module Ares
86
41
  # @return [Integer] Responses count
87
42
  # @!attribute [r] search_type
88
43
  # @return [String] type of search:
89
- # * FREE - searching by ico, if not found search by RC, if not found find by company's name
44
+ # * FREE - searching by ico, if not found search
45
+ # by RC, if not found find by company's name
90
46
  # * ICO, RC, OF - search by type, if not found searching ends.
91
47
  # Searching type is shown in (Kod_shody_*) element.
92
48
  #
@@ -112,34 +68,37 @@ module Ares
112
68
  private
113
69
 
114
70
  # @param child [Nokogiri::XML::Element] Child element
71
+ # rubocop:disable Lint/EmptyWhen
115
72
  def parse_elem(child)
116
73
  case child.name
117
- when 'Pomocne_ID'
118
- @id = child.value
119
- when 'Pocet_zaznamu'
120
- @count = child.content.to_i
121
- when 'Typ_vyhledani'
122
- @search_type = child.content
123
- when 'Error'
124
- @records << Ares::Responses::Error.new(
125
- child,
126
- child.at_xpath('./Error_kod/text()').to_s,
127
- child.at_xpath('./Error_text/text()').to_s
128
- )
129
- when 'Zaznam'
130
- @records << Record.new(child)
131
- when 'text'
132
- # do nothing
133
- else
134
- Ares.logger.warn("#{self}: Unexpected record #{child.name} at #{child.path}")
74
+ when 'Pomocne_ID'
75
+ @id = child.value
76
+ when 'Pocet_zaznamu'
77
+ @count = child.content.to_i
78
+ when 'Typ_vyhledani'
79
+ @search_type = child.content
80
+ when 'Error'
81
+ @records << Ares::Responses::Error.new(
82
+ child,
83
+ child.at_xpath('./Error_kod/text()').to_s,
84
+ child.at_xpath('./Error_text/text()').to_s
85
+ )
86
+ when 'Zaznam'
87
+ @records << Record.new(child)
88
+ when 'text'
89
+ # do nothing
90
+ else
91
+ Ares.logger.warn("#{self}: Unexpected record #{child.name} at #{child.path}")
135
92
  end
136
93
  end
94
+ # rubocop:enable Lint/EmptyWhen
137
95
  end
138
96
 
139
97
  # <are:Zaznam> element
140
98
  class Record
141
99
  # @!attribute [r] match
142
- # @return [Responses::TextCode] <are:Shoda_ICO/RC/OF> Code of matching register ('ICO', 'RC', 'OF')
100
+ # @return [Responses::TextCode] <are:Shoda_ICO/RC/OF>
101
+ # Code of matching register ('ICO', 'RC', 'OF')
143
102
  # @!attribute [r] search_by
144
103
  # @return [String] <are:Vyhledano_dle> Register where record was found
145
104
  # @!attribute [r] register_type
@@ -170,9 +129,10 @@ module Ares
170
129
  def initialize(elem)
171
130
  @match = get_match(elem)
172
131
  @search_by = elem.at_xpath('./are:Vyhledano_dle').content
173
- @register_type = TextCode.new('RegisterType',
174
- elem.at_xpath('./are:Typ_registru/dtt:Kod').content,
175
- elem.at_xpath('./are:Typ_registru/dtt:Text').content)
132
+ @register_type = TextCode
133
+ .new('RegisterType',
134
+ elem.at_xpath('./are:Typ_registru/dtt:Kod').content,
135
+ elem.at_xpath('./are:Typ_registru/dtt:Text').content)
176
136
  date = elem.at_xpath('./are:Datum_vzniku')
177
137
  @creation_date = date ? Time.parse(date.content) : nil
178
138
  date = elem.at_xpath('./are:Datum_zaniku')
@@ -196,6 +156,7 @@ module Ares
196
156
  # @returns [AresAddress, NilClass] Address
197
157
  def address
198
158
  return unless identification
159
+
199
160
  identification.address
200
161
  end
201
162
 
@@ -203,17 +164,17 @@ module Ares
203
164
 
204
165
  def get_match(elem)
205
166
  name = code = text = nil
206
- if match = elem.at_xpath('./are:Shoda_ICO')
167
+ if (match = elem.at_xpath('./are:Shoda_ICO'))
207
168
  name = 'Match ICO'
208
169
  code = match.at_xpath('./dtt:Kod').content
209
170
  text = match.at_xpath('./dtt:Text')
210
171
  text = (text ? text.content : nil)
211
- elsif match = elem.at_xpath('./are:Shoda_RC')
172
+ elsif (match = elem.at_xpath('./are:Shoda_RC'))
212
173
  name = 'Match RC'
213
174
  code = match.at_xpath('./dtt:Kod').content
214
175
  text = match.at_xpath('./dtt:Text')
215
176
  text = (text ? text.content : nil)
216
- elsif match = elem.at_xpath('./are:Shoda_OF')
177
+ elsif (match = elem.at_xpath('./are:Shoda_OF'))
217
178
  name = 'Match OF'
218
179
  code = match.at_xpath('./dtt:Kod').content
219
180
  text = match.at_xpath('./dtt:Text')
@@ -228,13 +189,13 @@ module Ares
228
189
 
229
190
  # <Pravni_forma> element
230
191
  class LegalForm
231
- # Typ ekonomického subjektu:
232
- # F-fyzická osoba tuzemská,
233
- # P-právnická osoba tuzemská,
234
- # X-zahraniční právnická osoba,
235
- # Z-zahraniční fyzická osoba,
236
- # O-fyzická osoba s organizační složkou
237
- # C-civilní osoba nepodnikající (v CEU)
192
+ # Typ ekonomickeho subjektu:
193
+ # F-fyzicka osoba tuzemska,
194
+ # P-pravnicka osoba tuzemska,
195
+ # X-zahranicni pravnicka osoba,
196
+ # Z-zahranicni fyzicka osoba,
197
+ # O-fyzicka osoba s organizacni slozkou
198
+ # C-civilni osoba nepodnikajici (v CEU)
238
199
  attr_reader :code, :name, :person, :text, :person_type
239
200
 
240
201
  def initialize(elem)
@@ -280,8 +241,8 @@ module Ares
280
241
 
281
242
  # <Osoba> element
282
243
  class Person
283
- attr_reader :title_before, :name, :last_name, :title_after, :birthdate, :personal_id_number,
284
- :text, :address
244
+ attr_reader :title_before, :name, :last_name, :title_after,
245
+ :birthdate, :personal_id_number, :text, :address
285
246
 
286
247
  def initialize(elem)
287
248
  @title_before = elem.at_xpath('./dtt:Titul_pred')
@@ -299,7 +260,7 @@ module Ares
299
260
  # Ares address definition
300
261
  # ares_datatypes_v_1.0.4.xsd:788
301
262
  class AresAddress
302
- # Názvy:
263
+ # Nazvy:
303
264
  # uol ico: 27074358
304
265
  # en: http://wwwinfo.mfcr.cz/cgi-bin/ares/ares_sad.cgi?zdroj=0&adr=204437556&jazyk=en
305
266
  # cs: http://wwwinfo.mfcr.cz/cgi-bin/ares/ares_sad.cgi?zdroj=0&adr=204437556
@@ -334,11 +295,12 @@ module Ares
334
295
  # @return [Integer] postcode (PSC)
335
296
  # @!attribute [r] foreign_postcode
336
297
  # @return [Integer] Foreign postcode (Zahr_PSC)
337
- attr_reader :id, :state_code, :state, :territory, :region, :district, :town, :residential_area,
338
- :town_district, :street, :building_number, :sequence_number, :land_registry_number,
298
+ attr_reader :id, :state_code, :state, :territory, :region, :district,
299
+ :town, :residential_area, :town_district, :street,
300
+ :building_number, :sequence_number, :land_registry_number,
339
301
  :postcode, :foreign_postcode
340
302
 
341
- # TODO: Dopřeložit
303
+ # TODO: localize
342
304
 
343
305
  # @!attribute [r] pobvod
344
306
  # @return [Integer] (Nazev_pobvodu)
@@ -370,6 +332,8 @@ module Ares
370
332
 
371
333
  # TODO: localize
372
334
  # @param lang [String] ('cz') Language
335
+ #
336
+ # rubocop:disable Metrics/BlockNesting
373
337
  def to_s(lang = 'cz')
374
338
  s = ''
375
339
  if street
@@ -383,7 +347,7 @@ module Ares
383
347
  end
384
348
  s << ", #{postcode} #{town}"
385
349
  if residential_area
386
- (town =~ /-/) ? s << ',' : s << '-' if town
350
+ s << (town =~ /-/ ? ',' : '-') if town
387
351
  s << residential_area
388
352
  end
389
353
  else
@@ -409,6 +373,7 @@ module Ares
409
373
  end
410
374
  s
411
375
  end
376
+ # rubocop:enable Metrics/BlockNesting
412
377
 
413
378
  private
414
379
 
@@ -439,4 +404,10 @@ module Ares
439
404
  end
440
405
  end
441
406
  end
442
- end
407
+ end
408
+ #
409
+ # rubocop:enable Metrics/PerceivedComplexity
410
+ # rubocop:enable Metrics/CyclomaticComplexity
411
+ # rubocop:enable Metrics/MethodLength
412
+ # rubocop:enable Metrics/AbcSize
413
+ ##
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Ares
2
- VERSION = '0.3.2'.freeze
4
+ VERSION = '0.4.0'
3
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ares.rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ondřej Svoboda
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-08-03 00:00:00.000000000 Z
12
+ date: 2019-01-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: ico-validator
@@ -26,19 +26,33 @@ dependencies:
26
26
  - !ruby/object:Gem::Version
27
27
  version: '0.4'
28
28
  - !ruby/object:Gem::Dependency
29
- name: bundler
29
+ name: pry
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - "~>"
32
+ - - ">="
33
33
  - !ruby/object:Gem::Version
34
- version: '1.7'
34
+ version: '0'
35
35
  type: :development
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
- - - "~>"
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: rails
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
40
54
  - !ruby/object:Gem::Version
41
- version: '1.7'
55
+ version: '0'
42
56
  - !ruby/object:Gem::Dependency
43
57
  name: rake
44
58
  requirement: !ruby/object:Gem::Requirement
@@ -68,7 +82,7 @@ dependencies:
68
82
  - !ruby/object:Gem::Version
69
83
  version: '0'
70
84
  - !ruby/object:Gem::Dependency
71
- name: webmock
85
+ name: rubocop
72
86
  requirement: !ruby/object:Gem::Requirement
73
87
  requirements:
74
88
  - - ">="
@@ -96,7 +110,7 @@ dependencies:
96
110
  - !ruby/object:Gem::Version
97
111
  version: '0'
98
112
  - !ruby/object:Gem::Dependency
99
- name: rails
113
+ name: webmock
100
114
  requirement: !ruby/object:Gem::Requirement
101
115
  requirements:
102
116
  - - ">="
@@ -137,6 +151,20 @@ dependencies:
137
151
  - - ">="
138
152
  - !ruby/object:Gem::Version
139
153
  version: '0'
154
+ - !ruby/object:Gem::Dependency
155
+ name: activesupport
156
+ requirement: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ type: :runtime
162
+ prerelease: false
163
+ version_requirements: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - ">="
166
+ - !ruby/object:Gem::Version
167
+ version: '0'
140
168
  description: Gem for accesing business information from ARES database.
141
169
  email:
142
170
  - blin@uol.cz
@@ -147,6 +175,7 @@ files:
147
175
  - ".gitignore"
148
176
  - ".hound.yml"
149
177
  - ".rspec"
178
+ - ".rubocop.yml"
150
179
  - ".ruby-gemset"
151
180
  - ".ruby-version"
152
181
  - ".travis.yml"
@@ -156,14 +185,18 @@ files:
156
185
  - Rakefile
157
186
  - TODO.md
158
187
  - ares.gemspec
188
+ - bin/console
159
189
  - lib/ares.rb
160
- - lib/ares/client.rb
190
+ - lib/ares/client/base.rb
191
+ - lib/ares/client/basic.rb
161
192
  - lib/ares/client/standard.rb
162
193
  - lib/ares/errors.rb
163
194
  - lib/ares/http.rb
164
195
  - lib/ares/logging.rb
165
196
  - lib/ares/responses.rb
166
- - lib/ares/responses/standard_response.rb
197
+ - lib/ares/responses/base.rb
198
+ - lib/ares/responses/basic.rb
199
+ - lib/ares/responses/standard.rb
167
200
  - lib/ares/version.rb
168
201
  homepage: http://www.uol.cz
169
202
  licenses: []
@@ -184,7 +217,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
184
217
  version: '0'
185
218
  requirements: []
186
219
  rubyforge_project:
187
- rubygems_version: 2.6.11
220
+ rubygems_version: 2.7.8
188
221
  signing_key:
189
222
  specification_version: 4
190
223
  summary: ARES library
@@ -1,14 +0,0 @@
1
- require 'ares/http'
2
- require 'ares/responses'
3
-
4
- module Ares
5
- module Client
6
- autoload :Standard, 'ares/client/standard'
7
-
8
- class << self
9
- def standard
10
- Standard.new
11
- end
12
- end
13
- end
14
- end