mifiel 1.3.1 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +18 -1
- data/.travis.yml +11 -7
- data/Appraisals +5 -0
- data/Gemfile +3 -0
- data/README.md +4 -148
- data/gemfiles/rails_5.gemfile +3 -0
- data/gemfiles/rails_6.gemfile +3 -0
- data/gemfiles/rails_7.gemfile +15 -0
- data/lib/mifiel/base.rb +15 -4
- data/lib/mifiel/certificate.rb +2 -10
- data/lib/mifiel/config.rb +18 -1
- data/lib/mifiel/document.rb +22 -36
- data/lib/mifiel/template.rb +1 -1
- data/lib/mifiel/user.rb +0 -22
- data/lib/mifiel/version.rb +1 -1
- data/lib/mifiel.rb +2 -1
- data/mifiel.gemspec +9 -7
- data/spec/mifiel/base_spec.rb +4 -4
- data/spec/mifiel/certificate_spec.rb +3 -3
- data/spec/mifiel/document_spec.rb +42 -39
- data/spec/mifiel/template_spec.rb +13 -8
- data/spec/mifiel/user_spec.rb +3 -3
- data/spec/spec_helper.rb +1 -1
- data/spec/support/fake_mifiel.rb +11 -11
- metadata +27 -43
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7808cc60c36b233e6dc0ad9a8150e50c7125696a6e7ee71b66c7819196c36c5f
|
4
|
+
data.tar.gz: 7a9ecaeec4311683bdf5b5f878ab871895d83cc810cc4b4164006b731b9b3f54
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fcb6a68adf72928f3a6db46f4894b8878c023a0ac11cbccd6daca422cfe428288402964661170ef381606d41b5f3fe53c0c2ac3c1aafab335722e213fbce9f7b
|
7
|
+
data.tar.gz: 8088355a100b92b8b793351165c37e710477d61ad112d4da44e1d2c9c26223832190d47ffc9b75cdabf15b776e3e6b897b14431a8a566480c90f248f4f42e0c1
|
data/.rubocop.yml
CHANGED
@@ -1,5 +1,10 @@
|
|
1
|
+
require:
|
2
|
+
- rubocop-rspec
|
3
|
+
|
1
4
|
AllCops:
|
2
|
-
TargetRubyVersion: 2.
|
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
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
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
data/Gemfile
CHANGED
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](
|
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
|
-
|
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
|
-
|
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
|
data/gemfiles/rails_5.gemfile
CHANGED
data/gemfiles/rails_6.gemfile
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|
data/lib/mifiel/certificate.rb
CHANGED
@@ -8,16 +8,8 @@ module Mifiel
|
|
8
8
|
get :sat, '/keys/sat'
|
9
9
|
|
10
10
|
def self.create(cer_file)
|
11
|
-
|
12
|
-
|
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(
|
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
|
|
data/lib/mifiel/document.rb
CHANGED
@@ -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
|
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
|
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
|
46
|
+
# rubocop:enable Metrics/MethodLength
|
38
47
|
|
39
|
-
|
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::
|
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.
|
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.
|
60
|
+
File.binwrite(path, raw_file_signed)
|
63
61
|
end
|
64
62
|
|
65
63
|
def save_xml(path)
|
66
|
-
|
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)
|
data/lib/mifiel/template.rb
CHANGED
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
|
data/lib/mifiel/version.rb
CHANGED
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://
|
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,12 +16,14 @@ 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.
|
20
|
+
spec.required_ruby_version = '>= 2.6'
|
22
21
|
|
23
22
|
spec.add_runtime_dependency 'activesupport'
|
24
|
-
|
23
|
+
|
24
|
+
# 1.4 fixes a security MITM issue
|
25
|
+
# 2.5 is actually a breaking change: it changes the MD5 header
|
26
|
+
spec.add_runtime_dependency 'api-auth', '>= 1.4', '< 2.5'
|
25
27
|
spec.add_runtime_dependency 'flexirest', '~> 1.6'
|
26
28
|
spec.add_runtime_dependency 'json', '>= 1.8'
|
27
29
|
spec.add_runtime_dependency 'rest-client', '>= 1.8'
|
@@ -29,10 +31,10 @@ Gem::Specification.new do |spec|
|
|
29
31
|
spec.add_development_dependency 'appraisal'
|
30
32
|
spec.add_development_dependency 'bump', '~> 0.5', '>= 0.5.3'
|
31
33
|
spec.add_development_dependency 'bundler'
|
32
|
-
spec.add_development_dependency 'rake'
|
33
|
-
spec.add_development_dependency 'rspec'
|
34
|
-
spec.add_development_dependency '
|
35
|
-
spec.add_development_dependency 'simplecov', '~> 0.21'
|
34
|
+
spec.add_development_dependency 'rake'
|
35
|
+
spec.add_development_dependency 'rspec'
|
36
|
+
spec.add_development_dependency 'simplecov'
|
36
37
|
spec.add_development_dependency 'sinatra'
|
37
38
|
spec.add_development_dependency 'webmock'
|
39
|
+
spec.metadata['rubygems_mfa_required'] = 'true'
|
38
40
|
end
|
data/spec/mifiel/base_spec.rb
CHANGED
@@ -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 '
|
7
|
-
base =
|
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 '
|
16
|
-
base =
|
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
|
-
|
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(
|
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
|
5
|
-
let
|
6
|
-
let
|
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
|
-
|
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(
|
20
|
+
it { expect(document).to be_a(described_class) }
|
21
21
|
end
|
22
22
|
|
23
|
-
|
23
|
+
describe 'from template' do
|
24
24
|
let!(:template_id) { 'c6c29866-7fd6-4f77-9ecd-eae8bc3a772a' }
|
25
25
|
let!(:document) do
|
26
|
-
|
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
|
41
|
+
it { expect(document).to be_a described_class }
|
42
42
|
end
|
43
43
|
|
44
|
-
|
44
|
+
describe 'many from template' do
|
45
45
|
let!(:template_id) { 'c6c29866-7fd6-4f77-9ecd-eae8bc3a772a' }
|
46
46
|
let!(:documents) do
|
47
|
-
|
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) {
|
71
|
+
let!(:document) { described_class.all.first }
|
72
72
|
|
73
|
-
describe '#
|
73
|
+
describe '#raw_file' do
|
74
74
|
let(:document_content) { 'some-pdf-formatted-string' }
|
75
75
|
|
76
|
-
it '
|
77
|
-
expect(document.
|
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 '#
|
81
|
+
describe '#raw_file_signed' do
|
82
82
|
let(:document_content) { 'some-pdf-formatted-string' }
|
83
83
|
|
84
|
-
it '
|
85
|
-
expect(document.
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
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
|
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
|
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
|
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
|
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(
|
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
|
14
|
-
|
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) {
|
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
|
-
|
33
|
-
|
33
|
+
let(:templates) { described_class.all }
|
34
|
+
|
35
|
+
it 'responds with many templates' do
|
34
36
|
expect(templates.count).to be > 0
|
35
|
-
|
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
|
data/spec/mifiel/user_spec.rb
CHANGED
@@ -3,14 +3,14 @@
|
|
3
3
|
describe Mifiel::User do
|
4
4
|
describe '#setup_widget' do
|
5
5
|
let(:user) do
|
6
|
-
|
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).
|
14
|
+
it { expect(user.widget_id).not_to be_nil }
|
15
15
|
end
|
16
16
|
end
|
data/spec/spec_helper.rb
CHANGED
data/spec/support/fake_mifiel.rb
CHANGED
@@ -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,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mifiel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
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-
|
11
|
+
date: 2022-12-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -28,16 +28,22 @@ dependencies:
|
|
28
28
|
name: api-auth
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '1.4'
|
34
|
+
- - "<"
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: '2.5'
|
34
37
|
type: :runtime
|
35
38
|
prerelease: false
|
36
39
|
version_requirements: !ruby/object:Gem::Requirement
|
37
40
|
requirements:
|
38
|
-
- - "
|
41
|
+
- - ">="
|
39
42
|
- !ruby/object:Gem::Version
|
40
43
|
version: '1.4'
|
44
|
+
- - "<"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '2.5'
|
41
47
|
- !ruby/object:Gem::Dependency
|
42
48
|
name: flexirest
|
43
49
|
requirement: !ruby/object:Gem::Requirement
|
@@ -132,58 +138,44 @@ dependencies:
|
|
132
138
|
name: rake
|
133
139
|
requirement: !ruby/object:Gem::Requirement
|
134
140
|
requirements:
|
135
|
-
- - "
|
141
|
+
- - ">="
|
136
142
|
- !ruby/object:Gem::Version
|
137
|
-
version: '
|
143
|
+
version: '0'
|
138
144
|
type: :development
|
139
145
|
prerelease: false
|
140
146
|
version_requirements: !ruby/object:Gem::Requirement
|
141
147
|
requirements:
|
142
|
-
- - "
|
148
|
+
- - ">="
|
143
149
|
- !ruby/object:Gem::Version
|
144
|
-
version: '
|
150
|
+
version: '0'
|
145
151
|
- !ruby/object:Gem::Dependency
|
146
152
|
name: rspec
|
147
153
|
requirement: !ruby/object:Gem::Requirement
|
148
154
|
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
|
-
- - "~>"
|
155
|
+
- - ">="
|
164
156
|
- !ruby/object:Gem::Version
|
165
|
-
version: '
|
157
|
+
version: '0'
|
166
158
|
type: :development
|
167
159
|
prerelease: false
|
168
160
|
version_requirements: !ruby/object:Gem::Requirement
|
169
161
|
requirements:
|
170
|
-
- - "
|
162
|
+
- - ">="
|
171
163
|
- !ruby/object:Gem::Version
|
172
|
-
version: '
|
164
|
+
version: '0'
|
173
165
|
- !ruby/object:Gem::Dependency
|
174
166
|
name: simplecov
|
175
167
|
requirement: !ruby/object:Gem::Requirement
|
176
168
|
requirements:
|
177
|
-
- - "
|
169
|
+
- - ">="
|
178
170
|
- !ruby/object:Gem::Version
|
179
|
-
version: '0
|
171
|
+
version: '0'
|
180
172
|
type: :development
|
181
173
|
prerelease: false
|
182
174
|
version_requirements: !ruby/object:Gem::Requirement
|
183
175
|
requirements:
|
184
|
-
- - "
|
176
|
+
- - ">="
|
185
177
|
- !ruby/object:Gem::Version
|
186
|
-
version: '0
|
178
|
+
version: '0'
|
187
179
|
- !ruby/object:Gem::Dependency
|
188
180
|
name: sinatra
|
189
181
|
requirement: !ruby/object:Gem::Requirement
|
@@ -232,6 +224,7 @@ files:
|
|
232
224
|
- bump
|
233
225
|
- gemfiles/rails_5.gemfile
|
234
226
|
- gemfiles/rails_6.gemfile
|
227
|
+
- gemfiles/rails_7.gemfile
|
235
228
|
- lib/mifiel.rb
|
236
229
|
- lib/mifiel/base.rb
|
237
230
|
- lib/mifiel/certificate.rb
|
@@ -256,7 +249,8 @@ files:
|
|
256
249
|
homepage: https://www.mifiel.com
|
257
250
|
licenses:
|
258
251
|
- MIT
|
259
|
-
metadata:
|
252
|
+
metadata:
|
253
|
+
rubygems_mfa_required: 'true'
|
260
254
|
post_install_message:
|
261
255
|
rdoc_options: []
|
262
256
|
require_paths:
|
@@ -265,7 +259,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
265
259
|
requirements:
|
266
260
|
- - ">="
|
267
261
|
- !ruby/object:Gem::Version
|
268
|
-
version: '2.
|
262
|
+
version: '2.6'
|
269
263
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
270
264
|
requirements:
|
271
265
|
- - ">="
|
@@ -276,14 +270,4 @@ rubygems_version: 3.1.6
|
|
276
270
|
signing_key:
|
277
271
|
specification_version: 4
|
278
272
|
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
|
273
|
+
test_files: []
|