alegra 0.1.1 → 0.1.2

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: 8449e5cbf7915fbc40fd7774552e0fae7a87ef6c
4
- data.tar.gz: 3310cdab9187dbee1cd746c5cfced9bb18a13d2d
3
+ metadata.gz: 891d984438bbd9b5eaff016bf210d4550afdcd26
4
+ data.tar.gz: 3f8c8798687d202ef9ebaa6b29a6d8348b1100cf
5
5
  SHA512:
6
- metadata.gz: 23c701feb6d7ce8938cab5102505033a169d4fca79c6e765b0d123aabef0aeb2c7f67e21f4ce1a26518a13bab9006ab6e6c6d8c7e8f808172e419105a09217e9
7
- data.tar.gz: e5a41d8a8f9f0500c75677288daae2047dcdcb779f17d24767f02fad102d7b4454f4d8bc0ced8e049ecf441023193845fea52642758dfad03a06b765eb448aa1
6
+ metadata.gz: d049eebe4613015c19fe154ab77435b40abd5822016be5b0a022e714660374c0f3c237141474ac6b6e6c0e50260732cbbb1c207e67d42ac0c90b4429ddeeaccc
7
+ data.tar.gz: 35600639aeb47604eca5ed4b4a9af509d601b437fd3eecba9b452ef0381a3665a1bf0a23e8a25341621b58cdce152a0f0c5dcb79b52164584e5d97e700f2d222
data/README.md CHANGED
@@ -50,6 +50,19 @@ params = {
50
50
  client.contacts.create(params)
51
51
  ```
52
52
 
53
+ You can update this contact too:
54
+ ```ruby
55
+ params = {
56
+ name: 'Sinc Hompas'
57
+ }
58
+ client.contacts.update(1, params)
59
+ ```
60
+
61
+ Or delete it, as follows:
62
+ ```ruby
63
+ client.contacts.delete(1)
64
+ ```
65
+
53
66
  ### Invoices
54
67
 
55
68
  You can get all invoices:
@@ -97,6 +110,17 @@ params = {
97
110
  client.invoices.create(params)
98
111
  ```
99
112
 
113
+ Update that invoice:
114
+ ```ruby
115
+ params = { observations: 'This invoice was updated!'}
116
+ client.invoices.update(1, params)
117
+ ```
118
+
119
+ Send that invoice by email:
120
+ ```ruby
121
+ params = { emails: ['your.email@alegra.com', 'another.eail@algra.com'], send_copy_to_user: true, invoice_type: 'copy'}
122
+ client.invoices.send_by_email(1, params)
123
+ ```
100
124
  ## Development
101
125
 
102
126
  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.
@@ -36,5 +36,9 @@ module Alegra
36
36
  def contacts
37
37
  Alegra::Contacts.new(self)
38
38
  end
39
+
40
+ def items
41
+ Alegra::Items.new(self)
42
+ end
39
43
  end
40
44
  end
@@ -0,0 +1,15 @@
1
+ module Alegra
2
+ module Formatters
3
+ class UnderscoreFormatter
4
+ attr_accessor :original_content, :formatted_content
5
+
6
+ def initialize
7
+ @original_content = ''
8
+ end
9
+ def call(options={})
10
+ original_content = options[:content]
11
+ @formatted_content = original_content.deep_underscore_keys
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,56 @@
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 ]
10
+ # @return [ Hash ]
11
+ def find(id)
12
+ client.get("items/#{ id }")
13
+ end
14
+
15
+ # Return all items
16
+ # @return [ Array ]
17
+ def list()
18
+ client.get('items')
19
+ end
20
+
21
+ # @param params [ Hash ]
22
+ # @return [ Hash ]
23
+ # - name [ String ]
24
+ # - description [ String ]
25
+ # - reference [ String ]
26
+ # - price [ Array ]
27
+ # - category [ Hash ]
28
+ # - inventory [ Hash ]
29
+ # - tax [ Array ]
30
+ def create(params)
31
+ _params = params.deep_camel_case_lower_keys
32
+ client.post('items', _params)
33
+ end
34
+
35
+ # @param id [ Integer ]
36
+ # @param params [ Hash ]
37
+ # @return [ Hash ]
38
+ # - name [ String ]
39
+ # - description [ String ]
40
+ # - reference [ String ]
41
+ # - price [ Array ]
42
+ # - category [ Hash ]
43
+ # - inventory [ Hash ]
44
+ # - tax [ Array ]
45
+ def update(id, params)
46
+ _params = params.deep_camel_case_lower_keys
47
+ client.put("items/#{ id }", _params)
48
+ end
49
+
50
+ # @param id [ Integer ]
51
+ # @return [ Hash ]
52
+ def delete(id)
53
+ client.delete("items/#{ id }")
54
+ end
55
+ end
56
+ end
@@ -17,7 +17,7 @@ module Alegra
17
17
  req.headers['Authorization'] = "Basic #{ @token }"
18
18
  end
19
19
  cast_error(response) unless (response.status == 200 || response.status == 201)
20
- return JSON.parse(response.body)
20
+ return Alegra::Response.new(response.body).call
21
21
  end
22
22
 
23
23
  def post(url, params={})
@@ -30,7 +30,7 @@ module Alegra
30
30
  req.body = params
31
31
  end
32
32
  cast_error(response) unless (response.status == 200 || response.status == 201)
33
- return JSON.parse(response.body)
33
+ return Alegra::Response.new(response.body).call
34
34
  end
35
35
 
36
36
  def put(url, params={})
@@ -43,7 +43,7 @@ module Alegra
43
43
  req.body = params
44
44
  end
45
45
  cast_error(response) unless (response.status == 200 || response.status == 201)
46
- return JSON.parse(response.body)
46
+ return Alegra::Response.new(response.body).call
47
47
  end
48
48
 
49
49
 
@@ -57,11 +57,11 @@ module Alegra
57
57
  req.body = params
58
58
  end
59
59
  cast_error(response) unless (response.status == 200 || response.status == 201)
60
- return JSON.parse(response.body)
60
+ return Alegra::Response.new(response.body).call
61
61
  end
62
62
 
63
63
  def cast_error(response)
64
- message = response.body.empty? ? response.body : JSON.parse(response.body)['message']
64
+ message = response.body.empty? ? response.body : Alegra::Response.new(response.body).call['message']
65
65
  error_map = {
66
66
  500 => 'Sever error! Something were wrong in the server.',
67
67
  400 => "Bad request!, #{ message }",
@@ -0,0 +1,19 @@
1
+ require 'alegra/formatters/underscore_formatter'
2
+ module Alegra
3
+ class Response
4
+ attr_reader :body, :formatter
5
+
6
+ def initialize(body, formatter_class_name='UnderscoreFormatter')
7
+ @body = JSON.parse(body)
8
+ @formatter = Object.const_get("Alegra::Formatters::#{ formatter_class_name }").new
9
+ end
10
+
11
+ def call(options={})
12
+ if options[:none]
13
+ JSON.parse(body)
14
+ else
15
+ formatter.call(content: body)
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,13 @@
1
+ class Array
2
+ def deep_camel_case_lower_keys
3
+ [].tap { |array|
4
+ self.each { |item| array << item.deep_camel_case_lower_keys if item.is_a? Hash }
5
+ }
6
+ end
7
+
8
+ def deep_underscore_keys
9
+ [].tap { |array|
10
+ self.each { |item| array << item.deep_underscore_keys if item.is_a? Hash }
11
+ }
12
+ end
13
+ end
@@ -1,22 +1,34 @@
1
1
  class Hash
2
2
  def deep_camel_case_lower_keys(hash=self)
3
3
  {}.tap { |h|
4
- hash.each { |key, value| h[transform_key(key)] = map_value(value) }
4
+ hash.each { |key, value| h[camel_case_lower_key(key)] = map_value(value, :deep_camel_case_lower_keys) }
5
5
  }
6
6
  end
7
7
 
8
- def map_value(thing)
8
+ def deep_underscore_keys(hash=self)
9
+ {}.tap { |h|
10
+ hash.each { |key, value| h[underscore_key(key)] = map_value(value, :deep_underscore_keys) }
11
+ }
12
+ end
13
+
14
+ private
15
+
16
+ def underscore_key(key)
17
+ key.to_s.underscore.to_sym
18
+ end
19
+
20
+ def camel_case_lower_key(key)
21
+ key.to_s.split('_').inject([]){ |buffer, e| buffer.push(buffer.empty? ? e : e.capitalize) }.join.to_sym
22
+ end
23
+
24
+ def map_value(thing, method)
9
25
  case thing
10
26
  when Hash
11
- deep_camel_case_lower_keys(thing)
27
+ __send__(method, thing)
12
28
  when Array
13
- thing.map { |v| map_value(v) }
29
+ thing.map { |v| map_value(v, method) }
14
30
  else
15
31
  thing
16
32
  end
17
33
  end
18
-
19
- def transform_key(key)
20
- key.to_s.split('_').inject([]){ |buffer, e| buffer.push(buffer.empty? ? e : e.capitalize) }.join.to_sym
21
- end
22
34
  end
@@ -0,0 +1,9 @@
1
+ class String
2
+ def underscore
3
+ self.gsub(/::/, '/').
4
+ gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
5
+ gsub(/([a-z\d])([A-Z])/,'\1_\2').
6
+ tr("-", "_").
7
+ downcase
8
+ end
9
+ end
@@ -1,3 +1,3 @@
1
1
  module Alegra
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
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.1
4
+ version: 0.1.2
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-22 00:00:00.000000000 Z
11
+ date: 2016-10-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -143,10 +143,15 @@ files:
143
143
  - lib/alegra.rb
144
144
  - lib/alegra/client.rb
145
145
  - lib/alegra/contacts.rb
146
+ - lib/alegra/formatters/underscore_formatter.rb
146
147
  - lib/alegra/invoices.rb
148
+ - lib/alegra/items.rb
147
149
  - lib/alegra/request.rb
150
+ - lib/alegra/response.rb
148
151
  - lib/alegra/setup.rb
152
+ - lib/alegra/utilities/array.rb
149
153
  - lib/alegra/utilities/hash.rb
154
+ - lib/alegra/utilities/string.rb
150
155
  - lib/alegra/version.rb
151
156
  homepage: https://github.com/degzcs/alegra
152
157
  licenses: