brainstem-adaptor 0.0.3 → 0.0.4
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 +5 -5
- data/README.md +2 -1
- data/brainstem-adaptor.gemspec +4 -4
- data/lib/brainstem-adaptor.rb +2 -1
- data/lib/brainstem_adaptor/parsers/array_parser.rb +24 -0
- data/lib/brainstem_adaptor/response.rb +3 -1
- data/spec/lib/brainstem_adaptor/parsers/array_parser_spec.rb +54 -0
- data/spec/lib/brainstem_adaptor/response_spec.rb +11 -0
- metadata +17 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 0510a423223a9044e50d7233a1a9ac806e2608c207fc433b58bd06ca4cb1378f
|
4
|
+
data.tar.gz: a7577a5628c351ac34cc3e74f0f3338a271e4906d4c5f1ec0216bdf6dcaf743c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 593cc4ecc3ff7e99be5229a47c4cd94586b50622e42fc9dc567e45ab41cb0beaa92a0fb1e066c771736196a25ffda23cd2cb3be1f400fba8b830e1866e4b9bdd
|
7
|
+
data.tar.gz: e8dc4dc4e62f9a985e7fae69eac224ed6bc888aa479dcaf2ea6dcc4cdd012bb071bbae750486a66f7eddf0654287d40418f4f4445190f737573a4cb484070466
|
data/README.md
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
## Ruby Brainstem Adaptor
|
2
2
|
[](https://travis-ci.org/einzige/brainstem-adaptor)
|
3
3
|
[](https://gemnasium.com/einzige/brainstem-ruby)
|
4
|
+
[](http://badge.fury.io/rb/brainstem-adaptor)
|
4
5
|
|
5
6
|
Brainstem Adaptor provides an easy to use interface for [Brainstem](https://github.com/mavenlink/brainstem) API.
|
6
7
|
|
@@ -95,4 +96,4 @@ response = BrainstemAdaptor::Response.new(response_data, BrainstemAdaptor::Speci
|
|
95
96
|
|
96
97
|
## License
|
97
98
|
|
98
|
-
Brainstem Adaptor was created by Mavenlink, Inc. and
|
99
|
+
Brainstem Adaptor was created by Mavenlink, Inc. and available under the MIT License.
|
data/brainstem-adaptor.gemspec
CHANGED
@@ -2,12 +2,12 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{brainstem-adaptor}
|
5
|
-
s.version = "0.0.
|
5
|
+
s.version = "0.0.4"
|
6
6
|
|
7
7
|
s.date = %q{2014-03-10}
|
8
|
-
s.authors = ["Sergei Zinin (einzige)"]
|
9
|
-
s.email =
|
10
|
-
s.homepage = %q{
|
8
|
+
s.authors = ["Mavenlink", "Sergei Zinin (einzige)"]
|
9
|
+
s.email = ["opensource@mavenlink.com", "szinin@gmail.com"]
|
10
|
+
s.homepage = %q{https://github.com/mavenlink/brainstem-adaptor}
|
11
11
|
|
12
12
|
s.licenses = ["MIT"]
|
13
13
|
|
data/lib/brainstem-adaptor.rb
CHANGED
@@ -7,10 +7,11 @@ require 'brainstem_adaptor/specification'
|
|
7
7
|
require 'brainstem_adaptor/association'
|
8
8
|
require 'brainstem_adaptor/record'
|
9
9
|
require 'brainstem_adaptor/invalid_response_error'
|
10
|
+
require 'brainstem_adaptor/parsers/array_parser'
|
10
11
|
require 'brainstem_adaptor/response'
|
11
12
|
|
12
13
|
module BrainstemAdaptor
|
13
|
-
VERSION = '0.0.
|
14
|
+
VERSION = '0.0.4'
|
14
15
|
|
15
16
|
def self.parser
|
16
17
|
@parser ||= JSON
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module BrainstemAdaptor
|
2
|
+
module Parsers
|
3
|
+
module ArrayParser
|
4
|
+
# Parse irregular endpoints that return an array of objects instead of the standard JSON response
|
5
|
+
def self.parse(response_data, collection_name)
|
6
|
+
raise InvalidResponseError, "collection name is not specified" unless collection_name
|
7
|
+
|
8
|
+
{
|
9
|
+
"count" => response_data.count,
|
10
|
+
"results" => response_data.map do |obj|
|
11
|
+
{
|
12
|
+
"key" => collection_name,
|
13
|
+
"id" => obj["id"].to_s
|
14
|
+
}
|
15
|
+
end,
|
16
|
+
collection_name => response_data.reduce({}) do |hash, obj|
|
17
|
+
hash[obj["id"].to_s] = obj
|
18
|
+
hash
|
19
|
+
end
|
20
|
+
}
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -4,7 +4,7 @@ module BrainstemAdaptor
|
|
4
4
|
|
5
5
|
# @param response_data [String, Hash]
|
6
6
|
# @param specification [BrainstemAdaptor::Specification]
|
7
|
-
def initialize(response_data, specification = BrainstemAdaptor.default_specification)
|
7
|
+
def initialize(response_data, specification = BrainstemAdaptor.default_specification, **options)
|
8
8
|
@specification = specification or raise ArgumentError, 'Specification is not set'
|
9
9
|
|
10
10
|
case response_data
|
@@ -12,6 +12,8 @@ module BrainstemAdaptor
|
|
12
12
|
@response_data = BrainstemAdaptor.parser.parse(response_data)
|
13
13
|
when Hash
|
14
14
|
@response_data = response_data
|
15
|
+
when Array
|
16
|
+
@response_data = BrainstemAdaptor::Parsers::ArrayParser.parse(response_data, options[:collection_name])
|
15
17
|
else
|
16
18
|
raise ArgumentError, "Expected String, got #{@response_data.class.name}"
|
17
19
|
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe BrainstemAdaptor::Parsers::ArrayParser do
|
4
|
+
describe ".parse" do
|
5
|
+
subject { described_class.parse(response_data, collection_name) }
|
6
|
+
|
7
|
+
let(:response_data) do
|
8
|
+
[
|
9
|
+
{
|
10
|
+
"id" => "1",
|
11
|
+
"title" => "An object"
|
12
|
+
},
|
13
|
+
{
|
14
|
+
"id" => "2",
|
15
|
+
"title" => "A newer object"
|
16
|
+
}
|
17
|
+
]
|
18
|
+
end
|
19
|
+
|
20
|
+
let(:collection_name) { "workspaces" }
|
21
|
+
|
22
|
+
let(:formatted_response) do
|
23
|
+
{
|
24
|
+
"count" => response_data.count,
|
25
|
+
"results" => [
|
26
|
+
{
|
27
|
+
"key" => collection_name,
|
28
|
+
"id" => response_data[0]["id"]
|
29
|
+
},
|
30
|
+
{
|
31
|
+
"key" => collection_name,
|
32
|
+
"id" => response_data[1]["id"]
|
33
|
+
}
|
34
|
+
],
|
35
|
+
collection_name => {
|
36
|
+
response_data[0]["id"] => response_data[0],
|
37
|
+
response_data[1]["id"] => response_data[1]
|
38
|
+
}
|
39
|
+
}
|
40
|
+
end
|
41
|
+
|
42
|
+
it "formats the response to match brainstem" do
|
43
|
+
expect(subject).to eq formatted_response
|
44
|
+
end
|
45
|
+
|
46
|
+
context "when collection name is not given" do
|
47
|
+
let(:collection_name) { nil }
|
48
|
+
|
49
|
+
it "raises an InvalidResponseError" do
|
50
|
+
expect { subject }.to raise_error(BrainstemAdaptor::InvalidResponseError)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -181,6 +181,17 @@ describe BrainstemAdaptor::Response do
|
|
181
181
|
end
|
182
182
|
end
|
183
183
|
|
184
|
+
context "when array input" do
|
185
|
+
subject { described_class.new(response_data, collection_name: collection_name) }
|
186
|
+
let(:response_data) { [{ "id" => "1" }] }
|
187
|
+
let(:collection_name) { "object" }
|
188
|
+
|
189
|
+
it "formats the response data using the array parser" do
|
190
|
+
expect(BrainstemAdaptor::Parsers::ArrayParser).to receive(:parse).with(response_data, collection_name).and_call_original
|
191
|
+
subject
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
184
195
|
describe '#to_hash' do
|
185
196
|
specify do
|
186
197
|
expect(subject.to_hash).to eq(response_hash)
|
metadata
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: brainstem-adaptor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
+
- Mavenlink
|
7
8
|
- Sergei Zinin (einzige)
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
@@ -14,40 +15,42 @@ dependencies:
|
|
14
15
|
name: rspec
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
16
17
|
requirements:
|
17
|
-
- -
|
18
|
+
- - ">="
|
18
19
|
- !ruby/object:Gem::Version
|
19
20
|
version: '0'
|
20
21
|
type: :development
|
21
22
|
prerelease: false
|
22
23
|
version_requirements: !ruby/object:Gem::Requirement
|
23
24
|
requirements:
|
24
|
-
- -
|
25
|
+
- - ">="
|
25
26
|
- !ruby/object:Gem::Version
|
26
27
|
version: '0'
|
27
28
|
- !ruby/object:Gem::Dependency
|
28
29
|
name: activesupport
|
29
30
|
requirement: !ruby/object:Gem::Requirement
|
30
31
|
requirements:
|
31
|
-
- -
|
32
|
+
- - ">="
|
32
33
|
- !ruby/object:Gem::Version
|
33
34
|
version: 3.0.0
|
34
35
|
type: :runtime
|
35
36
|
prerelease: false
|
36
37
|
version_requirements: !ruby/object:Gem::Requirement
|
37
38
|
requirements:
|
38
|
-
- -
|
39
|
+
- - ">="
|
39
40
|
- !ruby/object:Gem::Version
|
40
41
|
version: 3.0.0
|
41
42
|
description: Parses Brainstem responses, makes it convenient to organize access to
|
42
43
|
your data.
|
43
|
-
email:
|
44
|
+
email:
|
45
|
+
- opensource@mavenlink.com
|
46
|
+
- szinin@gmail.com
|
44
47
|
executables: []
|
45
48
|
extensions: []
|
46
49
|
extra_rdoc_files:
|
47
50
|
- README.md
|
48
51
|
files:
|
49
|
-
- .gitignore
|
50
|
-
- .travis.yml
|
52
|
+
- ".gitignore"
|
53
|
+
- ".travis.yml"
|
51
54
|
- Gemfile
|
52
55
|
- README.md
|
53
56
|
- Rakefile
|
@@ -55,17 +58,19 @@ files:
|
|
55
58
|
- lib/brainstem-adaptor.rb
|
56
59
|
- lib/brainstem_adaptor/association.rb
|
57
60
|
- lib/brainstem_adaptor/invalid_response_error.rb
|
61
|
+
- lib/brainstem_adaptor/parsers/array_parser.rb
|
58
62
|
- lib/brainstem_adaptor/record.rb
|
59
63
|
- lib/brainstem_adaptor/response.rb
|
60
64
|
- lib/brainstem_adaptor/specification.rb
|
61
65
|
- spec/lib/brainstem_adaptor/association_spec.rb
|
62
66
|
- spec/lib/brainstem_adaptor/invalid_response_error_spec.rb
|
67
|
+
- spec/lib/brainstem_adaptor/parsers/array_parser_spec.rb
|
63
68
|
- spec/lib/brainstem_adaptor/record_spec.rb
|
64
69
|
- spec/lib/brainstem_adaptor/response_spec.rb
|
65
70
|
- spec/lib/brainstem_adaptor/specification_spec.rb
|
66
71
|
- spec/lib/brainstem_adaptor_spec.rb
|
67
72
|
- spec/spec_helper.rb
|
68
|
-
homepage:
|
73
|
+
homepage: https://github.com/mavenlink/brainstem-adaptor
|
69
74
|
licenses:
|
70
75
|
- MIT
|
71
76
|
metadata: {}
|
@@ -75,17 +80,16 @@ require_paths:
|
|
75
80
|
- lib
|
76
81
|
required_ruby_version: !ruby/object:Gem::Requirement
|
77
82
|
requirements:
|
78
|
-
- -
|
83
|
+
- - ">="
|
79
84
|
- !ruby/object:Gem::Version
|
80
85
|
version: '0'
|
81
86
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
82
87
|
requirements:
|
83
|
-
- -
|
88
|
+
- - ">="
|
84
89
|
- !ruby/object:Gem::Version
|
85
90
|
version: '0'
|
86
91
|
requirements: []
|
87
|
-
|
88
|
-
rubygems_version: 2.1.5
|
92
|
+
rubygems_version: 3.0.6
|
89
93
|
signing_key:
|
90
94
|
specification_version: 4
|
91
95
|
summary: Brainstem API Adaptor
|