bravo 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,7 @@
1
+ *Bravo 0.3.0 (March 07, 2011)*
2
+
3
+ * Bill#response returns the full list of parameters passed and returned by FECAESolicitar [leanucci]
4
+
1
5
  *Bravo 0.2.0 (March 04, 2011)*
2
6
 
3
7
  * Bill#response returns a complete hash from WSFE response [leanucci]
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 0.3.0
data/bravo.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{bravo}
8
- s.version = "0.2.0"
8
+ s.version = "0.3.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Leandro Marcucci"]
12
- s.date = %q{2011-03-04}
12
+ s.date = %q{2011-03-07}
13
13
  s.description = %q{Adaptador para el Web Service de Facturacion Electronica de AFIP}
14
14
  s.email = %q{leanucci@vurbia.com}
15
15
  s.extra_rdoc_files = [
@@ -34,6 +34,7 @@ Gem::Specification.new do |s|
34
34
  "lib/bravo/constants.rb",
35
35
  "lib/bravo/core_ext/float.rb",
36
36
  "lib/bravo/core_ext/hash.rb",
37
+ "lib/bravo/core_ext/string.rb",
37
38
  "lib/bravo/version.rb",
38
39
  "spec/bravo/auth_data_spec.rb",
39
40
  "spec/bravo/authorizer_spec.rb",
data/lib/bravo.rb CHANGED
@@ -4,6 +4,7 @@ require "bravo/constants"
4
4
  require "savon"
5
5
  require "bravo/core_ext/float"
6
6
  require "bravo/core_ext/hash"
7
+ require "bravo/core_ext/string"
7
8
  module Bravo
8
9
 
9
10
  class NullOrInvalidAttribute < StandardError; end
data/lib/bravo/bill.rb CHANGED
@@ -2,14 +2,14 @@ module Bravo
2
2
  class Bill
3
3
  attr_reader :client, :base_imp, :total
4
4
  attr_accessor :net, :doc_num, :iva_cond, :documento, :concepto, :moneda,
5
- :due_date, :from, :to, :aliciva_id, :fch_serv_desde, :fch_serv_hasta,
5
+ :due_date, :aliciva_id, :fch_serv_desde, :fch_serv_hasta,
6
6
  :body, :response
7
7
 
8
8
  def initialize(attrs = {})
9
9
  Bravo::AuthData.fetch
10
- @client = Savon::Client.new(Bravo.service_url)
11
- @body = {"Auth" => Bravo.auth_hash}
12
- @net = attrs[:net] || 0
10
+ @client = Savon::Client.new(Bravo.service_url)
11
+ @body = {"Auth" => Bravo.auth_hash}
12
+ @net = attrs[:net] || 0
13
13
  self.documento = attrs[:documento] || Bravo.default_documento
14
14
  self.moneda = attrs[:moneda] || Bravo.default_moneda
15
15
  self.iva_cond = attrs[:iva_cond]
@@ -110,20 +110,32 @@ module Bravo
110
110
  end
111
111
 
112
112
  def setup_response(response)
113
- header_response = response[:fecae_solicitar_response][:fecae_solicitar_result][:fe_cab_resp].symbolize_keys
114
- detail_response = response[:fecae_solicitar_response][:fecae_solicitar_result][:fe_det_resp][:fecae_det_response].symbolize_keys
113
+ # TODO: turn this into an all-purpose Response class
115
114
 
116
- iva = self.body["FeCAEReq"]["FeDetReq"]["FECAEDetRequest"]["Iva"]["AlicIva"].underscore_keys!
115
+ result = response[:fecae_solicitar_response][:fecae_solicitar_result]
117
116
 
118
- detail_response.merge!(iva.symbolize_keys!)
117
+ response_header = result[:fe_cab_resp]
118
+ response_detail = result[:fe_det_resp][:fecae_det_response]
119
119
 
120
- response_hash = {:header_result => header_response.delete(:resultado),
121
- :detail_result => detail_response.delete(:resultado),
122
- :cae_due_date => detail_response.delete(:cae_fch_vto),
123
- :authorized_on => header_response.delete(:fch_proceso),
124
- :iva_id => detail_response.delete(:id),
125
- :iva_importe => detail_response.delete(:importe)
126
- }.merge!(header_response).merge!(detail_response)
120
+ request_header = body["FeCAEReq"]["FeCabReq"].underscore_keys.symbolize_keys
121
+ request_detail = body["FeCAEReq"]["FeDetReq"]["FECAEDetRequest"].underscore_keys.symbolize_keys
122
+
123
+ iva = request_detail.delete(:iva)["AlicIva"].underscore_keys.symbolize_keys
124
+
125
+ request_detail.merge!(iva)
126
+
127
+ response_hash = {:header_result => response_header.delete(:resultado),
128
+ :authorized_on => response_header.delete(:fch_proceso),
129
+ :detail_result => response_detail.delete(:resultado),
130
+ :cae_due_date => response_detail.delete(:cae_fch_vto),
131
+ :cae => response_detail.delete(:cae),
132
+ :iva_id => request_detail.delete(:id),
133
+ :iva_importe => request_detail.delete(:importe),
134
+ :moneda => request_detail.delete(:mon_id),
135
+ :cotizacion => request_detail.delete(:mon_cotiz),
136
+ :iva_base_imp => request_detail.delete(:base_imp),
137
+ :doc_num => request_detail.delete(:doc_nro)
138
+ }.merge!(request_header).merge!(request_detail)
127
139
 
128
140
  keys, values = response_hash.to_a.transpose
129
141
  self.response = Struct.new("Response", *keys).new(*values)
@@ -12,7 +12,7 @@ class Hash
12
12
 
13
13
  def underscore_keys!
14
14
  keys.each do |key|
15
- self[(key.downcase rescue key) || key] = delete(key)
15
+ self[(key.underscore rescue key) || key] = delete(key)
16
16
  end
17
17
  self
18
18
  end
@@ -0,0 +1,12 @@
1
+ # Stolen from activesupport/lib/active_support/inflector/methods.rb, line 48
2
+ class String
3
+ def underscore
4
+ word = self.to_s.dup
5
+ word.gsub!(/::/, '/')
6
+ word.gsub!(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
7
+ word.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
8
+ word.tr!("-", "_")
9
+ word.downcase!
10
+ word
11
+ end
12
+ end
data/lib/bravo/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Bravo
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -91,20 +91,14 @@ describe "Bill" do
91
91
  @bill.iva_cond = :responsable_inscripto
92
92
  @bill.concepto = "Servicios"
93
93
 
94
- @bill.authorized?.should == false
95
-
96
- @bill.authorize.should == true
97
-
98
- @bill.authorized?.should == true
94
+ @bill.authorized?.should == false
95
+ @bill.authorize.should == true
96
+ @bill.authorized?.should == true
99
97
 
100
98
  response = @bill.response
101
99
 
100
+ response.length.should == 28
102
101
  response.cae.length.should == 14
103
-
104
- pp response
105
-
106
- response.length.should == 19
107
-
108
102
  end
109
103
  end
110
104
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bravo
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 2
8
+ - 3
9
9
  - 0
10
- version: 0.2.0
10
+ version: 0.3.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Leandro Marcucci
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-03-04 00:00:00 -03:00
18
+ date: 2011-03-07 00:00:00 -03:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -169,6 +169,7 @@ files:
169
169
  - lib/bravo/constants.rb
170
170
  - lib/bravo/core_ext/float.rb
171
171
  - lib/bravo/core_ext/hash.rb
172
+ - lib/bravo/core_ext/string.rb
172
173
  - lib/bravo/version.rb
173
174
  - spec/bravo/auth_data_spec.rb
174
175
  - spec/bravo/authorizer_spec.rb