nfedobrasil 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0a6fa7a2917acf11aa81a8a8f666fcb09839c7dc
4
- data.tar.gz: 798be60e91c918f787a86ebcad4cbf1d7010f481
3
+ metadata.gz: 20a10e8c7e6a1004e4802a8d7e6b58ff54ff0d94
4
+ data.tar.gz: ce55f2ff9ccbf6cad174a60dba72f51333c258fc
5
5
  SHA512:
6
- metadata.gz: 52a6cbaa972be4bbebd31e0b283e21fc6dd7879f4cfd38e6967362bc088007282e1be7671f0ae7960732eb19af8587a9f106a8362e783fb33c15f141810ee128
7
- data.tar.gz: 4914ff9f7ac7435ab7dfba61dd2e65ccb79449004edb0ea4db64317539cde3715978e89bfa3187b53aa47b0f121aa099c7895aeb66ccd1c87b3b86afb2ed7b8f
6
+ metadata.gz: 79e4edf72f750d8da29471d4e8f46fc9fb45d787b8220e294709f0742cdcb4fec137e5c617207fdf99e42feb52ed00d7f0c7e1f2f7c46c52b05ce140e274abcf
7
+ data.tar.gz: 5a4351c0b9851d83304250a793243dd02a4ade019f54a32931bb635b9d2cb4b51099178dcf955083bca63afb5b76f934b42bbca62b4b2655c8635b8dfcc24e50
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Nfedobrasil
1
+ # NfedoBrasil
2
2
 
3
3
  Gem to interact with NFEdoBrasil SOAP API.
4
4
 
@@ -20,7 +20,23 @@ Or install it yourself as:
20
20
 
21
21
  ## Usage
22
22
 
23
- TODO
23
+ This gem is just a wrapper around [Savon](http://savonrb.com/) which [monkey
24
+ patches](https://en.wikipedia.org/wiki/Monkey_patch) (yes... I know =[) both Savon and
25
+ [HTTPI](http://httpirb.com/) so that they can work with P12 authentication
26
+ required by NFEdoBrasil.
27
+
28
+ ```ruby
29
+ require 'nfedobrasil'
30
+ # For dev mode access:
31
+ client = NfedoBrasil.client({ssl_plcs_file: './hml_natue.p12', ssl_plcs_password: 'y7bYntT3F'}, true)
32
+
33
+ # For production access:
34
+ client = NfedoBrasil.client({ssl_plcs_file: './hml_natue.p12', ssl_plcs_password: 'y7bYntT3F'})
35
+
36
+ # Now just consume the API using Savon
37
+ client.operations
38
+ # => [:enviar, :analisa_n_fe, :consultar, :consulta_token, :cancelar, :carta_correcao, :inutilizar, :consultar_cadastro_sefaz, :consultar_nota_sefaz, :status_servico, :retorna_danfe, :retorna_chaves, :retorna_xmls, :insere_emissor, :insere_armazenamento, :existe_emissor, :existe_armazenamento]
39
+ ```
24
40
 
25
41
  ## Contributing
26
42
 
data/Rakefile CHANGED
@@ -1,2 +1,11 @@
1
- require "bundler/gem_tasks"
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
2
3
 
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :coverage do
7
+ ENV['COVERAGE'] = 'true'
8
+ Rake::Task['spec'].execute
9
+ end
10
+
11
+ task :default => :spec
@@ -1,5 +1,16 @@
1
- require "nfedobrasil/version"
1
+ require 'savon'
2
+ require_relative 'nfedobrasil/monkey_patches'
3
+ require_relative 'nfedobrasil/version'
2
4
 
3
- module Nfedobrasil
4
- # Your code goes here...
5
+ module NfedoBrasil
6
+ def self.client(config = {}, dev_mode = false)
7
+ config = {
8
+ wsdl: (dev_mode ?
9
+ 'https://dev.sistema.nfeplace.com.br/services/emissor?wsdl' :
10
+ 'https://sistema.nfeplace.com.br/services/emissor?wsdl'),
11
+ ssl_verify_mode: :none
12
+ }.merge config
13
+
14
+ Savon.client config
15
+ end
5
16
  end
@@ -0,0 +1,59 @@
1
+ # Add P12 support for savon
2
+ # Inspiration: https://gist.github.com/phaus/3313756
3
+ module Savon
4
+ class GlobalOptions
5
+ def ssl_plcs_file(ssl_plcs_file)
6
+ @options[:ssl_plcs_file] = ssl_plcs_file
7
+ end
8
+
9
+ def ssl_plcs_password(ssl_plcs_password)
10
+ @options[:ssl_plcs_password] = ssl_plcs_password
11
+ end
12
+ end
13
+
14
+ class HTTPRequest
15
+ def configure_ssl
16
+ @http_request.auth.ssl.ssl_version = @globals[:ssl_version] if @globals.include? :ssl_version
17
+ @http_request.auth.ssl.verify_mode = @globals[:ssl_verify_mode] if @globals.include? :ssl_verify_mode
18
+
19
+ @http_request.auth.ssl.cert_key_file = @globals[:ssl_cert_key_file] if @globals.include? :ssl_cert_key_file
20
+ @http_request.auth.ssl.cert_key = @globals[:ssl_cert_key] if @globals.include? :ssl_cert_key
21
+ @http_request.auth.ssl.cert_file = @globals[:ssl_cert_file] if @globals.include? :ssl_cert_file
22
+ @http_request.auth.ssl.cert = @globals[:ssl_cert] if @globals.include? :ssl_cert
23
+ @http_request.auth.ssl.ca_cert_file = @globals[:ssl_ca_cert_file] if @globals.include? :ssl_ca_cert_file
24
+ @http_request.auth.ssl.ca_cert = @globals[:ssl_ca_cert] if @globals.include? :ssl_ca_cert
25
+
26
+ @http_request.auth.ssl.cert_key_password = @globals[:ssl_cert_key_password] if @globals.include? :ssl_cert_key_password
27
+
28
+ if (@globals.include?(:ssl_plcs_file) and @globals.include?(:ssl_plcs_password))
29
+ @http_request.auth.ssl.plcs_file @globals[:ssl_plcs_file], @globals[:ssl_plcs_password]
30
+ end
31
+ end
32
+ end
33
+ end
34
+
35
+ module HTTPI
36
+ module Auth
37
+ class SSL
38
+ def plcs_file(file, password)
39
+ @pkcs12 = OpenSSL::PKCS12.new(File.read(file), password)
40
+ end
41
+
42
+ def cert
43
+ if @pkcs12
44
+ @cert ||= @pkcs12.certificate
45
+ else
46
+ @cert ||= (OpenSSL::X509::Certificate.new File.read(cert_file) if cert_file)
47
+ end
48
+ end
49
+
50
+ def cert_key
51
+ if @pkcs12
52
+ @cert_key ||= @pkcs12.key
53
+ else
54
+ @cert_key ||= (OpenSSL::PKey.read(File.read(cert_key_file), cert_key_password) if cert_key_file)
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -1,3 +1,3 @@
1
- module Nfedobrasil
2
- VERSION = "0.0.1"
1
+ module NfedoBrasil
2
+ VERSION = '0.1.0'
3
3
  end
@@ -4,20 +4,24 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'nfedobrasil/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.name = "nfedobrasil"
8
- spec.version = Nfedobrasil::VERSION
9
- spec.authors = ["Eduardo Sampaio"]
10
- spec.email = ["eduardo@sampa.io"]
7
+ spec.name = 'nfedobrasil'
8
+ spec.version = NfedoBrasil::VERSION
9
+ spec.authors = ['Eduardo Sampaio']
10
+ spec.email = ['eduardo@sampa.io']
11
11
  spec.summary = %q{Gem to interact with NFEdoBrasil SOAP API.}
12
12
  spec.description = %q{Gem to interact with NFEdoBrasil SOAP API. Enables creation, consultation and import of invoices.}
13
- spec.homepage = "https://github.com/natuelabs/nfedobrasil"
14
- spec.license = "MIT"
13
+ spec.homepage = 'https://github.com/natuelabs/nfedobrasil'
14
+ spec.license = 'MIT'
15
15
 
16
16
  spec.files = `git ls-files -z`.split("\x0")
17
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
- spec.require_paths = ["lib"]
19
+ spec.require_paths = ['lib']
20
20
 
21
- spec.add_development_dependency "bundler", "~> 1.7"
22
- spec.add_development_dependency "rake", "~> 10.0"
21
+ spec.add_dependency 'savon', '~> 2.11.1'
22
+
23
+ spec.add_development_dependency 'bundler', '~> 1.7'
24
+ spec.add_development_dependency 'rake', '~> 10.0'
25
+ spec.add_development_dependency 'rspec', '~> 3.2.0'
26
+ spec.add_development_dependency 'simplecov', '~> 0.10'
23
27
  end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ describe NfedoBrasil do
4
+ describe '#client' do
5
+ subject { NfedoBrasil.client({ssl_plcs_file: File.dirname(__FILE__) + '/../support/certificate.p12', ssl_plcs_password: 'nughee1O'}) }
6
+
7
+ it 'returns a Savon client' do
8
+ expect(subject).to be_a Savon::Client
9
+ expect(subject.globals[:wsdl]).to match(/https:\/\/sistema/)
10
+ end
11
+
12
+ it 'fails because cert is invalid' do
13
+ expect{subject.operations}.to raise_error(HTTPI::SSLError)
14
+ end
15
+ end
16
+
17
+ describe 'dev mode' do
18
+ subject { NfedoBrasil.client({ssl_plcs_file: File.dirname(__FILE__) + '/../support/certificate.p12', ssl_plcs_password: 'nughee1O'}, true) }
19
+
20
+ it 'handles dev mode properly' do
21
+ expect(subject.globals[:wsdl]).to match(/https:\/\/dev.sistema/)
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,15 @@
1
+ require 'simplecov'
2
+
3
+ SimpleCov.start do
4
+ add_filter '/spec'
5
+ end if ENV['COVERAGE']
6
+
7
+ require File.expand_path('../../lib/nfedobrasil', __FILE__)
8
+
9
+ RSpec.configure do |config|
10
+ config.expect_with :rspec do |c|
11
+ c.syntax = :expect
12
+ end
13
+
14
+ config.order = 'random'
15
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nfedobrasil
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eduardo Sampaio
@@ -10,6 +10,20 @@ bindir: bin
10
10
  cert_chain: []
11
11
  date: 2015-06-16 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: savon
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 2.11.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 2.11.1
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -38,6 +52,34 @@ dependencies:
38
52
  - - "~>"
39
53
  - !ruby/object:Gem::Version
40
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: 3.2.0
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 3.2.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: simplecov
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.10'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.10'
41
83
  description: Gem to interact with NFEdoBrasil SOAP API. Enables creation, consultation
42
84
  and import of invoices.
43
85
  email:
@@ -52,8 +94,12 @@ files:
52
94
  - README.md
53
95
  - Rakefile
54
96
  - lib/nfedobrasil.rb
97
+ - lib/nfedobrasil/monkey_patches.rb
55
98
  - lib/nfedobrasil/version.rb
56
99
  - nfedobrasil.gemspec
100
+ - spec/lib/nfedobrasil_spec.rb
101
+ - spec/spec_helper.rb
102
+ - spec/support/certificate.p12
57
103
  homepage: https://github.com/natuelabs/nfedobrasil
58
104
  licenses:
59
105
  - MIT
@@ -74,8 +120,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
74
120
  version: '0'
75
121
  requirements: []
76
122
  rubyforge_project:
77
- rubygems_version: 2.2.2
123
+ rubygems_version: 2.4.5
78
124
  signing_key:
79
125
  specification_version: 4
80
126
  summary: Gem to interact with NFEdoBrasil SOAP API.
81
- test_files: []
127
+ test_files:
128
+ - spec/lib/nfedobrasil_spec.rb
129
+ - spec/spec_helper.rb
130
+ - spec/support/certificate.p12