fattura24 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +2 -0
  3. data/Gemfile +8 -0
  4. data/LICENSE +21 -0
  5. data/README.md +186 -0
  6. data/Rakefile +16 -0
  7. data/docs/Fattura24.html +197 -0
  8. data/docs/Fattura24/Api.html +497 -0
  9. data/docs/Fattura24/Api/Response.html +371 -0
  10. data/docs/Fattura24/Configuration.html +176 -0
  11. data/docs/Fattura24/DocumentType.html +133 -0
  12. data/docs/Fattura24/Error.html +104 -0
  13. data/docs/Fattura24/InvalidParams.html +104 -0
  14. data/docs/Fattura24/MissingApiKey.html +157 -0
  15. data/docs/Fattura24/MissingInput.html +104 -0
  16. data/docs/Fattura24/NotSerializable.html +104 -0
  17. data/docs/Fattura24/Utils.html +232 -0
  18. data/docs/README_md.html +273 -0
  19. data/docs/created.rid +10 -0
  20. data/docs/css/fonts.css +167 -0
  21. data/docs/css/rdoc.css +619 -0
  22. data/docs/fonts/Lato-Light.ttf +0 -0
  23. data/docs/fonts/Lato-LightItalic.ttf +0 -0
  24. data/docs/fonts/Lato-Regular.ttf +0 -0
  25. data/docs/fonts/Lato-RegularItalic.ttf +0 -0
  26. data/docs/fonts/SourceCodePro-Bold.ttf +0 -0
  27. data/docs/fonts/SourceCodePro-Regular.ttf +0 -0
  28. data/docs/images/add.png +0 -0
  29. data/docs/images/arrow_up.png +0 -0
  30. data/docs/images/brick.png +0 -0
  31. data/docs/images/brick_link.png +0 -0
  32. data/docs/images/bug.png +0 -0
  33. data/docs/images/bullet_black.png +0 -0
  34. data/docs/images/bullet_toggle_minus.png +0 -0
  35. data/docs/images/bullet_toggle_plus.png +0 -0
  36. data/docs/images/date.png +0 -0
  37. data/docs/images/delete.png +0 -0
  38. data/docs/images/find.png +0 -0
  39. data/docs/images/loadingAnimation.gif +0 -0
  40. data/docs/images/macFFBgHack.png +0 -0
  41. data/docs/images/package.png +0 -0
  42. data/docs/images/page_green.png +0 -0
  43. data/docs/images/page_white_text.png +0 -0
  44. data/docs/images/page_white_width.png +0 -0
  45. data/docs/images/plugin.png +0 -0
  46. data/docs/images/ruby.png +0 -0
  47. data/docs/images/tag_blue.png +0 -0
  48. data/docs/images/tag_green.png +0 -0
  49. data/docs/images/transparent.png +0 -0
  50. data/docs/images/wrench.png +0 -0
  51. data/docs/images/wrench_orange.png +0 -0
  52. data/docs/images/zoom.png +0 -0
  53. data/docs/index.html +283 -0
  54. data/docs/js/darkfish.js +84 -0
  55. data/docs/js/navigation.js +105 -0
  56. data/docs/js/navigation.js.gz +0 -0
  57. data/docs/js/search.js +110 -0
  58. data/docs/js/search_index.js +1 -0
  59. data/docs/js/search_index.js.gz +0 -0
  60. data/docs/js/searcher.js +229 -0
  61. data/docs/js/searcher.js.gz +0 -0
  62. data/docs/table_of_contents.html +216 -0
  63. data/fattura24.gemspec +54 -0
  64. data/lib/fattura24.rb +28 -0
  65. data/lib/fattura24/api/client.rb +160 -0
  66. data/lib/fattura24/api/response.rb +70 -0
  67. data/lib/fattura24/configuration.rb +14 -0
  68. data/lib/fattura24/document_type.rb +15 -0
  69. data/lib/fattura24/errors.rb +20 -0
  70. data/lib/fattura24/utils.rb +38 -0
  71. data/lib/fattura24/version.rb +5 -0
  72. metadata +267 -0
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require 'fattura24/version'
6
+
7
+ file_regex = /^(
8
+ \.env.example|
9
+ \.dockerignore|
10
+ \.gitignore|
11
+ \.rspec|
12
+ \.rubocop.yml|
13
+ \.ruby-version|
14
+ \.travis.yml|
15
+ \.codeclimate.yml|
16
+ Makefile|
17
+ Dockerfile\.|
18
+ test|
19
+ spec|
20
+ bin
21
+ )/x
22
+
23
+ Gem::Specification.new do |spec|
24
+ spec.name = 'fattura24'
25
+ spec.version = Fattura24::VERSION
26
+ spec.authors = ['Stefano Nada']
27
+ spec.email = ['stefano.nada@gmail.com']
28
+
29
+ spec.summary = 'Ruby wrapper for fattura24 apis'
30
+ spec.description = 'Minimal Ruby 2 wrapper for fattura24 apis.'
31
+ spec.homepage = 'https://github.com/snada/fattura24'
32
+ spec.license = 'MIT'
33
+
34
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
35
+ `git ls-files -z`.split("\x0").reject do |f|
36
+ f.match(file_regex)
37
+ end
38
+ end
39
+
40
+ spec.require_paths = ['lib']
41
+
42
+ spec.add_runtime_dependency 'activesupport', '> 4.2'
43
+ spec.add_runtime_dependency 'builder'
44
+
45
+ spec.add_development_dependency 'bundler', '~> 2.1'
46
+ spec.add_development_dependency 'dotenv', '~> 2.7'
47
+ spec.add_development_dependency 'pry', '~> 0.13'
48
+ spec.add_development_dependency 'rake', '~> 13.0'
49
+ spec.add_development_dependency 'rdoc', '~> 6.1'
50
+ spec.add_development_dependency 'rspec', '~> 3.9'
51
+ spec.add_development_dependency 'rubocop', '~> 0.82'
52
+ spec.add_development_dependency 'simplecov', '~> 0.17.0'
53
+ spec.add_development_dependency 'webmock', '~> 3.8'
54
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/core_ext/hash'
4
+ require 'active_support/core_ext/string'
5
+
6
+ require 'fattura24/api/client'
7
+ require 'fattura24/api/response'
8
+
9
+ require 'fattura24/configuration'
10
+ require 'fattura24/document_type'
11
+ require 'fattura24/errors'
12
+ require 'fattura24/utils'
13
+ require 'fattura24/version'
14
+
15
+ module Fattura24
16
+ ##
17
+ # Returns current configuration object
18
+ def self.configuration
19
+ @configuration ||= Configuration.new
20
+ end
21
+
22
+ ##
23
+ # Calling this method will yield to a block
24
+ # passing the +configuration+ object as parameter.
25
+ def self.configure
26
+ yield configuration
27
+ end
28
+ end
@@ -0,0 +1,160 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'net/http'
4
+
5
+ module Fattura24
6
+ module Api
7
+ ##
8
+ # This library uses {fattura24.com}[https://fattura24.com] v0.3 apis.
9
+ # Check their docs {here}[https://www.fattura24.com/api-documentazione/].
10
+ API_HOST = 'https://www.app.fattura24.com/api/v0.3'
11
+
12
+ ##
13
+ # Performs a generic request on the api endpoint using Ruby's
14
+ # {Net::HTTP}[https://ruby-doc.org/stdlib-2.7.0/libdoc/net/http/rdoc/Net/HTTP.html].
15
+ # All the other api methods call this one.
16
+ # Parameter +path+ should always be prepended with '/'.
17
+ # Body will default to an empty hash.
18
+ # Returns a {Response}[rdoc-ref:Fattura24::Api::Response] object.
19
+ def self.request(path, body = {})
20
+ raise Fattura24::MissingApiKey unless Fattura24.configuration.api_key
21
+
22
+ uri = URI.parse("#{API_HOST}#{path}")
23
+ request = Net::HTTP::Post.new(uri)
24
+ request.set_form_data(inject_api_key(body))
25
+
26
+ req_options = { use_ssl: uri.scheme == 'https' }
27
+ response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
28
+ http.request(request)
29
+ end
30
+
31
+ Response.new(response)
32
+ end
33
+
34
+ ##
35
+ # Tests validity of your api key.
36
+ # Returns a {Response}[rdoc-ref:Fattura24::Api::Response] object.
37
+ def self.test_key
38
+ request('/TestKey')
39
+ end
40
+
41
+ # rubocop:disable Naming/AccessorMethodName
42
+
43
+ ##
44
+ # Gets a list of document templates.
45
+ # Returns a {Response}[rdoc-ref:Fattura24::Api::Response] object.
46
+ def self.get_template
47
+ request('/GetTemplate')
48
+ end
49
+
50
+ ##
51
+ # Gets 'piano dei conti'
52
+ # Returns a {Response}[rdoc-ref:Fattura24::Api::Response] object.
53
+ def self.get_pdc
54
+ request('/GetPdc')
55
+ end
56
+
57
+ ##
58
+ # Gets numerator list.
59
+ # Returns a {Response}[rdoc-ref:Fattura24::Api::Response] object.
60
+ def self.get_numerator
61
+ request('/GetNumerator')
62
+ end
63
+
64
+ ##
65
+ # Donwloads a pdf file for an existing document.
66
+ # Requires an existing document id, throws
67
+ # {MissingInput}[rdoc-ref:Fattura24::MissingInput] when passing a nil +id+.
68
+ # Returns a {Response}[rdoc-ref:Fattura24::Api::Response] object: refer
69
+ # to it's documentation to detect a binary file and instruction
70
+ # to save it to disk.
71
+ def self.get_file(id)
72
+ raise(Fattura24::MissingInput, 'You need to provide an id') unless id
73
+
74
+ request('/GetFile', { docId: id })
75
+ end
76
+
77
+ ##
78
+ # Gets a list of products.
79
+ # You can pass a Hash containing a +code+ or +category+
80
+ # to filter your existing products by them.
81
+ # Throws a
82
+ # {InvalidParams}[rdoc-ref:Fattura24::InvalidParams] when passing
83
+ # an hash containing unrecognized options.
84
+ # Returns a {Response}[rdoc-ref:Fattura24::Api::Response] object.
85
+ def self.get_product(options = {})
86
+ validate_params(options, %i[code category])
87
+ request('/GetProduct', options)
88
+ end
89
+
90
+ # rubocop:enable Naming/AccessorMethodName
91
+
92
+ ##
93
+ # Saves a customer in your contact list.
94
+ # Any +nil+ parameter will be deeply removed
95
+ # by using the {crush}[rdoc-ref:Fattura24::Utils.crush] utility.
96
+ # Returns a {Response}[rdoc-ref:Fattura24::Api::Response] object.
97
+ def self.save_customer(data = {})
98
+ request('/SaveCustomer', {
99
+ xml: hash_to_xml(data)
100
+ })
101
+ end
102
+
103
+ ##
104
+ # Use this to create documents. Pass a hash with the data, check
105
+ # the README file for examples. Use
106
+ # {DocumentType}[rdoc-ref:Fattura24::DocumentType]
107
+ # enums to specify document type.
108
+ # Any +nil+ parameter will be deeply removed
109
+ # by using the {crush}[rdoc-ref:Fattura24::Utils.crush] utility.
110
+ # Returns a {Response}[rdoc-ref:Fattura24::Api::Response] object.
111
+ def self.save_document(data = {})
112
+ request('/SaveDocument', {
113
+ xml: hash_to_xml(data)
114
+ })
115
+ end
116
+
117
+ ##
118
+ # Creates a credit.
119
+ # Any +nil+ parameter will be deeply removed
120
+ # by using the {crush}[rdoc-ref:Fattura24::Utils.crush] utility.
121
+ # Returns a {Response}[rdoc-ref:Fattura24::Api::Response] object.
122
+ def self.save_item(data = {})
123
+ request('/SaveItem', {
124
+ xml: hash_to_xml(data)
125
+ })
126
+ end
127
+
128
+ def self.hash_to_xml(hash)
129
+ { document: Fattura24::Utils.crush(hash) || '' }
130
+ .to_xml(
131
+ root: 'Fattura24',
132
+ indent: 0,
133
+ skip_types: true,
134
+ camelize: true
135
+ )
136
+ end
137
+
138
+ def self.inject_api_key(hash)
139
+ hash.merge(apiKey: Fattura24.configuration.api_key)
140
+ end
141
+
142
+ def self.validate_params(params, permitted_params)
143
+ invalid_params = params.keys.map(&:to_sym) - permitted_params
144
+
145
+ raise_params_error(invalid_params) if invalid_params.any?
146
+ end
147
+
148
+ def self.raise_params_error(invalid_params)
149
+ msg = "This params are not permitted: #{invalid_params.join(', ')}"
150
+ raise Fattura24::InvalidParams, msg
151
+ end
152
+
153
+ private_class_method(
154
+ :hash_to_xml,
155
+ :inject_api_key,
156
+ :validate_params,
157
+ :raise_params_error
158
+ )
159
+ end
160
+ end
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Fattura24
4
+ module Api
5
+ ##
6
+ # An instance of this class will be returned on every
7
+ # api call, wrapping the content of the response and
8
+ # providing helper methods to navigate it's content.
9
+ class Response
10
+ ##
11
+ # When needed, you can directly access the underlying
12
+ # {Net::HTTP}[https://ruby-doc.org/stdlib-2.7.0/libdoc/net/http/rdoc/Net/HTTP.html] response
13
+ # by calling this method.
14
+ attr_reader :http_response
15
+
16
+ def initialize(http_response)
17
+ @http_response = http_response
18
+ end
19
+
20
+ ##
21
+ # Returns +true+ when the http response
22
+ # is 200, +false+ otherwise.
23
+ def success?
24
+ code == 200
25
+ end
26
+
27
+ ##
28
+ # Returns the +Integer+ value of the underlying http request.
29
+ # It does not mean the request performed it's intended purpose.
30
+ # Make sure you use {to_s}[rdoc-ref:to_s] or {to_h}[rdoc-ref:to_h]
31
+ # to explore the actual body of the response.
32
+ def code
33
+ http_response&.code.to_i
34
+ end
35
+
36
+ ##
37
+ # Returns +true+ when the body of the request contains a pdf file.
38
+ def pdf?
39
+ http_response&.content_type&.underscore == 'application/pdf'
40
+ end
41
+
42
+ ##
43
+ # Returns an hash representation of the xml body of the response.
44
+ # Raises {NotSerializable}[rdoc-ref:Fattura24::NotSerializable]
45
+ # in case of a binary (pdf file) content.
46
+ def to_h
47
+ if pdf?
48
+ raise(
49
+ Fattura24::NotSerializable,
50
+ 'Cannot create hash from binary file'
51
+ )
52
+ end
53
+
54
+ Hash.from_xml(http_response&.body)
55
+ &.deep_transform_keys do |key|
56
+ key.to_s.underscore.to_sym
57
+ end
58
+ end
59
+
60
+ ##
61
+ # Returns the +String+ body of this response.
62
+ # This can be both the original xml on most of the calls
63
+ # or the content of the pdf file when {get_file}[rdoc-ref:get_file]
64
+ # is called.
65
+ def to_s
66
+ http_response&.body.to_s
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Fattura24
4
+ class Configuration
5
+ ##
6
+ # Set this attribute to your secret
7
+ # api key to interact with the api
8
+ attr_accessor :api_key
9
+
10
+ def initialize
11
+ @api_key = nil
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Fattura24
4
+ ##
5
+ # This module contains constants to be used
6
+ # when creating documents/credits.
7
+
8
+ module DocumentType
9
+ ELECTRONIC_INVOICE = 'FE'
10
+ INVOICE = 'I'
11
+ RECEIPT = 'R'
12
+ CLIENT_ORDER = 'C'
13
+ CREDIT_NOTE = 'N'
14
+ end
15
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Fattura24
4
+ class Error < RuntimeError; end
5
+
6
+ ##
7
+ # Thrown when trying to perform any request
8
+ # on the api without a key set in configuration
9
+ class MissingApiKey < Error
10
+ def message
11
+ 'You need to configure your api key before calling any endpoint'
12
+ end
13
+ end
14
+
15
+ class MissingInput < Error; end
16
+
17
+ class NotSerializable < Error; end
18
+
19
+ class InvalidParams < Error; end
20
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Fattura24
4
+ module Utils
5
+ ##
6
+ # This function deeply removes
7
+ # any nil object/value from objects.
8
+ def self.crush(obj)
9
+ return crush_hash(obj) if obj.is_a?(Hash)
10
+
11
+ return crush_array(obj) if obj.is_a?(Array)
12
+
13
+ obj
14
+ end
15
+
16
+ ##
17
+ # Deeply removes any nil value from arrays.
18
+ def self.crush_array(array)
19
+ r = array.map do |obj|
20
+ crush(obj)
21
+ end.compact
22
+
23
+ r.empty? ? nil : r
24
+ end
25
+
26
+ ##
27
+ # Deeply removes any nil value from hashes.
28
+ def self.crush_hash(hash)
29
+ r = hash.each_with_object({}) do |(k, v), h|
30
+ if (crushed_v = crush(v))
31
+ h[k] = crushed_v
32
+ end
33
+ end
34
+
35
+ r.empty? ? nil : r
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Fattura24
4
+ VERSION = '1.0.0'
5
+ end
metadata ADDED
@@ -0,0 +1,267 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fattura24
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Stefano Nada
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-04-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">"
18
+ - !ruby/object:Gem::Version
19
+ version: '4.2'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">"
25
+ - !ruby/object:Gem::Version
26
+ version: '4.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: builder
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '2.1'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '2.1'
55
+ - !ruby/object:Gem::Dependency
56
+ name: dotenv
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.7'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2.7'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.13'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.13'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '13.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '13.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rdoc
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '6.1'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '6.1'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rspec
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '3.9'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '3.9'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rubocop
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '0.82'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '0.82'
139
+ - !ruby/object:Gem::Dependency
140
+ name: simplecov
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: 0.17.0
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: 0.17.0
153
+ - !ruby/object:Gem::Dependency
154
+ name: webmock
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '3.8'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '3.8'
167
+ description: Minimal Ruby 2 wrapper for fattura24 apis.
168
+ email:
169
+ - stefano.nada@gmail.com
170
+ executables: []
171
+ extensions: []
172
+ extra_rdoc_files: []
173
+ files:
174
+ - CHANGELOG.md
175
+ - Gemfile
176
+ - LICENSE
177
+ - README.md
178
+ - Rakefile
179
+ - docs/Fattura24.html
180
+ - docs/Fattura24/Api.html
181
+ - docs/Fattura24/Api/Response.html
182
+ - docs/Fattura24/Configuration.html
183
+ - docs/Fattura24/DocumentType.html
184
+ - docs/Fattura24/Error.html
185
+ - docs/Fattura24/InvalidParams.html
186
+ - docs/Fattura24/MissingApiKey.html
187
+ - docs/Fattura24/MissingInput.html
188
+ - docs/Fattura24/NotSerializable.html
189
+ - docs/Fattura24/Utils.html
190
+ - docs/README_md.html
191
+ - docs/created.rid
192
+ - docs/css/fonts.css
193
+ - docs/css/rdoc.css
194
+ - docs/fonts/Lato-Light.ttf
195
+ - docs/fonts/Lato-LightItalic.ttf
196
+ - docs/fonts/Lato-Regular.ttf
197
+ - docs/fonts/Lato-RegularItalic.ttf
198
+ - docs/fonts/SourceCodePro-Bold.ttf
199
+ - docs/fonts/SourceCodePro-Regular.ttf
200
+ - docs/images/add.png
201
+ - docs/images/arrow_up.png
202
+ - docs/images/brick.png
203
+ - docs/images/brick_link.png
204
+ - docs/images/bug.png
205
+ - docs/images/bullet_black.png
206
+ - docs/images/bullet_toggle_minus.png
207
+ - docs/images/bullet_toggle_plus.png
208
+ - docs/images/date.png
209
+ - docs/images/delete.png
210
+ - docs/images/find.png
211
+ - docs/images/loadingAnimation.gif
212
+ - docs/images/macFFBgHack.png
213
+ - docs/images/package.png
214
+ - docs/images/page_green.png
215
+ - docs/images/page_white_text.png
216
+ - docs/images/page_white_width.png
217
+ - docs/images/plugin.png
218
+ - docs/images/ruby.png
219
+ - docs/images/tag_blue.png
220
+ - docs/images/tag_green.png
221
+ - docs/images/transparent.png
222
+ - docs/images/wrench.png
223
+ - docs/images/wrench_orange.png
224
+ - docs/images/zoom.png
225
+ - docs/index.html
226
+ - docs/js/darkfish.js
227
+ - docs/js/navigation.js
228
+ - docs/js/navigation.js.gz
229
+ - docs/js/search.js
230
+ - docs/js/search_index.js
231
+ - docs/js/search_index.js.gz
232
+ - docs/js/searcher.js
233
+ - docs/js/searcher.js.gz
234
+ - docs/table_of_contents.html
235
+ - fattura24.gemspec
236
+ - lib/fattura24.rb
237
+ - lib/fattura24/api/client.rb
238
+ - lib/fattura24/api/response.rb
239
+ - lib/fattura24/configuration.rb
240
+ - lib/fattura24/document_type.rb
241
+ - lib/fattura24/errors.rb
242
+ - lib/fattura24/utils.rb
243
+ - lib/fattura24/version.rb
244
+ homepage: https://github.com/snada/fattura24
245
+ licenses:
246
+ - MIT
247
+ metadata: {}
248
+ post_install_message:
249
+ rdoc_options: []
250
+ require_paths:
251
+ - lib
252
+ required_ruby_version: !ruby/object:Gem::Requirement
253
+ requirements:
254
+ - - ">="
255
+ - !ruby/object:Gem::Version
256
+ version: '0'
257
+ required_rubygems_version: !ruby/object:Gem::Requirement
258
+ requirements:
259
+ - - ">="
260
+ - !ruby/object:Gem::Version
261
+ version: '0'
262
+ requirements: []
263
+ rubygems_version: 3.0.3
264
+ signing_key:
265
+ specification_version: 4
266
+ summary: Ruby wrapper for fattura24 apis
267
+ test_files: []