apibanca-client 0.0.2 → 0.0.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.
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