typekit-client 0.0.2 → 0.0.3
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/.travis.yml +6 -0
- data/CHANGELOG.md +9 -5
- data/Guardfile +7 -0
- data/README.md +160 -131
- data/bin/typekit +21 -8
- data/lib/typekit/client.rb +5 -5
- data/lib/typekit/configuration/base.rb +1 -1
- data/lib/typekit/configuration/default.rb +9 -5
- data/lib/typekit/connection/dispatcher.rb +2 -2
- data/lib/typekit/connection/request.rb +5 -2
- data/lib/typekit/connection/response.rb +4 -8
- data/lib/typekit/helper.rb +22 -0
- data/lib/typekit/processing/converter/boolean.rb +11 -0
- data/lib/typekit/processing/converter/datetime.rb +11 -0
- data/lib/typekit/processing/converter/errors.rb +22 -0
- data/lib/typekit/processing/converter/record.rb +15 -0
- data/lib/typekit/processing/converter/records.rb +18 -0
- data/lib/typekit/processing/converter/unknown.rb +14 -0
- data/lib/typekit/processing/converter.rb +32 -0
- data/lib/typekit/processing/parser/json.rb +15 -0
- data/lib/typekit/processing/parser/yaml.rb +15 -0
- data/lib/typekit/processing/parser.rb +14 -0
- data/lib/typekit/processing/translator.rb +16 -0
- data/lib/typekit/processing.rb +9 -0
- data/lib/typekit/record/base.rb +30 -0
- data/lib/typekit/record/family.rb +7 -0
- data/lib/typekit/record/kit.rb +7 -0
- data/lib/typekit/record/library.rb +7 -0
- data/lib/typekit/record/variation.rb +8 -0
- data/lib/typekit/record.rb +35 -0
- data/lib/typekit/routing/{map.rb → mapper.rb} +1 -1
- data/lib/typekit/routing/node/base.rb +1 -0
- data/lib/typekit/routing.rb +1 -1
- data/lib/typekit/version.rb +1 -1
- data/lib/typekit.rb +4 -4
- data/spec/cassettes/delete_kits_xxx_ok.yml +16 -0
- data/spec/typekit/client_spec.rb +11 -3
- data/spec/typekit/configuration_spec.rb +20 -4
- data/spec/typekit/connection/dispatcher_spec.rb +4 -4
- data/spec/typekit/connection/response_spec.rb +18 -0
- data/spec/typekit/helper_spec.rb +34 -0
- data/spec/typekit/processing/converter_spec.rb +54 -0
- data/spec/typekit/processing/parser_spec.rb +23 -0
- data/spec/typekit/record/base_spec.rb +33 -0
- data/spec/typekit/record_spec.rb +48 -0
- data/spec/typekit/routing/mapper_spec.rb +177 -0
- data/spec/typekit/routing/node_spec.rb +31 -10
- data/typekit-client.gemspec +2 -1
- metadata +53 -13
- data/lib/typekit/parser/json.rb +0 -13
- data/lib/typekit/parser/yaml.rb +0 -13
- data/lib/typekit/parser.rb +0 -14
- data/lib/typekit/processor.rb +0 -38
- data/spec/typekit/processor_spec.rb +0 -34
- data/spec/typekit/routing/map_spec.rb +0 -106
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'typekit'
|
3
|
+
|
4
|
+
describe Typekit::Record::Base do
|
5
|
+
let(:subject_class) { Typekit::Record::Base }
|
6
|
+
|
7
|
+
describe '#new' do
|
8
|
+
it 'treats each option as an attribute to keep track of' do
|
9
|
+
subject = subject_class.new(name: 'Awesome')
|
10
|
+
expect { subject.name = 'Superb' }.to \
|
11
|
+
change { subject.name }.from('Awesome').to('Superb')
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'handles attribute names given as strings' do
|
15
|
+
subject = subject_class.new('name' => 'Awesome')
|
16
|
+
expect { subject.name = 'Superb' }.to \
|
17
|
+
change { subject.name }.from('Awesome').to('Superb')
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe '#attributes' do
|
22
|
+
it 'returns all attributes' do
|
23
|
+
subject = subject_class.new(id: 1, name: 'Awesome')
|
24
|
+
expect(subject.attributes).to eq(id: 1, name: 'Awesome')
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'reflects attribute assignments' do
|
28
|
+
subject = subject_class.new(id: 1)
|
29
|
+
subject.id = 42
|
30
|
+
expect(subject.attributes).to eq(id: 42)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'typekit'
|
3
|
+
|
4
|
+
describe Typekit::Record do
|
5
|
+
let(:subject_module) { Typekit::Record }
|
6
|
+
|
7
|
+
describe '.collections' do
|
8
|
+
it 'knows the major collections' do
|
9
|
+
expect(subject_module.collections).to \
|
10
|
+
match_array(%i{families kits libraries variations})
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe '.members' do
|
15
|
+
it 'knows the major members' do
|
16
|
+
expect(subject_module.members).to \
|
17
|
+
match_array(%i{family kit library variation})
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe '.collection?' do
|
22
|
+
%w{family kit library variation kitten kittens}.each do |name|
|
23
|
+
it "returns false for #{ name }" do
|
24
|
+
expect(subject_module.collection?(name)).to be_false
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
%w{families kits libraries variations}.each do |name|
|
29
|
+
it "returns true for #{ name }" do
|
30
|
+
expect(subject_module.collection?(name)).to be_true
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe '.member?' do
|
36
|
+
%w{family kit library variation}.each do |name|
|
37
|
+
it "returns true for #{ name }" do
|
38
|
+
expect(subject_module.member?(name)).to be_true
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
%w{families kits libraries variations kitten kittens}.each do |name|
|
43
|
+
it "returns false for #{ name }" do
|
44
|
+
expect(subject_module.member?(name)).to be_false
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,177 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'typekit'
|
3
|
+
|
4
|
+
describe Typekit::Routing::Mapper do
|
5
|
+
extend RESTHelper
|
6
|
+
|
7
|
+
def create_request(action)
|
8
|
+
# TODO: mock?
|
9
|
+
Typekit::Connection::Request.new(action: action)
|
10
|
+
end
|
11
|
+
|
12
|
+
describe '#define' do
|
13
|
+
it 'declares new resources' do
|
14
|
+
subject.define { resources(:kits) }
|
15
|
+
request = subject.trace(create_request(:index), [ :kits ])
|
16
|
+
expect(request.address).to eq('kits')
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'declares nested resources' do
|
20
|
+
subject.define { resources(:kits) { resources(:families) } }
|
21
|
+
request = subject.trace(create_request(:show),
|
22
|
+
[ :kits, 'xxx', :families, 'yyy' ])
|
23
|
+
expect(request.address).to eq('kits/xxx/families/yyy')
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'declares scoped resources' do
|
27
|
+
subject.define do
|
28
|
+
scope 'https://typekit.com/api' do
|
29
|
+
scope [ 'v1', :json ] do
|
30
|
+
resources(:kits) { resources(:families) }
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
request = subject.trace(create_request(:show),
|
35
|
+
[ :kits, 'xxx', :families, 'yyy' ])
|
36
|
+
expect(request.address).to eq(
|
37
|
+
'https://typekit.com/api/v1/json/kits/xxx/families/yyy')
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'declares custom operations' do
|
41
|
+
subject.define { resources(:kits) { show(:published, on: :member) } }
|
42
|
+
request = subject.trace(create_request(:show),
|
43
|
+
[ :kits, 'xxx', :published ])
|
44
|
+
expect(request.address).to eq('kits/xxx/published')
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'declares custom operations with variable names' do
|
48
|
+
subject.define do
|
49
|
+
resources :kits do
|
50
|
+
resources :families do
|
51
|
+
show ':variant', on: :member
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
request = subject.trace(create_request(:show),
|
56
|
+
[ :kits, 'xxx', :families, 'yyy', 'zzz' ])
|
57
|
+
expect(request.address).to eq('kits/xxx/families/yyy/zzz')
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe '#trace' do
|
62
|
+
shared_examples 'adequate resource tracer' do
|
63
|
+
restful_member_actions.each do |action|
|
64
|
+
it "assembles addresses of #{ action } Requests" do
|
65
|
+
request = subject.trace(create_request(action),
|
66
|
+
[ *subject_path, 'xxx' ])
|
67
|
+
expect(request.address).to eq("#{ subject_address }/xxx")
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
restful_collection_actions.each do |action|
|
72
|
+
it "assembles addresses of #{ action } Requests" do
|
73
|
+
request = subject.trace(create_request(action), subject_path)
|
74
|
+
expect(request.address).to eq(subject_address)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
restful_member_actions.each do |action|
|
79
|
+
it "raises exceptions for #{ action } actions to collections" do
|
80
|
+
expect do
|
81
|
+
subject.trace(create_request(action), subject_path)
|
82
|
+
end.to raise_error(Typekit::Routing::Error, /Not permitted/i)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
restful_collection_actions.each do |action|
|
87
|
+
it "raises exceptions for #{ action } actions to members" do
|
88
|
+
expect do
|
89
|
+
subject.trace(create_request(action), [ *subject_path, 'xxx' ])
|
90
|
+
end.to raise_error(Typekit::Routing::Error, /Not permitted/i)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
context 'when working with plain collections' do
|
96
|
+
before(:each) do
|
97
|
+
subject.define { resources(:kits) }
|
98
|
+
end
|
99
|
+
|
100
|
+
let(:subject_path) { [ :kits ] }
|
101
|
+
let(:subject_address) { 'kits' }
|
102
|
+
|
103
|
+
it_behaves_like 'adequate resource tracer'
|
104
|
+
end
|
105
|
+
|
106
|
+
context 'when working with nested collections' do
|
107
|
+
before(:each) do
|
108
|
+
subject.define do
|
109
|
+
resources :kits do
|
110
|
+
resources :families
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
let(:subject_path) { [ :kits, 'yyy', :families ] }
|
116
|
+
let(:subject_address) { 'kits/yyy/families' }
|
117
|
+
|
118
|
+
it_behaves_like 'adequate resource tracer'
|
119
|
+
end
|
120
|
+
|
121
|
+
family_actions = [ :show, :update, :delete ]
|
122
|
+
|
123
|
+
context "when only #{ family_actions.join(', ') } are allowed" do
|
124
|
+
before(:each) do
|
125
|
+
subject.define do
|
126
|
+
resources :kits do
|
127
|
+
resources :families, only: family_actions
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
(restful_collection_actions - family_actions).each do |action|
|
133
|
+
it "raises expections for #{ action } actions" do
|
134
|
+
expect do
|
135
|
+
subject.trace(create_request(action),
|
136
|
+
[ :kits, 'xxx', :families ])
|
137
|
+
end.to raise_error(Typekit::Routing::Error, /Not permitted/i)
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
(restful_member_actions - family_actions).each do |action|
|
142
|
+
it "raises expections for #{ action } actions" do
|
143
|
+
expect do
|
144
|
+
subject.trace(create_request(action),
|
145
|
+
[ :kits, 'xxx', :families, 'yyy' ])
|
146
|
+
end.to raise_error(Typekit::Routing::Error, /Not permitted/i)
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
restful_actions.each do |action|
|
152
|
+
it "assembles addresses for custom #{ action } actions" do
|
153
|
+
subject.define do
|
154
|
+
resources :kits do
|
155
|
+
send(action, :havefun, on: :member)
|
156
|
+
end
|
157
|
+
end
|
158
|
+
request = subject.trace(create_request(action),
|
159
|
+
[ :kits, 'xxx', :havefun ])
|
160
|
+
expect(request.address).to eq('kits/xxx/havefun')
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
it 'does not support reopening of resource declarations' do
|
165
|
+
subject.define do
|
166
|
+
resources :kits
|
167
|
+
resources :kits do
|
168
|
+
resources :families
|
169
|
+
end
|
170
|
+
end
|
171
|
+
expect do
|
172
|
+
subject.trace(create_request(:show),
|
173
|
+
[ :kits, 'xxx', :families, 'yyy' ])
|
174
|
+
end.to raise_error(Typekit::Routing::Error, /Not found/i)
|
175
|
+
end
|
176
|
+
end
|
177
|
+
end
|
@@ -4,6 +4,11 @@ require 'typekit'
|
|
4
4
|
describe Typekit::Routing::Node do
|
5
5
|
extend RESTHelper
|
6
6
|
|
7
|
+
def create_request(action)
|
8
|
+
# TODO: mock?
|
9
|
+
Typekit::Connection::Request.new(action: action)
|
10
|
+
end
|
11
|
+
|
7
12
|
let(:subject_module) { Typekit::Routing::Node }
|
8
13
|
|
9
14
|
def create_tree(*path)
|
@@ -19,21 +24,37 @@ describe Typekit::Routing::Node do
|
|
19
24
|
describe 'Base#assemble' do
|
20
25
|
let(:root) { create_tree(:kits, :families) }
|
21
26
|
|
27
|
+
shared_examples 'adequate assembler' do
|
28
|
+
let(:request) { create_request(action) }
|
29
|
+
|
30
|
+
it 'builds up Requests' do
|
31
|
+
expect(request).to receive(:<<).
|
32
|
+
exactly(path.size).times.and_call_original
|
33
|
+
root.assemble(request, path)
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'signs Requests' do
|
37
|
+
expect(request).to receive(:sign).
|
38
|
+
with(satisfy { |n| n.match(:families) })
|
39
|
+
root.assemble(request, path)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
22
43
|
restful_collection_actions.each do |action|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
44
|
+
context "when tracing #{ action } actions" do
|
45
|
+
let(:action) { action }
|
46
|
+
let(:path) { [ :kits, 'xxx', :families ] }
|
47
|
+
|
48
|
+
it_behaves_like 'adequate assembler'
|
28
49
|
end
|
29
50
|
end
|
30
51
|
|
31
52
|
restful_member_actions.each do |action|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
53
|
+
context "when tracing #{ action } actions" do
|
54
|
+
let(:action) { action }
|
55
|
+
let(:path) { [ :kits, 'xxx', :families, 'yyy' ] }
|
56
|
+
|
57
|
+
it_behaves_like 'adequate assembler'
|
37
58
|
end
|
38
59
|
end
|
39
60
|
end
|
data/typekit-client.gemspec
CHANGED
@@ -26,8 +26,9 @@ Gem::Specification.new do |spec|
|
|
26
26
|
spec.add_dependency 'json', '~> 1.8'
|
27
27
|
|
28
28
|
spec.add_development_dependency 'bundler', '~> 1.6'
|
29
|
-
spec.add_development_dependency 'rake'
|
29
|
+
spec.add_development_dependency 'rake'
|
30
30
|
spec.add_development_dependency 'rspec', '~> 2.14'
|
31
|
+
spec.add_development_dependency 'guard-rspec', '~> 4.2'
|
31
32
|
spec.add_development_dependency 'webmock', '~> 1.18'
|
32
33
|
spec.add_development_dependency 'vcr', '~> 2.9'
|
33
34
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: typekit-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ivan Ukhov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-05-
|
11
|
+
date: 2014-05-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|
@@ -56,14 +56,14 @@ dependencies:
|
|
56
56
|
name: rake
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
@@ -80,6 +80,20 @@ dependencies:
|
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '2.14'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: guard-rspec
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '4.2'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '4.2'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: webmock
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -119,8 +133,10 @@ extra_rdoc_files: []
|
|
119
133
|
files:
|
120
134
|
- ".gitignore"
|
121
135
|
- ".rspec"
|
136
|
+
- ".travis.yml"
|
122
137
|
- CHANGELOG.md
|
123
138
|
- Gemfile
|
139
|
+
- Guardfile
|
124
140
|
- LICENSE.txt
|
125
141
|
- README.md
|
126
142
|
- Rakefile
|
@@ -138,12 +154,26 @@ files:
|
|
138
154
|
- lib/typekit/connection/response.rb
|
139
155
|
- lib/typekit/core.rb
|
140
156
|
- lib/typekit/helper.rb
|
141
|
-
- lib/typekit/
|
142
|
-
- lib/typekit/
|
143
|
-
- lib/typekit/
|
144
|
-
- lib/typekit/
|
157
|
+
- lib/typekit/processing.rb
|
158
|
+
- lib/typekit/processing/converter.rb
|
159
|
+
- lib/typekit/processing/converter/boolean.rb
|
160
|
+
- lib/typekit/processing/converter/datetime.rb
|
161
|
+
- lib/typekit/processing/converter/errors.rb
|
162
|
+
- lib/typekit/processing/converter/record.rb
|
163
|
+
- lib/typekit/processing/converter/records.rb
|
164
|
+
- lib/typekit/processing/converter/unknown.rb
|
165
|
+
- lib/typekit/processing/parser.rb
|
166
|
+
- lib/typekit/processing/parser/json.rb
|
167
|
+
- lib/typekit/processing/parser/yaml.rb
|
168
|
+
- lib/typekit/processing/translator.rb
|
169
|
+
- lib/typekit/record.rb
|
170
|
+
- lib/typekit/record/base.rb
|
171
|
+
- lib/typekit/record/family.rb
|
172
|
+
- lib/typekit/record/kit.rb
|
173
|
+
- lib/typekit/record/library.rb
|
174
|
+
- lib/typekit/record/variation.rb
|
145
175
|
- lib/typekit/routing.rb
|
146
|
-
- lib/typekit/routing/
|
176
|
+
- lib/typekit/routing/mapper.rb
|
147
177
|
- lib/typekit/routing/node.rb
|
148
178
|
- lib/typekit/routing/node/base.rb
|
149
179
|
- lib/typekit/routing/node/collection.rb
|
@@ -152,6 +182,7 @@ files:
|
|
152
182
|
- lib/typekit/routing/node/scope.rb
|
153
183
|
- lib/typekit/routing/proxy.rb
|
154
184
|
- lib/typekit/version.rb
|
185
|
+
- spec/cassettes/delete_kits_xxx_ok.yml
|
155
186
|
- spec/cassettes/index_kits_ok.yml
|
156
187
|
- spec/cassettes/index_kits_unauthorized.yml
|
157
188
|
- spec/cassettes/show_families_calluna_found.yml
|
@@ -162,9 +193,13 @@ files:
|
|
162
193
|
- spec/typekit/connection/adaptor_spec.rb
|
163
194
|
- spec/typekit/connection/dispatcher_spec.rb
|
164
195
|
- spec/typekit/connection/request_spec.rb
|
196
|
+
- spec/typekit/connection/response_spec.rb
|
165
197
|
- spec/typekit/helper_spec.rb
|
166
|
-
- spec/typekit/
|
167
|
-
- spec/typekit/
|
198
|
+
- spec/typekit/processing/converter_spec.rb
|
199
|
+
- spec/typekit/processing/parser_spec.rb
|
200
|
+
- spec/typekit/record/base_spec.rb
|
201
|
+
- spec/typekit/record_spec.rb
|
202
|
+
- spec/typekit/routing/mapper_spec.rb
|
168
203
|
- spec/typekit/routing/node_spec.rb
|
169
204
|
- typekit-client.gemspec
|
170
205
|
homepage: https://github.com/IvanUkhov/typekit-client
|
@@ -192,6 +227,7 @@ signing_key:
|
|
192
227
|
specification_version: 4
|
193
228
|
summary: A Ruby library for accessing the Typekit API
|
194
229
|
test_files:
|
230
|
+
- spec/cassettes/delete_kits_xxx_ok.yml
|
195
231
|
- spec/cassettes/index_kits_ok.yml
|
196
232
|
- spec/cassettes/index_kits_unauthorized.yml
|
197
233
|
- spec/cassettes/show_families_calluna_found.yml
|
@@ -202,7 +238,11 @@ test_files:
|
|
202
238
|
- spec/typekit/connection/adaptor_spec.rb
|
203
239
|
- spec/typekit/connection/dispatcher_spec.rb
|
204
240
|
- spec/typekit/connection/request_spec.rb
|
241
|
+
- spec/typekit/connection/response_spec.rb
|
205
242
|
- spec/typekit/helper_spec.rb
|
206
|
-
- spec/typekit/
|
207
|
-
- spec/typekit/
|
243
|
+
- spec/typekit/processing/converter_spec.rb
|
244
|
+
- spec/typekit/processing/parser_spec.rb
|
245
|
+
- spec/typekit/record/base_spec.rb
|
246
|
+
- spec/typekit/record_spec.rb
|
247
|
+
- spec/typekit/routing/mapper_spec.rb
|
208
248
|
- spec/typekit/routing/node_spec.rb
|
data/lib/typekit/parser/json.rb
DELETED
data/lib/typekit/parser/yaml.rb
DELETED
data/lib/typekit/parser.rb
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
require_relative 'parser/json'
|
2
|
-
require_relative 'parser/yaml'
|
3
|
-
|
4
|
-
module Typekit
|
5
|
-
module Parser
|
6
|
-
Error = Class.new(Typekit::Error)
|
7
|
-
|
8
|
-
def self.build(format)
|
9
|
-
self.const_get(format.to_s.upcase).new
|
10
|
-
rescue NameError
|
11
|
-
raise Error, 'Unknown format'
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
data/lib/typekit/processor.rb
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
module Typekit
|
2
|
-
class Processor
|
3
|
-
ERRORS = {
|
4
|
-
400 => 'There are errors in the data provided by your application',
|
5
|
-
401 => 'Authentication is needed to access the requested endpoint',
|
6
|
-
403 => 'Your application has been rate limited',
|
7
|
-
404 => 'You are requesting a resource that does not exist',
|
8
|
-
500 => 'Typekit’s servers are unable to process the request',
|
9
|
-
503 => 'Typekit’s API is offline for maintenance'
|
10
|
-
}.freeze
|
11
|
-
|
12
|
-
def initialize(format:)
|
13
|
-
@parser = Parser.build(format)
|
14
|
-
end
|
15
|
-
|
16
|
-
def process(response)
|
17
|
-
if response.success?
|
18
|
-
data = @parser.process(response.content)
|
19
|
-
process_success(response, data)
|
20
|
-
else
|
21
|
-
data = @parser.process(response.content) rescue {}
|
22
|
-
process_failure(response, data)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
private
|
27
|
-
|
28
|
-
def process_success(request, data)
|
29
|
-
data
|
30
|
-
end
|
31
|
-
|
32
|
-
def process_failure(request, data)
|
33
|
-
return data if request.redirect?
|
34
|
-
message = data['errors'] || ERRORS[request.code] || 'Unknown server error'
|
35
|
-
raise Error, Array(message).join(', ')
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
@@ -1,34 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'typekit'
|
3
|
-
|
4
|
-
describe Typekit::Processor do
|
5
|
-
def create(format)
|
6
|
-
Typekit::Processor.new(format: format)
|
7
|
-
end
|
8
|
-
|
9
|
-
it 'supports JSON' do
|
10
|
-
parser = create(:json)
|
11
|
-
response = double(success?: true, content: '{ "a": 1 }')
|
12
|
-
result = parser.process(response)
|
13
|
-
expect(result).to eq("a" => 1)
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'supports YAML' do
|
17
|
-
parser = create(:yaml)
|
18
|
-
response = double(success?: true, content: "---\na: 1")
|
19
|
-
result = parser.process(response)
|
20
|
-
expect(result).to eq("a" => 1)
|
21
|
-
end
|
22
|
-
|
23
|
-
it 'does not support XML' do
|
24
|
-
expect { create(:xml) }.to raise_error
|
25
|
-
end
|
26
|
-
|
27
|
-
it 'raises an appropriate exception when a request fails' do
|
28
|
-
parser = create(:json)
|
29
|
-
response = double(success?: false, redirect?: false, code: 401,
|
30
|
-
content: '{ "errors": [ "Not authorized" ] }')
|
31
|
-
expect { parser.process(response) }.to \
|
32
|
-
raise_error(Typekit::Error, 'Not authorized')
|
33
|
-
end
|
34
|
-
end
|