omie-client 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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 6847f5e59fb2f87a9261b2fb956b0d9cef5095f1dfd9cc814ba750198e1caea0
4
+ data.tar.gz: 59bea11c7e639e1aadbc7a4b4f41604853e3d4d20103cd5f5014fda93ce89885
5
+ SHA512:
6
+ metadata.gz: c365f53634daf54cf5ce0c66e6e69b4dac1605835fc359da4b2de30fabaab3626bfc78a1988202a533ca2136c7e4cd315952e748daa54f558b107ad8705900da
7
+ data.tar.gz: ce4e5d8c753ef947e5c86d8c1a3a91b2c599396a091327be8bf9e14a7af0216d46812d1acdfe0d060ec1aea56692009e79eab8acc6347a1d6f2ec4ca7a53daf3
data/.gitignore ADDED
@@ -0,0 +1,13 @@
1
+ # See https://help.github.com/articles/ignoring-files for more about ignoring files.
2
+ #
3
+ # If you find yourself ignoring temporary files generated by your text editor
4
+ # or operating system, you probably want to add a global ignore instead:
5
+ # git config --global core.excludesfile '~/.gitignore_global'
6
+
7
+ .rspec_status
8
+ .yardoc
9
+ .bundle
10
+
11
+ coverage
12
+ doc
13
+ omie-client-*.gem
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require spec_helper
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source "https://rubygems.org"
2
+
3
+ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
+
5
+ # Specify your gem's dependencies in omie-client.gemspec
6
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,73 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ omie-client (0.1)
5
+ activesupport
6
+ rest-client
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ activesupport (6.0.2.1)
12
+ concurrent-ruby (~> 1.0, >= 1.0.2)
13
+ i18n (>= 0.7, < 2)
14
+ minitest (~> 5.1)
15
+ tzinfo (~> 1.1)
16
+ zeitwerk (~> 2.2)
17
+ concurrent-ruby (1.1.5)
18
+ cpf_cnpj (0.5.0)
19
+ diff-lcs (1.3)
20
+ domain_name (0.5.20190701)
21
+ unf (>= 0.0.5, < 1.0.0)
22
+ factory_bot (5.1.1)
23
+ activesupport (>= 4.2.0)
24
+ http-accept (1.7.0)
25
+ http-cookie (1.0.3)
26
+ domain_name (~> 0.5)
27
+ i18n (1.8.2)
28
+ concurrent-ruby (~> 1.0)
29
+ mime-types (3.3.1)
30
+ mime-types-data (~> 3.2015)
31
+ mime-types-data (3.2019.1009)
32
+ minitest (5.14.0)
33
+ netrc (0.11.0)
34
+ rake (10.5.0)
35
+ rest-client (2.1.0)
36
+ http-accept (>= 1.7.0, < 2.0)
37
+ http-cookie (>= 1.0.2, < 2.0)
38
+ mime-types (>= 1.16, < 4.0)
39
+ netrc (~> 0.8)
40
+ rspec (3.9.0)
41
+ rspec-core (~> 3.9.0)
42
+ rspec-expectations (~> 3.9.0)
43
+ rspec-mocks (~> 3.9.0)
44
+ rspec-core (3.9.1)
45
+ rspec-support (~> 3.9.1)
46
+ rspec-expectations (3.9.0)
47
+ diff-lcs (>= 1.2.0, < 2.0)
48
+ rspec-support (~> 3.9.0)
49
+ rspec-mocks (3.9.1)
50
+ diff-lcs (>= 1.2.0, < 2.0)
51
+ rspec-support (~> 3.9.0)
52
+ rspec-support (3.9.2)
53
+ thread_safe (0.3.6)
54
+ tzinfo (1.2.6)
55
+ thread_safe (~> 0.1)
56
+ unf (0.1.4)
57
+ unf_ext
58
+ unf_ext (0.0.7.6)
59
+ zeitwerk (2.2.2)
60
+
61
+ PLATFORMS
62
+ ruby
63
+
64
+ DEPENDENCIES
65
+ bundler (~> 1.16)
66
+ cpf_cnpj
67
+ factory_bot
68
+ omie-client!
69
+ rake (~> 10.0)
70
+ rspec (~> 3.0)
71
+
72
+ BUNDLED WITH
73
+ 1.16.6
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2020 peerdustry / FLOSS
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,104 @@
1
+ # Omie Client for Ruby
2
+
3
+ [Omie](https://app.omie.com.br/developer/service-list/) client for Ruby.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'omie-client'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install omie-client
20
+
21
+ ## Usage
22
+
23
+ To use the lib you must set the credentials to use your Omie instance. First,
24
+ you need to create the keys at
25
+ [Omie developer page](https://developer.omie.com.br/my-apps/)
26
+ or [Omie generate keys](https://app.omie.com.br/developer/generate-key/).
27
+ Then, set your credentials:
28
+ ```ruby
29
+ Omie.app_key = "app_key"
30
+ Omie.app_secret = "app_secret"
31
+ ```
32
+
33
+ **Now that the cliet is properly initialized you can start using it's
34
+ functions.**
35
+
36
+ The available classes of the Omie client corresponds the resources available in
37
+ Omie's API.
38
+
39
+ The lib follows the same design principles of Rail's ActiveRecord.
40
+ Each class provides a set of methods that perform direct calls to
41
+ Omie's API and return a Plain Old Ruby Objects (PORO) for each corresponding
42
+ entry. The resources' instance variables have the same portuguese names of
43
+ attributes of their respective JSON payloads.
44
+
45
+ The available resources are:
46
+
47
+ * Company (Clientes)
48
+
49
+ Ongoing Work:
50
+
51
+ * Procut (Produtos)
52
+ * SalesOrder (Ordem de Venda)
53
+
54
+ Future Versions:
55
+
56
+ * PurchaseOrder (Ordem de Compra)
57
+
58
+ ### Company Resource
59
+
60
+ This class aims at manipulating resources available for Omie's companies,
61
+ including clients and providers.
62
+
63
+ > Ref: [Company documentation](https://app.omie.com.br/api/v1/geral/clientes/)
64
+
65
+ To create a new Company resource you can:
66
+ ```ruby
67
+ company = Omie::Company.create(codigo_cliente_integracao: "XPTO_INTERNAL_CODE", cnpj_cpf: '26742035000190', nome_fantasia: 'Peerdustry Tecnologia LTDA', razao_social: 'Peerdustry Manufatura Compartilhada', email: 'contato@peerdustry.com')
68
+
69
+ # Update the email locally
70
+ company.email = "another@peerdustry.com"
71
+
72
+ # Update the register on Omie
73
+ company.save
74
+ ```
75
+
76
+ Search for a specific entry:
77
+ ```ruby
78
+ company = Omie::Company.find(cnpj_cpf: '26742035000190')
79
+ ```
80
+
81
+ List all entries:
82
+ ```ruby
83
+ companies = Omie::Company.list
84
+ puts companies.class # Array
85
+
86
+ puts companies.count
87
+ companies.each {|c| puts c.nome_fantasia }
88
+ ```
89
+
90
+ ## Development
91
+
92
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
93
+
94
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
95
+
96
+ ## Contributing
97
+
98
+ Bug reports and pull requests are welcome. If you want to add a new resource
99
+ from the API, please open an issue first to avoid duplicated work.
100
+
101
+ ## License
102
+
103
+ See the [LICENSE](LICENSE) file.
104
+
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "omie/client"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
data/lib/omie.rb ADDED
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'omie/base_resource'
4
+ require_relative 'omie/company'
5
+ require_relative 'omie/connection'
6
+ require_relative 'omie/error'
7
+ require_relative 'omie/info'
8
+ require_relative 'omie/version'
9
+
10
+ module Omie
11
+ cattr_accessor :app_key, :app_secret
12
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/core_ext'
4
+ require 'active_support/json'
5
+
6
+ module Omie
7
+ # This class contains all logic shared among available resources.
8
+ class BaseResource
9
+ # Initialize the object based on a Hash of attributes their respective
10
+ # values
11
+ def initialize(args = {})
12
+ args.each do |key, value|
13
+ send("#{key}=", value) if respond_to?(key)
14
+ end
15
+ end
16
+
17
+ # Update the object with the informed attributes passed as a Hash
18
+ def update_attributes(args = {})
19
+ args.each do |key, value|
20
+ send("#{key}=", value) if respond_to?(key)
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,180 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/core_ext'
4
+
5
+ module Omie
6
+ # This class abstracts the Company resource from Omie (Ref: Cliente) which
7
+ # is used for all kinds of companies in Omie, mainly Clients and Suppliers.
8
+ # It aims at providing abstractions to the endpoints described in
9
+ # {https://app.omie.com.br/api/v1/geral/clientes/}.
10
+ #
11
+ # The class methods of Omie::Company usually perform requests to Omie API and
12
+ # manipulate Company objects that contain the returned values.
13
+ # Attributes' names are equal to the Portuguese names described in the API
14
+ # documentation.
15
+ class Company < Omie::BaseResource
16
+ COMPANY_CALLS = {
17
+ LIST: 'ListarClientes',
18
+ CREATE: 'IncluirCliente',
19
+ UPDATE: 'AlterarCliente',
20
+ FIND: 'ConsultarCliente',
21
+ DELETE: 'ExcluirCliente',
22
+ SIMPLE: 'UpsertCliente'
23
+ }.freeze
24
+
25
+ URI = '/v1/geral/clientes/'
26
+
27
+ attr_accessor :email, :cnpj_cpf, :razao_social, :contato, :nome_fantasia
28
+ attr_accessor :codigo_cliente_integracao, :codigo_cliente_omie, :endereco
29
+ attr_accessor :cidade, :complemento, :estado, :endereco_numero, :cep
30
+ attr_accessor :codigo_pais, :bairro, :inscricao_estadual
31
+
32
+ # Record a new company using the
33
+ # {https://app.omie.com.br/api/v1/geral/clientes/#IncluirCliente
34
+ # IncluirCliente} call and returns an instance of Omie::Company
35
+ # with the data from the created company.
36
+ #
37
+ # @!scope class
38
+ # @param params [Hash]
39
+ # a hash containing the data to be recorded in the company based on
40
+ # the available attributes of this class
41
+ # @return [Omie::Company]
42
+ # the created company
43
+ # @raise [Omie::RequestError]
44
+ # in case of failed requests due to failed validations
45
+ def self.create(params = {})
46
+ response = Omie::Connection.request(URI, COMPANY_CALLS[:CREATE], params)
47
+ Omie::Company.new(response)
48
+ end
49
+
50
+ # Updates an existing company using the
51
+ # {https://app.omie.com.br/api/v1/geral/clientes/#AlterarCliente
52
+ # AlterarCliente} call and returns an instance of the updated company.
53
+ # Omie will use either the {#codigo_cliente_integracao} or the
54
+ # {#codigo_cliente_omie} to identify the entry to be changed. It will
55
+ # change only the informed attributes in params.
56
+ #
57
+ # @!scope class
58
+ # @param params [Hash]
59
+ # a hash containing the search attribute to locate the company and
60
+ # the attributes/values to be updated.
61
+ # @return [Omie::Company]
62
+ # the updated company
63
+ # @raise [Omie::RequestError]
64
+ # in case of failed requests due to failed validations or when the
65
+ # company was not found.
66
+ def self.update(params = {})
67
+ response = Omie::Connection.request(URI, COMPANY_CALLS[:UPDATE], params)
68
+ Omie::Company.new(response)
69
+ end
70
+
71
+ # Search for a company using the
72
+ # {https://app.omie.com.br/api/v1/geral/clientes/#ConsultarCliente
73
+ # ConsultarCliente} call and returns an instance of the found company
74
+ # or nil otherwise.
75
+ # One may use either the {#codigo_cliente_omie} or
76
+ # {#codigo_cliente_integracao} to search for company
77
+ #
78
+ # @!scope class
79
+ # @param params [Hash]
80
+ # a hash containing the search attribute to locate the company
81
+ # @return [Omie::Company]
82
+ # the found company
83
+ # @return [nil]
84
+ # in case of no company found
85
+ def self.find(params)
86
+ response = Omie::Connection.request(URI, COMPANY_CALLS[:FIND], params)
87
+ Omie::Company.new(response)
88
+ rescue Omie::RequestError
89
+ nil
90
+ end
91
+
92
+ # Get a paginated list of companies recorded in Omie by using the
93
+ # {https://app.omie.com.br/api/v1/geral/clientes/#ListarClientes
94
+ # ListarClientes}. You may change the params to get other pages of
95
+ # records.
96
+ #
97
+ # @!scope class
98
+ # @param page [Integer]
99
+ # the page to be returned.
100
+ # @param per_page [Integer]
101
+ # the number of items per page (max: 50).
102
+ # @return [Array<Omie::Company>]
103
+ # the list of found companies
104
+ def self.list(page = 1, per_page = 50)
105
+ params = { pagina: page, registros_por_pagina: per_page }
106
+
107
+ response = Omie::Connection.request(URI, COMPANY_CALLS[:LIST], params)
108
+ response['clientes_cadastro'].map { |client| Omie::Company.new(client) }
109
+ rescue Omie::RequestError
110
+ []
111
+ end
112
+
113
+ # Get method for tags attribute.
114
+ #
115
+ # @return [Array<Hash>]
116
+ # list of hashes containing the tags' information with the following
117
+ # structure => {tag: "tag value"}
118
+ def tags
119
+ @tags ||= []
120
+ @tags
121
+ end
122
+
123
+ # Set method for tags attribute to be used for mass assignment of
124
+ # attribuites returned from Omie. It also sets {#tag_values}.
125
+ def tags=(value)
126
+ @tags = value
127
+ @tag_values = @tags.map { |t| t[:tag] }
128
+ end
129
+
130
+ # Get method for tag_values attribute.
131
+ #
132
+ # @return [Array<String>]
133
+ # list containing only the values of {#tags}
134
+ def tag_values
135
+ @tag_values ||= []
136
+ @tag_values
137
+ end
138
+
139
+ # Add a new tag method to formatted into Omie`s structure. It
140
+ # does not duplicate entries.
141
+ #
142
+ # @return [Omie::Company]
143
+ # self instance
144
+ def add_tag(tag = nil)
145
+ if tag && !tag_values.include?(tag)
146
+ tags << {
147
+ tag: tag
148
+ }
149
+ tag_values << tag
150
+ end
151
+ self
152
+ end
153
+
154
+ # Save the company.
155
+ #
156
+ # If the company is new a record is created on Omie, otherwise
157
+ # the existing record gets updated.
158
+ #
159
+ # @return [Omie::Company]
160
+ # the company itself updated
161
+ def save
162
+ company = if saved?
163
+ Omie::Company.update(as_json.except(['tag_values']))
164
+ else
165
+ Omie::Company.create(as_json.except(['tag_values']))
166
+ end
167
+
168
+ self.codigo_cliente_omie = company.codigo_cliente_omie if company
169
+ company
170
+ end
171
+
172
+ # Check whether the object has a related record on Omie based on the
173
+ # {#codigo_cliente_omie} attribute
174
+ #
175
+ # @return [Boolean]
176
+ def saved?
177
+ !codigo_cliente_omie.blank?
178
+ end
179
+ end
180
+ end
@@ -0,0 +1,94 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rest-client'
4
+ require 'json'
5
+
6
+ module Omie
7
+ # This class is used internally to send HTTP requests to Omie API based
8
+ # on RestClient gem. It is responsible for parsing JSON to Hash objects
9
+ # and handle errors.
10
+ class Connection
11
+ API_URI = 'https://app.omie.com.br/api' # Base URL for Omie API
12
+
13
+ # Perform a request to Omie API based on params. It does not make any
14
+ # kind of manipulation, and validation of such params. Rather, it only
15
+ # abstracts the interaction with the API, parsing the response or handling
16
+ # possible errors.
17
+ #
18
+ # @!scope class
19
+ # @param url [String]
20
+ # the url path to the resource. It is appended in the end of
21
+ # {Omie::Connection::API_URI}.
22
+ # @param call [String]
23
+ # the OMIE_CALL parameter that defines which resource is being
24
+ # requested. The Omie API defines endpoint based on this parameter
25
+ # instead of HTTP methods and URI.
26
+ # @param payload_to_request [Hash]
27
+ # the hash corresponding to the JSON payload of the request.
28
+ #
29
+ # @raise [Omie::RequestError]
30
+ # in case of a client error returned by the API through JSON payloads
31
+ # @raise [Omie::InvalidResponseError]
32
+ # in case of errors with unhandled responses
33
+ #
34
+ # @return [Hash]
35
+ # the response JSON parsed
36
+ def self.request(url, call, payload_to_request = {})
37
+ payload = create_payload(call, payload_to_request)
38
+
39
+ response = RestClient::Request.new(
40
+ method: :post,
41
+ url: API_URI + url,
42
+ payload: payload,
43
+ headers: { content_type: :json }
44
+ ).execute
45
+
46
+ JSON.parse(response.body)
47
+ rescue RestClient::ExceptionWithResponse => e
48
+ Omie::Connection.handle_error_with_response(e.response)
49
+ end
50
+
51
+ # Create the payload of the request with the credentials, the specific call
52
+ # and the payload data.
53
+ #
54
+ # @raise [Omie::MissingCredentialsError]
55
+ # when either {Omie.app_key} or {Omie.app_secret} is blank
56
+ #
57
+ # @return [String]
58
+ # a string in JSON format ready to be used as the payload of requests
59
+ # to Omie API.
60
+ def self.create_payload(call, data = {})
61
+ if Omie.app_key.blank? || Omie.app_secret.blank?
62
+ raise Omie::MissingCredentialsError,
63
+ 'Omie.app_key and Omie.app_secret cannot be blank'
64
+ end
65
+
66
+ payload_request = {
67
+ app_key: Omie.app_key,
68
+ app_secret: Omie.app_secret,
69
+ call: call,
70
+ param: [data]
71
+ }
72
+
73
+ payload_request.to_json
74
+ end
75
+
76
+ # Handle errors with a response from Omie API by raising custom exceptions.
77
+ # The API does not use the HTTP
78
+ # status codes appropriately since it always returns error 500 for all
79
+ # kind of known errors (client errors). Moreover, the specific details of
80
+ # the error are described in the returned JSON. See {Omie::RequestError} for
81
+ # more details.
82
+ #
83
+ # @raise [Omie::RequestError]
84
+ # in case of documented error from Omie API (with status code 500)
85
+ # since it displays the error message returned by Omie API.
86
+ # @raise [Omie::InvalidResponseError]
87
+ # in case of errors with status code different from 500
88
+ def self.handle_error_with_response(response)
89
+ raise Omie::RequestError.new(nil, response) if response.code == 500
90
+
91
+ raise Omie::InvalidResponseError, "Invalid response received: #{response}"
92
+ end
93
+ end
94
+ end
data/lib/omie/error.rb ADDED
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Omie
4
+ # This is the base Omie exception class. Rescue it if you want to catch
5
+ # any exceptions that your request might raise. In addition to the
6
+ # message, it may receive the response, a RestClient::Response object
7
+ # that can be used to improve the error messages.
8
+ class Error < RuntimeError
9
+ attr_accessor :message, :response
10
+
11
+ # Initialize the exception with the message and the request's response and
12
+ # call the {#after_initialize} callback
13
+ def initialize(message = nil, response = nil)
14
+ @message = message
15
+ @response = response
16
+ after_initialize
17
+ end
18
+
19
+ # Callback to be overridden by underlying classes
20
+ def after_initialize; end
21
+ end
22
+
23
+ # This exception must be used for failed requests with JSON responses
24
+ # from Omie.
25
+ #
26
+ # Omie does not use the semantic value of HTTP status codes. It always
27
+ # returns the 500 error code to any failed request that has an associated
28
+ # message to the client, which was supposed to use the 400* error codes.
29
+ # Moreover, the error message is provided through a returned JSON object
30
+ # that has the keys 'faultstring' and 'faultcode'. Such data is
31
+ # used in the exception message for a better understanding of the error.
32
+ class RequestError < Omie::Error
33
+ # Sets fault_string and fault_code based on Omie's responses for failed
34
+ # requests.
35
+ def after_initialize
36
+ return unless @response
37
+
38
+ json = JSON.parse(@response.body)
39
+ @fault_string = json['faultstring']
40
+ @fault_code = json['faultcode']
41
+ end
42
+
43
+ # Return the custom message or a default message with the fault code and
44
+ # string.
45
+ def message
46
+ @message || default_message
47
+ end
48
+
49
+ def default_message
50
+ "Omie returned the error #{@fault_code}: '#{@fault_string}'"
51
+ end
52
+ end
53
+
54
+ # One may use this exception when a request produces a HTTP status codes
55
+ # different from *500*
56
+ class InvalidResponseError < Omie::Error
57
+ end
58
+
59
+ # This exception is used when the Omie credentials are not set.
60
+ #
61
+ # See {Omie.app_key} and {Omie.app_secret} for more details.
62
+ class MissingCredentialsError < Omie::Error
63
+ end
64
+ end
data/lib/omie/info.rb ADDED
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Omie
4
+ class Info
5
+ VERSION = '0.0.1'
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Omie
4
+ VERSION = '0.1'.freeze
5
+ end
@@ -0,0 +1,37 @@
1
+
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "omie/version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "omie-client"
8
+ spec.version = Omie::VERSION
9
+ spec.authors = ["Peerdustry"]
10
+ spec.email = ["contato@peerdustry.com"]
11
+
12
+ spec.summary = %q{A Ruby client for Omie ERP API}
13
+ spec.description = %q{A Ruby client for Omie ERP API}
14
+ spec.homepage = "https://gitlab.com/peerdustry/floss/omie-client"
15
+ spec.license = "MIT"
16
+
17
+ # Specify which files should be added to the gem when it is released.
18
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
19
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
20
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
21
+ end
22
+ spec.bindir = "exe"
23
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
24
+ spec.require_paths = ["lib"]
25
+ spec.required_ruby_version = ">= 2.0.0"
26
+
27
+ # development dependencies
28
+ spec.add_development_dependency "bundler", "~> 1.16"
29
+ spec.add_development_dependency "rake", "~> 10.0"
30
+ spec.add_development_dependency "rspec", "~> 3.0"
31
+ spec.add_development_dependency 'factory_bot', '>= 5.0'
32
+ spec.add_development_dependency 'cpf_cnpj', '~> 0.5'
33
+
34
+ # development dependencies
35
+ spec.add_dependency 'rest-client', '>= 2.0'
36
+ spec.add_dependency 'activesupport', '>= 6.0'
37
+ end
metadata ADDED
@@ -0,0 +1,159 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: omie-client
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.1'
5
+ platform: ruby
6
+ authors:
7
+ - Peerdustry
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2020-02-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.16'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.16'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: factory_bot
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '5.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '5.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: cpf_cnpj
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.5'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.5'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rest-client
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '2.0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '2.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: activesupport
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '6.0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '6.0'
111
+ description: A Ruby client for Omie ERP API
112
+ email:
113
+ - contato@peerdustry.com
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - ".gitignore"
119
+ - ".rspec"
120
+ - Gemfile
121
+ - Gemfile.lock
122
+ - LICENSE
123
+ - README.md
124
+ - Rakefile
125
+ - bin/console
126
+ - bin/setup
127
+ - lib/omie.rb
128
+ - lib/omie/base_resource.rb
129
+ - lib/omie/company.rb
130
+ - lib/omie/connection.rb
131
+ - lib/omie/error.rb
132
+ - lib/omie/info.rb
133
+ - lib/omie/version.rb
134
+ - omie-client.gemspec
135
+ homepage: https://gitlab.com/peerdustry/floss/omie-client
136
+ licenses:
137
+ - MIT
138
+ metadata: {}
139
+ post_install_message:
140
+ rdoc_options: []
141
+ require_paths:
142
+ - lib
143
+ required_ruby_version: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - ">="
146
+ - !ruby/object:Gem::Version
147
+ version: 2.0.0
148
+ required_rubygems_version: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ requirements: []
154
+ rubyforge_project:
155
+ rubygems_version: 2.7.8
156
+ signing_key:
157
+ specification_version: 4
158
+ summary: A Ruby client for Omie ERP API
159
+ test_files: []