billogram 0.2.0 → 0.3.0

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: 413126d96eb6392012e781f51b6e55ee2aa96caa
4
- data.tar.gz: 4b6ade05a3d41a5f93d3e6fb117b1e6bf02b1a3e
3
+ metadata.gz: 7ea9d6bb4bcbf0fc5d3b772fdaa8711ffc71c53c
4
+ data.tar.gz: 3e08419d6355f7d66b6e96d90ae2864d085cc764
5
5
  SHA512:
6
- metadata.gz: cd39f9925577645dce7f92eadb6e6fdc37cd30b07df889fb9f1fd4b777d6372954ab0a9f9d9c33a430c3bb2347ea12ff9f119b6556d1c63ff3bd21f87938e0d8
7
- data.tar.gz: ca621f3971aa723a343c3188576bbdbdabffbc126d2dd0d01e987c60990acd0711373c616089de46d4eddf93777c798aa3a0a4bba875b90655bbaa1cb72bbe10
6
+ metadata.gz: 0d1f0e740c9a15aa09f086831848ec1ef8bdce74662182461506acff9b76af757e4118e34a4ab6c49349336e14cb996fc46048979194407923d6a6cee168e388
7
+ data.tar.gz: 46176d7024013032388fd55f9fb98b61d354aca18ce16ea9560de4f65560eb48a0569c14daa0fa547b1e17b41a2d15ce8dc1506fa977755b37ddb87fbb6bc11d
data/.gitignore CHANGED
@@ -7,3 +7,4 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
+ *.gem
@@ -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
@@ -1,5 +1,6 @@
1
1
  require "httparty"
2
2
  require "billogram/client"
3
+ require "billogram/error"
3
4
  require "billogram/relation_builder"
4
5
  require "billogram/resource"
5
6
  require 'billogram/resources/address'
@@ -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 type == :one
33
- build_one_relation(name)
34
- elsif type == :many
35
- build_many_relation(name)
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
@@ -1,8 +1,6 @@
1
1
  module Billogram
2
2
  class Resource
3
- attr_reader :data
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.demodulize.underscore.pluralize
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.parsed_response["data"])
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.parsed_response["data"])
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 parse_response(data)
29
- # TODO: refactor, error handling
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| parse_response(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 relation(relation_name, relation_type = :one)
39
- relations[relation_type] << relation_name
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
- instance_variable_set("@#{key}", value) if respond_to?(key)
50
+ public_send("#{key}=", value) if respond_to?(key)
47
51
  end
48
52
 
49
53
  RelationBuilder.new(self, attributes).call
@@ -1,3 +1,3 @@
1
1
  module Billogram
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
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.2.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-16 00:00:00.000000000 Z
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