nfe-io 0.2.3
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 +7 -0
- data/.gitignore +11 -0
- data/.rspec +2 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +4 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +43 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/lib/data/ssl-bundle.crt +3738 -0
- data/lib/nfe/api_operations/create.rb +15 -0
- data/lib/nfe/api_operations/delete.rb +16 -0
- data/lib/nfe/api_operations/list.rb +15 -0
- data/lib/nfe/api_operations/retrieve.rb +16 -0
- data/lib/nfe/api_operations/update.rb +22 -0
- data/lib/nfe/api_resource.rb +50 -0
- data/lib/nfe/company.rb +23 -0
- data/lib/nfe/errors/nfe_error.rb +12 -0
- data/lib/nfe/legal_people.rb +24 -0
- data/lib/nfe/natural_people.rb +24 -0
- data/lib/nfe/nfe_object.rb +111 -0
- data/lib/nfe/service_invoice.rb +26 -0
- data/lib/nfe/util.rb +31 -0
- data/lib/nfe/version.rb +3 -0
- data/lib/nfe.rb +32 -0
- data/nfe.gemspec +35 -0
- metadata +128 -0
@@ -0,0 +1,16 @@
|
|
1
|
+
module Nfe
|
2
|
+
module ApiOperations
|
3
|
+
module Delete
|
4
|
+
def delete(params)
|
5
|
+
method = :delete
|
6
|
+
response = api_request(url, method, params)
|
7
|
+
# reflesh_object(response)
|
8
|
+
response
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.included(base)
|
12
|
+
base.extend(Delete)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Nfe
|
2
|
+
module ApiOperations
|
3
|
+
module Retrieve
|
4
|
+
def retrieve(obj_id)
|
5
|
+
obj_id = "?id=#{obj_id}" if obj_id.include? '@'
|
6
|
+
method = :get
|
7
|
+
response = api_request("#{url}/#{obj_id}",method)
|
8
|
+
create_from(response)
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.included(base)
|
12
|
+
base.extend(Retrieve)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Nfe
|
2
|
+
module ApiOperations
|
3
|
+
module Update
|
4
|
+
def save
|
5
|
+
params_to_update = {}
|
6
|
+
self.serialize_params.each do |key|
|
7
|
+
return if (@values[key] || @values[key.to_s]).is_a? Nfe::NfeObject
|
8
|
+
params_to_update[key] = (@values[key] || @values[key.to_s]) if @values
|
9
|
+
end
|
10
|
+
puts params_to_update
|
11
|
+
|
12
|
+
update(params_to_update)
|
13
|
+
end
|
14
|
+
|
15
|
+
def update(params=nil, url_sufix=nil)
|
16
|
+
method = :post
|
17
|
+
response = api_request("#{url}/#{url_sufix}",method,params)
|
18
|
+
reflesh_object(response)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module Nfe
|
2
|
+
module ApiResource
|
3
|
+
BASE_URL = 'http://api.nfe.io'
|
4
|
+
SSL_BUNDLE_PATH = File.dirname(__FILE__) + '/../data/ssl-bundle.crt'
|
5
|
+
|
6
|
+
def url_encode(key)
|
7
|
+
URI.escape(key.to_s, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
|
8
|
+
end
|
9
|
+
|
10
|
+
def encode(params)
|
11
|
+
params.map { |k,v| "#{k}=#{url_encode(v)}" }.join('&')
|
12
|
+
end
|
13
|
+
|
14
|
+
def api_request(url, method, params=nil)
|
15
|
+
url = "#{BASE_URL}#{url}"
|
16
|
+
api_key = Nfe.access_keys
|
17
|
+
|
18
|
+
if method == :get && params
|
19
|
+
params_encoded = encode(params)
|
20
|
+
url = "#{url}?#{params_encoded}"
|
21
|
+
params = nil
|
22
|
+
end
|
23
|
+
|
24
|
+
begin
|
25
|
+
payload = params.to_json
|
26
|
+
response = RestClient::Request.new(method: method, url: url, payload: payload,
|
27
|
+
headers: {authorization: api_key,
|
28
|
+
content_type: 'application/json',
|
29
|
+
accept: '*/*'}).execute
|
30
|
+
|
31
|
+
rescue RestClient::ExceptionWithResponse => e
|
32
|
+
if rcode = e.http_code and rbody = e.http_body
|
33
|
+
rbody = JSON.parse(rbody)
|
34
|
+
rbody = Util.symbolize_names(rbody)
|
35
|
+
|
36
|
+
raise NfeError.new(rcode, rbody, rbody, rbody[:message])
|
37
|
+
else
|
38
|
+
raise e
|
39
|
+
end
|
40
|
+
rescue RestClient::Exception => e
|
41
|
+
raise e
|
42
|
+
end
|
43
|
+
JSON.parse(response.to_str)
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.included(base)
|
47
|
+
base.extend(ApiResource)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
data/lib/nfe/company.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
module Nfe
|
2
|
+
class Company < NfeObject
|
3
|
+
include ApiResource
|
4
|
+
include ApiOperations::Create
|
5
|
+
include ApiOperations::List
|
6
|
+
include ApiOperations::Retrieve
|
7
|
+
include ApiOperations::Delete
|
8
|
+
include ApiOperations::Update
|
9
|
+
|
10
|
+
def self.url
|
11
|
+
"/v1/companies"
|
12
|
+
end
|
13
|
+
|
14
|
+
def url
|
15
|
+
"#{self.class.url}/#{self.id}"
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.create_from(params)
|
19
|
+
obj = self.new
|
20
|
+
obj.reflesh_object(params["companies"])
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Nfe
|
2
|
+
class NfeError < StandardError
|
3
|
+
attr_reader :http_status, :json_message, :http_message, :message
|
4
|
+
|
5
|
+
def initialize(http_status=nil, json_message=nil, http_message=nil, message=nil)
|
6
|
+
@http_status = http_status
|
7
|
+
@json_message = json_message
|
8
|
+
@http_message = http_message
|
9
|
+
@message = message
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Nfe
|
2
|
+
class LegalPeople < NfeObject
|
3
|
+
include ApiResource
|
4
|
+
include ApiOperations::List
|
5
|
+
include ApiOperations::Retrieve
|
6
|
+
|
7
|
+
def self.company_id(company_id)
|
8
|
+
@company_id = company_id
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.url
|
12
|
+
"/v1/companies/#{@company_id}/legalpeople"
|
13
|
+
end
|
14
|
+
|
15
|
+
def url
|
16
|
+
"#{self.class.url}/#{self.id}"
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.create_from(params)
|
20
|
+
obj = self.new
|
21
|
+
obj.reflesh_object(params["legalPeople"])
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Nfe
|
2
|
+
class NaturalPeople < NfeObject
|
3
|
+
include ApiResource
|
4
|
+
include ApiOperations::List
|
5
|
+
include ApiOperations::Retrieve
|
6
|
+
|
7
|
+
def self.company_id(company_id)
|
8
|
+
@company_id = company_id
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.url
|
12
|
+
"/v1/companies/#{@company_id}/naturalpeople"
|
13
|
+
end
|
14
|
+
|
15
|
+
def url
|
16
|
+
"#{self.class.url}/#{self.id}"
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.create_from(params)
|
20
|
+
obj = self.new
|
21
|
+
obj.reflesh_object(params["naturalPeople"])
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,111 @@
|
|
1
|
+
module Nfe
|
2
|
+
class NfeObject
|
3
|
+
@values
|
4
|
+
def metaclass
|
5
|
+
class << self; self; end
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.create_from(params)
|
9
|
+
obj = self.new
|
10
|
+
obj.reflesh_object(params)
|
11
|
+
end
|
12
|
+
|
13
|
+
def reflesh_object(params)
|
14
|
+
if params.class == Array
|
15
|
+
params = create_list(params)
|
16
|
+
end
|
17
|
+
create_fields(params)
|
18
|
+
set_properties(params)
|
19
|
+
self
|
20
|
+
end
|
21
|
+
|
22
|
+
def create_fields(params)
|
23
|
+
instance_eval do
|
24
|
+
metaclass.instance_eval do
|
25
|
+
params.keys.each do |key|
|
26
|
+
define_method(key) { @values[key] }
|
27
|
+
|
28
|
+
define_method("#{key}=") do |value|
|
29
|
+
@values[key] = value
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def set_properties(params)
|
37
|
+
instance_eval do
|
38
|
+
params.each do |key, value|
|
39
|
+
if value.class == Hash
|
40
|
+
@values[key] = Util.get_object_type(value['object']).create_from(value)
|
41
|
+
elsif value.class == Array
|
42
|
+
@values[key] = value.map{ |v| Util.get_object_type(v['object']).create_from(v) }
|
43
|
+
else
|
44
|
+
@values[key] = value
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.url
|
51
|
+
"/v1/#{CGI.escape(class_name.downcase)}s"
|
52
|
+
end
|
53
|
+
|
54
|
+
def url
|
55
|
+
"#{self.class.url}/#{self.id}"
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.class_name
|
59
|
+
self.name.split('::')[-1]
|
60
|
+
end
|
61
|
+
|
62
|
+
def initialize()
|
63
|
+
@values = {}
|
64
|
+
end
|
65
|
+
|
66
|
+
def method_missing(name, *args)
|
67
|
+
if name.to_s.end_with? '='
|
68
|
+
name = name.to_s[0...-1].to_sym
|
69
|
+
end
|
70
|
+
|
71
|
+
if serialize_params.include? name
|
72
|
+
@values[name] = args[0]
|
73
|
+
else
|
74
|
+
raise NoMemoryError.new ("Cannot set #{name} on this object")
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def to_hash
|
79
|
+
@values.inject({}) do |result, (key,value)|
|
80
|
+
if value.is_a? Array
|
81
|
+
list = []
|
82
|
+
value.each do |obj|
|
83
|
+
list.push(obj.respond_to?(:to_hash) ? obj.to_hash : value)
|
84
|
+
end
|
85
|
+
result[key] = list
|
86
|
+
else if value.respond_to?(:to_hash)
|
87
|
+
result[key] = value.to_hash
|
88
|
+
else
|
89
|
+
result[key] = value
|
90
|
+
end
|
91
|
+
end
|
92
|
+
result
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def to_json(*a)
|
97
|
+
JSON.generate(@values)
|
98
|
+
end
|
99
|
+
|
100
|
+
def to_s
|
101
|
+
JSON.generate(@values)
|
102
|
+
end
|
103
|
+
|
104
|
+
def create_list(array)
|
105
|
+
hash = {}
|
106
|
+
hash[:data] = array
|
107
|
+
hash[:object] = 'list'
|
108
|
+
hash
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Nfe
|
2
|
+
class ServiceInvoice < NfeObject
|
3
|
+
include ApiResource
|
4
|
+
include ApiOperations::Create
|
5
|
+
include ApiOperations::List
|
6
|
+
include ApiOperations::Retrieve
|
7
|
+
include ApiOperations::Delete
|
8
|
+
include ApiOperations::Update
|
9
|
+
|
10
|
+
def self.company_id(company_id)
|
11
|
+
@company_id = company_id
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.url
|
15
|
+
"/v1/companies/#{@company_id}/serviceinvoices"
|
16
|
+
end
|
17
|
+
|
18
|
+
def url
|
19
|
+
"#{self.class.url}/#{self.id}"
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.create_from(params)
|
23
|
+
params
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/nfe/util.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
module Nfe
|
2
|
+
class Util
|
3
|
+
OBJECT_TYPES = {
|
4
|
+
'company' => Nfe::Company,
|
5
|
+
'serviceInvoice' => Nfe::ServiceInvoice,
|
6
|
+
'naturalPeople' => Nfe::NaturalPeople
|
7
|
+
}
|
8
|
+
|
9
|
+
def self.get_object_type(type)
|
10
|
+
object_type = Nfe::NfeObject
|
11
|
+
object_type = OBJECT_TYPES[type] if OBJECT_TYPES[type]
|
12
|
+
object_type
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.symbolize_names(object)
|
16
|
+
case object
|
17
|
+
when Hash
|
18
|
+
new = {}
|
19
|
+
object.each do |key, value|
|
20
|
+
key = (key.to_sym rescue key) || key
|
21
|
+
new[key] = symbolize_names(value)
|
22
|
+
end
|
23
|
+
new
|
24
|
+
when Array
|
25
|
+
object.map { |value| symbolize_names(value) }
|
26
|
+
else
|
27
|
+
object
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/nfe/version.rb
ADDED
data/lib/nfe.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require "rest-client"
|
2
|
+
require "json"
|
3
|
+
require "nfe/version"
|
4
|
+
|
5
|
+
require "nfe/api_resource"
|
6
|
+
require "nfe/api_operations/create"
|
7
|
+
require "nfe/api_operations/delete"
|
8
|
+
require "nfe/api_operations/list"
|
9
|
+
require "nfe/api_operations/retrieve"
|
10
|
+
require "nfe/api_operations/update"
|
11
|
+
|
12
|
+
require "nfe/nfe_object"
|
13
|
+
require "nfe/service_invoice"
|
14
|
+
require "nfe/company"
|
15
|
+
require "nfe/natural_people"
|
16
|
+
require "nfe/legal_people"
|
17
|
+
|
18
|
+
require "nfe/util"
|
19
|
+
require "nfe/errors/nfe_error"
|
20
|
+
|
21
|
+
|
22
|
+
module Nfe
|
23
|
+
@@api_key = ''
|
24
|
+
|
25
|
+
def self.api_key(api_key)
|
26
|
+
@@api_key = api_key
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.access_keys
|
30
|
+
"#{@@api_key}"
|
31
|
+
end
|
32
|
+
end
|
data/nfe.gemspec
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'nfe/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "nfe-io"
|
8
|
+
spec.version = Nfe::VERSION
|
9
|
+
spec.authors = ["Ricardo Caldeira"]
|
10
|
+
spec.email = ["ricardo.nezz@gmail.com"]
|
11
|
+
|
12
|
+
spec.summary = %q{Nfe.io's ruby gem}
|
13
|
+
spec.description = %q{Nfe.io's ruby gem}
|
14
|
+
spec.homepage = "https://pluga.co/"
|
15
|
+
spec.license = "MIT"
|
16
|
+
|
17
|
+
# Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
|
18
|
+
# delete this section to allow pushing this gem to any host.
|
19
|
+
# if spec.respond_to?(:metadata)
|
20
|
+
# spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'"
|
21
|
+
# else
|
22
|
+
# raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
|
23
|
+
# end
|
24
|
+
|
25
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
26
|
+
spec.bindir = "exe"
|
27
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
28
|
+
spec.require_paths = ["lib"]
|
29
|
+
|
30
|
+
spec.add_dependency "rest-client", "~> 1.8.0"
|
31
|
+
|
32
|
+
spec.add_development_dependency "bundler", "~> 1.10"
|
33
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
34
|
+
spec.add_development_dependency "rspec"
|
35
|
+
end
|
metadata
ADDED
@@ -0,0 +1,128 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: nfe-io
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.3
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ricardo Caldeira
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-09-24 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rest-client
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.8.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.8.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.10'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.10'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '10.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '10.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
description: Nfe.io's ruby gem
|
70
|
+
email:
|
71
|
+
- ricardo.nezz@gmail.com
|
72
|
+
executables: []
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- ".gitignore"
|
77
|
+
- ".rspec"
|
78
|
+
- ".ruby-gemset"
|
79
|
+
- ".ruby-version"
|
80
|
+
- ".travis.yml"
|
81
|
+
- Gemfile
|
82
|
+
- LICENSE.txt
|
83
|
+
- README.md
|
84
|
+
- Rakefile
|
85
|
+
- bin/console
|
86
|
+
- bin/setup
|
87
|
+
- lib/data/ssl-bundle.crt
|
88
|
+
- lib/nfe.rb
|
89
|
+
- lib/nfe/api_operations/create.rb
|
90
|
+
- lib/nfe/api_operations/delete.rb
|
91
|
+
- lib/nfe/api_operations/list.rb
|
92
|
+
- lib/nfe/api_operations/retrieve.rb
|
93
|
+
- lib/nfe/api_operations/update.rb
|
94
|
+
- lib/nfe/api_resource.rb
|
95
|
+
- lib/nfe/company.rb
|
96
|
+
- lib/nfe/errors/nfe_error.rb
|
97
|
+
- lib/nfe/legal_people.rb
|
98
|
+
- lib/nfe/natural_people.rb
|
99
|
+
- lib/nfe/nfe_object.rb
|
100
|
+
- lib/nfe/service_invoice.rb
|
101
|
+
- lib/nfe/util.rb
|
102
|
+
- lib/nfe/version.rb
|
103
|
+
- nfe.gemspec
|
104
|
+
homepage: https://pluga.co/
|
105
|
+
licenses:
|
106
|
+
- MIT
|
107
|
+
metadata: {}
|
108
|
+
post_install_message:
|
109
|
+
rdoc_options: []
|
110
|
+
require_paths:
|
111
|
+
- lib
|
112
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - ">="
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '0'
|
117
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
118
|
+
requirements:
|
119
|
+
- - ">="
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
version: '0'
|
122
|
+
requirements: []
|
123
|
+
rubyforge_project:
|
124
|
+
rubygems_version: 2.4.8
|
125
|
+
signing_key:
|
126
|
+
specification_version: 4
|
127
|
+
summary: Nfe.io's ruby gem
|
128
|
+
test_files: []
|