nfe-io 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []