apibanca-client 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a05aac810bc32fe182122fb2cd8ef1961d683928
4
- data.tar.gz: f2775c0ade0e6ec278975bcd0cc5cab7cc05dcf4
3
+ metadata.gz: a11196cbf7114b0d8f73ee499966ccce88bbac70
4
+ data.tar.gz: 83c6061b12ba78d65e0092010f2460183f7d7867
5
5
  SHA512:
6
- metadata.gz: 4235bcaabe647464ebfe812462eb381b3a0fefcc63426193a48609fb82b8d92520c466bdfa88f50e8ed18f7abfec1c5947a29ad9e6048ed9600bccd372880596
7
- data.tar.gz: fc953a05aeae0d3f9cd95451bcce25f5d4e77909093375a26578e92b5c81b40a97c17e28d9b993b50b834672773a7efae438539f6f53c48565c602d0a5567681
6
+ metadata.gz: c332c62906ff60196c88eef8b4ac11461b854ca01871496622b8cbdc61e7019a01065a7bbea834f508cf0142d90a46481cfb01e4a62bdfc240fdc46a0afeea23
7
+ data.tar.gz: 814cbbb7f4399a44a358cb918c94b479255eb1942a8e2e5a046f09fed324152ecfcaf565428edf2f627d95e11309ec26fad27cb7c20e39b30926387403292b1a
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Bitácora de cambios
2
2
 
3
+ ## 0.0.3
4
+
5
+ ### Eliminación de rutinas
6
+ Para eliminar una rutina se debe invocar el método `delete` en ella.
7
+
3
8
  ## 0.0.2
4
9
 
5
10
  ### Configuración del cliente
data/README.md CHANGED
@@ -37,9 +37,84 @@ client = Apibanca::Client.new(API_KEY)
37
37
  Los bancos pueden ser creados a través de la interfaz web o desde esta gema. Para crear un banco desde la gema, hay que proveer todos los parámetros solicitados por la clase `Apibanca::Bank::BankCreationParams`.
38
38
 
39
39
  ```ruby
40
- params = Apibanca::Bank::BankCreationParams.new(name: "BICE", user: "<rut del usuario>", pass: "<password para la web del banco>", account: "<número de cuenta>"
40
+ params = Apibanca::Bank::BankCreationParams.new(name: "BICE", user: "...", pass: "...", account: "...")
41
41
  # => #<Apibanca::Bank::BankCreationParams account="..." name="BICE" pass="..." user="...">
42
+
42
43
  banco = Apibanca::Bank.create(client, params)
43
44
  # -> POST http://api-banca.herokuapp.com/api/2013-11-4/banks/ [{:bank=>{"name"=>"BICE", "user"=>"...", "pass"=>"...", "account"=>"..."}} params]
44
- # Banco BICE / 157768441 / unica
45
+ # => (Banco 3304) BICE / <usuario> / <cuenta>
46
+
47
+ banco.id
48
+ # => 3304
49
+ ```
50
+
51
+ ### Estatus del banco
52
+
53
+ Indica si los parámetros de acceso a la cuenta son correctos. Nota: asegúrate de que lo sean; de otra forma el banco puede bloquear el acceso a la cuenta.
54
+
55
+ ```ruby
56
+ # banco = Apibanca::Bank.create(...)
57
+ banco.status # sólo se puede utilizar cuando cambie a 'ready'. Este cambio de estado toma 5 minutos aproximadamente.
58
+ # => idle
59
+
60
+ banco.refresh! # recarga el proxy desde el servidor
61
+ # -> GET http://api-banca.herokuapp.com/api/2013-11-4/banks/3304
62
+ # -> GET http://api-banca.herokuapp.com/api/2013-11-4/routines/23444
63
+ # => (Banco 3304) BICE / <usuario> / <cuenta>
64
+ banco.status
65
+ # => working
66
+
67
+ banco.refresh! # unos minutos más tarde...
68
+ # ...
69
+ banco.status
70
+ # => ready
71
+ ```
72
+
73
+ ### Rutinas
74
+
75
+ Permiten agendar una tarea periódica en un banco. Por ejemplo, leer la cartola.
76
+
77
+ ```ruby
78
+ # Todos los bancos incluyen una rutina inicial que se ejecuta cuando el banco es creado.
79
+ banco.routines
80
+ # => [(Rutina 23444) Setup inicial
81
+
82
+ # Añadiremos una rutina para leer la cartola y crear depósitos
83
+ banco.add_routine Apibanca::Bank::RoutineCreationParams.new(nombre: "LectorDepósitos", target: "cartola", what_to_do: "acumular")
84
+ # => (Rutina 23449) LectorDepósitos acumular:cartola tasks=0
85
+
86
+ # Para que la rutina trabaje, hay que indicar la frecuencia
87
+ routine = bank.routines.last
88
+ # => (Rutina 23449) LectorDepósitos acumular:cartola tasks=0
89
+
90
+ routine.schedule Apibanca::Routine::ScheduleParams.new( unit: "minutes", interval: "60" )
91
+ # -> PATCH http://api-banca.herokuapp.com/api/2013-11-4/routines/23449/schedule [params]
92
+ # => (Rutina 23449) LectorDepósitos acumular:cartola tasks=3
93
+ ```
94
+
95
+ ### Descarga de depósitos
96
+
97
+ A medida que las rutinas de lectura de depósitos procesen la cartola y las transacciones, se puede invocar una función para descargar los depósitos leídos
98
+
99
+ ```ruby
100
+ # arreglo con todos los depósitos
101
+ banco.load_deposits
102
+ # => [...]
103
+
104
+ banco.deposits.first
105
+ # => (Deposit 209070) 03/01/2014 / cheque / 79.695
106
+ ```
107
+
108
+ ### Otras funciones
109
+
110
+ #### Listado de bancos creados
111
+
112
+ Es posible cargar un arreglo con los bancos cargados en la cuenta
113
+
114
+ ```ruby
115
+ banks = Apibanca::Bank.index(client)
116
+ # -> GET http://api-banca.herokuapp.com/api/2013-11-4/banks/
117
+ # => [(Banco 3304) BICE / <usuario> / <cuenta>, (Banco 3323) SCOTIA / <usuario> / <cuenta>]
118
+ banks.first.id
119
+ # => 3304
45
120
  ```
@@ -6,28 +6,23 @@ class Apibanca::Bank < Apibanca::ProxyBase
6
6
  def create client, bank_params
7
7
  raise ArgumentError, "Los parámetros deben ser ApiBanca::Bank::BankCreationParams" unless bank_params.is_a? Apibanca::Bank::BankCreationParams
8
8
  r = client.post url, { bank: bank_params.to_hash }
9
- bank = Apibanca::Bank.new(r.body)
10
- bank.obj_client = client
11
- bank.routines.map! { |r| Apibanca::Routine.new(r) }
9
+ bank = Apibanca::Bank.new(client, r.body)
10
+ bank.load_routines! false
12
11
  bank
13
12
  end
14
13
 
15
14
  def load client, id, recursive=true
16
15
  r = client.get url("#{id}")
17
- bank = Apibanca::Bank.new(r.body)
18
- bank.obj_client = client
19
- bank.routines.map! { |r| Apibanca::Routine.new(r) }
20
- bank.routines.each { |r| r.refresh! } if recursive
16
+ bank = Apibanca::Bank.new(client, r.body)
17
+ bank.load_routines! recursive
21
18
  bank
22
19
  end
23
20
 
24
21
  def index client, params=nil, recursive=false
25
22
  r = client.get url, params
26
23
  r.body.map do |raw|
27
- bank = Apibanca::Bank.new(raw)
28
- bank.obj_client = client
29
- bank.routines.map! { |r| Apibanca::Routine.new(r) }
30
- bank.routines.each { |r| r.refresh! } if recursive
24
+ bank = Apibanca::Bank.new(client, raw)
25
+ bank.load_routines! recursive
31
26
  bank
32
27
  end
33
28
  end
@@ -35,10 +30,8 @@ class Apibanca::Bank < Apibanca::ProxyBase
35
30
 
36
31
  def refresh! recursive=true
37
32
  r = obj_client.get url
38
- old_routines = self.routines
39
33
  self.merge! r.body
40
- self.routines = old_routines
41
- self.routines.each { |r| r.refresh! } if recursive
34
+ self.load_routines! recursive
42
35
  self
43
36
  end
44
37
 
@@ -51,30 +44,38 @@ class Apibanca::Bank < Apibanca::ProxyBase
51
44
  raise ArgumentError, "Los parámetros deben ser ApiBanca::Bank::RoutineCreationParams" unless routine_params.is_a? Apibanca::Bank::RoutineCreationParams
52
45
  r = obj_client.post url("add_routine"), { routine: routine_params.to_hash }
53
46
  r.body.routines.each do |routine|
54
- new_routine = Apibanca::Routine.new(routine) unless self.routines.map { |i| i.id }.include?(routine.id)
55
- next unless new_routine
56
- new_routine.obj_client = self.obj_client
47
+ next unless self.routines.any? { |r| r.id == routine.id }
48
+ new_routine = Apibanca::Routine.new(obj_client, self, routine)
57
49
  new_routine.refresh!
58
50
  self.routines << new_routine
59
51
  end
52
+ routines.last
60
53
  end
61
54
 
62
55
  def delete
63
- r = obj_client.delete url
56
+ obj_client.delete url
64
57
  true
65
58
  end
66
59
 
67
60
  def load_deposits params=nil
68
61
  r = obj_client.get url("deposits"), params
69
- self.deposits = r.body.map { |d| nd = Apibanca::Deposit.new(d); nd.obj_bank = self; nd.obj_client = obj_client; nd }
62
+ self.deposits = r.body.map { |d| nd = Apibanca::Deposit.new(obj_client, self, d) }
63
+ end
64
+
65
+ def load_jobs params=nil
66
+ r = obj_client.get url, params
67
+ self.jobs = r.body.each do |raw|
68
+ Apibanca::Job.new(obj_client, raw)
69
+ end
70
70
  end
71
71
 
72
72
  def to_s
73
- "Banco #{name} / #{user} / #{account}"
73
+ "(Banco #{id}) #{name} / #{user} / #{account}"
74
74
  end
75
75
 
76
- def inspect
77
- to_s
76
+ def load_routines! recursive=true
77
+ self.routines.map! { |r| Apibanca::Routine.new(self.obj_client, self, r) }
78
+ self.routines.each { |r| r.refresh! } if recursive
78
79
  end
79
80
 
80
81
  class BankCreationParams < Hashie::Dash
@@ -5,14 +5,15 @@ class Apibanca::Deposit < Apibanca::ProxyBase
5
5
  end
6
6
 
7
7
  def to_s
8
- "#{self.raw_date} #{self.psd_type ? self.psd_type : self.raw_comment} [#{self.raw_amount}]"
9
- end
10
-
11
- def inspect
12
- to_s
8
+ "(Deposit #{id}) #{self.raw_date} / #{self.psd_type ? self.psd_type : self.raw_comment} / #{self.raw_amount}"
13
9
  end
14
10
 
15
11
  def history
16
12
  @history ||= load_history
17
13
  end
14
+
15
+ def initialize(client, bank, source_hash = nil, default = nil, &block)
16
+ super(client, source_hash, default, &block)
17
+ self.obj_bank = bank
18
+ end
18
19
  end
@@ -0,0 +1,13 @@
1
+ class Apibanca::Job < Apibanca::ProxyBase
2
+
3
+ set_relative_url "jobs"
4
+
5
+ class << self
6
+ def load client, id
7
+ r = client.get url("#{id}")
8
+ job = Apibanca::Job.new(client, r.body)
9
+ job
10
+ end
11
+ end
12
+
13
+ end
@@ -12,4 +12,13 @@ class Apibanca::ProxyBase < Hashie::Mash
12
12
  EOM
13
13
  end
14
14
  end
15
+
16
+ def inspect
17
+ to_s
18
+ end
19
+
20
+ def initialize(client, source_hash = nil, default = nil, &block)
21
+ super(source_hash, default, &block)
22
+ self.obj_client = client
23
+ end
15
24
  end
@@ -28,6 +28,21 @@ class Apibanca::Routine < Apibanca::ProxyBase
28
28
  self.tasks = r.body
29
29
  end
30
30
 
31
+ def delete
32
+ obj_client.delete url
33
+ self.obj_bank.routines.select! { |r| r.id != self.id } if self.obj_bank.routines.any?
34
+ true
35
+ end
36
+
37
+ def to_s
38
+ "(Rutina #{id}) #{nombre} #{target ? "#{what_to_do}:#{target}" : ""} tasks=#{scheduled_tasks} #{!active ? "INACTIVE" : ""}"
39
+ end
40
+
41
+ def initialize(client, bank, source_hash = nil, default = nil, &block)
42
+ super(client, source_hash, default, &block)
43
+ self.obj_bank = bank
44
+ end
45
+
31
46
  class ScheduleParams < Hashie::Dash
32
47
  property :unit, required: true
33
48
  property :interval, required: true
@@ -1,5 +1,5 @@
1
1
  module Apibanca
2
2
  class Client
3
- VERSION = "0.0.2"
3
+ VERSION = "0.0.3"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: apibanca-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pablo Marambio
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-06 00:00:00.000000000 Z
11
+ date: 2014-01-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -115,6 +115,7 @@ files:
115
115
  - lib/apibanca/client/deposit.rb
116
116
  - lib/apibanca/client/deposit_version.rb
117
117
  - lib/apibanca/client/exceptions.rb
118
+ - lib/apibanca/client/job.rb
118
119
  - lib/apibanca/client/proxy_base.rb
119
120
  - lib/apibanca/client/routine.rb
120
121
  - lib/apibanca/client/version.rb