br_nfe 1.1.0 → 2.0.0
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 +4 -4
- data/.gitignore +5 -0
- data/.travis.yml +8 -0
- data/Gemfile +16 -0
- data/Gemfile.lock +27 -3
- data/LICENSE +1 -1
- data/README.markdown +10 -12
- data/Rakefile +13 -0
- data/br_nfe.gemspec +18 -21
- data/lib/br_nfe/active_model_base.rb +7 -1
- data/lib/br_nfe/base.rb +175 -37
- data/lib/br_nfe/endereco.rb +7 -1
- data/lib/br_nfe/helper/have_rps.rb +1 -1
- data/lib/br_nfe/helper/values_ts/service_v1.rb +313 -0
- data/lib/br_nfe/response/service/build_response.rb +286 -0
- data/lib/br_nfe/response/service/default.rb +185 -0
- data/lib/br_nfe/{servico/response → response/service}/nota_fiscal.rb +11 -10
- data/lib/br_nfe/response/service/paths/base.rb +93 -0
- data/lib/br_nfe/response/service/paths/v1/servico_cancelar_nfse_resposta.rb +22 -0
- data/lib/br_nfe/response/service/paths/v1/servico_consultar_lote_rps_resposta.rb +25 -0
- data/lib/br_nfe/response/service/paths/v1/servico_consultar_nfse_resposta.rb +25 -0
- data/lib/br_nfe/response/service/paths/v1/servico_consultar_nfse_rps_resposta.rb +25 -0
- data/lib/br_nfe/response/service/paths/v1/servico_consultar_situacao_lote_rps_resposta.rb +31 -0
- data/lib/br_nfe/response/service/paths/v1/servico_enviar_lote_rps_resposta.rb +36 -0
- data/lib/br_nfe/response/service/paths/v1/tc_nfse.rb +127 -0
- data/lib/br_nfe/service/base.rb +59 -0
- data/lib/br_nfe/service/betha/base.rb +8 -0
- data/lib/br_nfe/service/betha/v1/cancelamento_nfs.rb +39 -0
- data/lib/br_nfe/service/betha/v1/consulta_lote_rps.rb +34 -0
- data/lib/br_nfe/service/betha/v1/consulta_nfs_por_rps.rb +32 -0
- data/lib/br_nfe/service/betha/v1/consulta_nfse.rb +32 -0
- data/lib/br_nfe/service/betha/v1/consulta_situacao_lote_rps.rb +30 -0
- data/lib/br_nfe/service/betha/v1/gateway.rb +21 -0
- data/lib/br_nfe/service/betha/v1/recepcao_lote_rps.rb +37 -0
- data/lib/br_nfe/service/betha/v1/response_paths/servico_consultar_lote_rps_resposta.rb +19 -0
- data/lib/br_nfe/service/betha/v1/response_paths/servico_consultar_nfse_resposta.rb +17 -0
- data/lib/br_nfe/service/betha/v1/response_paths/servico_consultar_nfse_rps_resposta.rb +17 -0
- data/lib/br_nfe/service/concerns/rules/cancelamento_nfs.rb +20 -0
- data/lib/br_nfe/service/concerns/rules/consulta_nfs_por_rps.rb +18 -0
- data/lib/br_nfe/service/concerns/rules/consulta_nfse.rb +29 -0
- data/lib/br_nfe/service/concerns/rules/recepcao_lote_rps.rb +50 -0
- data/lib/br_nfe/{servico → service}/intermediario.rb +1 -1
- data/lib/br_nfe/service/item.rb +70 -0
- data/lib/br_nfe/service/rps.rb +231 -0
- data/lib/br_nfe/service/sc/florianopolis/base.rb +25 -0
- data/lib/br_nfe/service/sc/florianopolis/cancellation.rb +30 -0
- data/lib/br_nfe/service/sc/florianopolis/emission_rps.rb +19 -0
- data/lib/br_nfe/service/sc/florianopolis/xml/_address.xml.slim +21 -0
- data/lib/br_nfe/service/sc/florianopolis/xml/_contact.xml.slim +3 -0
- data/lib/br_nfe/service/sc/florianopolis/xml/_service_item.xml.slim +9 -0
- data/lib/br_nfe/service/sc/florianopolis/xml/cancellation.xml.slim +6 -0
- data/lib/br_nfe/service/sc/florianopolis/xml/inf_requisicao.xml.slim +55 -0
- data/lib/br_nfe/service/sc/gaspar/cancela_nfse.rb +13 -0
- data/lib/br_nfe/service/sc/gaspar/consulta_lote_rps.rb +13 -0
- data/lib/br_nfe/service/sc/gaspar/consulta_nfs_por_rps.rb +13 -0
- data/lib/br_nfe/service/sc/gaspar/consulta_nfse.rb +17 -0
- data/lib/br_nfe/service/sc/gaspar/consulta_situacao_lote_rps.rb +13 -0
- data/lib/br_nfe/service/sc/gaspar/recepcao_lote_rps.rb +13 -0
- data/lib/br_nfe/service/sc/gaspar/recepcao_lote_rps_limitado.rb +13 -0
- data/lib/br_nfe/service/thema/v1/base.rb +55 -0
- data/lib/br_nfe/service/thema/v1/cancela_nfse.rb +48 -0
- data/lib/br_nfe/service/thema/v1/consulta_lote_rps.rb +49 -0
- data/lib/br_nfe/service/thema/v1/consulta_nfs_por_rps.rb +48 -0
- data/lib/br_nfe/service/thema/v1/consulta_nfse.rb +47 -0
- data/lib/br_nfe/service/thema/v1/consulta_situacao_lote_rps.rb +46 -0
- data/lib/br_nfe/service/thema/v1/recepcao_lote_rps.rb +51 -0
- data/lib/br_nfe/service/thema/v1/recepcao_lote_rps_limitado.rb +30 -0
- data/lib/br_nfe/service/xml/v1/_tc_contato.xml.slim +7 -0
- data/lib/br_nfe/service/xml/v1/_tc_cpf_cnpj.xml.slim +5 -0
- data/lib/br_nfe/service/xml/v1/_tc_dados_construcao_civil.xml.slim +2 -0
- data/lib/br_nfe/service/xml/v1/_tc_dados_prestador.xml.slim +15 -0
- data/lib/br_nfe/service/xml/v1/_tc_dados_servico.xml.slim +14 -0
- data/lib/br_nfe/service/xml/v1/_tc_dados_tomador.xml.slim +15 -0
- data/lib/br_nfe/service/xml/v1/_tc_endereco.xml.slim +13 -0
- data/lib/br_nfe/service/xml/v1/_tc_identificacao_intermediario_servico.xml.slim +7 -0
- data/lib/br_nfe/service/xml/v1/_tc_identificacao_nfse.xml.slim +7 -0
- data/lib/br_nfe/service/xml/v1/_tc_identificacao_orgao_gerador.xml.slim +8 -0
- data/lib/br_nfe/service/xml/v1/_tc_identificacao_prestador.xml.slim +3 -0
- data/lib/br_nfe/service/xml/v1/_tc_identificacao_rps.xml.slim +16 -0
- data/lib/br_nfe/service/xml/v1/_tc_identificacao_tomador.xml.slim +4 -0
- data/lib/br_nfe/service/xml/v1/_tc_inf_pedido_cancelamento.xml.slim +4 -0
- data/lib/br_nfe/service/xml/v1/_tc_inf_rps.xml.slim +47 -0
- data/lib/br_nfe/service/xml/v1/_tc_lote_rps.xml.slim +9 -0
- data/lib/br_nfe/service/xml/v1/_tc_pedido_cancelamento.xml.slim +4 -0
- data/lib/br_nfe/service/xml/v1/_tc_rps.xml.slim +8 -0
- data/lib/br_nfe/service/xml/v1/_tc_valores.xml.slim +48 -0
- data/lib/br_nfe/service/xml/v1/servico_cancelar_nfse_envio.xml.slim +9 -0
- data/lib/br_nfe/service/xml/v1/servico_consultar_lote_rps_envio.xml.slim +4 -0
- data/lib/br_nfe/service/xml/v1/servico_consultar_nfse_envio.xml.slim +19 -0
- data/lib/br_nfe/service/xml/v1/servico_consultar_nfse_rps_envio.xml.slim +5 -0
- data/lib/br_nfe/service/xml/v1/servico_consultar_situacao_lote_rps_envio.xml.slim +4 -0
- data/lib/br_nfe/service/xml/v1/servico_enviar_lote_rps_envio.xml.slim +9 -0
- data/lib/br_nfe/version.rb +2 -2
- data/lib/br_nfe/xml/_signed_info_sh1.xml.slim +9 -0
- data/lib/br_nfe/xml/signature_sh1.xml.slim +12 -0
- data/lib/br_nfe/xml/soap_env.xml.slim +3 -0
- data/lib/br_nfe.rb +72 -20
- data/test/br_nfe/base_test.rb +257 -108
- data/test/br_nfe/helper/have_intermediario_test.rb +2 -2
- data/test/br_nfe/helper/have_rps_test.rb +4 -4
- data/test/br_nfe/response/service/build_response_test.rb +377 -0
- data/test/br_nfe/response/service/default_test.rb +218 -0
- data/test/br_nfe/{servico/response → response/service}/nota_fiscal_test.rb +2 -2
- data/test/br_nfe/response/service/paths/base_test.rb +199 -0
- data/test/br_nfe/response/service/paths/v1/servico_cancelar_nfse_resposta_test.rb +25 -0
- data/test/br_nfe/response/service/paths/v1/servico_consultar_lote_rps_resposta_test.rb +30 -0
- data/test/br_nfe/response/service/paths/v1/servico_consultar_nfse_resposta_test.rb +30 -0
- data/test/br_nfe/response/service/paths/v1/servico_consultar_nfse_rps_resposta_test.rb +30 -0
- data/test/br_nfe/response/service/paths/v1/servico_consultar_situacao_lote_rps_resposta_test.rb +30 -0
- data/test/br_nfe/response/service/paths/v1/servico_enviar_lote_rps_resposta_test.rb +34 -0
- data/test/br_nfe/response/service/paths/v1/tc_nfse_test.rb +122 -0
- data/test/br_nfe/service/base_test.rb +138 -0
- data/test/br_nfe/service/betha/base_test.rb +9 -0
- data/test/br_nfe/service/betha/v1/cancelamento_nfs_test.rb +60 -0
- data/test/br_nfe/service/betha/v1/consulta_lote_rps_test.rb +55 -0
- data/test/br_nfe/service/betha/v1/consulta_nfs_por_rps_test.rb +55 -0
- data/test/br_nfe/service/betha/v1/consulta_nfse_test.rb +53 -0
- data/test/br_nfe/service/betha/v1/consulta_situacao_lote_rps_test.rb +49 -0
- data/test/br_nfe/service/betha/v1/gateway_test.rb +35 -0
- data/test/br_nfe/service/betha/v1/recepcao_lote_rps_test.rb +84 -0
- data/test/br_nfe/service/betha/v1/response_paths/servico_consultar_lote_rps_resposta_test.rb +16 -0
- data/test/br_nfe/service/betha/v1/response_paths/servico_consultar_nfse_resposta_test.rb +16 -0
- data/test/br_nfe/service/betha/v1/response_paths/servico_consultar_nfse_rps_resposta_test.rb +16 -0
- data/test/br_nfe/service/betha/v1/xsd/TiposNFe_v01.xsd +583 -0
- data/test/br_nfe/service/betha/v1/xsd/nfse_v01.xsd +652 -0
- data/test/br_nfe/service/betha/v1/xsd/servico_cancelar_nfse_envio_v01.xsd +17 -0
- data/test/br_nfe/service/betha/v1/xsd/servico_consultar_lote_rps_envio_v01.xsd +16 -0
- data/test/br_nfe/service/betha/v1/xsd/servico_consultar_nfse_envio_v01.xsd +28 -0
- data/test/br_nfe/service/betha/v1/xsd/servico_consultar_nfse_rps_envio_v01.xsd +16 -0
- data/test/br_nfe/service/betha/v1/xsd/servico_consultar_situacao_lote_rps_envio_v01.xsd +16 -0
- data/test/br_nfe/service/betha/v1/xsd/servico_enviar_lote_rps_envio_v01.xsd +17 -0
- data/test/br_nfe/service/betha/v1/xsd/xmldsig-core-schema.xsd +308 -0
- data/test/br_nfe/service/betha/v1/xsd/xmldsig-core-schema_v01.xsd +95 -0
- data/test/br_nfe/service/concerns/rules/cancelamento_nfs_test.rb +15 -0
- data/test/br_nfe/service/concerns/rules/consulta_nfs_por_rps_test.rb +36 -0
- data/test/br_nfe/service/concerns/rules/consulta_nfse_test.rb +42 -0
- data/test/br_nfe/{servico/base_test.rb → service/concerns/rules/recepcao_lote_rps_test.rb} +12 -4
- data/test/br_nfe/{servico → service}/intermediario_test.rb +1 -1
- data/test/br_nfe/service/item_test.rb +34 -0
- data/test/br_nfe/{servico → service}/rps_test.rb +191 -43
- data/test/br_nfe/service/sc/florianopolis/XSD/TiposNFSe_v2.0.xsd +863 -0
- data/test/br_nfe/service/sc/florianopolis/XSD/xmldsig-core-schema.xsd +309 -0
- data/test/br_nfe/service/sc/florianopolis/base_test.rb +20 -0
- data/test/br_nfe/service/sc/florianopolis/cancellation_test.rb +36 -0
- data/test/br_nfe/service/sc/florianopolis/emission_rps_test.rb +145 -0
- data/test/br_nfe/service/sc/gaspar/cancela_nfse_test.rb +21 -0
- data/test/br_nfe/service/sc/gaspar/consulta_nfs_por_rps_test.rb +21 -0
- data/test/br_nfe/service/sc/gaspar/consulta_nfse_test.rb +21 -0
- data/test/br_nfe/service/sc/gaspar/consulta_situacao_lote_rps_test.rb +21 -0
- data/test/br_nfe/service/sc/gaspar/recepcao_lote_rps_limitado_test.rb +22 -0
- data/test/br_nfe/service/sc/gaspar/recepcao_lote_rps_test.rb +22 -0
- data/test/br_nfe/service/thema/v1/base_test.rb +65 -0
- data/test/br_nfe/service/thema/v1/cancela_nfse_test.rb +56 -0
- data/test/br_nfe/service/thema/v1/consulta_lote_rps_test.rb +47 -0
- data/test/br_nfe/service/thema/v1/consulta_nfs_por_rps_test.rb +50 -0
- data/test/br_nfe/service/thema/v1/consulta_nfse_test.rb +50 -0
- data/test/br_nfe/service/thema/v1/consulta_situacao_lote_rps_test.rb +47 -0
- data/test/br_nfe/service/thema/v1/recepcao_lote_rps_test.rb +62 -0
- data/test/br_nfe/service/thema/v1/recepcao_lote_rps_test_limitado.rb +50 -0
- data/test/br_nfe/service/thema/v1/xsd/nfse.xsd +656 -0
- data/test/br_nfe/service/thema/v1/xsd/xmldsig-core-schema20020212.xsd +318 -0
- data/test/br_nfe/service/xsd/v1/nfse.xsd +779 -0
- data/test/br_nfe/service/xsd/v1/xmldsig-core-schema20020212.xsd +316 -0
- data/test/cert.pfx +0 -0
- data/test/factories/base.rb +2 -0
- data/test/factories/destinatario.rb +3 -3
- data/test/factories/response/service/build_response.rb +5 -0
- data/test/factories/response/service/default.rb +10 -0
- data/test/factories/{servico/response → response/service}/nota_fiscal.rb +9 -9
- data/test/factories/service/base.rb +6 -0
- data/test/factories/service/betha/base.rb +4 -0
- data/test/factories/service/betha/v1/cancelamento_nfs.rb +9 -0
- data/test/factories/{servico → service}/betha/v1/consulta_lote_rps.rb +2 -2
- data/test/factories/{servico → service}/betha/v1/consulta_nfs_por_rps.rb +1 -1
- data/test/factories/service/betha/v1/consulta_nfse.rb +8 -0
- data/test/factories/{servico → service}/betha/v1/consulta_situacao_lote_rps.rb +2 -2
- data/test/factories/{servico → service}/betha/v1/gateway.rb +1 -1
- data/test/factories/service/betha/v1/recepcao_lote_rps.rb +8 -0
- data/test/factories/{servico → service}/intermediario.rb +2 -2
- data/test/factories/service/item.rb +12 -0
- data/test/factories/service/rps.rb +50 -0
- data/test/factories/service/sc/florianopolis/base.rb +5 -0
- data/test/factories/service/sc/florianopolis/cancellation.rb +7 -0
- data/test/factories/service/sc/florianopolis/emission_rps.rb +7 -0
- data/test/factories/service/sc/gaspar/cancela_nfse.rb +9 -0
- data/test/factories/service/sc/gaspar/consulta_lote_rps.rb +7 -0
- data/test/factories/service/sc/gaspar/consulta_nfs_por_rps.rb +6 -0
- data/test/factories/service/sc/gaspar/consulta_nfse.rb +8 -0
- data/test/factories/service/sc/gaspar/consulta_situacao_lote_rps.rb +6 -0
- data/test/factories/service/sc/gaspar/recepcao_lote_rps.rb +9 -0
- data/test/factories/service/sc/gaspar/recepcao_lote_rps_limitado.rb +9 -0
- data/test/factories/service/thema/v1/base.rb +7 -0
- data/test/factories/service/thema/v1/cancela_nfse.rb +9 -0
- data/test/factories/service/thema/v1/consulta_lote_rps.rb +7 -0
- data/test/factories/service/thema/v1/consulta_nfs_por_rps.rb +6 -0
- data/test/factories/service/thema/v1/consulta_nfse.rb +8 -0
- data/test/factories/service/thema/v1/consulta_situacao_lote_rps.rb +6 -0
- data/test/factories/service/thema/v1/recepcao_lote_rps.rb +9 -0
- data/test/factories/service/thema/v1/recepcao_lote_rps_limitado.rb +8 -0
- data/test/test_helper.rb +42 -0
- metadata +338 -121
- data/lib/br_nfe/servico/base.rb +0 -35
- data/lib/br_nfe/servico/betha/base.rb +0 -85
- data/lib/br_nfe/servico/betha/build_response.rb +0 -141
- data/lib/br_nfe/servico/betha/v1/build_response.rb +0 -121
- data/lib/br_nfe/servico/betha/v1/cancelamento_nfs.rb +0 -52
- data/lib/br_nfe/servico/betha/v1/consulta_lote_rps.rb +0 -33
- data/lib/br_nfe/servico/betha/v1/consulta_nfs_por_rps.rb +0 -37
- data/lib/br_nfe/servico/betha/v1/consulta_nfse.rb +0 -51
- data/lib/br_nfe/servico/betha/v1/consulta_situacao_lote_rps.rb +0 -18
- data/lib/br_nfe/servico/betha/v1/gateway.rb +0 -125
- data/lib/br_nfe/servico/betha/v1/recepcao_lote_rps.rb +0 -97
- data/lib/br_nfe/servico/betha/v2/build_response.rb +0 -159
- data/lib/br_nfe/servico/betha/v2/cancelamento_nfs.rb +0 -30
- data/lib/br_nfe/servico/betha/v2/consulta_lote_rps.rb +0 -30
- data/lib/br_nfe/servico/betha/v2/consulta_nfse_por_rps.rb +0 -27
- data/lib/br_nfe/servico/betha/v2/envio_lote_rps_sincrono.rb +0 -30
- data/lib/br_nfe/servico/betha/v2/gateway.rb +0 -230
- data/lib/br_nfe/servico/betha/v2/gera_nfse.rb +0 -30
- data/lib/br_nfe/servico/betha/v2/recepcao_lote_rps.rb +0 -52
- data/lib/br_nfe/servico/betha/v2/substituicao_nfse.rb +0 -43
- data/lib/br_nfe/servico/response/default.rb +0 -34
- data/lib/br_nfe/servico/rps.rb +0 -108
- data/test/br_nfe/servico/betha/base_test.rb +0 -135
- data/test/br_nfe/servico/betha/v1/build_response_test.rb +0 -557
- data/test/br_nfe/servico/betha/v1/cancelamento_nfs_test.rb +0 -72
- data/test/br_nfe/servico/betha/v1/consulta_lote_rps_test.rb +0 -46
- data/test/br_nfe/servico/betha/v1/consulta_nfs_por_rps_test.rb +0 -68
- data/test/br_nfe/servico/betha/v1/consulta_nfse_test.rb +0 -74
- data/test/br_nfe/servico/betha/v1/consulta_situacao_lote_rps_test.rb +0 -27
- data/test/br_nfe/servico/betha/v1/gateway_test.rb +0 -151
- data/test/br_nfe/servico/betha/v1/recepcao_lote_rps_test.rb +0 -249
- data/test/br_nfe/servico/betha/v2/cancelamento_nfs_test.rb +0 -44
- data/test/br_nfe/servico/betha/v2/consulta_lote_rps_test.rb +0 -38
- data/test/br_nfe/servico/betha/v2/consulta_nfse_por_rps_test.rb +0 -36
- data/test/br_nfe/servico/betha/v2/envio_lote_rps_sincrono_test.rb +0 -51
- data/test/br_nfe/servico/betha/v2/gateway_test.rb +0 -372
- data/test/br_nfe/servico/betha/v2/gera_nfse_test.rb +0 -62
- data/test/br_nfe/servico/betha/v2/recepcao_lote_rps_test.rb +0 -108
- data/test/br_nfe/servico/betha/v2/substituicao_nfse_test.rb +0 -84
- data/test/br_nfe/servico/response/default_test.rb +0 -54
- data/test/factories/servico/base.rb +0 -5
- data/test/factories/servico/betha/base.rb +0 -5
- data/test/factories/servico/betha/v1/build_response.rb +0 -6
- data/test/factories/servico/betha/v1/cancelamento_nfs.rb +0 -7
- data/test/factories/servico/betha/v1/consulta_nfse.rb +0 -8
- data/test/factories/servico/betha/v1/recepcao_lote_rps.rb +0 -6
- data/test/factories/servico/betha/v2/cancelamento_nfs.rb +0 -7
- data/test/factories/servico/betha/v2/consulta_lote_rps.rb +0 -6
- data/test/factories/servico/betha/v2/consulta_nfse_por_rps.rb +0 -6
- data/test/factories/servico/betha/v2/envio_lote_rps_sincrono.rb +0 -5
- data/test/factories/servico/betha/v2/gateway.rb +0 -5
- data/test/factories/servico/betha/v2/gera_nfse.rb +0 -6
- data/test/factories/servico/betha/v2/recepcao_lote_rps.rb +0 -5
- data/test/factories/servico/betha/v2/substituicao_nfse.rb +0 -8
- data/test/factories/servico/response/default.rb +0 -10
- data/test/factories/servico/rps.rb +0 -44
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: dcf8317971e11086557fdb6a9041f0e870acaeaa
|
|
4
|
+
data.tar.gz: c5ef4f3c19e466e9fb4d1ffa62478075355c9d97
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d553904a62f2c4aa1c52d8d6a6c963477462da19f2938baa27c51ec282f97a8ab04ed04c11678efee48a40134016b84353792d035f66024b746c941154c50441
|
|
7
|
+
data.tar.gz: ced46055c7c90db5905f233794d096317ee3a8d74be72cc4346c4f1a308f47544ee0ddb077c5313fa78a416b53b7bfbbab4a1bbf2da36583b2fa3f47d071fd6c
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
source 'http://rubygems.org'
|
|
2
|
+
|
|
3
|
+
gemspec
|
|
4
|
+
|
|
5
|
+
group :test do
|
|
6
|
+
# gem "mocha", :require => false
|
|
7
|
+
gem "codeclimate-test-reporter", require: nil
|
|
8
|
+
gem "mocha", :require => false
|
|
9
|
+
gem "factory_girl_rails"
|
|
10
|
+
gem 'minitest-reporters'
|
|
11
|
+
gem 'minitest-rails'
|
|
12
|
+
gem 'minitest-spec-rails'
|
|
13
|
+
gem 'shoulda-matchers', require: false
|
|
14
|
+
gem "minitest-matchers_vaccine"
|
|
15
|
+
gem 'simplecov'
|
|
16
|
+
end
|
data/Gemfile.lock
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
br_nfe (
|
|
4
|
+
br_nfe (2.0.0)
|
|
5
5
|
activemodel (~> 4)
|
|
6
6
|
activesupport (~> 4)
|
|
7
7
|
nokogiri (~> 1.6)
|
|
8
8
|
rake (~> 10)
|
|
9
9
|
savon (~> 2.11)
|
|
10
10
|
signer (~> 1.4)
|
|
11
|
+
slim (~> 3.0)
|
|
12
|
+
slim-rails (~> 3.1)
|
|
11
13
|
|
|
12
14
|
GEM
|
|
13
15
|
remote: http://rubygems.org/
|
|
@@ -55,6 +57,7 @@ GEM
|
|
|
55
57
|
builder (3.2.2)
|
|
56
58
|
codeclimate-test-reporter (0.4.8)
|
|
57
59
|
simplecov (>= 0.7.1, < 1.0.0)
|
|
60
|
+
coderay (1.1.1)
|
|
58
61
|
docile (1.1.5)
|
|
59
62
|
erubis (2.7.0)
|
|
60
63
|
factory_girl (4.5.0)
|
|
@@ -66,8 +69,9 @@ GEM
|
|
|
66
69
|
activesupport (>= 4.1.0)
|
|
67
70
|
gyoku (1.3.1)
|
|
68
71
|
builder (>= 2.1.2)
|
|
69
|
-
httpi (2.4.
|
|
72
|
+
httpi (2.4.2)
|
|
70
73
|
rack
|
|
74
|
+
socksify
|
|
71
75
|
i18n (0.7.0)
|
|
72
76
|
json (1.8.3)
|
|
73
77
|
loofah (2.0.2)
|
|
@@ -75,6 +79,7 @@ GEM
|
|
|
75
79
|
mail (2.6.3)
|
|
76
80
|
mime-types (>= 1.16, < 3)
|
|
77
81
|
metaclass (0.0.4)
|
|
82
|
+
method_source (0.8.2)
|
|
78
83
|
mime-types (2.6.1)
|
|
79
84
|
mini_portile (0.6.2)
|
|
80
85
|
minitest (5.7.0)
|
|
@@ -96,6 +101,10 @@ GEM
|
|
|
96
101
|
nokogiri (1.6.6.2)
|
|
97
102
|
mini_portile (~> 0.6.0)
|
|
98
103
|
nori (2.6.0)
|
|
104
|
+
pry (0.10.2)
|
|
105
|
+
coderay (~> 1.1.0)
|
|
106
|
+
method_source (~> 0.8.1)
|
|
107
|
+
slop (~> 3.4)
|
|
99
108
|
rack (1.6.4)
|
|
100
109
|
rack-test (0.6.3)
|
|
101
110
|
rack (>= 1.0)
|
|
@@ -135,21 +144,32 @@ GEM
|
|
|
135
144
|
wasabi (~> 3.4)
|
|
136
145
|
shoulda-matchers (2.8.0)
|
|
137
146
|
activesupport (>= 3.0.0)
|
|
138
|
-
signer (1.4.
|
|
147
|
+
signer (1.4.3)
|
|
139
148
|
nokogiri (>= 1.5.1)
|
|
140
149
|
simplecov (0.10.0)
|
|
141
150
|
docile (~> 1.1.0)
|
|
142
151
|
json (~> 1.8)
|
|
143
152
|
simplecov-html (~> 0.10.0)
|
|
144
153
|
simplecov-html (0.10.0)
|
|
154
|
+
slim (3.0.7)
|
|
155
|
+
temple (~> 0.7.6)
|
|
156
|
+
tilt (>= 1.3.3, < 2.1)
|
|
157
|
+
slim-rails (3.1.0)
|
|
158
|
+
actionpack (>= 3.1)
|
|
159
|
+
railties (>= 3.1)
|
|
160
|
+
slim (~> 3.0)
|
|
161
|
+
slop (3.6.0)
|
|
162
|
+
socksify (1.7.0)
|
|
145
163
|
sprockets (3.2.0)
|
|
146
164
|
rack (~> 1.0)
|
|
147
165
|
sprockets-rails (2.3.2)
|
|
148
166
|
actionpack (>= 3.0)
|
|
149
167
|
activesupport (>= 3.0)
|
|
150
168
|
sprockets (>= 2.8, < 4.0)
|
|
169
|
+
temple (0.7.7)
|
|
151
170
|
thor (0.19.1)
|
|
152
171
|
thread_safe (0.3.5)
|
|
172
|
+
tilt (2.0.5)
|
|
153
173
|
tzinfo (1.2.2)
|
|
154
174
|
thread_safe (~> 0.1)
|
|
155
175
|
wasabi (3.5.0)
|
|
@@ -168,5 +188,9 @@ DEPENDENCIES
|
|
|
168
188
|
minitest-reporters
|
|
169
189
|
minitest-spec-rails
|
|
170
190
|
mocha
|
|
191
|
+
pry (~> 0.10)
|
|
171
192
|
shoulda-matchers
|
|
172
193
|
simplecov
|
|
194
|
+
|
|
195
|
+
BUNDLED WITH
|
|
196
|
+
1.11.2
|
data/LICENSE
CHANGED
data/README.markdown
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
[](https://travis-ci.org/Brunomm/br_nfe)
|
|
2
2
|
[](https://codeclimate.com/github/Brunomm/br_nfe/coverage)
|
|
3
3
|
[](http://badge.fury.io/rb/br_nfe)
|
|
4
|
-
[](https://gemnasium.com/Brunomm/br_nfe)
|
|
5
|
-
[](https://hakiri.io/github/Brunomm/br_nfe/master)
|
|
6
4
|
[](https://codeclimate.com/github/Brunomm/br_nfe)
|
|
7
5
|
|
|
8
6
|
# **BrNfe**
|
|
@@ -41,8 +39,8 @@ BrNfe::Endereco
|
|
|
41
39
|
BrNfe::Emitente
|
|
42
40
|
BrNfe::Destinatario
|
|
43
41
|
BrNfe::CondicaoPagamento
|
|
44
|
-
BrNfe::
|
|
45
|
-
BrNfe::
|
|
42
|
+
BrNfe::Service::Intermediario
|
|
43
|
+
BrNfe::Service::Rps
|
|
46
44
|
```
|
|
47
45
|
|
|
48
46
|
A seguir um exemplo de cada objeto com valores:
|
|
@@ -143,7 +141,7 @@ end
|
|
|
143
141
|
***
|
|
144
142
|
**Intermediário do serviço**
|
|
145
143
|
```ruby
|
|
146
|
-
@intermediario = BrNfe::
|
|
144
|
+
@intermediario = BrNfe::Service::Intermediario.new({
|
|
147
145
|
cpf_cnpj: '11.111.111/0001-36',
|
|
148
146
|
inscricao_municipal: '3355-6',
|
|
149
147
|
razao_social: "INTERMEDIÁRIO DO SERVIÇO"
|
|
@@ -152,10 +150,10 @@ end
|
|
|
152
150
|
***
|
|
153
151
|
**RPS**
|
|
154
152
|
```ruby
|
|
155
|
-
@rps = BrNfe::
|
|
153
|
+
@rps = BrNfe::Service::Rps.new do |rps|
|
|
156
154
|
rps.destinatario = { ... } # Attributos da class BrNfe::Destinatario
|
|
157
155
|
rps.intermediario do |intermediario|
|
|
158
|
-
.... # Dados da class BrNfe::
|
|
156
|
+
.... # Dados da class BrNfe::Service::Intermediario
|
|
159
157
|
end
|
|
160
158
|
rps.condicao_pagamento = BrNfe::CondicaoPagamento.new(...)
|
|
161
159
|
|
|
@@ -202,14 +200,14 @@ Para todos os Web Services, após instanciados, poderá ser chamado o método `r
|
|
|
202
200
|
|
|
203
201
|
Se desejar, antes de enviar os dados, o objeto poderá ser validado, EX:
|
|
204
202
|
```ruby
|
|
205
|
-
@ws = BrNfe::
|
|
203
|
+
@ws = BrNfe::Service::Betha::V1::ConsultaLoteRps.new(...)
|
|
206
204
|
if @ws.valid?
|
|
207
205
|
@ws.request
|
|
208
206
|
@response = @ws.response
|
|
209
207
|
end
|
|
210
208
|
```
|
|
211
|
-
O resultado obtido na variável `@response` é um objeto da class `BrNfe::
|
|
212
|
-
Para saber quais os valores obtidos pelo `BrNfe::
|
|
209
|
+
O resultado obtido na variável `@response` é um objeto da class `BrNfe::Service::Response::Default`, no qual será retornada em todas as requisições. Essa classe é responsável de manter o padrão das mensagens de resposta para todos os webservices. Se desejar, poderá obter a resposta original (no formato Hash) de cada órgão emissor através do método `original_response`.
|
|
210
|
+
Para saber quais os valores obtidos pelo `BrNfe::Service::Response::Default`, veja: [Resposta padrão](exemplos/resposta_padrao.markdown)
|
|
213
211
|
|
|
214
212
|
Lista de exemplos:
|
|
215
213
|
|
|
@@ -228,9 +226,9 @@ BrNfe.setup do |config|
|
|
|
228
226
|
config.endereco_class = BrNfe::Endereco
|
|
229
227
|
config.emitente_class = BrNfe::Emitente
|
|
230
228
|
config.destinatario_class = BrNfe::Destinatario
|
|
231
|
-
config.intermediario_class = BrNfe::
|
|
229
|
+
config.intermediario_class = BrNfe::Service::Intermediario
|
|
232
230
|
config.condicao_pagamento_class = BrNfe::CondicaoPagamento
|
|
233
|
-
config.rps_class BrNfe::
|
|
231
|
+
config.rps_class BrNfe::Service::Rps
|
|
234
232
|
|
|
235
233
|
# Se você utiliza certificado SSL, faça as seguintes modificações na configuração:
|
|
236
234
|
# config.client_wsdl_ssl_verify_mode = :peer
|
data/Rakefile
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
require 'rake/testtask'
|
|
2
|
+
|
|
3
|
+
Rake::TestTask.new do |task|
|
|
4
|
+
task.libs << %w(test lib)
|
|
5
|
+
task.pattern = 'test/**/*_test.rb'
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
desc "Open an irb session preloaded with this library"
|
|
9
|
+
task :console do
|
|
10
|
+
sh "irb -rubygems -I lib -r br_nfe.rb"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
task :default => :test
|
data/br_nfe.gemspec
CHANGED
|
@@ -1,31 +1,25 @@
|
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
|
2
2
|
require File.expand_path('../lib/br_nfe/version', __FILE__)
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
Gem::Specification.new do |gem|
|
|
5
|
+
gem.name = "br_nfe"
|
|
6
|
+
gem.version = BrNfe::Version::CURRENT
|
|
7
|
+
gem.license = "MIT"
|
|
8
|
+
gem.description = %q{BrNfe é uma gem para projetos Ruby on Rails que tem como objetifo facilitar e padronizar a emissão de Notas Fiscais eletrônicas}
|
|
9
|
+
gem.summary = %q{Emissão de Notas Fiscais Eletrônicas em Ruby}
|
|
5
10
|
gem.authors = ["Bruno M. Mergen"]
|
|
6
11
|
gem.email = ["brunomergen@gmail.com"]
|
|
7
|
-
gem.description = %q{Emissão de Notas Fiscais Eletrônicas em Ruby}
|
|
8
|
-
gem.summary = %q{BrNfe é uma gem para projetos Ruby on Rails que tem como objetifo facilitar e padronizar a emissão de Notas Fiscais eletrônicas}
|
|
9
12
|
gem.homepage = "https://github.com/Brunomm/br_nfe"
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|coverage/.*
|
|
18
|
-
|exemplos/.*
|
|
19
|
-
|\.travis.yml
|
|
20
|
-
)$}x
|
|
21
|
-
end
|
|
22
|
-
gem.test_files = `git ls-files -- test/**/*`.split("\n")
|
|
23
|
-
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
|
24
|
-
gem.name = "br_nfe"
|
|
13
|
+
|
|
14
|
+
gem.files = `git ls-files`.split("\n").reject{|fil|
|
|
15
|
+
fil.include?('coverage/') ||
|
|
16
|
+
fil.include?('exemplos/')
|
|
17
|
+
}
|
|
18
|
+
gem.test_files = `git ls-files -- test`.split("\n")
|
|
19
|
+
# gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
|
25
20
|
gem.require_paths = ["lib"]
|
|
26
|
-
gem.version = BrNfe::Version::CURRENT
|
|
27
21
|
|
|
28
|
-
gem.required_ruby_version = '
|
|
22
|
+
gem.required_ruby_version = ['~> 2.1', '~> 2.2', '~> 2.3']
|
|
29
23
|
|
|
30
24
|
gem.add_dependency "rake", '~> 10'
|
|
31
25
|
gem.add_dependency "activesupport", '~> 4'
|
|
@@ -33,5 +27,8 @@ e = Gem::Specification.new do |gem|
|
|
|
33
27
|
gem.add_dependency "nokogiri", "~> 1.6"
|
|
34
28
|
gem.add_dependency "savon", "~> 2.11"
|
|
35
29
|
gem.add_dependency "signer", "~> 1.4"
|
|
36
|
-
|
|
30
|
+
gem.add_dependency "slim", "~> 3.0"
|
|
31
|
+
gem.add_dependency "slim-rails", "~> 3.1"
|
|
32
|
+
|
|
33
|
+
gem.add_development_dependency "pry", '~> 0.10'
|
|
37
34
|
end
|
|
@@ -51,12 +51,18 @@ module BrNfe
|
|
|
51
51
|
#
|
|
52
52
|
def value_monetary(value, precision=2)
|
|
53
53
|
return unless value
|
|
54
|
-
|
|
54
|
+
precision ||= 2
|
|
55
|
+
value.to_f.round(precision)
|
|
55
56
|
end
|
|
56
57
|
|
|
57
58
|
def value_amount(value, precision=2)
|
|
58
59
|
value_monetary(value, precision)
|
|
59
60
|
end
|
|
60
61
|
|
|
62
|
+
def canonicalize(xml)
|
|
63
|
+
xml = Nokogiri::XML(xml.to_s, &:noblanks)
|
|
64
|
+
xml.canonicalize(Nokogiri::XML::XML_C14N_EXCLUSIVE_1_0)
|
|
65
|
+
end
|
|
66
|
+
|
|
61
67
|
end
|
|
62
68
|
end
|
data/lib/br_nfe/base.rb
CHANGED
|
@@ -6,6 +6,12 @@ module BrNfe
|
|
|
6
6
|
attr_accessor :certificate_pkcs12_password
|
|
7
7
|
attr_accessor :certificate_pkcs12_path
|
|
8
8
|
attr_accessor :certificate_pkcs12_value
|
|
9
|
+
attr_accessor :env
|
|
10
|
+
|
|
11
|
+
attr_accessor :client_wsdl_ssl_verify_mode
|
|
12
|
+
attr_accessor :client_wsdl_ssl_cert_file
|
|
13
|
+
attr_accessor :client_wsdl_ssl_cert_key_file
|
|
14
|
+
attr_accessor :client_wsdl_ssl_cert_key_password
|
|
9
15
|
|
|
10
16
|
validate :validar_emitente
|
|
11
17
|
validates :certificate, :certificate_key, presence: true, if: :certificado_obrigatorio?
|
|
@@ -15,14 +21,6 @@ module BrNfe
|
|
|
15
21
|
false
|
|
16
22
|
end
|
|
17
23
|
|
|
18
|
-
# Caso não tenha o certificate_pkcs12 salvo em arquivo, pode setar a string do certificate_pkcs12 direto pelo atributo certificate_pkcs12_value
|
|
19
|
-
# Caso tenha o certificate_pkcs12 em arquivo, basta setar o atributo certificate_pkcs12_path e deixar o atributo certificate_pkcs12_value em branco
|
|
20
|
-
def certificate_pkcs12_value
|
|
21
|
-
@certificate_pkcs12_value ||= File.read(certificate_pkcs12_path)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
attr_accessor :env
|
|
25
|
-
|
|
26
24
|
def env
|
|
27
25
|
@env ||= :production
|
|
28
26
|
end
|
|
@@ -31,64 +29,148 @@ module BrNfe
|
|
|
31
29
|
@original_response
|
|
32
30
|
end
|
|
33
31
|
|
|
34
|
-
|
|
35
32
|
def response
|
|
36
33
|
@response
|
|
37
34
|
end
|
|
38
35
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
end
|
|
42
|
-
|
|
36
|
+
# Namespace da requisição SOAP
|
|
37
|
+
#
|
|
43
38
|
def env_namespace
|
|
44
39
|
:soapenv
|
|
45
40
|
end
|
|
46
41
|
|
|
42
|
+
# Deve conter o LINK do webservice a ser chamado
|
|
43
|
+
#
|
|
44
|
+
def wsdl
|
|
45
|
+
raise "Não implementado."
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# Método que contem qual a operação que deverá ser chamada
|
|
49
|
+
# do WS SOAP.
|
|
50
|
+
#
|
|
47
51
|
def method_wsdl
|
|
48
52
|
raise "Não implementado."
|
|
49
53
|
end
|
|
50
54
|
|
|
55
|
+
# O xml_builder é o que contém o conteúdo de cada tipo de requisição
|
|
56
|
+
# e deve ser sobrescrito em cada classe implementada. Por exemplo:
|
|
57
|
+
# recepcao_lote_rps, consulta_lote_rps, cancelamento_nfs, etc..
|
|
58
|
+
#
|
|
51
59
|
def xml_builder
|
|
52
60
|
raise "Não implementado."
|
|
53
61
|
end
|
|
54
62
|
|
|
55
|
-
|
|
56
|
-
|
|
63
|
+
# Esse método serve para ser utilizado no Base de cada orgão emissor
|
|
64
|
+
# onde em alguns casos é necessário colocar o xml em um CDATA
|
|
65
|
+
# É esse método que é passado dentro do Body da equisição SOAP
|
|
66
|
+
#
|
|
67
|
+
def content_xml
|
|
68
|
+
xml_builder
|
|
57
69
|
end
|
|
58
70
|
|
|
59
|
-
|
|
60
|
-
|
|
71
|
+
# O Namespace Indentifier é utilizado para adicionar o
|
|
72
|
+
# namespace na tag principal da requisição. Normalmente deve seguir
|
|
73
|
+
# o namespace utilizado para identificar o namespace da mensagem.
|
|
74
|
+
#
|
|
75
|
+
# Exemplo: se o método message_namespaces for {xmlns:ns1="http...."} então
|
|
76
|
+
# o namespace_identifier deveria ser :ns1.
|
|
77
|
+
# E com isso irá adicionar o namespace na tag principal da requsição.
|
|
78
|
+
# Exemplo com a requisição EnviarLoteRps:
|
|
79
|
+
# COM namespace_identifier => ns1:EnviarLoteRpsEnvio
|
|
80
|
+
# SEM namespace_identifier => EnviarLoteRpsEnvio
|
|
81
|
+
#
|
|
82
|
+
# <b>Tipo de retorno: </b> _Hash_ OR _Nil_
|
|
83
|
+
#
|
|
84
|
+
def namespace_identifier
|
|
61
85
|
end
|
|
62
86
|
|
|
63
|
-
def
|
|
64
|
-
|
|
65
|
-
rescue
|
|
87
|
+
def message_namespaces
|
|
88
|
+
{}
|
|
66
89
|
end
|
|
67
90
|
|
|
68
|
-
def
|
|
69
|
-
|
|
91
|
+
def soap_namespaces
|
|
92
|
+
{
|
|
93
|
+
'xmlns:soapenv' => 'http://schemas.xmlsoap.org/soap/envelope/',
|
|
94
|
+
'xmlns:ins0' => 'http://www.w3.org/2000/09/xmldsig#',
|
|
95
|
+
'xmlns:xsd' => 'http://www.w3.org/2001/XMLSchema',
|
|
96
|
+
'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance'
|
|
97
|
+
}
|
|
70
98
|
end
|
|
71
99
|
|
|
72
100
|
def wsdl_encoding
|
|
73
101
|
"UTF-8"
|
|
74
102
|
end
|
|
75
103
|
|
|
104
|
+
# Tag XML que vai na requisição SOAP
|
|
105
|
+
#
|
|
106
|
+
# <b>Tipo de retorno: </b> _String_
|
|
107
|
+
#
|
|
108
|
+
def tag_xml
|
|
109
|
+
"<?xml version=\"1.0\" encoding=\"#{wsdl_encoding}\"?>"
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
# XML que irá na requisição SOAP
|
|
113
|
+
#
|
|
114
|
+
# <b>Tipo de retorno: </b> _String XML_
|
|
115
|
+
#
|
|
116
|
+
def soap_xml
|
|
117
|
+
@soap_xml ||= "#{tag_xml}#{render_xml('soap_env')}".html_safe
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# Versão do XML utilizado
|
|
121
|
+
# Cada Cidade pode utilizar uma versão diferente do XML
|
|
122
|
+
#
|
|
123
|
+
# <b>Tipo de retorno: </b> _Symbol_
|
|
124
|
+
#
|
|
125
|
+
def xml_version
|
|
126
|
+
:v1
|
|
127
|
+
end
|
|
128
|
+
|
|
76
129
|
def client_wsdl
|
|
77
130
|
@client_wsdl ||= Savon.client({
|
|
78
|
-
namespaces: namespaces,
|
|
79
|
-
env_namespace: env_namespace,
|
|
80
131
|
wsdl: wsdl,
|
|
81
|
-
namespace_identifier: namespace_identifier,
|
|
82
|
-
encoding: wsdl_encoding,
|
|
83
132
|
log: BrNfe.client_wsdl_log,
|
|
84
133
|
pretty_print_xml: BrNfe.client_wsdl_pretty_print_xml,
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
134
|
+
|
|
135
|
+
ssl_verify_mode: client_wsdl_ssl_verify_mode,
|
|
136
|
+
ssl_cert_file: client_wsdl_ssl_cert_file,
|
|
137
|
+
ssl_cert_key_file: client_wsdl_ssl_cert_key_file,
|
|
138
|
+
ssl_cert_key_password: client_wsdl_ssl_cert_key_password
|
|
89
139
|
})
|
|
90
140
|
end
|
|
91
141
|
|
|
142
|
+
def client_wsdl_ssl_verify_mode
|
|
143
|
+
@client_wsdl_ssl_verify_mode ||= BrNfe.client_wsdl_ssl_verify_mode
|
|
144
|
+
end
|
|
145
|
+
def client_wsdl_ssl_cert_file
|
|
146
|
+
@client_wsdl_ssl_cert_file ||= BrNfe.client_wsdl_ssl_cert_file
|
|
147
|
+
end
|
|
148
|
+
def client_wsdl_ssl_cert_key_file
|
|
149
|
+
@client_wsdl_ssl_cert_key_file ||= BrNfe.client_wsdl_ssl_cert_key_file
|
|
150
|
+
end
|
|
151
|
+
def client_wsdl_ssl_cert_key_password
|
|
152
|
+
@client_wsdl_ssl_cert_key_password ||= BrNfe.client_wsdl_ssl_cert_key_password
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
# Caso não tenha o certificate_pkcs12 salvo em arquivo, pode setar a string do certificate_pkcs12 direto pelo atributo certificate_pkcs12_value
|
|
156
|
+
# Caso tenha o certificate_pkcs12 em arquivo, basta setar o atributo certificate_pkcs12_path e deixar o atributo certificate_pkcs12_value em branco
|
|
157
|
+
def certificate_pkcs12_value
|
|
158
|
+
@certificate_pkcs12_value ||= File.read(certificate_pkcs12_path)
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def certificate_pkcs12
|
|
162
|
+
return @certificate_pkcs12 if @certificate_pkcs12
|
|
163
|
+
@certificate_pkcs12 = nil
|
|
164
|
+
# Correção bug http://stackoverflow.com/questions/33112155/pgconnectionbad-pqconsumeinput-ssl-error-key-values-mismatch/36283315#36283315
|
|
165
|
+
Thread.new { @certificate_pkcs12 = OpenSSL::PKCS12.new(certificate_pkcs12_value, certificate_pkcs12_password) }.join
|
|
166
|
+
@certificate_pkcs12
|
|
167
|
+
rescue
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
def certificate_pkcs12=(value)
|
|
171
|
+
@certificate_pkcs12 = value
|
|
172
|
+
end
|
|
173
|
+
|
|
92
174
|
def certificate=(value)
|
|
93
175
|
@certificate = value
|
|
94
176
|
end
|
|
@@ -103,6 +185,64 @@ module BrNfe
|
|
|
103
185
|
|
|
104
186
|
def certificate_key=(value)
|
|
105
187
|
@certificate_key = value
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
# Renderiza o xml a partir do nome de um arquivo
|
|
191
|
+
# Irá procurar o arquivo a partir dos seguintes diretórios>
|
|
192
|
+
# 1° - A partir do parâmetro :dir_path
|
|
193
|
+
# 2° - A partir do método xml_current_dir_path
|
|
194
|
+
# 3° - A partir do método xml_default_dir_path
|
|
195
|
+
#
|
|
196
|
+
# Se não encontrar o arquivo em nenhum dos diretórios irá execurar
|
|
197
|
+
# uma excessão de RuntimeError
|
|
198
|
+
#
|
|
199
|
+
# Utilização
|
|
200
|
+
# `render_xml('file_name', {dir_path: '/my/custom/dir', context: Object}`
|
|
201
|
+
#
|
|
202
|
+
# <b>Tipo de retorno: <b> _String_ (XML)
|
|
203
|
+
#
|
|
204
|
+
def render_xml file_name, opts={}
|
|
205
|
+
opts ||= {}
|
|
206
|
+
default_options = opts.extract!(:dir_path, :context)
|
|
207
|
+
default_options[:context] ||= self
|
|
208
|
+
|
|
209
|
+
# Inicializa a variavel xml com nil para comparar se oa rquivo foi de fato encontrado.
|
|
210
|
+
xml = nil
|
|
211
|
+
get_xml_dirs(default_options[:dir_path]).each do |dir|
|
|
212
|
+
if xml = find_xml(file_name, dir, default_options[:context], opts)
|
|
213
|
+
break # Stop loop
|
|
214
|
+
end
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
# Lança uma excessão se não for encontrado o xml
|
|
218
|
+
# Deve verificar se é nil pois o arquivo xml pode estar vazio
|
|
219
|
+
if xml.nil?
|
|
220
|
+
raise "Arquivo #{file_name}.xml.slim não encontrado nos diretórios #{get_xml_dirs(default_options[:dir_path])}"
|
|
221
|
+
end
|
|
222
|
+
xml
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
def find_xml(file_name, dir, context=nil, options={})
|
|
226
|
+
if File.exists?("#{dir}/#{file_name}.xml.slim")
|
|
227
|
+
Slim::Template.new("#{dir}/#{file_name}.xml.slim").render(context, options).html_safe
|
|
228
|
+
end
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
def get_xml_dirs(custom_dir_path=nil)
|
|
232
|
+
[custom_dir_path, xml_current_dir_path, xml_default_dir_path].flatten.select(&:present?)
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
# Diretório personalizado para cada classe
|
|
236
|
+
# Podendo ser sobrescrito em cada herança
|
|
237
|
+
#
|
|
238
|
+
def xml_current_dir_path
|
|
239
|
+
[]
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
# Diretório padrão dos arquivos XML
|
|
243
|
+
#
|
|
244
|
+
def xml_default_dir_path
|
|
245
|
+
"#{BrNfe.root}/lib/br_nfe/xml"
|
|
106
246
|
end
|
|
107
247
|
|
|
108
248
|
private
|
|
@@ -137,10 +277,14 @@ module BrNfe
|
|
|
137
277
|
canonicalize ass
|
|
138
278
|
end
|
|
139
279
|
|
|
280
|
+
def canonicalization_method_algorithm
|
|
281
|
+
'http://www.w3.org/2001/10/xml-exc-c14n#'
|
|
282
|
+
end
|
|
283
|
+
|
|
140
284
|
def signed_info(data_xml, uri='')
|
|
141
285
|
Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
|
|
142
286
|
xml.SignedInfo(xmlns: "http://www.w3.org/2000/09/xmldsig#") do |info|
|
|
143
|
-
info.CanonicalizationMethod(Algorithm:
|
|
287
|
+
info.CanonicalizationMethod(Algorithm: canonicalization_method_algorithm)
|
|
144
288
|
info.SignatureMethod(Algorithm: 'http://www.w3.org/2000/09/xmldsig#rsa-sha1')
|
|
145
289
|
info.Reference('URI' => uri){
|
|
146
290
|
info.Transforms{
|
|
@@ -165,12 +309,6 @@ module BrNfe
|
|
|
165
309
|
remove_quebras Base64.encode64(OpenSSL::Digest::SHA1.digest(xml_canon))
|
|
166
310
|
end
|
|
167
311
|
|
|
168
|
-
|
|
169
|
-
def canonicalize(xml)
|
|
170
|
-
xml = Nokogiri::XML(xml.to_s, &:noblanks)
|
|
171
|
-
xml.canonicalize(Nokogiri::XML::XML_C14N_EXCLUSIVE_1_0)
|
|
172
|
-
end
|
|
173
|
-
|
|
174
312
|
def remove_quebras(str)
|
|
175
313
|
str.gsub(/\n/,'').gsub(/\t/,'').strip
|
|
176
314
|
end
|