billogram 0.2.0 → 0.3.0
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/.gitignore +1 -0
- data/billogram.gemspec +2 -2
- data/lib/billogram.rb +1 -0
- data/lib/billogram/error.rb +27 -0
- data/lib/billogram/relation_builder.rb +8 -19
- data/lib/billogram/resource.rb +18 -14
- data/lib/billogram/version.rb +1 -1
- metadata +11 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7ea9d6bb4bcbf0fc5d3b772fdaa8711ffc71c53c
|
4
|
+
data.tar.gz: 3e08419d6355f7d66b6e96d90ae2864d085cc764
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0d1f0e740c9a15aa09f086831848ec1ef8bdce74662182461506acff9b76af757e4118e34a4ab6c49349336e14cb996fc46048979194407923d6a6cee168e388
|
7
|
+
data.tar.gz: 46176d7024013032388fd55f9fb98b61d354aca18ce16ea9560de4f65560eb48a0569c14daa0fa547b1e17b41a2d15ce8dc1506fa977755b37ddb87fbb6bc11d
|
data/.gitignore
CHANGED
data/billogram.gemspec
CHANGED
@@ -20,6 +20,6 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.add_development_dependency "bundler", "~> 1.10"
|
22
22
|
spec.add_development_dependency "rake", "~> 10.0"
|
23
|
-
spec.add_development_dependency "rspec"
|
24
|
-
spec.add_dependency "httparty"
|
23
|
+
spec.add_development_dependency "rspec", "~> 3.0"
|
24
|
+
spec.add_dependency "httparty", "~> 0.13"
|
25
25
|
end
|
data/lib/billogram.rb
CHANGED
@@ -0,0 +1,27 @@
|
|
1
|
+
module Billogram
|
2
|
+
class Error < StandardError
|
3
|
+
|
4
|
+
class BadRequest < Error; end
|
5
|
+
class Unauthorized < Error; end
|
6
|
+
class Forbidden < Error; end
|
7
|
+
class NotFound < Error; end
|
8
|
+
class InternalServerError < Error; end
|
9
|
+
|
10
|
+
def self.from_response(response)
|
11
|
+
status = response.response.code.to_i
|
12
|
+
body = response.body.to_s
|
13
|
+
headers = response.headers
|
14
|
+
|
15
|
+
if klass = case status
|
16
|
+
when 400 then Billogram::BadRequest
|
17
|
+
when 401 then Billogram::Unauthorized
|
18
|
+
when 403 then Billogram::Forbidden
|
19
|
+
when 404 then Billogram::NotFound
|
20
|
+
when 500 then Billogram::InternalServerError
|
21
|
+
else Billogram::Error
|
22
|
+
end
|
23
|
+
klass.new(response)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -29,27 +29,16 @@ module Billogram
|
|
29
29
|
|
30
30
|
def build_relation(type, relation_names)
|
31
31
|
relation_names.each do |name|
|
32
|
-
if
|
33
|
-
|
34
|
-
|
35
|
-
|
32
|
+
if attrs = relation_attributes(name)
|
33
|
+
if type == :one
|
34
|
+
value = relation_class(name).new(attrs)
|
35
|
+
elsif type == :many
|
36
|
+
value = attrs.map{|item| relation_class(name[0..-2]).new(item) }
|
37
|
+
end
|
38
|
+
|
39
|
+
resource.public_send("#{name}=", value)
|
36
40
|
end
|
37
41
|
end
|
38
42
|
end
|
39
|
-
|
40
|
-
def build_one_relation(name)
|
41
|
-
if attrs = relation_attributes(name)
|
42
|
-
value = relation_class(name).new attrs
|
43
|
-
resource.instance_variable_set("@#{name}", value)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
def build_many_relation(name)
|
48
|
-
if attrs = relation_attributes(name)
|
49
|
-
singular = name[0..name.length-2]
|
50
|
-
value = attrs.map{|item| relation_class(singular).new(item) }
|
51
|
-
resource.instance_variable_set("@#{name}", value)
|
52
|
-
end
|
53
|
-
end
|
54
43
|
end
|
55
44
|
end
|
data/lib/billogram/resource.rb
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
module Billogram
|
2
2
|
class Resource
|
3
|
-
|
4
|
-
|
5
|
-
DEFAULT_OPTIONS = { page: 1, page_size: 2 }
|
3
|
+
DEFAULT_OPTIONS = { page: 1, page_size: 50 }
|
6
4
|
|
7
5
|
class << self
|
8
6
|
def relations
|
@@ -11,39 +9,45 @@ module Billogram
|
|
11
9
|
|
12
10
|
def endpoint(value = nil)
|
13
11
|
@endpoint = value if value
|
14
|
-
@endpoint || name.
|
12
|
+
@endpoint || "#{name.sub('Billogram::', '').downcase}s"
|
15
13
|
end
|
16
14
|
|
17
15
|
def search(options = {})
|
18
16
|
query = DEFAULT_OPTIONS.merge(options)
|
19
17
|
response = Billogram.client.get("#{endpoint}", {query: query})
|
20
|
-
parse_response(response
|
18
|
+
parse_response(response)
|
21
19
|
end
|
22
20
|
|
23
21
|
def fetch(id)
|
24
22
|
response = Billogram.client.get("#{endpoint}/#{id}")
|
25
|
-
parse_response(response
|
23
|
+
parse_response(response)
|
24
|
+
end
|
25
|
+
|
26
|
+
def parse_response(response)
|
27
|
+
response.code == 200 ? build_objects(response.parsed_response['data']) : process_error(response)
|
26
28
|
end
|
27
29
|
|
28
|
-
def
|
29
|
-
|
30
|
+
def relation(relation_name, relation_type = :one)
|
31
|
+
relations[relation_type] << relation_name
|
32
|
+
attr_accessor relation_name
|
33
|
+
end
|
34
|
+
|
35
|
+
def build_objects(data)
|
30
36
|
case data
|
31
37
|
when Hash then new(data)
|
32
|
-
when Array then data.map{|item|
|
33
|
-
when nil
|
38
|
+
when Array then data.map{|item| build_objects(item) }
|
34
39
|
else data
|
35
40
|
end
|
36
41
|
end
|
37
42
|
|
38
|
-
def
|
39
|
-
|
40
|
-
attr_reader relation_name
|
43
|
+
def process_error(response)
|
44
|
+
raise Billogram::Error.from_response(response)
|
41
45
|
end
|
42
46
|
end
|
43
47
|
|
44
48
|
def initialize(attributes = {})
|
45
49
|
Hash(attributes).each do |key, value|
|
46
|
-
|
50
|
+
public_send("#{key}=", value) if respond_to?(key)
|
47
51
|
end
|
48
52
|
|
49
53
|
RelationBuilder.new(self, attributes).call
|
data/lib/billogram/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: billogram
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mark Birman
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-08-
|
11
|
+
date: 2015-08-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -42,30 +42,30 @@ dependencies:
|
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
47
|
+
version: '3.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: '0'
|
54
|
+
version: '3.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: httparty
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
61
|
+
version: '0.13'
|
62
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: '0'
|
68
|
+
version: '0.13'
|
69
69
|
description:
|
70
70
|
email:
|
71
71
|
- birmanmark@gmail.com
|
@@ -85,6 +85,7 @@ files:
|
|
85
85
|
- bin/setup
|
86
86
|
- lib/billogram.rb
|
87
87
|
- lib/billogram/client.rb
|
88
|
+
- lib/billogram/error.rb
|
88
89
|
- lib/billogram/relation_builder.rb
|
89
90
|
- lib/billogram/resource.rb
|
90
91
|
- lib/billogram/resources/address.rb
|