enotas 0.1.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.
@@ -0,0 +1,66 @@
1
+ module Enotas
2
+ module ApiResource
3
+ BASE_URL = 'http://api.enotasgw.com.br'
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 = Enotas.access_key
17
+
18
+ if (method == :get || method == :delete) && 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: "Basic " + api_key,
28
+ content_type: 'application/json',
29
+ accept: 'application/json'}).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 EnotasError.new(rcode, rbody, rbody, rbody.first[:mensagem])
37
+ else
38
+ raise e
39
+ end
40
+ rescue RestClient::Exception => e
41
+ raise e
42
+ end
43
+ response = JSON.parse(response.to_str)
44
+ recursive_symbolize_keys response
45
+ end
46
+
47
+ def recursive_symbolize_keys(h)
48
+ case h
49
+ when Hash
50
+ Hash[
51
+ h.map do |k, v|
52
+ [ k.respond_to?(:to_sym) ? k.to_sym : k, recursive_symbolize_keys(v) ]
53
+ end
54
+ ]
55
+ when Enumerable
56
+ h.map { |v| recursive_symbolize_keys(v) }
57
+ else
58
+ h
59
+ end
60
+ end
61
+
62
+ def self.included(base)
63
+ base.extend(ApiResource)
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,92 @@
1
+ module Enotas
2
+ class EnotasObject
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 initialize()
51
+ @values = {}
52
+ end
53
+
54
+ def method_missing(name, *args)
55
+ if name.to_s.end_with? '='
56
+ name = name.to_s[0...-1].to_sym
57
+ end
58
+
59
+ if serialize_params.include? name
60
+ @values[name] = args[0]
61
+ else
62
+ raise NoMemoryError.new ("Cannot set #{name} on this object")
63
+ end
64
+ end
65
+
66
+ def to_hash
67
+ @values.inject({}) do |result, (key,value)|
68
+ if value.is_a? Array
69
+ list = []
70
+ value.each do |obj|
71
+ list.push(obj.respond_to?(:to_hash) ? obj.to_hash : value)
72
+ end
73
+ result[key] = list
74
+ else if value.respond_to?(:to_hash)
75
+ result[key] = value.to_hash
76
+ else
77
+ result[key] = value
78
+ end
79
+ end
80
+ result
81
+ end
82
+ end
83
+
84
+ def to_json(*a)
85
+ JSON.generate(@values)
86
+ end
87
+
88
+ def to_s
89
+ JSON.generate(@values)
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,12 @@
1
+ module Enotas
2
+ class EnotasError < 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
data/lib/enotas/nfe.rb ADDED
@@ -0,0 +1,65 @@
1
+ module Enotas
2
+ class Nfe < EnotasObject
3
+ include ApiResource
4
+
5
+ def self.company_id(company_id)
6
+ @company_id = company_id
7
+ end
8
+
9
+ def self.url
10
+ "/v1/empresas/#{@company_id}/nfes"
11
+ end
12
+
13
+ def url
14
+ "#{self.class.url}/#{self.id}"
15
+ end
16
+
17
+ def self.create(id_empresa, params)
18
+ @company_id = id_empresa
19
+ method = :post
20
+ response = api_request(url, method, params)
21
+ create_from(response)
22
+ end
23
+
24
+ def self.retrieve(id_empresa, obj_id)
25
+ @company_id = id_empresa
26
+ obj_id = "?id=#{obj_id}" if obj_id.include? '@'
27
+ method = :get
28
+ response = api_request("#{url}/#{obj_id}",method)
29
+ create_from(response)
30
+ end
31
+
32
+ def self.retrieve_by_external_id(id_empresa, external_id)
33
+ @company_id = id_empresa
34
+ method = :get
35
+ response = api_request("#{url}/porIdExterno/#{external_id}",method)
36
+ create_from(response)
37
+ end
38
+
39
+ def self.retrieve_by_period(id_empresa, params)
40
+ @company_id = id_empresa
41
+ method = :get
42
+ response = api_request(url, method, params)
43
+ create_from(response)
44
+ end
45
+
46
+ def self.cancel(id_empresa, obj_id)
47
+ @company_id = id_empresa
48
+ obj_id = "?id=#{obj_id}" if obj_id.include? '@'
49
+ method = :delete
50
+ response = api_request("#{url}/#{obj_id}",method)
51
+ create_from(response)
52
+ end
53
+
54
+ def self.cancel_by_external_id(id_empresa, external_id)
55
+ @company_id = id_empresa
56
+ method = :delete
57
+ response = api_request("#{url}/porIdExterno/#{external_id}",method)
58
+ create_from(response)
59
+ end
60
+
61
+ def self.create_from(params)
62
+ params
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,28 @@
1
+ module Enotas
2
+ class Util
3
+ OBJECT_TYPES = {
4
+ }
5
+
6
+ def self.get_object_type(type)
7
+ object_type = Enotas::EnotasObject
8
+ object_type = OBJECT_TYPES[type] if OBJECT_TYPES[type]
9
+ object_type
10
+ end
11
+
12
+ def self.symbolize_names(object)
13
+ case object
14
+ when Hash
15
+ new = {}
16
+ object.each do |key, value|
17
+ key = (key.to_sym rescue key) || key
18
+ new[key] = symbolize_names(value)
19
+ end
20
+ new
21
+ when Array
22
+ object.map { |value| symbolize_names(value) }
23
+ else
24
+ object
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,3 @@
1
+ module Enotas
2
+ VERSION = "0.1.3"
3
+ end
data/lib/enotas.rb ADDED
@@ -0,0 +1,21 @@
1
+ require "enotas/version"
2
+ require "rest-client"
3
+ require "json"
4
+
5
+ require "enotas/util"
6
+ require "enotas/enotas_object"
7
+ require "enotas/errors/enotas_error"
8
+
9
+ require "enotas/api_resource"
10
+ require "enotas/nfe"
11
+
12
+ module Enotas
13
+ @@api_key = ''
14
+ def self.api_key(api_key)
15
+ @@api_key = api_key
16
+ end
17
+
18
+ def self.access_key
19
+ @@api_key
20
+ end
21
+ end
metadata ADDED
@@ -0,0 +1,120 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: enotas
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.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: Enotas 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
+ - enotas.gemspec
88
+ - lib/data/ca-bundle.crt
89
+ - lib/enotas.rb
90
+ - lib/enotas/api_resource.rb
91
+ - lib/enotas/enotas_object.rb
92
+ - lib/enotas/errors/enotas_error.rb
93
+ - lib/enotas/nfe.rb
94
+ - lib/enotas/util.rb
95
+ - lib/enotas/version.rb
96
+ homepage: https://www.pluga.co
97
+ licenses:
98
+ - MIT
99
+ metadata: {}
100
+ post_install_message:
101
+ rdoc_options: []
102
+ require_paths:
103
+ - lib
104
+ required_ruby_version: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
109
+ required_rubygems_version: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ version: '0'
114
+ requirements: []
115
+ rubyforge_project:
116
+ rubygems_version: 2.4.8
117
+ signing_key:
118
+ specification_version: 4
119
+ summary: Enotas ruby gem
120
+ test_files: []