Fixed issues with recursive structures and external references.
This commit is contained in:
parent
06af19a112
commit
bb4e15b9f4
|
@ -31,6 +31,43 @@ module Google
|
||||||
# unavoidable dependence on closures and execution context.
|
# unavoidable dependence on closures and execution context.
|
||||||
schema_name = schema_data['id']
|
schema_name = schema_data['id']
|
||||||
|
|
||||||
|
# Due to an oversight, schema IDs may not be URI references.
|
||||||
|
# TODO(bobaman): Remove this code once this has been resolved.
|
||||||
|
schema_uri = (
|
||||||
|
api.document_base +
|
||||||
|
(schema_name[0..0] != '#' ? '#' + schema_name : schema_name)
|
||||||
|
)
|
||||||
|
# puts schema_uri
|
||||||
|
|
||||||
|
# Due to an oversight, schema IDs may not be URI references.
|
||||||
|
# TODO(bobaman): Remove this whole lambda once this has been resolved.
|
||||||
|
reformat_references = lambda do |data|
|
||||||
|
# This code is not particularly efficient due to recursive traversal
|
||||||
|
# and excess object creation, but this hopefully shouldn't be an
|
||||||
|
# issue since it should only be called only once per schema per
|
||||||
|
# process.
|
||||||
|
if data.kind_of?(Hash) && data['$ref']
|
||||||
|
reference = data['$ref']
|
||||||
|
reference = '#' + reference if reference[0..0] != '#'
|
||||||
|
data.merge({
|
||||||
|
'$ref' => reference
|
||||||
|
})
|
||||||
|
elsif data.kind_of?(Hash)
|
||||||
|
data.inject({}) do |accu, (key, value)|
|
||||||
|
if value.kind_of?(Hash)
|
||||||
|
accu[key] = reformat_references.call(value)
|
||||||
|
else
|
||||||
|
accu[key] = value
|
||||||
|
end
|
||||||
|
accu
|
||||||
|
end
|
||||||
|
else
|
||||||
|
data
|
||||||
|
end
|
||||||
|
end
|
||||||
|
schema_data = reformat_references.call(schema_data)
|
||||||
|
# puts schema_data.inspect
|
||||||
|
|
||||||
if schema_name
|
if schema_name
|
||||||
api_name_string =
|
api_name_string =
|
||||||
Google::INFLECTOR.camelize(api.name)
|
Google::INFLECTOR.camelize(api.name)
|
||||||
|
@ -57,7 +94,7 @@ module Google
|
||||||
# redefine it. This means that reloading a schema which has already
|
# redefine it. This means that reloading a schema which has already
|
||||||
# been loaded into memory is not possible.
|
# been loaded into memory is not possible.
|
||||||
unless schema_class
|
unless schema_class
|
||||||
schema_class = AutoParse.generate(schema_data)
|
schema_class = AutoParse.generate(schema_data, schema_uri)
|
||||||
if schema_name
|
if schema_name
|
||||||
api_version.const_set(schema_name, schema_class)
|
api_version.const_set(schema_name, schema_class)
|
||||||
end
|
end
|
||||||
|
|
|
@ -379,6 +379,18 @@ describe Google::APIClient do
|
||||||
status.should == 200
|
status.should == 200
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'should correctly handle nested schema objects' do
|
||||||
|
result = @client.execute(
|
||||||
|
@buzz.activities.list,
|
||||||
|
{'alt' => 'json', 'userId' => 'hikingfan', 'scope' => '@public'},
|
||||||
|
'',
|
||||||
|
[],
|
||||||
|
:authenticated => false
|
||||||
|
)
|
||||||
|
feed = result.data
|
||||||
|
puts feed.inspect
|
||||||
|
end
|
||||||
|
|
||||||
it 'should not be able to execute requests without authorization' do
|
it 'should not be able to execute requests without authorization' do
|
||||||
result = @client.execute(
|
result = @client.execute(
|
||||||
@buzz.activities.list,
|
@buzz.activities.list,
|
||||||
|
|
|
@ -25,7 +25,7 @@ namespace :gem do
|
||||||
s.add_runtime_dependency('signet', '~> 0.2.2')
|
s.add_runtime_dependency('signet', '~> 0.2.2')
|
||||||
s.add_runtime_dependency('addressable', '~> 2.2.2')
|
s.add_runtime_dependency('addressable', '~> 2.2.2')
|
||||||
s.add_runtime_dependency('httpadapter', '~> 1.0.0')
|
s.add_runtime_dependency('httpadapter', '~> 1.0.0')
|
||||||
s.add_runtime_dependency('autoparse', '~> 0.1.0')
|
s.add_runtime_dependency('autoparse', '~> 0.2.0')
|
||||||
s.add_runtime_dependency('json', '>= 1.4.6')
|
s.add_runtime_dependency('json', '>= 1.4.6')
|
||||||
s.add_runtime_dependency('extlib', '>= 0.9.15')
|
s.add_runtime_dependency('extlib', '>= 0.9.15')
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue