Skip to content

Instantly share code, notes, and snippets.

@hiboma
Created June 17, 2015 03:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hiboma/dc4c0e4ce2295df60afe to your computer and use it in GitHub Desktop.
Save hiboma/dc4c0e4ce2295df60afe to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby
require 'ox'
require 'benchmark'
require 'builder'
NO_SUCH_KEY_CODE = 'NoSuchKey'.freeze
NO_SUCH_KEY_MESSAGE = 'The specified key does not exist.'.freeze
@code = NO_SUCH_KEY_CODE
@message = NO_SUCH_KEY_MESSAGE
def builder(indent = 2, params ={})
xml = Builder::XmlMarkup.new(:indent => indent);
xml.instruct! :xml, :version=>"1.0", :encoding=>"UTF-8"
xml.Error do
xml.Code @code
xml.Message @message
if @bucket
xml.Bucket @bucket
end
xml.RequestId params['action_dispatch.request_id']
xml.Resource params['path_info']
xml.HostId params['server_name']
end
xml.target!
end
def ox(indent = 2, params={})
Ox.default_options = { indent: indent, with_xml: true }
doc = ::Ox::Document.new(:version => '1.0', :encoding => 'UTF-8')
error = Ox::Element.new('Error')
doc << error
code = Ox::Element.new('Code')
code << @code
error << code
if @bucket
bucket = Ox::Element.new('Bucket')
bucket << @bucket
error << bucket
end
message = Ox::Element.new('Message')
message << @message
error << message
request_id = Ox::Element.new('RequestId')
if val = params['action_dispatch.request_id']
request_id << val
end
error << request_id
resource = Ox::Element.new('Resource')
resource << params['path_info']
error << resource
host_id = Ox::Element.new('HostId')
host_id << params['server_name']
error << host_id
Ox.dump(doc)
end
params = {
'path_info' => '/anonymous',
'server_name' => 'example.org',
}
Benchmark.bm(20) do |x|
x.report('Builder indent=0') { 100000.times { builder(0, params) } }
x.report('Ox indent=0') { 100000.times { ox(-1, params) } }
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment