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.
@@ -0,0 +1,15 @@
1
+ module Nfe
2
+ module ApiOperations
3
+ module Create
4
+ def create(params)
5
+ method = :post
6
+ response = api_request(url, method, params)
7
+ create_from(response)
8
+ end
9
+
10
+ def self.included(base)
11
+ base.extend(Create)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -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,15 @@
1
+ module Nfe
2
+ module ApiOperations
3
+ module List
4
+ def list_all(params=nil)
5
+ method = :get
6
+ response = api_request(url, method, params)
7
+ create_from(response)
8
+ end
9
+
10
+ def self.included(base)
11
+ base.extend(List)
12
+ end
13
+ end
14
+ end
15
+ 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
@@ -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
@@ -0,0 +1,3 @@
1
+ module Nfe
2
+ VERSION = "0.2.3"
3
+ end
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: []