vat_payer_cz 0.0.1 → 0.0.3

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
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.