tco_client_core 0.1.3 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bb7e85db0f524ca8d6aea9f9501d3b6a3c8d3d5e
4
- data.tar.gz: bb730570d3131439cc7ca55ad6fa25e5121affc3
3
+ metadata.gz: 988aa36ca352a04d8301597ea64143f36ce78971
4
+ data.tar.gz: 7dd34b6afb2fd308003a9a0322ac4a2e44219f17
5
5
  SHA512:
6
- metadata.gz: d32fa588db99fb5745e8116e2aa5509708636a93f52341bea4757e53f4cf849dbf2459cea66913a195119734066791d87bf1749eca1324e8fb8771bd7cb7031a
7
- data.tar.gz: 641a5f4879038e5f005cd51ca9016ad39495c65c97e057f2934217bb10a79ceeb17654d5ba3018542d8493b335e24fa1c309b1ec3a3189c4eab7a3e405694484
6
+ metadata.gz: a03da0c76691340140a2dd11d774c83a91f89c1f415f88369b2b6faf453324f46e978ff55ec4776d04aab7d2321fa29ca1030db06b2429fdc8b3bcad834e78f6
7
+ data.tar.gz: 2605a74f0b59bb4e3de9236f24c697aac30098fdb954a64a5c29c8bc72c505f7b95e0da399848e2f0dbee830eeb578df5cb85b23b2bfd872a0c8018c485028d9
@@ -21,12 +21,12 @@ module TcoClientCore
21
21
  payload: payload.to_json,
22
22
  headers: {
23
23
  accept: :json,
24
- content_type: 'application/json',
24
+ content_type: "application/json",
25
25
  authorization: authorization
26
26
  }
27
27
  }
28
28
 
29
- response = TcoClientCore::Response.new(RestClient::Request.new(params).execute)
29
+ TcoClientCore::Response.new(RestClient::Request.new(params).execute)
30
30
  end
31
31
 
32
32
  def self.get(endpoint, options={})
@@ -1,55 +1,27 @@
1
- require "ostruct"
2
1
  require "json"
3
2
 
4
3
  module TcoClientCore
5
4
  class Response
6
- def self.to_struct(object)
7
- if object.is_a? Array
8
- object.map { |v| to_struct(v) }
9
- elsif object.is_a? Hash
10
- object.each_with_object(OpenStruct.new) do |(key, val), st|
11
- st[key] = to_struct(val)
12
- end
13
- else
14
- object
15
- end
16
- end
5
+ extend Forwardable
17
6
 
18
- attr_reader :raw, :to_struct
7
+ def_delegators :@response, :to_h, :to_hash
19
8
 
20
- def initialize(response)
21
- @raw = response
22
- errors.each do |key, value|
23
- if key == "ActiveRecord::RecordNotFound"
24
- raise TcoClientCore::RecordNotFound, value.first
25
- end
9
+ def initialize(raw)
10
+ @raw = raw
11
+ @response = JSON.parse(raw)
12
+ raise ArgumentError, "TcoClientCore::Response: response hash required" unless @response.is_a? Hash
13
+ @response.keys.each do |key|
14
+ next if key == "errors"
15
+ define_singleton_method(key) { @response[key] }
26
16
  end
27
- @to_struct = self.class.to_struct(as_json)
28
- end
29
-
30
- def to_json
31
- to_s
32
- end
33
-
34
- def as_json
35
- JSON.parse(raw)
36
- end
37
-
38
- def to_s
39
- raw.to_s
40
17
  end
41
18
 
42
19
  def errors?
43
- json = as_json
44
- !!(json.is_a?(Hash) && (json.fetch("errors", nil) || json.fetch(:errors, nil)))
20
+ @response.key?("errors")
45
21
  end
46
22
 
47
23
  def errors
48
- if errors?
49
- as_json["errors"] || as_json[:errors]
50
- else
51
- {}
52
- end
24
+ @response.fetch("errors", {})
53
25
  end
54
26
  end
55
27
  end
@@ -1,3 +1,3 @@
1
1
  module TcoClientCore
2
- VERSION = "0.1.3"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -1,124 +1,44 @@
1
1
  require "spec_helper"
2
2
 
3
3
  describe TcoClientCore::Response do
4
- let(:raw_response) { { test: "response" }.to_json }
5
- subject { TcoClientCore::Response.new(raw_response) }
4
+ let(:hash) { { "a" => "A", "b" => "B" } }
5
+ subject { TcoClientCore::Response.new(hash.to_json) }
6
6
 
7
- it "saves a reference to the raw response" do
8
- expect(subject.raw).to eq(raw_response)
7
+ it "raises an error when given a json array" do
8
+ expect {
9
+ TcoClientCore::Response.new("[]")
10
+ }.to raise_error ArgumentError
9
11
  end
10
12
 
11
- describe "#to_s" do
12
- it "returns the raw response string" do
13
- expect(subject.to_s).to eq(raw_response)
14
- end
15
- end
16
-
17
- describe "#to_json" do
18
- it "returns the raw json" do
19
- expect(subject.to_json).to eq(raw_response)
20
- end
13
+ it "defines methods for each key in the response hash" do
14
+ expect(subject.a).to eq("A")
15
+ expect(subject.b).to eq("B")
21
16
  end
22
17
 
23
- describe "#as_json" do
24
- it "returns the response as json" do
25
- expect(subject.as_json).to have_key("test")
26
- end
27
- end
28
-
29
- describe "#to_struct" do
30
- context "with a hash" do
31
- it "creates an open struct" do
32
- ostruct = subject.to_struct
33
- expect(ostruct).to be_kind_of(OpenStruct)
34
- end
35
-
36
- it "creates a open struct for nested hashes" do
37
- subject = TcoClientCore::Response.new({
38
- one: 1,
39
- two: { three: { four: 4 } }
40
- }.to_json)
41
-
42
- ostruct = subject.to_struct
43
- expect(ostruct[:two]).to be_kind_of(OpenStruct)
44
- expect(ostruct.two.three.four).to eq(4)
45
- end
46
-
47
- it "creates a open struct for array values with hashes" do
48
- subject = TcoClientCore::Response.new({
49
- one: 1,
50
- two: { three: [{ four: 4 }] }
51
- }.to_json)
52
- ostruct = subject.to_struct
53
- expect(ostruct.two.three.first).to be_kind_of(OpenStruct)
54
- end
55
-
56
- context "with nil values" do
57
- subject { TcoClientCore::Response.new({ test: nil }.to_json) }
58
-
59
- it "does not create an infinite loop" do
60
- expect { subject.to_struct }.not_to raise_error
61
- end
62
- end
18
+ describe "#to_h" do
19
+ it "returns the response json hash" do
20
+ expect(subject.to_h).to include(hash)
63
21
  end
64
22
 
65
- context "with an array" do
66
- it "creates a open struct for every hash property" do
67
- subject = TcoClientCore::Response.new([{ one: 1 }, { two: 2 }].to_json)
68
-
69
- array = subject.to_struct;
70
- expect(array.first).to be_kind_of(OpenStruct)
71
- expect(array.last).to be_kind_of(OpenStruct)
72
- end
73
-
74
- it "creates a open struct for nested arrays with hashes" do
75
- subject = TcoClientCore::Response.new([
76
- { one: 1 },
77
- [{ two: 2 }]
78
- ].to_json)
79
-
80
- array = subject.to_struct
81
- expect(array.last.first).to be_kind_of(OpenStruct)
82
- end
83
-
84
- context "with nil values" do
85
- subject { TcoClientCore::Response.new([nil].to_json) }
86
-
87
- it "does not create an infinite loop" do
88
- expect { subject.to_struct }.not_to raise_error
89
- end
90
- end
23
+ it "is aliased as to_hash" do
24
+ expect(subject.to_hash).to include(hash)
91
25
  end
92
26
  end
93
27
 
94
28
  describe "#errors?" do
95
- context "without errors" do
96
- it "returns false" do
97
- expect(subject.errors?).to eq(false)
98
- end
29
+ it "returns false when an errors key is missing" do
30
+ expect(subject.errors?).to eq(false)
99
31
  end
100
32
 
101
- context "with errors" do
102
- subject { TcoClientCore::Response.new({ errors: { field: ["error message"] } }.to_json) }
103
-
104
- it "return true" do
105
- expect(subject.errors?).to eq(true)
106
- end
33
+ it "returns true when an errors key is present" do
34
+ subject = TcoClientCore::Response.new({ errors: { foo: ["message"] } }.to_json)
35
+ expect(subject.errors?).to eq(true)
107
36
  end
108
37
  end
109
38
 
110
39
  describe "#errors" do
111
- subject { TcoClientCore::Response.new({ errors: { field: ["error message"] } }.to_json) }
112
-
113
- it "returns the errors key" do
114
- expect(subject.errors).to have_key("field")
115
- end
116
- end
117
-
118
- describe "with exceptions" do
119
- it "raises a TcoClientCore::RecordNotFound exception if the record was not found" do
120
- allow_any_instance_of(RestClient::Request).to receive(:execute).and_return({ "errors" => { "ActiveRecord::RecordNotFound" => ["not found error"] } }.to_json)
121
- expect { TcoClientCore::BaseRequest.request("test", :get) }.to raise_error(TcoClientCore::RecordNotFound)
40
+ it "returns an empty hash when there are no errors" do
41
+ expect(subject.errors).to eq({})
122
42
  end
123
43
  end
124
44
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tco_client_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - 2CO Inc
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-19 00:00:00.000000000 Z
11
+ date: 2015-05-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -255,7 +255,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
255
255
  version: '0'
256
256
  requirements: []
257
257
  rubyforge_project:
258
- rubygems_version: 2.4.3
258
+ rubygems_version: 2.2.2
259
259
  signing_key:
260
260
  specification_version: 4
261
261
  summary: Gem to handle communication with the 2CO API
@@ -264,3 +264,4 @@ test_files:
264
264
  - spec/response_spec.rb
265
265
  - spec/spec_helper.rb
266
266
  - spec/tco_base_api_spec.rb
267
+ has_rdoc: