vat_payer_cz 0.0.1 → 0.0.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ed8bef1efb56884b487e065a94a10dcedbf2925f
4
- data.tar.gz: 39a9d18232a6dbdc1f1ccd24871ffb47ac74b36a
3
+ metadata.gz: 807e334a32d9d296115c356a28f12aa21aec3397
4
+ data.tar.gz: f5420d9d49965329a2a97941de66d19f01ac85e8
5
5
  SHA512:
6
- metadata.gz: aca716327fe729a78d29e5c535b99a0eaaaa2f491204294e58f77ccaee4af95d3c26c366a4ec0323a430f97ea684bef72d02e82c83e8ec3e0bd7631711cec0e9
7
- data.tar.gz: e21edc47d2841f1f598be25c7b7a885b2a03fcb3208b762052788c5d5d096ab7c5bf5df5d1e12aa60e063b94fe97041d48157908e9c2394b721c86eda140bfe4
6
+ metadata.gz: a9407c571506ee198838e31d539dda02d2cb5139efccb54670040021ac4764f4bacb8ba25b151c9632f1c737bae6e4aff18bb383716b3f9af1aa68f2926d2aca
7
+ data.tar.gz: 7730a090a5cc510c1de40ea11eecc719ff19b4a16a80433b45e9b286b3d124060afc5ccbe7bdc32fdb6c6bcdc0ab16b25472e6b4dafad870cad6b9ec6e9dfb98
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- # Specify your gem's dependencies in vat_payer_cz.gemspec
3
+ # Specify your gem's dependencies in vat_info.gemspec
4
4
  gemspec
data/README.md CHANGED
@@ -6,18 +6,33 @@ This is Ruby wrapper for [web service for "searching information about reliabili
6
6
 
7
7
  ## Usage
8
8
  The web service has the following three end-points:
9
- - standard VAT payer info
10
- - extended VAT payer info
11
- - list of unreliable VAT payers
9
+ - [standard VAT payer info](#standard)
10
+ - [extended VAT payer info](#extended)
11
+ - list of unreliable VAT payers (not implemented)
12
12
 
13
- This gem currently implements 'standard VAT payer info'.
13
+ This gem currently implements **standard VAT payer info** and **extended VAT payer info**.
14
14
 
15
- # Standard VAT payer info
15
+ ## <a name="standard">Standard VAT payer info</a>
16
16
  ```ruby
17
+ require 'vat_info'
18
+
17
19
  vat_ids = %w(CZ27169278 CZ26168685)
18
20
  VatInfo.unreliable_payer(*vat_ids)
19
21
  ```
20
- You should see something like this:
22
+ ## <a name="extended">Extended VAT payer info</a>
23
+ Compared to Standard VAT payer info, the response is enriched by other VAT payer data, such as name and address.
24
+ The library normalizes some of the VAT payer attributes which are supplied in capitals (company name and address attributes).
25
+ ```ruby
26
+ require 'vat_info'
27
+
28
+ vat_ids = %w(CZ27169278 CZ26168685)
29
+ VatInfo.unreliable_payer_extended(*vat_ids)
30
+ ```
31
+
32
+ ## Response
33
+ Object `VatInfo::Response`
34
+
35
+ #### Example
21
36
  ```shell
22
37
  => #<VatInfo::Response:0x0000000001ff61e8
23
38
  @body=
@@ -33,24 +48,26 @@ You should see something like this:
33
48
  {:predcisli=>nil, :cislo=>"2400915487", :kod_banky=>"2010", :iban=>nil, :datum_zverejneni=>"2016-05-05"}]},
34
49
  ...
35
50
  ```
36
- ## Response
37
- Object `VatInfo::Response`
38
- ### status_code
51
+ ### .status_code
39
52
  `VatInfo::Response.status_code => String`
40
53
  200 - OK: Valid response was received.
41
54
  408 - Request Timeout: the web service timed out.
42
55
  503 - Service Unavailable: there was another error fetching the response.
43
56
 
44
- ### body
57
+ ### .body
45
58
  Empty attributes have `nil` value.
46
59
 
47
60
  `VatInfo::Response.body => Hash`
48
61
  ```ruby
49
62
  {
50
63
  status: { Status }
51
- platci: [ { Payer }, .. ]
64
+ platci: [ { Payer | PayerExtended }, .. ]
52
65
  }
53
66
  ```
67
+
68
+ ### .raw
69
+ Raw data returned by the web service.
70
+
54
71
  #### Status
55
72
  See official docs for explanation.
56
73
  ```ruby
@@ -70,6 +87,24 @@ See official docs for explanation.
70
87
  ucty: [ { Account }, .. ]
71
88
  }
72
89
  ```
90
+ #### PayerExtended
91
+ ```ruby
92
+ {
93
+ nespolehlivy_platce: String, # "ANO" | "NE" | "NENALEZEN"
94
+ datum_zverejneni: String, # ISO 8601 Date
95
+ dic: String,
96
+ cislo_fu: String,
97
+ ucty: [ { Account }, .. ]
98
+
99
+ #Extended info
100
+ nazev_subjektu: String,
101
+ ulice_cislo: String,
102
+ cast_obce: String,
103
+ mesto: String,
104
+ psc: String,
105
+ stat: String
106
+ }
107
+ ```
73
108
  #### Account
74
109
  ```ruby
75
110
  {
@@ -0,0 +1,26 @@
1
+ module VatInfo
2
+ module Models
3
+ class VatPayerExtended < VatPayer
4
+ def initialize(params)
5
+ super(params)
6
+
7
+ @data[:nazev_subjektu] = normalize(params[:nazev_subjektu])
8
+
9
+ address = params.fetch(:adresa, {})
10
+ @data[:ulice_cislo] = normalize(address[:ulice_cislo])
11
+ @data[:cast_obce] = normalize(address[:cast_obce])
12
+ @data[:mesto] = normalize(address[:mesto])
13
+ @data[:psc] = normalize(address[:psc])
14
+ @data[:stat] = address[:stat]
15
+ rescue KeyError => e
16
+ raise InvalidStructure, "Response XML is missing required attributes.\n" \
17
+ "Input params were: #{params}\n" \
18
+ "Rescued error: #{e}"
19
+ end
20
+
21
+ def normalize(string)
22
+ VatInfo::Utils.normalize(string)
23
+ end
24
+ end
25
+ end
26
+ end
@@ -3,13 +3,13 @@ module VatInfo
3
3
  class VatPayers
4
4
  attr_accessor :data
5
5
 
6
- def initialize(params = {})
6
+ def initialize(model, params = {})
7
7
  @data = {}
8
- @data[:platci] = create_vat_payers(params)
8
+ @data[:platci] = create_vat_payers(model, params)
9
9
  end
10
10
 
11
- def create_vat_payers(payers)
12
- payers.map { |payer| VatInfo::Models::VatPayer.new(payer).data }
11
+ def create_vat_payers(model, payers)
12
+ payers.map { |payer| model.new(payer).data }
13
13
  end
14
14
  end
15
15
  end
@@ -1,6 +1,7 @@
1
1
  require 'vat_info/models/status'
2
2
  require 'vat_info/models/vat_payers'
3
3
  require 'vat_info/models/vat_payer'
4
+ require 'vat_info/models/vat_payer_extended'
4
5
 
5
6
  module VatInfo
6
7
  module Models
@@ -0,0 +1,19 @@
1
+ module VatInfo
2
+ class Request
3
+ class UnreliablePayerExtended < VatInfo::Request
4
+ attr_accessor :vat_ids
5
+
6
+ def initialize(*vat_ids)
7
+ self.vat_ids = vat_ids
8
+ end
9
+
10
+ def body
11
+ Nokogiri::XML::Builder.new('encoding' => 'UTF-8') do |xml|
12
+ xml.StatusNespolehlivyPlatceRozsirenyRequest(xmlns: 'http://adis.mfcr.cz/rozhraniCRPDPH/') do
13
+ vat_ids.each { |vat_id| xml.dic(vat_id) }
14
+ end
15
+ end.doc
16
+ end
17
+ end
18
+ end
19
+ end
@@ -1,5 +1,6 @@
1
1
  require 'nokogiri'
2
2
  require 'vat_info/request/unreliable_payer'
3
+ require 'vat_info/request/unreliable_payer_extended'
3
4
 
4
5
  module VatInfo
5
6
  class Request
@@ -1,7 +1,38 @@
1
1
  module VatInfo
2
2
  module Utils
3
+ COMPANY_TYPES = ['a.s.', 's.r.o.', 'v.o.s.', 'k.s.', 'z.s.'].freeze
4
+ SPECIAL_CHARS = [
5
+ %w(Á á), %w(Č č), %w(Ď ď), %w(É é), %w(Ě ě), %w(Í í), %w(Ň ń), %w(Ó ó),
6
+ %w(Ř ř), %w(Š š), %w(Ť ť), %w(Ú ú), %w(Ů ů), %w(Ž ž), %w(Ý ý)
7
+ ].freeze
8
+
3
9
  def self.wrap_in_array(content)
4
10
  content.is_a?(Array) ? content : [content]
5
11
  end
12
+
13
+ def self.normalize(string)
14
+ return unless string
15
+ replace_exceptions(string).strip.split(' ').map do |word|
16
+ format_this word
17
+ end.join(' ')
18
+ end
19
+
20
+ def self.replace_special_chars(string)
21
+ sub_string = string[1..-1]
22
+ SPECIAL_CHARS.each do |pattern|
23
+ sub_string = sub_string.gsub(/#{pattern[0]}/i, pattern[1])
24
+ end
25
+ string[0].concat(sub_string)
26
+ end
27
+
28
+ def self.replace_exceptions(string)
29
+ string.gsub(/,.+spol\.+ s r.o./i, ' s.r.o.')
30
+ end
31
+
32
+ def self.format_this(string)
33
+ return string.downcase if string.size == 1
34
+ return string.downcase if COMPANY_TYPES.include? string.downcase
35
+ replace_special_chars(string.capitalize)
36
+ end
6
37
  end
7
38
  end
@@ -1,3 +1,3 @@
1
1
  module VatInfo
2
- VERSION = '0.0.1'
2
+ VERSION = '0.0.3'
3
3
  end
data/lib/vat_info.rb CHANGED
@@ -7,6 +7,8 @@ require 'vat_info/models'
7
7
 
8
8
  module VatInfo
9
9
  def self.unreliable_payer(*vat_ids)
10
+ raise ArgumentError, 'Supply at least one id for query' if vat_ids.blank?
11
+
10
12
  request = VatInfo::Request::UnreliablePayer.new(*vat_ids).to_xml
11
13
  response = VatInfo::Query.call(request, :get_status_nespolehlivy_platce)
12
14
 
@@ -15,16 +17,29 @@ module VatInfo
15
17
  status = VatInfo::Models::Status.new(status_raw).data
16
18
 
17
19
  payers_raw = VatInfo::Utils.wrap_in_array(response.raw[:status_nespolehlivy_platce_response][:status_platce_dph])
18
- payers = VatInfo::Models::VatPayers.new(payers_raw).data
20
+ payers = VatInfo::Models::VatPayers.new(VatInfo::Models::VatPayer, payers_raw).data
19
21
 
20
22
  response.body = status.merge(payers)
21
23
  end
22
24
  response
23
25
  end
24
26
 
25
- def self.unreliable_payer_extended
26
- # :get_status_nespolehlivy_platce_rozsireny
27
- raise NotImplementedError
27
+ def self.unreliable_payer_extended(*vat_ids)
28
+ raise ArgumentError, 'Supply at least one id for query' if vat_ids.blank?
29
+
30
+ request = VatInfo::Request::UnreliablePayerExtended.new(*vat_ids).to_xml
31
+ response = VatInfo::Query.call(request, :get_status_nespolehlivy_platce_rozsireny)
32
+
33
+ if response.ok?
34
+ status_raw = response.raw[:status_nespolehlivy_platce_rozsireny_response][:status]
35
+ status = VatInfo::Models::Status.new(status_raw).data
36
+
37
+ payers_raw = VatInfo::Utils.wrap_in_array(response.raw[:status_nespolehlivy_platce_rozsireny_response][:status_platce_dph])
38
+ payers = VatInfo::Models::VatPayers.new(VatInfo::Models::VatPayerExtended, payers_raw).data
39
+
40
+ response.body = status.merge(payers)
41
+ end
42
+ response
28
43
  end
29
44
 
30
45
  def self.unreliable_payer_list
data/vat_info.gemspec CHANGED
@@ -1,4 +1,4 @@
1
- lib = File.expand_path('../lib', __FILE__)
1
+ lib = File.expand_path('lib', __dir__)
2
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
  require 'vat_info/version'
4
4
 
@@ -13,7 +13,6 @@ Gem::Specification.new do |spec|
13
13
  spec.homepage = 'https://github.com/ucetnictvi-on-line/vat_payer_cz'
14
14
  spec.license = 'MIT'
15
15
 
16
-
17
16
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
18
17
  f.match(%r{^(test|spec|features)/})
19
18
  end
@@ -27,7 +26,7 @@ Gem::Specification.new do |spec|
27
26
  spec.add_development_dependency 'pry', '~> 0.11'
28
27
  spec.add_development_dependency 'rake', '~> 10.0'
29
28
  spec.add_development_dependency 'rspec', '~> 3.0'
29
+ spec.add_development_dependency 'rubocop'
30
30
  spec.add_development_dependency 'vcr', '~> 4.0'
31
31
  spec.add_development_dependency 'webmock', '~> 3.3'
32
32
  end
33
-
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vat_payer_cz
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tomas Landovsky
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-02-08 00:00:00.000000000 Z
11
+ date: 2018-03-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: savon
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '3.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: vcr
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -135,10 +149,12 @@ files:
135
149
  - lib/vat_info/models.rb
136
150
  - lib/vat_info/models/status.rb
137
151
  - lib/vat_info/models/vat_payer.rb
152
+ - lib/vat_info/models/vat_payer_extended.rb
138
153
  - lib/vat_info/models/vat_payers.rb
139
154
  - lib/vat_info/query.rb
140
155
  - lib/vat_info/request.rb
141
156
  - lib/vat_info/request/unreliable_payer.rb
157
+ - lib/vat_info/request/unreliable_payer_extended.rb
142
158
  - lib/vat_info/response.rb
143
159
  - lib/vat_info/utils.rb
144
160
  - lib/vat_info/version.rb
@@ -163,7 +179,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
163
179
  version: '0'
164
180
  requirements: []
165
181
  rubyforge_project:
166
- rubygems_version: 2.5.2.1
182
+ rubygems_version: 2.6.8
167
183
  signing_key:
168
184
  specification_version: 4
169
185
  summary: Ruby wrapper for web service providing info about Czech VAT payers.