alegra 0.1.1 → 0.1.2

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: 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: