mifiel 1.3.1 → 1.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1569646681fcf22ebc9758654ea1cd69335c0de8fea3be1d91a2141c0c06f83d
4
- data.tar.gz: fab079bd4ba6f4edb93a458c934b8e2f783b90296c00bc4e0d0ae0b9d8992d3b
3
+ metadata.gz: b2ae81be4469bad8b4e6c50570d30d6db02799192d21a3851ab2d188fbc80399
4
+ data.tar.gz: f22502f1a80a508cb2af45b9e8f2872a151409b891390059642bed642f61ac4c
5
5
  SHA512:
6
- metadata.gz: 34ea17ff1b1e888dec3ee6f9f5c2b3460bfa29dfc3629330880d0dfe831760e60e3271c2f80511d8edf2b9e0de3f5708944f221581cbf424b9ac13f7c3be303f
7
- data.tar.gz: 6f04cbd056834f0709067c43223c2f695c63e9ea9d2d51a2d6419cef800047065be3d46fe739406c9ed9d260cb7c01a6a123b89ae7e21bb6800b6f57726248ac
6
+ metadata.gz: b5eed38acc15d60d738770aace88ec3506ffad3ba8882396ed3bcc643ababb03b61cbcebbaa6a90f89992571adeb22587e1778feb3b439aef1225290b3e6c3a6
7
+ data.tar.gz: accb7089bb9401eedc4e587d02915b28af583a786df590432ac153ba112a865e3ccbb108925513263f470c4fa1eedc5f245e5e691048cade50b74668a322f0ae
data/.rubocop.yml CHANGED
@@ -1,5 +1,10 @@
1
+ require:
2
+ - rubocop-rspec
3
+
1
4
  AllCops:
2
- TargetRubyVersion: 2.3
5
+ TargetRubyVersion: 2.6
6
+ NewCops: enable
7
+ SuggestExtensions: false
3
8
  Exclude:
4
9
  - 'gemfiles/**/*'
5
10
 
@@ -16,3 +21,15 @@ Metrics/BlockLength:
16
21
  Exclude:
17
22
  - 'spec/**/*'
18
23
  - '*.gemspec'
24
+
25
+ Style/TrailingCommaInArguments:
26
+ EnforcedStyleForMultiline: consistent_comma
27
+
28
+ Style/TrailingCommaInArrayLiteral:
29
+ EnforcedStyleForMultiline: consistent_comma
30
+
31
+ Style/TrailingCommaInHashLiteral:
32
+ EnforcedStyleForMultiline: consistent_comma
33
+
34
+ RSpec/NestedGroups:
35
+ Enabled: false
data/.travis.yml CHANGED
@@ -5,11 +5,9 @@ sudo: false
5
5
  gemfile:
6
6
  - gemfiles/rails_5.gemfile
7
7
  - gemfiles/rails_6.gemfile
8
+ - gemfiles/rails_7.gemfile
8
9
 
9
10
  rvm:
10
- - 2.3
11
- - 2.4
12
- - 2.5
13
11
  - 2.6
14
12
  - 2.7
15
13
  - 3.0
@@ -27,8 +25,14 @@ script:
27
25
 
28
26
  matrix:
29
27
  exclude:
30
- - rvm: 2.3
31
- gemfile: gemfiles/rails_6.gemfile
32
- - rvm: 2.4
33
- gemfile: gemfiles/rails_6.gemfile
28
+ # rails 7 requires ruby > 2.7
29
+ - rvm: 2.6
30
+ gemfile: gemfiles/rails_7.gemfile
31
+ # rails 5 is too old for these ruby versions
32
+ - rvm: 2.7
33
+ gemfile: gemfiles/rails_5.gemfile
34
+ - rvm: 3.0
35
+ gemfile: gemfiles/rails_5.gemfile
36
+ - rvm: 3.1
37
+ gemfile: gemfiles/rails_5.gemfile
34
38
  fast_finish: true
data/Appraisals CHANGED
@@ -9,3 +9,8 @@ appraise 'rails-6' do
9
9
  gem 'rails', '6'
10
10
  gem 'sinatra'
11
11
  end
12
+
13
+ appraise 'rails-7' do
14
+ gem 'rails', '7'
15
+ gem 'sinatra'
16
+ end
data/Gemfile CHANGED
@@ -7,4 +7,7 @@ gemspec
7
7
 
8
8
  group :development, :test do
9
9
  gem 'coveralls', require: false
10
+ gem 'pry'
11
+ gem 'rubocop'
12
+ gem 'rubocop-rspec'
10
13
  end
data/README.md CHANGED
@@ -3,10 +3,9 @@
3
3
  [![Gem Version][gem-version-image]][gem-version-url]
4
4
  [![Build Status][travis-image]][travis-url]
5
5
  [![Coverage Status][coveralls-image]][coveralls-url]
6
- [![security][security-image]][security-url]
7
6
 
8
7
  Ruby SDK for [Mifiel](https://www.mifiel.com) API.
9
- Please read our [documentation](http://docs.mifiel.com/) for instructions on how to start using the API.
8
+ Please read our [documentation](https://docs.mifiel.com/) for instructions on how to start using the API.
10
9
 
11
10
  ## Installation
12
11
 
@@ -26,154 +25,17 @@ Or install it yourself as:
26
25
 
27
26
  ## Usage
28
27
 
29
- For your convenience Mifiel offers a Sandbox environment where you can confidently test your code.
30
-
31
- To start using the API in the Sandbox environment you need to first create an account at [sandbox.mifiel.com](https://sandbox.mifiel.com).
32
-
33
- Once you have an account you will need an APP_ID and an APP_SECRET which you can generate in [sandbox.mifiel.com/access_tokens](https://sandbox.mifiel.com/access_tokens).
34
-
35
- Then you can configure the gem with:
28
+ Follow the steps in our [documentation](https://docs.mifiel.com/) to create an account and get your access tokens, then you can configure the gem with:
36
29
 
37
30
  ```ruby
38
31
  Mifiel.config do |config|
39
32
  config.app_id = '<APP_ID>'
40
33
  config.app_secret = '<APP_SECRET>'
41
- config.base_url = 'https://app-sandbox.mifiel.com/api/v1' #remove this line when you wish to use the prod environment
34
+ # remove the next line when you wish to use the prod environment
35
+ config.base_url = 'https://app-sandbox.mifiel.com/api/v1'
42
36
  end
43
37
  ```
44
38
 
45
- Document methods:
46
-
47
- - Find:
48
-
49
- ```ruby
50
- document = Mifiel::Document.find('id')
51
- document.original_hash
52
- document.file
53
- document.file_signed
54
- # ...
55
- ```
56
-
57
- - Find all:
58
-
59
- ```ruby
60
- documents = Mifiel::Document.all
61
- ```
62
-
63
- - Create:
64
-
65
- > Use only **hash** if you dont want us to have the file.<br>
66
- > Either **file** or **hash** must be provided.
67
-
68
- ```ruby
69
- document = Mifiel::Document.create(
70
- file: 'path/to/my-file.pdf',
71
- signatories: [
72
- { name: 'Signer 1', email: 'signer1@email.com', tax_id: 'AAA010101AAA' },
73
- { name: 'Signer 2', email: 'signer2@email.com', tax_id: 'AAA010102AAA' }
74
- ]
75
- )
76
- # if you dont want us to have the PDF, you can just send us
77
- # the original_hash and the name of the document. Both are required
78
- document = Mifiel::Document.create(
79
- hash: Digest::SHA256.hexdigest(File.read('path/to/my-file.pdf')),
80
- name: 'my-file.pdf',
81
- signatories: [...]
82
- )
83
- ```
84
-
85
- - Save Document related files
86
-
87
- ```ruby
88
- # save the original file
89
- document.save_file('path/to/save/file.pdf')
90
- # save the signed file (original file + signatures page)
91
- document.save_file_signed('path/to/save/file-signed.pdf')
92
- # save the signed xml file
93
- document.save_xml('path/to/save/xml.xml')
94
- ```
95
-
96
- - Sign:
97
- + With a pre-created Certificate
98
-
99
- ```ruby
100
- certificate = Mifiel::Certificate.find('cert-id')
101
- document.sign(certificate_id: certificate.id)
102
- ```
103
-
104
- + With a new one
105
-
106
- ```ruby
107
- document.sign(certificate: File.read('FIEL_AAA010101AAA.cer'))
108
- ```
109
-
110
- - Delete
111
-
112
- ```ruby
113
- document.delete
114
- ```
115
-
116
- Certificate methods:
117
-
118
- - Sat Certificates
119
-
120
- ```ruby
121
- sat_certificates = Mifiel::Certificate.sat
122
- ```
123
-
124
- - Find:
125
-
126
- ```ruby
127
- certificate = Mifiel::Certificate.find('id')
128
- certificate.cer_hex
129
- certificate.type_of
130
- # ...
131
- ```
132
-
133
- - Find all:
134
-
135
- ```ruby
136
- certificates = Mifiel::Certificate.all
137
- ```
138
-
139
- - Create
140
-
141
- ```ruby
142
- certificate = Mifiel::Certificate.create(
143
- file: 'path/to/my-certificate.cer'
144
- )
145
- ```
146
-
147
- - Delete
148
-
149
- ```ruby
150
- certificate.delete
151
- ```
152
-
153
- User methods
154
-
155
- - Setup Widget
156
-
157
- ```ruby
158
- args = {
159
- email: 'some@email.com',
160
- tax_id: 'AAA010101AAA',
161
- callback_url: 'http://some-callback.url'
162
- }
163
-
164
- user = Mifiel::User.setup_widget(args)
165
- user.widget_id
166
- ```
167
-
168
- Filtering Results
169
-
170
- Our API returns a JSON list of items, this result can be filtered using a `where` method matching a specified criteria (or matching using regular expressions):
171
-
172
- ```ruby
173
- document = Mifiel::Document.find('id')
174
- document.signers.where(field: /receiver|issuer/, email: 'some@email.com')
175
- ```
176
-
177
39
  ## Contributing
178
40
 
179
41
  1. Fork it ( https://github.com/[my-github-username]/mifiel/fork )
@@ -182,15 +44,9 @@ Our API returns a JSON list of items, this result can be filtered using a `where
182
44
  4. Push to the branch (`git push origin my-new-feature`)
183
45
  5. Create a new Pull Request
184
46
 
185
-
186
47
  [gem-version-image]: https://badge.fury.io/rb/mifiel.svg
187
48
  [gem-version-url]: https://badge.fury.io/rb/mifiel
188
-
189
- [security-url]: https://hakiri.io/github/Mifiel/ruby-api-client/master
190
- [security-image]: https://hakiri.io/github/Mifiel/ruby-api-client/master.svg
191
-
192
49
  [travis-image]: https://travis-ci.org/Mifiel/ruby-api-client.svg?branch=master
193
50
  [travis-url]: https://travis-ci.org/Mifiel/ruby-api-client
194
-
195
51
  [coveralls-image]: https://coveralls.io/repos/github/Mifiel/ruby-api-client/badge.svg?branch=master
196
52
  [coveralls-url]: https://coveralls.io/github/Mifiel/ruby-api-client?branch=master
@@ -7,6 +7,9 @@ gem "sinatra"
7
7
 
8
8
  group :development, :test do
9
9
  gem "coveralls", require: false
10
+ gem "pry"
11
+ gem "rubocop"
12
+ gem "rubocop-rspec"
10
13
  end
11
14
 
12
15
  gemspec path: "../"
@@ -7,6 +7,9 @@ gem "sinatra"
7
7
 
8
8
  group :development, :test do
9
9
  gem "coveralls", require: false
10
+ gem "pry"
11
+ gem "rubocop"
12
+ gem "rubocop-rspec"
10
13
  end
11
14
 
12
15
  gemspec path: "../"
@@ -0,0 +1,15 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rails", "7"
6
+ gem "sinatra"
7
+
8
+ group :development, :test do
9
+ gem "coveralls", require: false
10
+ gem "pry"
11
+ gem "rubocop"
12
+ gem "rubocop-rspec"
13
+ end
14
+
15
+ gemspec path: "../"
data/lib/mifiel/base.rb CHANGED
@@ -1,19 +1,30 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'rest-client'
4
-
5
3
  module Mifiel
6
4
  class Base < Flexirest::Base
7
5
  after_request :rescue_errors
8
6
 
9
7
  def rescue_errors(_name, response)
10
- if (400..499).cover?(response.status)
8
+ case response.status
9
+ when (400..499)
11
10
  result = JSON.parse(response.body)
12
11
  message = result['errors'] || [result['error']]
13
12
  raise BadRequestError, message.to_a.join(', ')
14
- elsif (500..599).cover?(response.status)
13
+ when (500..599)
15
14
  raise ServerError, "Could not process your request: status #{response.status}"
16
15
  end
17
16
  end
17
+
18
+ def self.process_request(path, mthd, payload: nil, type: false)
19
+ url = "#{Mifiel.config.base_url}/#{path.gsub(%r{^/}, '')}"
20
+ options = { request_body_type: type }
21
+ options[:plain] = true if type == :plain
22
+ _request(
23
+ url,
24
+ mthd,
25
+ payload,
26
+ options,
27
+ )
28
+ end
18
29
  end
19
30
  end
@@ -8,16 +8,8 @@ module Mifiel
8
8
  get :sat, '/keys/sat'
9
9
 
10
10
  def self.create(cer_file)
11
- rest_request = RestClient::Request.new(
12
- url: "#{Mifiel.config.base_url}/keys",
13
- method: :post,
14
- payload: {
15
- cer_file: File.new(cer_file)
16
- },
17
- ssl_version: 'SSLv23'
18
- )
19
- req = ApiAuth.sign!(rest_request, Mifiel.config.app_id, Mifiel.config.app_secret)
20
- Mifiel::Certificate.new(JSON.parse(req.execute))
11
+ payload = { cer_file: File.new(cer_file) }
12
+ process_request('/keys', :post, payload: payload, type: :form_multipart)
21
13
  end
22
14
  end
23
15
  end
data/lib/mifiel/config.rb CHANGED
@@ -30,8 +30,25 @@ module Mifiel
30
30
 
31
31
  def set_api_auth_credentials
32
32
  Flexirest::Base.base_url = base_url
33
- Flexirest::Base.api_auth_credentials(app_id, app_secret)
33
+ Flexirest::Base.api_auth_credentials(
34
+ app_id,
35
+ app_secret,
36
+ with_http_method: true,
37
+ )
34
38
  Flexirest::Base.request_body_type = :json
39
+ Flexirest::Base.faraday_config do |faraday|
40
+ faraday.headers['User-Agent'] = user_agent
41
+ end
42
+ end
43
+
44
+ def user_agent
45
+ [
46
+ "#{Gem::Platform::RUBY.upcase}/#{RUBY_VERSION}",
47
+ "mifiel/#{Mifiel::VERSION}",
48
+ "faraday/#{Faraday::VERSION}",
49
+ # there is no easy way to get OS version in ruby
50
+ "(#{RUBY_PLATFORM}/-)",
51
+ ].join(' ')
35
52
  end
36
53
  end
37
54
 
@@ -7,12 +7,23 @@ module Mifiel
7
7
  class Document < Mifiel::Base
8
8
  get :all, '/documents'
9
9
  get :find, '/documents/:id'
10
+
11
+ get :raw_file, '/documents/:id/file', plain: true
12
+ # @deprecated in favor of raw_file
13
+ get :raw_data, '/documents/:id/file', plain: true
14
+
15
+ get :raw_file_signed, '/documents/:id/file_signed', plain: true
16
+ # @deprecated in favor of raw_file_signed
17
+ get :raw_signed_data, '/documents/:id/file_signed', plain: true
18
+
19
+ get :raw_xml, '/documents/:id/xml', plain: true
20
+
10
21
  put :save, '/documents/:id'
11
22
  delete :delete, '/documents/:id'
12
23
  post :create_from_template, '/templates/:template_id/generate_document', timeout: 60
13
24
  post :create_many_from_template, '/templates/:template_id/generate_documents', timeout: 60
14
25
 
15
- # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
26
+ # rubocop:disable Metrics/MethodLength
16
27
  def self.create(args)
17
28
  signatories = args[:signatories]
18
29
  file = args[:file]
@@ -27,55 +38,30 @@ module Mifiel
27
38
  callback_url: callback_url,
28
39
  file: (File.new(file) if file),
29
40
  original_hash: hash,
30
- name: name
41
+ name: name,
31
42
  }
32
- payload = args.merge(payload)
33
- payload.reject! { |_k, v| v.nil? }
34
- response = process_request('/documents', :post, payload)
35
- Mifiel::Document.new(JSON.parse(response))
43
+ payload = args.merge(payload).compact
44
+ process_request('/documents', :post, payload: payload, type: :form_multipart)
36
45
  end
37
- # rubocop:enable Metrics/MethodLength, Metrics/AbcSize
46
+ # rubocop:enable Metrics/MethodLength
38
47
 
39
- def request_signature(email, cc: nil) # rubocop:disable Naming/MethodParameterName
48
+ # @deprecated
49
+ def request_signature(email, cc: nil)
40
50
  params = { email: email }
41
51
  params[:cc] = cc if cc.is_a?(Array)
42
- Mifiel::Document._request("#{Mifiel.config.base_url}/documents/#{id}/request_signature", :post, params)
43
- end
44
-
45
- def raw_data
46
- response = Mifiel::Document.process_request("/documents/#{id}/file", :get)
47
-
48
- response.body
52
+ Mifiel::Base.process_request("/documents/#{id}/request_signature", :post, payload: params)
49
53
  end
50
54
 
51
55
  def save_file(path)
52
- File.open(path, 'wb') { |file| file.write(raw_data) }
53
- end
54
-
55
- def raw_signed_data
56
- response = Mifiel::Document.process_request("/documents/#{id}/file_signed", :get)
57
-
58
- response.body
56
+ File.binwrite(path, raw_file)
59
57
  end
60
58
 
61
59
  def save_file_signed(path)
62
- File.open(path, 'wb') { |file| file.write(raw_signed_data) }
60
+ File.binwrite(path, raw_file_signed)
63
61
  end
64
62
 
65
63
  def save_xml(path)
66
- response = Mifiel::Document.process_request("/documents/#{id}/xml", :get)
67
- File.open(path, 'w') { |file| file.write(response) }
68
- end
69
-
70
- def self.process_request(path, method, payload = nil)
71
- rest_request = RestClient::Request.new(
72
- url: "#{Mifiel.config.base_url}/#{path.gsub(%r{^\/}, '')}",
73
- method: method,
74
- payload: payload,
75
- ssl_version: 'SSLv23'
76
- )
77
- req = ApiAuth.sign!(rest_request, Mifiel.config.app_id, Mifiel.config.app_secret)
78
- req.execute
64
+ File.write(path, raw_xml)
79
65
  end
80
66
 
81
67
  def self.build_signatories(signatories)
@@ -18,7 +18,7 @@ module Mifiel
18
18
  template_id: id,
19
19
  identifier: identifier,
20
20
  documents: documents,
21
- callback_url: callback_url
21
+ callback_url: callback_url,
22
22
  )
23
23
  end
24
24
  end
data/lib/mifiel/user.rb CHANGED
@@ -3,27 +3,5 @@
3
3
  module Mifiel
4
4
  class User < Mifiel::Base
5
5
  post :setup_widget, '/users/setup-widget'
6
-
7
- def self.setup_widget(args) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
8
- email = args[:email]
9
- tax_id = args[:tax_id]
10
- callback_url = args[:callback_url]
11
-
12
- raise ArgumentError, 'Email must be provided' unless email
13
- raise ArgumentError, 'Tax id must be provided' unless tax_id
14
-
15
- rest_request = RestClient::Request.new(
16
- url: "#{Mifiel.config.base_url}/users/setup-widget",
17
- method: :post,
18
- payload: {
19
- email: email,
20
- tax_id: tax_id,
21
- callback_url: callback_url
22
- },
23
- ssl_version: 'SSLv23'
24
- )
25
- req = ApiAuth.sign!(rest_request, Mifiel.config.app_id, Mifiel.config.app_secret)
26
- Mifiel::User.new(JSON.parse(req.execute))
27
- end
28
6
  end
29
7
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Mifiel
4
- VERSION = '1.3.1'
4
+ VERSION = '1.4.1'
5
5
  end
data/lib/mifiel.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'flexirest'
4
+ require 'mifiel/version'
4
5
 
5
6
  module Mifiel
6
7
  require 'mifiel/errors'
@@ -11,7 +12,7 @@ module Mifiel
11
12
  autoload :Config, 'mifiel/config'
12
13
  autoload :User, 'mifiel/user'
13
14
 
14
- BASE_URL = 'https://www.mifiel.com/api/v1'
15
+ BASE_URL = 'https://app.mifiel.com/api/v1'
15
16
 
16
17
  def self.config
17
18
  if block_given?
data/mifiel.gemspec CHANGED
@@ -16,23 +16,20 @@ Gem::Specification.new do |spec|
16
16
 
17
17
  spec.files = `git ls-files -z`.split("\x0")
18
18
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
19
  spec.require_paths = ['lib']
21
- spec.required_ruby_version = '>= 2.3'
20
+ spec.required_ruby_version = '>= 2.6'
22
21
 
23
- spec.add_runtime_dependency 'activesupport'
24
- spec.add_runtime_dependency 'api-auth', '~> 1.4'
22
+ # 1.4 fixes a security MITM issue
23
+ # 2.5 is actually a breaking change: it changes the MD5 header
24
+ spec.add_runtime_dependency 'api-auth', '>= 1.4', '< 2.5'
25
25
  spec.add_runtime_dependency 'flexirest', '~> 1.6'
26
- spec.add_runtime_dependency 'json', '>= 1.8'
27
- spec.add_runtime_dependency 'rest-client', '>= 1.8'
28
26
 
29
27
  spec.add_development_dependency 'appraisal'
30
- spec.add_development_dependency 'bump', '~> 0.5', '>= 0.5.3'
31
28
  spec.add_development_dependency 'bundler'
32
- spec.add_development_dependency 'rake', '~> 13.0'
33
- spec.add_development_dependency 'rspec', '~> 3.10'
34
- spec.add_development_dependency 'rubocop', '~> 1.24'
35
- spec.add_development_dependency 'simplecov', '~> 0.21'
29
+ spec.add_development_dependency 'rake'
30
+ spec.add_development_dependency 'rspec'
31
+ spec.add_development_dependency 'simplecov'
36
32
  spec.add_development_dependency 'sinatra'
37
33
  spec.add_development_dependency 'webmock'
34
+ spec.metadata['rubygems_mfa_required'] = 'true'
38
35
  end
@@ -3,8 +3,8 @@
3
3
  describe Mifiel::Base do
4
4
  describe 'rescue_errors' do
5
5
  describe 'when bad request' do
6
- it 'should raise error' do
7
- base = Mifiel::Base.new
6
+ it 'raises error' do
7
+ base = described_class.new
8
8
  expect do
9
9
  base.rescue_errors('blah', FakeResponse.new(400))
10
10
  end.to raise_error(Mifiel::BadRequestError)
@@ -12,8 +12,8 @@ describe Mifiel::Base do
12
12
  end
13
13
 
14
14
  describe 'when server error' do
15
- it 'should raise error' do
16
- base = Mifiel::Base.new
15
+ it 'raises error' do
16
+ base = described_class.new
17
17
  expect do
18
18
  base.rescue_errors('blah', FakeResponse.new(500))
19
19
  end.to raise_error(Mifiel::ServerError)
@@ -3,11 +3,11 @@
3
3
  describe Mifiel::Certificate do
4
4
  describe '#create' do
5
5
  let(:certificate) do
6
- Mifiel::Certificate.create(
7
- 'spec/fixtures/FIEL_AAA010101AAA.cer'
6
+ described_class.create(
7
+ 'spec/fixtures/FIEL_AAA010101AAA.cer',
8
8
  )
9
9
  end
10
10
 
11
- it { expect(certificate).to be_a(Mifiel::Certificate) }
11
+ it { expect(certificate).to be_a(described_class) }
12
12
  end
13
13
  end
@@ -1,65 +1,65 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  describe Mifiel::Document do
4
- let!(:certificate) { File.read('spec/fixtures/FIEL_AAA010101AAA.cer') }
5
- let!(:private_key) { File.read('spec/fixtures/FIEL_AAA010101AAA.key') }
6
- let!(:private_key_pass) { '12345678a' }
4
+ let(:certificate) { File.read('spec/fixtures/FIEL_AAA010101AAA.cer') }
5
+ let(:private_key) { File.read('spec/fixtures/FIEL_AAA010101AAA.key') }
6
+ let(:private_key_pass) { '12345678a' }
7
7
 
8
8
  describe '#create' do
9
9
  context 'with a document' do
10
10
  let(:document) do
11
- Mifiel::Document.create(
11
+ described_class.create(
12
12
  file: 'spec/fixtures/example.pdf',
13
13
  signatories: [
14
14
  { name: 'Signer 1', email: 'signer1@email.com', tax_id: 'AAA010101AAA' },
15
- { name: 'Signer 2', email: 'signer2@email.com', tax_id: 'AAA010102AAA' }
16
- ]
15
+ { name: 'Signer 2', email: 'signer2@email.com', tax_id: 'AAA010102AAA' },
16
+ ],
17
17
  )
18
18
  end
19
19
 
20
- it { expect(document).to be_a(Mifiel::Document) }
20
+ it { expect(document).to be_a(described_class) }
21
21
  end
22
22
 
23
- context 'from template' do
23
+ describe 'from template' do
24
24
  let!(:template_id) { 'c6c29866-7fd6-4f77-9ecd-eae8bc3a772a' }
25
25
  let!(:document) do
26
- Mifiel::Document.create_from_template(
26
+ described_class.create_from_template(
27
27
  template_id: template_id,
28
28
  fields: {
29
- name: 'some'
29
+ name: 'some',
30
30
  },
31
31
  signatories: [{
32
32
  name: 'Signer',
33
- email: 'signer@email.com'
33
+ email: 'signer@email.com',
34
34
  }, {
35
35
  name: 'Signer',
36
- email: 'signer@email.com'
37
- }]
36
+ email: 'signer@email.com',
37
+ },],
38
38
  )
39
39
  end
40
40
 
41
- it { expect(document).to be_a Mifiel::Document }
41
+ it { expect(document).to be_a described_class }
42
42
  end
43
43
 
44
- context 'many from template' do
44
+ describe 'many from template' do
45
45
  let!(:template_id) { 'c6c29866-7fd6-4f77-9ecd-eae8bc3a772a' }
46
46
  let!(:documents) do
47
- Mifiel::Document.create_many_from_template(
47
+ described_class.create_many_from_template(
48
48
  template_id: template_id,
49
49
  callback_url: 'http://some-callback.url/mifiel',
50
50
  identifier: 'name',
51
51
  documents: [{
52
52
  fields: {
53
- name: 'Some Name'
53
+ name: 'Some Name',
54
54
  },
55
55
  signatories: [{
56
56
  name: 'Signer',
57
- email: 'signer@email.com'
57
+ email: 'signer@email.com',
58
58
  }, {
59
59
  name: 'Signer',
60
- email: 'signer@email.com'
61
- }]
62
- }]
60
+ email: 'signer@email.com',
61
+ },],
62
+ }],
63
63
  )
64
64
  end
65
65
 
@@ -68,29 +68,30 @@ describe Mifiel::Document do
68
68
  end
69
69
 
70
70
  describe 'working with a document' do
71
- let!(:document) { Mifiel::Document.all.first }
71
+ let!(:document) { described_class.all.first }
72
72
 
73
- describe '#raw_data' do
73
+ describe '#raw_file' do
74
74
  let(:document_content) { 'some-pdf-formatted-string' }
75
75
 
76
- it 'should get the file raw data' do
77
- expect(document.raw_data).to eq document_content
76
+ it 'gets the file raw data' do
77
+ expect(document.raw_file).to eq document_content
78
78
  end
79
79
  end
80
80
 
81
- describe '#raw_signed_data' do
81
+ describe '#raw_file_signed' do
82
82
  let(:document_content) { 'some-pdf-formatted-string' }
83
83
 
84
- it 'should get the file raw signed data' do
85
- expect(document.raw_signed_data).to eq document_content
84
+ it 'gets the file raw signed data' do
85
+ expect(document.raw_file_signed).to eq document_content
86
86
  end
87
87
  end
88
88
 
89
89
  describe '#save_file' do
90
90
  let!(:path) { 'tmp/the-file.pdf' }
91
- before { File.unlink(path) if File.exist?(path) }
92
91
 
93
- it 'should get the file' do
92
+ before { FileUtils.rm_f(path) }
93
+
94
+ it 'gets the file' do
94
95
  document.save_file(path)
95
96
  expect(File.exist?(path)).to be true
96
97
  end
@@ -98,9 +99,10 @@ describe Mifiel::Document do
98
99
 
99
100
  describe '#save_file_signed' do
100
101
  let!(:path) { 'tmp/the-file-signed.pdf' }
101
- before { File.unlink(path) if File.exist?(path) }
102
102
 
103
- it 'should get the file' do
103
+ before { FileUtils.rm_f(path) }
104
+
105
+ it 'gets the file' do
104
106
  document.save_file_signed(path)
105
107
  expect(File.exist?(path)).to be true
106
108
  end
@@ -108,9 +110,10 @@ describe Mifiel::Document do
108
110
 
109
111
  describe '#save_xml' do
110
112
  let!(:path) { 'tmp/the-xml.xml' }
111
- before { File.unlink(path) if File.exist?(path) }
112
113
 
113
- it 'should get the file' do
114
+ before { FileUtils.rm_f(path) }
115
+
116
+ it 'gets the file' do
114
117
  document.save_xml(path)
115
118
  expect(File.exist?(path)).to be true
116
119
  end
@@ -119,7 +122,7 @@ describe Mifiel::Document do
119
122
  describe '#request_signature' do
120
123
  let!(:error_body) { { errors: ['some error'] }.to_json }
121
124
 
122
- it '' do
125
+ it do
123
126
  expect do
124
127
  document.request_signature('some@email.com')
125
128
  end.not_to raise_error
@@ -127,11 +130,11 @@ describe Mifiel::Document do
127
130
 
128
131
  context 'when bad request' do
129
132
  before do
130
- url = %r{mifiel.com\/api\/v1\/documents\/#{document.id}\/request_signature}
133
+ url = %r{mifiel.com/api/v1/documents/#{document.id}/request_signature}
131
134
  stub_request(:post, url).to_return(body: error_body, status: 404)
132
135
  end
133
136
 
134
- it '' do
137
+ it do
135
138
  expect do
136
139
  document.request_signature('some@email.com')
137
140
  end.to raise_error(Mifiel::BadRequestError)
@@ -140,11 +143,11 @@ describe Mifiel::Document do
140
143
 
141
144
  context 'when server error' do
142
145
  before do
143
- url = %r{mifiel.com\/api\/v1\/documents\/#{document.id}\/request_signature}
146
+ url = %r{mifiel.com/api/v1/documents/#{document.id}/request_signature}
144
147
  stub_request(:post, url).to_return(body: error_body, status: 500)
145
148
  end
146
149
 
147
- it '' do
150
+ it do
148
151
  expect do
149
152
  document.request_signature('some@email.com')
150
153
  end.to raise_error(Mifiel::ServerError)
@@ -4,35 +4,40 @@ describe Mifiel::Template do
4
4
  let!(:template_id) { 'bb7d65b4-47f1-470e-85e4-22ddae86f9ea' }
5
5
 
6
6
  shared_examples 'a valid template' do
7
- it { expect(template).to be_a(Mifiel::Template) }
7
+ it { expect(template).to be_a(described_class) }
8
8
  it { expect(template).to respond_to(:id) }
9
9
  it { expect(template).to respond_to(:name) }
10
10
  end
11
11
 
12
12
  describe '#create' do
13
- let!(:template) do
14
- Mifiel::Template.create(
13
+ let(:template) do
14
+ described_class.create(
15
15
  name: 'Some Template',
16
16
  content: '<div>Some <field name="name" type="string">NAME</field></div>',
17
17
  header: 'Genaros Header',
18
- footer: 'Genaros Footer'
18
+ footer: 'Genaros Footer',
19
19
  )
20
20
  end
21
+
21
22
  it_behaves_like 'a valid template'
22
23
  end
23
24
 
24
25
  describe '#find' do
25
- let!(:template) { Mifiel::Template.find(template_id) }
26
+ let!(:template) { described_class.find(template_id) }
26
27
 
27
28
  it_behaves_like 'a valid template'
28
29
  it { expect(template.id).to eq(template_id) }
29
30
  end
30
31
 
31
32
  describe '#all' do
32
- it 'should respond with many templates' do
33
- templates = Mifiel::Template.all
33
+ let(:templates) { described_class.all }
34
+
35
+ it 'responds with many templates' do
34
36
  expect(templates.count).to be > 0
35
- expect(templates.first).to be_a(Mifiel::Template)
37
+ end
38
+
39
+ it 'responds with a Template' do
40
+ expect(templates.first).to be_a(described_class)
36
41
  end
37
42
  end
38
43
  end
@@ -3,14 +3,14 @@
3
3
  describe Mifiel::User do
4
4
  describe '#setup_widget' do
5
5
  let(:user) do
6
- Mifiel::User.setup_widget(
6
+ described_class.setup_widget(
7
7
  email: 'user@email.com',
8
8
  tax_id: 'AAA010101AAA',
9
- callback_url: 'http://some-callback.url/mifiel'
9
+ callback_url: 'http://some-callback.url/mifiel',
10
10
  )
11
11
  end
12
12
 
13
13
  it { expect(user.success).to be_truthy }
14
- it { expect(user.widget_id).to_not be_nil }
14
+ it { expect(user.widget_id).not_to be_nil }
15
15
  end
16
16
  end
data/spec/spec_helper.rb CHANGED
@@ -26,7 +26,7 @@ RSpec.configure do |config|
26
26
  Dir.mkdir 'tmp' unless File.directory? 'tmp'
27
27
  end
28
28
 
29
- config.before(:each) do
29
+ config.before do
30
30
  stub_request(:any, /mifiel.com/).to_rack(FakeMifiel)
31
31
  end
32
32
  end
@@ -8,7 +8,7 @@ class FakeMifiel < Sinatra::Base # rubocop:disable Metrics/ClassLength
8
8
  status 200
9
9
  [
10
10
  key,
11
- key
11
+ key,
12
12
  ].to_json
13
13
  end
14
14
 
@@ -17,7 +17,7 @@ class FakeMifiel < Sinatra::Base # rubocop:disable Metrics/ClassLength
17
17
  status 200
18
18
  [
19
19
  template,
20
- template
20
+ template,
21
21
  ].to_json
22
22
  end
23
23
 
@@ -56,7 +56,7 @@ class FakeMifiel < Sinatra::Base # rubocop:disable Metrics/ClassLength
56
56
  status 200
57
57
  [
58
58
  document,
59
- document
59
+ document,
60
60
  ].to_json
61
61
  end
62
62
 
@@ -68,7 +68,7 @@ class FakeMifiel < Sinatra::Base # rubocop:disable Metrics/ClassLength
68
68
  original_hash: Digest::SHA256.hexdigest(params[:file][:tempfile].read),
69
69
  file_file_name: params[:file][:filename],
70
70
  signed: false,
71
- signed_at: nil
71
+ signed_at: nil,
72
72
  ).to_json
73
73
  end
74
74
 
@@ -76,7 +76,7 @@ class FakeMifiel < Sinatra::Base # rubocop:disable Metrics/ClassLength
76
76
  content_type :json
77
77
  status 200
78
78
  document(
79
- id: params[:id]
79
+ id: params[:id],
80
80
  ).to_json
81
81
  end
82
82
 
@@ -113,7 +113,7 @@ class FakeMifiel < Sinatra::Base # rubocop:disable Metrics/ClassLength
113
113
  {
114
114
  id: args[:id] || SecureRandom.uuid,
115
115
  name: 'some-template',
116
- content: '<div><field name="name">NAME</field></div>'
116
+ content: '<div><field name="name">NAME</field></div>',
117
117
  }
118
118
  end
119
119
 
@@ -126,7 +126,7 @@ class FakeMifiel < Sinatra::Base # rubocop:disable Metrics/ClassLength
126
126
  owner: 'JORGE MORALES MENDEZ',
127
127
  tax_id: 'MOMJ811012643',
128
128
  expires_at: '2017-04-28T19:43:23.000Z',
129
- expired: false
129
+ expired: false,
130
130
  }
131
131
  end
132
132
 
@@ -142,7 +142,7 @@ class FakeMifiel < Sinatra::Base # rubocop:disable Metrics/ClassLength
142
142
  status: [1, 'Firmado'],
143
143
  owner: {
144
144
  email: 'signer1@email.com',
145
- name: 'Jorge Morales'
145
+ name: 'Jorge Morales',
146
146
  },
147
147
  file: "/api/v1/documents/#{id}/file",
148
148
  file_download: "/api/v1/documents/#{id}/file?download=true",
@@ -158,9 +158,9 @@ class FakeMifiel < Sinatra::Base # rubocop:disable Metrics/ClassLength
158
158
  signature: '77cd5156779c..4e276ef1056c1de11b7f70bed28',
159
159
  user: {
160
160
  email: 'signer1@email.com',
161
- name: 'Jorge Morales'
162
- }
163
- }]
161
+ name: 'Jorge Morales',
162
+ },
163
+ }],
164
164
  }
165
165
  end
166
166
  end
metadata CHANGED
@@ -1,43 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mifiel
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.1
4
+ version: 1.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Genaro Madrid
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-01-17 00:00:00.000000000 Z
11
+ date: 2022-12-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: activesupport
14
+ name: api-auth
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '1.4'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '2.5'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
27
  - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: api-auth
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
28
  - !ruby/object:Gem::Version
33
29
  version: '1.4'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
30
+ - - "<"
39
31
  - !ruby/object:Gem::Version
40
- version: '1.4'
32
+ version: '2.5'
41
33
  - !ruby/object:Gem::Dependency
42
34
  name: flexirest
43
35
  requirement: !ruby/object:Gem::Requirement
@@ -52,34 +44,6 @@ dependencies:
52
44
  - - "~>"
53
45
  - !ruby/object:Gem::Version
54
46
  version: '1.6'
55
- - !ruby/object:Gem::Dependency
56
- name: json
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '1.8'
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '1.8'
69
- - !ruby/object:Gem::Dependency
70
- name: rest-client
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '1.8'
76
- type: :runtime
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '1.8'
83
47
  - !ruby/object:Gem::Dependency
84
48
  name: appraisal
85
49
  requirement: !ruby/object:Gem::Requirement
@@ -94,26 +58,6 @@ dependencies:
94
58
  - - ">="
95
59
  - !ruby/object:Gem::Version
96
60
  version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: bump
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - "~>"
102
- - !ruby/object:Gem::Version
103
- version: '0.5'
104
- - - ">="
105
- - !ruby/object:Gem::Version
106
- version: 0.5.3
107
- type: :development
108
- prerelease: false
109
- version_requirements: !ruby/object:Gem::Requirement
110
- requirements:
111
- - - "~>"
112
- - !ruby/object:Gem::Version
113
- version: '0.5'
114
- - - ">="
115
- - !ruby/object:Gem::Version
116
- version: 0.5.3
117
61
  - !ruby/object:Gem::Dependency
118
62
  name: bundler
119
63
  requirement: !ruby/object:Gem::Requirement
@@ -132,58 +76,44 @@ dependencies:
132
76
  name: rake
133
77
  requirement: !ruby/object:Gem::Requirement
134
78
  requirements:
135
- - - "~>"
79
+ - - ">="
136
80
  - !ruby/object:Gem::Version
137
- version: '13.0'
81
+ version: '0'
138
82
  type: :development
139
83
  prerelease: false
140
84
  version_requirements: !ruby/object:Gem::Requirement
141
85
  requirements:
142
- - - "~>"
86
+ - - ">="
143
87
  - !ruby/object:Gem::Version
144
- version: '13.0'
88
+ version: '0'
145
89
  - !ruby/object:Gem::Dependency
146
90
  name: rspec
147
91
  requirement: !ruby/object:Gem::Requirement
148
92
  requirements:
149
- - - "~>"
150
- - !ruby/object:Gem::Version
151
- version: '3.10'
152
- type: :development
153
- prerelease: false
154
- version_requirements: !ruby/object:Gem::Requirement
155
- requirements:
156
- - - "~>"
157
- - !ruby/object:Gem::Version
158
- version: '3.10'
159
- - !ruby/object:Gem::Dependency
160
- name: rubocop
161
- requirement: !ruby/object:Gem::Requirement
162
- requirements:
163
- - - "~>"
93
+ - - ">="
164
94
  - !ruby/object:Gem::Version
165
- version: '1.24'
95
+ version: '0'
166
96
  type: :development
167
97
  prerelease: false
168
98
  version_requirements: !ruby/object:Gem::Requirement
169
99
  requirements:
170
- - - "~>"
100
+ - - ">="
171
101
  - !ruby/object:Gem::Version
172
- version: '1.24'
102
+ version: '0'
173
103
  - !ruby/object:Gem::Dependency
174
104
  name: simplecov
175
105
  requirement: !ruby/object:Gem::Requirement
176
106
  requirements:
177
- - - "~>"
107
+ - - ">="
178
108
  - !ruby/object:Gem::Version
179
- version: '0.21'
109
+ version: '0'
180
110
  type: :development
181
111
  prerelease: false
182
112
  version_requirements: !ruby/object:Gem::Requirement
183
113
  requirements:
184
- - - "~>"
114
+ - - ">="
185
115
  - !ruby/object:Gem::Version
186
- version: '0.21'
116
+ version: '0'
187
117
  - !ruby/object:Gem::Dependency
188
118
  name: sinatra
189
119
  requirement: !ruby/object:Gem::Requirement
@@ -229,9 +159,9 @@ files:
229
159
  - LICENSE.txt
230
160
  - README.md
231
161
  - Rakefile
232
- - bump
233
162
  - gemfiles/rails_5.gemfile
234
163
  - gemfiles/rails_6.gemfile
164
+ - gemfiles/rails_7.gemfile
235
165
  - lib/mifiel.rb
236
166
  - lib/mifiel/base.rb
237
167
  - lib/mifiel/certificate.rb
@@ -256,7 +186,8 @@ files:
256
186
  homepage: https://www.mifiel.com
257
187
  licenses:
258
188
  - MIT
259
- metadata: {}
189
+ metadata:
190
+ rubygems_mfa_required: 'true'
260
191
  post_install_message:
261
192
  rdoc_options: []
262
193
  require_paths:
@@ -265,7 +196,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
265
196
  requirements:
266
197
  - - ">="
267
198
  - !ruby/object:Gem::Version
268
- version: '2.3'
199
+ version: '2.6'
269
200
  required_rubygems_version: !ruby/object:Gem::Requirement
270
201
  requirements:
271
202
  - - ">="
@@ -276,14 +207,4 @@ rubygems_version: 3.1.6
276
207
  signing_key:
277
208
  specification_version: 4
278
209
  summary: Ruby SDK for mifiel.com.
279
- test_files:
280
- - spec/fixtures/FIEL_AAA010101AAA.cer
281
- - spec/fixtures/FIEL_AAA010101AAA.key
282
- - spec/fixtures/example.pdf
283
- - spec/mifiel/base_spec.rb
284
- - spec/mifiel/certificate_spec.rb
285
- - spec/mifiel/document_spec.rb
286
- - spec/mifiel/template_spec.rb
287
- - spec/mifiel/user_spec.rb
288
- - spec/spec_helper.rb
289
- - spec/support/fake_mifiel.rb
210
+ test_files: []
data/bump DELETED
@@ -1,70 +0,0 @@
1
- #!/usr/bin/env python
2
- import re, glob, sys, os
3
-
4
- __USAGE__ = \
5
- """BUMP is a semantic versioning bump script which accepts the following
6
- mutually exclusive arguments:
7
- -m - a "major" version bump equal to +1.0.0
8
- -n - a "minor" version bump equal to +0.1.0
9
- -p - a "patch" version bump equal to +0.0.1
10
- -h - a "hot fix" version bump equal to +0.0.1
11
-
12
- All of these options allow for the -r flag, which indicates that the state
13
- is a RELEASE not a SNAPSHOT. If -r is not specified, then -SNAPSHOT is
14
- appended to the updated version string."""
15
-
16
- __INITIAL__ = ['0', '0', '1']
17
-
18
-
19
- if __name__ == "__main__":
20
- v = []
21
- try:
22
- version_file = glob.glob("lib/*/version.rb")[0]
23
- raw_v = re.search(r'VERSION = \'(.*)\'', open(version_file).read(), re.M|re.I|re.S).group(1)
24
- v = re.split(re.compile("\.|-"), raw_v)
25
- v = v[0:3]
26
- map(int, v)
27
-
28
- except ValueError:
29
- print("failed to parse the existing VERSION file, assuming v 0.0.1")
30
- v = ['0', '0', '1']
31
-
32
- except FileNotFoundError:
33
- print("failed to find a VERSION file, assuming v 0.0.0")
34
- v = ['0', '0', '0']
35
-
36
- op = ''
37
- try:
38
- op = sys.argv[1]
39
- except:
40
- print(__USAGE__)
41
- sys.exit(-1)
42
-
43
- if(op == '-m'):
44
- v = [str(int(v[0])+1), '0', '0']
45
-
46
- elif(op == '-n'):
47
- v = [v[0], str(int(v[1])+1), '0']
48
-
49
- elif(op == '-p' or op == '-h'):
50
- v = [v[0], v[1], str(int(v[2])+1)]
51
-
52
- else:
53
- print(__USAGE__)
54
- sys.exit(-1)
55
-
56
- v = '.'.join(v)
57
-
58
- if(op == '-h'):
59
- os.system("git checkout -b hotfix/v%s master" % v)
60
-
61
- else:
62
- os.system("git checkout -b release/v%s develop" % v)
63
-
64
- os.system("bump set %s" % v)
65
-
66
- v += "\n"
67
-
68
- print(v)
69
-
70
- sys.exit(0)