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 +4 -4
- data/README.md +24 -0
- data/lib/alegra/client.rb +4 -0
- data/lib/alegra/formatters/underscore_formatter.rb +15 -0
- data/lib/alegra/items.rb +56 -0
- data/lib/alegra/request.rb +5 -5
- data/lib/alegra/response.rb +19 -0
- data/lib/alegra/utilities/array.rb +13 -0
- data/lib/alegra/utilities/hash.rb +20 -8
- data/lib/alegra/utilities/string.rb +9 -0
- data/lib/alegra/version.rb +1 -1
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 891d984438bbd9b5eaff016bf210d4550afdcd26
|
4
|
+
data.tar.gz: 3f8c8798687d202ef9ebaa6b29a6d8348b1100cf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
data/lib/alegra/client.rb
CHANGED
@@ -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
|
data/lib/alegra/items.rb
ADDED
@@ -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
|
data/lib/alegra/request.rb
CHANGED
@@ -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
|
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
|
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
|
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
|
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 :
|
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[
|
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
|
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
|
-
|
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
|
data/lib/alegra/version.rb
CHANGED
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.
|
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-
|
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:
|