Tighten validation around batch operations
This commit is contained in:
parent
687223feb4
commit
5804593f25
|
@ -164,10 +164,10 @@ module Google
|
||||||
batch_command.options = request_options.merge(options)
|
batch_command.options = request_options.merge(options)
|
||||||
apply_command_defaults(batch_command)
|
apply_command_defaults(batch_command)
|
||||||
begin
|
begin
|
||||||
Thread.current[:google_api_batch] = batch_command
|
start_batch(batch_command)
|
||||||
yield self
|
yield self
|
||||||
ensure
|
ensure
|
||||||
Thread.current[:google_api_batch] = nil
|
end_batch
|
||||||
end
|
end
|
||||||
batch_command.execute(client)
|
batch_command.execute(client)
|
||||||
end
|
end
|
||||||
|
@ -196,10 +196,10 @@ module Google
|
||||||
batch_command.options = request_options.merge(options)
|
batch_command.options = request_options.merge(options)
|
||||||
apply_command_defaults(batch_command)
|
apply_command_defaults(batch_command)
|
||||||
begin
|
begin
|
||||||
Thread.current[:google_api_batch] = batch_command
|
start_batch(batch_command)
|
||||||
yield self
|
yield self
|
||||||
ensure
|
ensure
|
||||||
Thread.current[:google_api_batch] = nil
|
end_batch
|
||||||
end
|
end
|
||||||
batch_command.execute(client)
|
batch_command.execute(client)
|
||||||
end
|
end
|
||||||
|
@ -347,6 +347,7 @@ module Google
|
||||||
def execute_or_queue_command(command, &callback)
|
def execute_or_queue_command(command, &callback)
|
||||||
batch_command = current_batch
|
batch_command = current_batch
|
||||||
if batch_command
|
if batch_command
|
||||||
|
fail "Can not combine services in a batch" if Thread.current[:google_api_batch_service] != self
|
||||||
batch_command.add(command, &callback)
|
batch_command.add(command, &callback)
|
||||||
nil
|
nil
|
||||||
else
|
else
|
||||||
|
@ -374,6 +375,20 @@ module Google
|
||||||
!current_batch.nil?
|
!current_batch.nil?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Start a new thread-local batch context
|
||||||
|
# @param [Google::Apis::Core::BatchCommand] cmd
|
||||||
|
def start_batch(cmd)
|
||||||
|
fail "Batch already in progress" if batch?
|
||||||
|
Thread.current[:google_api_batch] = cmd
|
||||||
|
Thread.current[:google_api_batch_service] = self
|
||||||
|
end
|
||||||
|
|
||||||
|
# Clear thread-local batch context
|
||||||
|
def end_batch
|
||||||
|
Thread.current[:google_api_batch] = nil
|
||||||
|
Thread.current[:google_api_batch_service] = nil
|
||||||
|
end
|
||||||
|
|
||||||
# Create a new HTTP client
|
# Create a new HTTP client
|
||||||
# @return [Hurley::Client]
|
# @return [Hurley::Client]
|
||||||
def new_client
|
def new_client
|
||||||
|
|
|
@ -186,6 +186,20 @@ EOF
|
||||||
end
|
end
|
||||||
end.to raise_error(Google::Apis::ClientError)
|
end.to raise_error(Google::Apis::ClientError)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'should prevent mixing services in batch' do
|
||||||
|
expect do |b|
|
||||||
|
service.batch do |service|
|
||||||
|
command = service.send(:make_simple_command, :get, 'zoo/animals', {})
|
||||||
|
service.send(:execute_or_queue_command, command, &b)
|
||||||
|
|
||||||
|
service2 = service.dup
|
||||||
|
command2 = service.send(:make_simple_command, :get, 'zoo/animals', {})
|
||||||
|
service2.send(:execute_or_queue_command, command2, &b)
|
||||||
|
end
|
||||||
|
end.to raise_error
|
||||||
|
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'with batch uploads' do
|
context 'with batch uploads' do
|
||||||
|
|
Loading…
Reference in New Issue