class ChefZero::Endpoints::SandboxesEndpoint
/sandboxes
Public Class Methods
new(server)
click to toggle source
Calls superclass method
# File lib/chef_zero/endpoints/sandboxes_endpoint.rb, line 8 def initialize(server) super(server) @next_id = 1 end
Public Instance Methods
post(request)
click to toggle source
# File lib/chef_zero/endpoints/sandboxes_endpoint.rb, line 13 def post(request) sandbox_checksums = [] needed_checksums = FFI_Yajl::Parser.parse(request.body)["checksums"] result_checksums = {} needed_checksums.keys.each do |needed_checksum| if list_data(request, request.rest_path[0..1] + %w{file_store checksums}).include?(needed_checksum) result_checksums[needed_checksum] = { needs_upload: false } else result_checksums[needed_checksum] = { needs_upload: true, url: build_uri(request.base_uri, request.rest_path[0..1] + ["file_store", "checksums", needed_checksum]), } sandbox_checksums << needed_checksum end end # There is an obvious race condition here. id = @next_id.to_s @next_id += 1 time_str = Time.now.utc.strftime("%Y-%m-%dT%H:%M:%S%z") time_str = "#{time_str[0..21]}:#{time_str[22..23]}" create_data(request, request.rest_path, id, FFI_Yajl::Encoder.encode({ create_time: time_str, checksums: sandbox_checksums, }, pretty: true)) json_response(201, { uri: build_uri(request.base_uri, request.rest_path + [id]), checksums: result_checksums, sandbox_id: id, }) end