alegra 0.1.2.3 → 0.4.1

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
- SHA1:
3
- metadata.gz: 2eebfa19e7125975a60aa3d57bd38817c402a169
4
- data.tar.gz: ef3b5aada690c7d468aeb9b2688c8ed323a819f1
2
+ SHA256:
3
+ metadata.gz: 3fa2da362476c72c6570864ecd2c5515da43397835d85ab2d32cb66e7f5a2191
4
+ data.tar.gz: 8b3d7fe929ecb25a180559a7d3ff73e3124b4c691342c2777b2c2f95f9b7231e
5
5
  SHA512:
6
- metadata.gz: 66974059e3819c72e44e7d107ec767c63ef98afbd7ff7f60b287468d100d87ad8f00f042194dd790e0619e0da371a06da55aa03ff13734bdfd26a97a83258260
7
- data.tar.gz: a2beb44ae7e5fa57e118bf7f884f645eef2be736f50b6c4d2dffef9236c7265d89620311a5856048850f3c5304cc8bf56daf816de5969f4ce6462201ae52a3d0
6
+ metadata.gz: 30132d66010ea6b67b215c0625d154bf981d5676411a8876508d7ee441f22ab2babcf2a00dab3ae083b024ac0fb14d34bc76c1560aeb4a1a9bab1a7ad6826569
7
+ data.tar.gz: '068d64aa6e41c66886d53e1d779ccade60a008236af7db598249457ea768694dbf03001d8802c39e25e7eb1b2e4e77ffcadf6cb840d92521b1538d9ae863bd69'
data/.gitignore CHANGED
@@ -7,3 +7,4 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
+ .byebug_history
data/Gemfile CHANGED
@@ -1,4 +1,6 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in alegra.gemspec
4
- gemspec
6
+ gemspec
data/README.md CHANGED
@@ -1,8 +1,9 @@
1
1
  # Alegra
2
+ [![Build Status](https://travis-ci.org/degzcs/alegra.svg?branch=master)](https://travis-ci.org/degzcs/alegra)
2
3
 
3
- A ruby client for connecting to [Alegra](http://www.alegra.com)'s API.
4
+ A ruby client for connecting to [Alegra](http://www.alegra.com)'s API.
4
5
 
5
- Please check the official API documentation [here](http://developer.alegra.com/)
6
+ Please check the official API documentation [here](http://developer.alegra.com/)
6
7
 
7
8
  ## Installation
8
9
 
@@ -14,7 +15,7 @@ gem 'alegra'
14
15
 
15
16
  And then execute:
16
17
 
17
- $ bundle install
18
+ $ bundle install
18
19
 
19
20
  Or install it yourself as:
20
21
 
@@ -51,7 +52,7 @@ client.contacts.create(params)
51
52
  ```
52
53
 
53
54
  You can update this contact too:
54
- ```ruby
55
+ ```ruby
55
56
  params = {
56
57
  name: 'Sinc Hompas'
57
58
  }
@@ -59,7 +60,7 @@ client.contacts.update(1, params)
59
60
  ```
60
61
 
61
62
  Or delete it, as follows:
62
- ```ruby
63
+ ```ruby
63
64
  client.contacts.delete(1)
64
65
  ```
65
66
 
@@ -87,7 +88,7 @@ client.items.create(params)
87
88
  ```
88
89
 
89
90
  You can update this item too:
90
- ```ruby
91
+ ```ruby
91
92
  params = {
92
93
  name: 'A better name!',
93
94
  }
@@ -95,14 +96,14 @@ client.items.update(1, params)
95
96
  ```
96
97
 
97
98
  Or delete it, as follows:
98
- ```ruby
99
+ ```ruby
99
100
  client.items.delete(1)
100
101
  ```
101
102
 
102
- ### Invoices
103
+ ### Invoices
103
104
 
104
105
  You can get all invoices:
105
- ```ruby
106
+ ```ruby
106
107
  client.invoices.list()
107
108
  ```
108
109
 
@@ -147,7 +148,7 @@ client.invoices.create(params)
147
148
  ```
148
149
 
149
150
  Update that invoice:
150
- ```ruby
151
+ ```ruby
151
152
  params = { observations: 'This invoice was updated!'}
152
153
  client.invoices.update(1, params)
153
154
  ```
@@ -157,11 +158,151 @@ Send that invoice by email:
157
158
  params = { emails: ['your.email@alegra.com', 'another.eail@algra.com'], send_copy_to_user: true, invoice_type: 'copy'}
158
159
  client.invoices.send_by_email(1, params)
159
160
  ```
161
+
162
+ ### Payments
163
+
164
+ You can get all payments:
165
+ ```ruby
166
+ client.payments.list()
167
+ ```
168
+
169
+ Or get a specific payment by id:
170
+ ```ruby
171
+ client.payments.find(1) # the parameter is the payment id
172
+ ```
173
+
174
+ Also you are able to create a new payments, as follows:
175
+ ```ruby
176
+ params = {
177
+ date: "2015-12-13",
178
+ invoices: [
179
+ {
180
+ id: 6,
181
+ amount: 150
182
+ },
183
+ {
184
+ id: 200,
185
+ amount: 500
186
+ }
187
+ ],
188
+ bank_account: 1
189
+ }
190
+
191
+ client.payments.create(params)
192
+ ```
193
+ ### Company
194
+
195
+ You can get the company:
196
+ ```ruby
197
+ client.company.find
198
+ ```
199
+
200
+ Also you can update it, as follows:
201
+ ```ruby
202
+ params = { website: 'nominapp.com' }
203
+
204
+ client.company.update(params)
205
+ ```
206
+
207
+ ### Users
208
+
209
+ You can get the users:
210
+ ```ruby
211
+ client.users.list
212
+ ```
213
+
214
+ Also you can retrive a specific user by doing:
215
+ ```ruby
216
+ client.users.find(1)
217
+ ```
218
+
219
+ Lastly you can retrive the current user, as follows:
220
+ ```ruby
221
+ client.users.find_current
222
+ ```
223
+
224
+ ### Categories
225
+
226
+ You can get all the categories on the client account like this:
227
+ ```ruby
228
+ client.categories.list #this will retrieve the tree format by default
229
+ ```
230
+ Or if you prefer the plain format from the Alegra API just pass it as a paramater:
231
+ ```ruby
232
+ client.categories.list(format: 'plain')
233
+ ```
234
+ You can also retrive a specific category, as follows:
235
+ ```ruby
236
+ client.categories.find('5047')
237
+ ```
238
+
239
+ ### BankAccounts
240
+
241
+ To retrive all bank accounts:
242
+ ```ruby
243
+ client.bank_accounts.list
244
+ ```
245
+ Or get a specific bank_account by id:
246
+ ```ruby
247
+ client.bank_accounts.find(2)
248
+ ```
249
+ Also you are able to create a new bank accounts, as follows:
250
+ ```ruby
251
+ params = { name: 'test',
252
+ type: 'bank',
253
+ initial_balance: '100000',
254
+ initial_balance_date: '2020-02-25' }
255
+
256
+ client.bank_accounts.create(params)
257
+ ```
258
+ And to create a bank transfer between accounts:
259
+ ```ruby
260
+ params = { id_destination: 4, # 4 is the destination bank_account_id
261
+ amount: 100000,
262
+ date: '2020-02-25' }
263
+ client.bank_accounts.transfer(7, params) # 7 is the origin bank_account_id
264
+ ```
265
+
266
+ ### Journals
267
+
268
+ To retrive all existing journals:
269
+ ```ruby
270
+ client.journals.list
271
+ ```
272
+ Or get a specif journal by `:id`:
273
+ ```ruby
274
+ client.journals.find(191)
275
+ ```
276
+ You can create journals too, as follows:
277
+ ```ruby
278
+ params = { date: Date.today.strftime("%Y-%m-%d"),
279
+ client: '416',
280
+ entries: [{ id: '5009', debit: 3_000_000 },
281
+ { id: '5048', credit: 4_250_660 },
282
+ { id: '5008', debit: 755_000 },
283
+ { id: '5010', debit: 495_660 }] }
284
+
285
+ client.journals.create(params)
286
+ ```
287
+ Or update them like this:
288
+ ```ruby
289
+ params = { client: '416'
290
+ entries: [{ id: '5009', debit: 3_000_000 },
291
+ { id: '5048', credit: 4_150_660 },
292
+ { id: '5008', debit: 655_000 },
293
+ { id: '5010', debit: 495_660 }] }
294
+
295
+ client.journals.update(193, params) # Where 193 is the :id of the journal in Alegra
296
+ ```
297
+ Lastly you can delete journals, by doing the following:
298
+ ```ruby
299
+ client.journals.delete(193, params) # Where 193 is the :id of the journal in Alegra
300
+ ```
160
301
  ## Development
161
302
 
162
- This gem is under construction and I'm writing it as I would like to use it. However, if you have any recommendation is well received.
303
+ This gem is under construction and I'm writing it with the goal that it will easy to use. However, if you have any recommendation is well received.
163
304
 
164
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
305
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rspec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
165
306
 
166
307
  To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
167
308
 
@@ -169,11 +310,18 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
169
310
 
170
311
  Bug reports and pull requests are welcome on GitHub at https://github.com/degzcs/alegra. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
171
312
 
172
- ## License
313
+ ## TODO
314
+ The next endpoints are pending:
173
315
 
174
- The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
175
-
176
- ## Contributors
316
+ - Estimates
317
+ - Number templates
318
+ - Retentions
319
+ - Sellers
320
+ - payments
321
+ - cancel payment(void)
322
+ - open payment convert https://developer.alegra.com/docs/convertir-pago-a-abierto
323
+ - Add attachment https://developer.alegra.com/docs/adjuntar-archivos-a-pagos
177
324
 
178
- - Diego Gomez
325
+ ## License
179
326
 
327
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
@@ -21,13 +21,12 @@ Gem::Specification.new do |spec|
21
21
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
22
  spec.require_paths = ["lib"]
23
23
 
24
- spec.add_development_dependency "bundler", "~> 1.13"
25
- spec.add_development_dependency "rake", "~> 10.0"
26
- spec.add_development_dependency "rspec", "~> 3.0"
27
- spec.add_development_dependency "vcr", "~> 3"
28
- spec.add_development_dependency "webmock", "~> 2.1"
29
- spec.add_development_dependency "jazz_fingers", "~> 4"
30
-
31
- spec.add_dependency "faraday", "~> 0.9"
32
- spec.add_dependency "json", "~> 1.7"
24
+ spec.add_development_dependency 'bundler', '~> 2.0'
25
+ spec.add_dependency 'faraday', '~> 0.17.0'
26
+ spec.add_development_dependency 'jazz_fingers', '~> 5.0'
27
+ spec.add_dependency 'json', '~> 2.2'
28
+ spec.add_development_dependency 'rake', '~> 13.0'
29
+ spec.add_development_dependency 'rspec', '~> 3.9.0'
30
+ spec.add_development_dependency 'vcr', '~> 5.0'
31
+ spec.add_development_dependency 'webmock', '~> 3.7'
33
32
  end
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "bundler/setup"
4
- require "alegra"
3
+ require 'bundler/setup'
4
+ require 'alegra'
5
5
 
6
6
  # You can add fixtures and/or initialization code here to make experimenting
7
7
  # with your gem easier. You can also use a different console, if you like.
@@ -10,5 +10,19 @@ require "alegra"
10
10
  # require "pry"
11
11
  # Pry.start
12
12
 
13
+ def reload!(print = true)
14
+ puts 'Reloading ...' if print
15
+ # Main project directory.
16
+ root_dir = File.expand_path('..', __dir__)
17
+ # Directories within the project that should be reloaded.
18
+ reload_dirs = %w{lib}
19
+ # Loop through and reload every file in all relevant project directories.
20
+ reload_dirs.each do |dir|
21
+ Dir.glob("#{root_dir}/#{dir}/**/*.rb").each { |f| load(f) }
22
+ end
23
+ # Return true when complete.
24
+ true
25
+ end
26
+
13
27
  require "irb"
14
28
  IRB.start
@@ -0,0 +1,21 @@
1
+ module Alegra
2
+ class BankAccounts < Alegra::Record
3
+ def list(options = { format: :formated })
4
+ client.get('bank-accounts', {}, options)
5
+ end
6
+
7
+ def find(id, options = { format: :formated })
8
+ client.get("bank-accounts/#{id}", {}, options)
9
+ end
10
+
11
+ def create(params, options = { format: :formated })
12
+ params = params.deep_camel_case_lower_keys
13
+ client.post('bank-accounts', params, options)
14
+ end
15
+
16
+ def transfer(id, params, options = { format: :formated })
17
+ params = params.deep_camel_case_lower_keys
18
+ client.post("bank-accounts/#{id}/transfer", params, options)
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,11 @@
1
+ module Alegra
2
+ class Categories < Alegra::Record
3
+ def list(params = {}, options = { format: :formated })
4
+ client.get('categories', params, options)
5
+ end
6
+
7
+ def find(id, options = { format: :formated })
8
+ client.get("categories/#{id}", {}, options)
9
+ end
10
+ end
11
+ end
@@ -1,8 +1,15 @@
1
1
  require 'alegra/setup'
2
2
  require 'alegra/request'
3
+ require 'alegra/record'
3
4
  require 'alegra/invoices'
4
5
  require 'alegra/contacts'
5
6
  require 'alegra/items'
7
+ require 'alegra/payments'
8
+ require 'alegra/company'
9
+ require 'alegra/users'
10
+ require 'alegra/categories'
11
+ require 'alegra/bank_accounts'
12
+ require 'alegra/journals'
6
13
 
7
14
  module Alegra
8
15
  class Client
@@ -10,36 +17,60 @@ module Alegra
10
17
  @setup = Alegra::Setup.new(username, apikey, debug)
11
18
  end
12
19
 
13
- def get(url, params={})
20
+ def get(url, params = {}, options = { format: :formated })
14
21
  request = Alegra::Request.new(@setup.host, @setup.path, @setup.token)
15
- request.get(url, params)
22
+ request.get(url, params, options)
16
23
  end
17
24
 
18
- def post(url, params={})
25
+ def post(url, params = {}, options = { format: :formated })
19
26
  request = Alegra::Request.new(@setup.host, @setup.path, @setup.token)
20
- request.post(url, params)
27
+ request.post(url, params, options)
21
28
  end
22
29
 
23
- def put(url, params={})
30
+ def put(url, params={}, options = { format: :formated })
24
31
  request = Alegra::Request.new(@setup.host, @setup.path, @setup.token)
25
- request.put(url, params)
32
+ request.put(url, params, options)
26
33
  end
27
34
 
28
- def delete(url, params={})
35
+ def delete(url, params={}, options = { format: :formated })
29
36
  request = Alegra::Request.new(@setup.host, @setup.path, @setup.token)
30
- request.delete(url, params)
31
- end
32
-
33
- def invoices
34
- Alegra::Invoices.new(self)
37
+ request.delete(url, params, options)
35
38
  end
36
39
 
37
40
  def contacts
38
41
  Alegra::Contacts.new(self)
39
42
  end
40
43
 
44
+ def invoices
45
+ Alegra::Invoices.new(self)
46
+ end
47
+
41
48
  def items
42
49
  Alegra::Items.new(self)
43
50
  end
51
+
52
+ def payments
53
+ Alegra::Payments.new(self)
54
+ end
55
+
56
+ def company
57
+ Alegra::Company.new(self)
58
+ end
59
+
60
+ def users
61
+ Alegra::Users.new(self)
62
+ end
63
+
64
+ def categories
65
+ Alegra::Categories.new(self)
66
+ end
67
+
68
+ def bank_accounts
69
+ Alegra::BankAccounts.new(self)
70
+ end
71
+
72
+ def journals
73
+ Alegra::Journals.new(self)
74
+ end
44
75
  end
45
76
  end
@@ -0,0 +1,12 @@
1
+ module Alegra
2
+ class Company < Alegra::Record
3
+ def find(options = { format: :formated })
4
+ client.get('company', {}, options)
5
+ end
6
+
7
+ def update(params, options = { format: :formated })
8
+ sanitize_params = params.deep_camel_case_lower_keys
9
+ client.put('company', sanitize_params, options)
10
+ end
11
+ end
12
+ end
@@ -1,21 +1,25 @@
1
1
  module Alegra
2
- class Contacts
3
- attr_reader :client
4
-
5
- def initialize(client)
6
- @client = client
7
- end
8
-
9
- # @param id [ Interger ]
2
+ class Contacts < Alegra::Record
3
+ # @param id [ Integer ]
10
4
  # @return [ Hash ]
11
5
  def find(id)
12
6
  client.get("contacts/#{ id }")
13
7
  end
14
8
 
15
9
  # Returs all contacts
10
+ # @param params [ Hash ]
11
+ # - start [ Integer ]
12
+ # - limit [ Integer ]
13
+ # - order_direction [ String ]
14
+ # - order_field [ string ]
15
+ # - query [ String ]
16
+ # - type [ Integer ]
17
+ # - metadata [ Boolean ]
18
+ # - name [ String ]
19
+ # - identification [ String ]
16
20
  # @return [ Array ]
17
- def list()
18
- client.get('contacts')
21
+ def list(params = {})
22
+ client.get('contacts', params)
19
23
  end
20
24
 
21
25
  # @param params [ Hash ]
@@ -36,8 +40,8 @@ module Alegra
36
40
  # - internal_contacts [ Array ]
37
41
  # @return [ Hash ]
38
42
  def create(params)
39
- _params = params.deep_camel_case_lower_keys
40
- client.post('contacts', _params)
43
+ params = params.deep_camel_case_lower_keys
44
+ client.post('contacts', params)
41
45
  end
42
46
 
43
47
  # @param id [ Integer ]
@@ -59,14 +63,15 @@ module Alegra
59
63
  # - internal_contacts [ Array ]
60
64
  # @return [ Hash ]
61
65
  def update(id, params)
62
- _params = params.deep_camel_case_lower_keys
63
- client.put("contacts/#{ id }", _params)
66
+ sanitize_params = params.deep_camel_case_lower_keys
67
+ client.put("contacts/#{id}", sanitize_params)
68
+
64
69
  end
65
70
 
66
71
  # @param id [ Integer ]
67
72
  # @return [ Hash ]
68
73
  def delete(id)
69
- client.delete("contacts/#{ id }")
74
+ client.delete("contacts/#{id}")
70
75
  end
71
76
  end
72
- end
77
+ end
@@ -1,21 +1,28 @@
1
1
  module Alegra
2
- class Invoices
3
- attr_reader :client
4
-
5
- def initialize(client)
6
- @client = client
7
- end
8
-
9
- # @param id [ Interger ]
2
+ class Invoices < Alegra::Record
3
+ # @param id [ Integer ]
10
4
  # @return [ Hash ]
11
5
  def find(id)
12
- client.get("invoices/#{ id }")
6
+ client.get("invoices/#{id}")
13
7
  end
14
8
 
15
9
  # Returs all invoices
10
+ # @param params [ Hash ]
11
+ # - start [ Integer ]
12
+ # - limit [ Integer ]
13
+ # - order_direction [ String ]
14
+ # - order_field [ string ]
15
+ # - metadata [ Boolean ]
16
+ # - id [ Integer ]
17
+ # - date [ String ]
18
+ # - due_date [ String ]
19
+ # - status [ String ]
20
+ # - client_name [ String ]
21
+ # - client_identification [ String ]
22
+ # - number_template_full_number
16
23
  # @return [ Array ]
17
- def list()
18
- client.get('invoices')
24
+ def list(params = {})
25
+ client.get('invoices', params)
19
26
  end
20
27
 
21
28
  # Creates a invoice
@@ -36,8 +43,8 @@ module Alegra
36
43
  # - seller [ String ]
37
44
  # @return [ Hash ]
38
45
  def create(params)
39
- _params = params.deep_camel_case_lower_keys
40
- client.post('invoices', _params)
46
+ sanitize_params = params.deep_camel_case_lower_keys
47
+ client.post('invoices', sanitize_params)
41
48
  end
42
49
 
43
50
  # Creates a invoice
@@ -58,8 +65,8 @@ module Alegra
58
65
  # - seller [ String ]
59
66
  # @return [ Hash ]
60
67
  def update(id, params)
61
- _params = params.deep_camel_case_lower_keys
62
- client.put("invoices/#{ id }", _params)
68
+ sanitize_params = params.deep_camel_case_lower_keys
69
+ client.put("invoices/#{id}", sanitize_params)
63
70
  end
64
71
 
65
72
  # @param id [ Integer ]
@@ -69,8 +76,8 @@ module Alegra
69
76
  # - invoiceType [ String ]
70
77
  # @return [ Hash ]
71
78
  def send_by_email(id, params)
72
- _params = params.deep_camel_case_lower_keys
73
- client.post("invoices/#{ id }/email", _params)
79
+ sanitize_params = params.deep_camel_case_lower_keys
80
+ client.post("invoices/#{id}/email", sanitize_params)
74
81
  end
75
82
  end
76
83
  end
@@ -1,12 +1,6 @@
1
1
  module Alegra
2
- class Items
3
- attr_reader :client
4
-
5
- def initialize(client)
6
- @client = client
7
- end
8
-
9
- # @param id [ Interger ]
2
+ class Items < Alegra::Record
3
+ # @param id [ Integer ]
10
4
  # @return [ Hash ]
11
5
  def find(id)
12
6
  client.get("items/#{ id }")
@@ -53,4 +47,4 @@ module Alegra
53
47
  client.delete("items/#{ id }")
54
48
  end
55
49
  end
56
- end
50
+ end
@@ -0,0 +1,25 @@
1
+ module Alegra
2
+ class Journals < Alegra::Record
3
+ def find(id)
4
+ client.get("journals/#{id}")
5
+ end
6
+
7
+ def list(params = {})
8
+ client.get('journals', params)
9
+ end
10
+
11
+ def create(params)
12
+ params = params.deep_camel_case_lower_keys
13
+ client.post('journals', params)
14
+ end
15
+
16
+ def update(id, params)
17
+ params = params.deep_camel_case_lower_keys
18
+ client.put("journals/#{id}", params)
19
+ end
20
+
21
+ def delete(id)
22
+ client.delete("journals/#{id}")
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,70 @@
1
+ module Alegra
2
+ class Payments < Alegra::Record
3
+ # @param id [ Integer ]
4
+ # @return [ Hash ]
5
+ def find(id)
6
+ client.get("payments/#{id}")
7
+ end
8
+
9
+ # Returs all payments
10
+ # @param params [ Hash ]
11
+ # - start [ Integer ]
12
+ # - limit [ Integer ]
13
+ # - order_direction [ String ]
14
+ # - order_field [ string ]
15
+ # - type [ Integer ]
16
+ # - metadata [ Boolean ]
17
+ # - id [ Integer ]
18
+ # @return [ Array ]
19
+ def list(params = {})
20
+ client.get('payments', params)
21
+ end
22
+
23
+ # Creates a payment
24
+ # @param params [ Hash ]
25
+ # - date [ String ]
26
+ # - bank_account [ Integer ] or [ Hash ]
27
+ # - payment_method [ String ]
28
+ # - observations [ String ]
29
+ # - anotation [ String ]
30
+ # - type [ String ]
31
+ # - client [ Integer ] or [ Hash ]
32
+ # - invoices [ Array ]
33
+ # - bills [ Array ]
34
+ # - categories [ Array ]
35
+ # - retentions [ Array ]
36
+ # - currency [ Array ]
37
+ # @return [ Hash ]
38
+ def create(params)
39
+ sanitize_params = params.deep_camel_case_lower_keys
40
+ client.post('payments', sanitize_params)
41
+ end
42
+
43
+ # Update a payment
44
+ # @param id [ Integer ]
45
+ # @param params [ Hash ]
46
+ # - date [ String ]
47
+ # - bank_account [ Integer ] or [ Hash ]
48
+ # - payment_method [ String ]
49
+ # - observations [ String ]
50
+ # - anotation [ String ]
51
+ # - type [ String ]
52
+ # - client [ Integer ] or [ Hash ]
53
+ # - invoices [ Array ]
54
+ # - bills [ Array ]
55
+ # - categories [ Array ]
56
+ # - retentions [ Array ]
57
+ # - currency [ Array ]
58
+ # @return [ Hash ]
59
+ def update(id, params)
60
+ sanitize_params = params.deep_camel_case_lower_keys
61
+ client.put("payments/#{id}", sanitize_params)
62
+ end
63
+
64
+ # @param id [ Integer ]
65
+ # @return [ Hash ]
66
+ def delete(id)
67
+ client.delete("payments/#{id}")
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,9 @@
1
+ module Alegra
2
+ class Record
3
+ attr_reader :client
4
+
5
+ def initialize(client)
6
+ @client = client
7
+ end
8
+ end
9
+ end
@@ -9,32 +9,31 @@ module Alegra
9
9
  @session = Faraday.new url: host
10
10
  end
11
11
 
12
- def get(url, params={})
13
- params = JSON.generate(params)
14
- response = @session.get do |req|
15
- req.url "#{ @path }#{ url }"
16
- req.headers['Content-Type'] = 'application/json'
17
- req.headers['Accept'] = 'application/json'
18
- req.headers['Authorization'] = "Basic #{ @token }"
19
- end
20
- cast_error(response) unless (response.status == 200 || response.status == 201)
21
- return Alegra::Response.new(response.body).call
12
+ def get(url, params = {}, options = { format: :formated })
13
+ params = URI.encode_www_form(params)
14
+
15
+ response = @session.get do |req|
16
+ req.url "#{@path}#{url}?#{params}"
17
+ req.headers['Content-Type'] = 'application/json'
18
+ req.headers['Accept'] = 'application/json'
19
+ req.headers['Authorization'] = "Basic #{@token}"
20
+ end
21
+ response_of_request(response, options)
22
22
  end
23
23
 
24
- def post(url, params={})
25
- params = JSON.generate(params)
26
- response = @session.post do |req|
27
- req.url "#{ @path }#{ url }"
28
- req.headers['Content-Type'] = 'application/json'
29
- req.headers['Accept'] = 'application/json'
30
- req.headers['Authorization'] = "Basic #{ @token }"
31
- req.body = params
32
- end
33
- cast_error(response) unless (response.status == 200 || response.status == 201)
34
- return Alegra::Response.new(response.body).call
24
+ def post(url, params = {}, options = { format: :formated })
25
+ params = JSON.generate(params)
26
+ response = @session.post do |req|
27
+ req.url "#{ @path }#{ url }"
28
+ req.headers['Content-Type'] = 'application/json'
29
+ req.headers['Accept'] = 'application/json'
30
+ req.headers['Authorization'] = "Basic #{ @token }"
31
+ req.body = params
32
+ end
33
+ response_of_request(response, options)
35
34
  end
36
35
 
37
- def put(url, params={})
36
+ def put(url, params={}, options = { format: :formated })
38
37
  params = JSON.generate(params)
39
38
  response = @session.put do |req|
40
39
  req.url "#{ @path }#{ url }"
@@ -43,12 +42,10 @@ module Alegra
43
42
  req.headers['Authorization'] = "Basic #{ @token }"
44
43
  req.body = params
45
44
  end
46
- cast_error(response) unless (response.status == 200 || response.status == 201)
47
- return Alegra::Response.new(response.body).call
45
+ response_of_request(response, options)
48
46
  end
49
47
 
50
-
51
- def delete(url, params={})
48
+ def delete(url, params={}, options = { format: :formated })
52
49
  params = JSON.generate(params)
53
50
  response = @session.delete do |req|
54
51
  req.url "#{ @path }#{ url }"
@@ -57,12 +54,28 @@ module Alegra
57
54
  req.headers['Authorization'] = "Basic #{ @token }"
58
55
  req.body = params
59
56
  end
60
- cast_error(response) unless (response.status == 200 || response.status == 201)
61
- return Alegra::Response.new(response.body).call
57
+ response_of_request(response, options)
62
58
  end
63
59
 
64
- def cast_error(response)
60
+ private
61
+
62
+ def response_of_request(response, options = { format: :formated })
63
+ cast_error(response, options) unless response.status == 200 || response.status == 201
64
+
65
+ raise_invalid_format options[:format]
66
+
67
+ return response if options[:format] == :raw
68
+
69
+ Alegra::Response.new(response.body).call
70
+ end
71
+
72
+ def cast_error(response, options = { format: :formated })
73
+ raise_invalid_format options[:format]
74
+
75
+ return response if options[:format] == :raw
76
+
65
77
  message = response.body.empty? ? response.body : Alegra::Response.new(response.body).call['message']
78
+
66
79
  error_map = {
67
80
  500 => 'Sever error! Something were wrong in the server.',
68
81
  400 => "Bad request!, #{ message }",
@@ -74,5 +87,12 @@ module Alegra
74
87
  }
75
88
  raise StandardError, "Status: #{ response.status }. Error: #{ error_map[response.status] }"
76
89
  end
90
+
91
+ def raise_invalid_format(format)
92
+ return if %i[formated raw].include?(format)
93
+ return if format.nil?
94
+
95
+ raise StandardError, "#{format} is not a valid format, valid_formats[:formated, :raw]"
96
+ end
77
97
  end
78
- end
98
+ end
@@ -16,4 +16,4 @@ module Alegra
16
16
  end
17
17
  end
18
18
  end
19
- end
19
+ end
@@ -38,7 +38,7 @@ module Alegra
38
38
  end
39
39
 
40
40
  def create_token!
41
- @token = ::Base64.encode64("#{@username}:#{@apikey}")
41
+ @token = ::Base64.strict_encode64("#{@username}:#{@apikey}")
42
42
  end
43
43
  end
44
44
  end
@@ -0,0 +1,15 @@
1
+ module Alegra
2
+ class Users < Alegra::Record
3
+ def list(options = { format: :formated })
4
+ client.get('users', {}, options)
5
+ end
6
+
7
+ def find(id, options = { format: :formated })
8
+ client.get("users/#{id}", {}, options)
9
+ end
10
+
11
+ def find_current(options = { format: :formated })
12
+ client.get('users/self', {}, options)
13
+ end
14
+ end
15
+ end
@@ -1,3 +1,3 @@
1
1
  module Alegra
2
- VERSION = "0.1.2.3"
2
+ VERSION = "0.4.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: alegra
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2.3
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Diego Gomez
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-10-27 00:00:00.000000000 Z
11
+ date: 2020-03-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,112 +16,112 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.13'
19
+ version: '2.0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.13'
26
+ version: '2.0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rake
28
+ name: faraday
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
34
- type: :development
33
+ version: 0.17.0
34
+ type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: 0.17.0
41
41
  - !ruby/object:Gem::Dependency
42
- name: rspec
42
+ name: jazz_fingers
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '3.0'
47
+ version: '5.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '3.0'
54
+ version: '5.0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: vcr
56
+ name: json
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '3'
62
- type: :development
61
+ version: '2.2'
62
+ type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '3'
68
+ version: '2.2'
69
69
  - !ruby/object:Gem::Dependency
70
- name: webmock
70
+ name: rake
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '2.1'
75
+ version: '13.0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '2.1'
82
+ version: '13.0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: jazz_fingers
84
+ name: rspec
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '4'
89
+ version: 3.9.0
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '4'
96
+ version: 3.9.0
97
97
  - !ruby/object:Gem::Dependency
98
- name: faraday
98
+ name: vcr
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '0.9'
104
- type: :runtime
103
+ version: '5.0'
104
+ type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '0.9'
110
+ version: '5.0'
111
111
  - !ruby/object:Gem::Dependency
112
- name: json
112
+ name: webmock
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: '1.7'
118
- type: :runtime
117
+ version: '3.7'
118
+ type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: '1.7'
124
+ version: '3.7'
125
125
  description: Gem to wrap Alegra API. This is unofficial gem (until now)
126
126
  email:
127
127
  - diego.f.gomez.pardo@gmail.com
@@ -141,14 +141,21 @@ files:
141
141
  - bin/console
142
142
  - bin/setup
143
143
  - lib/alegra.rb
144
+ - lib/alegra/bank_accounts.rb
145
+ - lib/alegra/categories.rb
144
146
  - lib/alegra/client.rb
147
+ - lib/alegra/company.rb
145
148
  - lib/alegra/contacts.rb
146
149
  - lib/alegra/formatters/underscore_formatter.rb
147
150
  - lib/alegra/invoices.rb
148
151
  - lib/alegra/items.rb
152
+ - lib/alegra/journals.rb
153
+ - lib/alegra/payments.rb
154
+ - lib/alegra/record.rb
149
155
  - lib/alegra/request.rb
150
156
  - lib/alegra/response.rb
151
157
  - lib/alegra/setup.rb
158
+ - lib/alegra/users.rb
152
159
  - lib/alegra/utilities/array.rb
153
160
  - lib/alegra/utilities/hash.rb
154
161
  - lib/alegra/utilities/string.rb
@@ -173,7 +180,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
173
180
  version: '0'
174
181
  requirements: []
175
182
  rubyforge_project:
176
- rubygems_version: 2.5.1
183
+ rubygems_version: 2.7.3
177
184
  signing_key:
178
185
  specification_version: 4
179
186
  summary: Gem to wrap Alegra API.