diff options
Diffstat (limited to 'lib/chef_zero')
30 files changed, 82 insertions, 82 deletions
diff --git a/lib/chef_zero/cookbook_data.rb b/lib/chef_zero/cookbook_data.rb index 89d5282..4cd98f2 100644 --- a/lib/chef_zero/cookbook_data.rb +++ b/lib/chef_zero/cookbook_data.rb @@ -74,7 +74,7 @@ module ChefZero end def from_json(json) - self.merge!(JSON.parse(json)) + self.merge!(FFI_Yajl::Parser.parse(json)) end private diff --git a/lib/chef_zero/endpoints/actor_endpoint.rb b/lib/chef_zero/endpoints/actor_endpoint.rb index f6d93e7..8d53834 100644 --- a/lib/chef_zero/endpoints/actor_endpoint.rb +++ b/lib/chef_zero/endpoints/actor_endpoint.rb @@ -1,4 +1,4 @@ -require 'json' +require 'ffi_yajl' require 'chef_zero/endpoints/rest_object_endpoint' require 'chef_zero/data_normalizer' @@ -8,7 +8,7 @@ module ChefZero class ActorEndpoint < RestObjectEndpoint def put(request) # Find out if we're updating the public key. - request_body = JSON.parse(request.body, :create_additions => false) + request_body = FFI_Yajl::Parser.parse(request.body, :create_additions => false) if request_body['public_key'].nil? # If public_key is null, then don't overwrite it. Weird patchiness. body_modified = true @@ -29,7 +29,7 @@ module ChefZero end # Save request - request.body = JSON.pretty_generate(request_body) if body_modified + request.body = FFI_Yajl::Encoder.encode(request_body, :pretty => true) if body_modified # PUT /clients is patchy request.body = patch_request_body(request) @@ -38,7 +38,7 @@ module ChefZero # Inject private_key into response, delete public_key/password if applicable if result[0] == 200 || result[0] == 201 - response = JSON.parse(result[2], :create_additions => false) + response = FFI_Yajl::Parser.parse(result[2], :create_additions => false) response['private_key'] = private_key if private_key response.delete('public_key') if !updating_public_key && request.rest_path[2] == 'users' response.delete('password') @@ -49,13 +49,13 @@ module ChefZero end def populate_defaults(request, response_json) - response = JSON.parse(response_json, :create_additions => false) + response = FFI_Yajl::Parser.parse(response_json, :create_additions => false) if request.rest_path[2] == 'clients' response = DataNormalizer.normalize_client(response, request.rest_path[3]) else response = DataNormalizer.normalize_user(response, request.rest_path[3]) end - JSON.pretty_generate(response) + FFI_Yajl::Encoder.encode(response, :pretty => true) end end end diff --git a/lib/chef_zero/endpoints/actors_endpoint.rb b/lib/chef_zero/endpoints/actors_endpoint.rb index 52908d2..d5e1dd6 100644 --- a/lib/chef_zero/endpoints/actors_endpoint.rb +++ b/lib/chef_zero/endpoints/actors_endpoint.rb @@ -1,4 +1,4 @@ -require 'json' +require 'ffi_yajl' require 'chef_zero/endpoints/rest_list_endpoint' module ChefZero @@ -8,18 +8,18 @@ module ChefZero def post(request) # First, find out if the user actually posted a public key. If not, make # one. - request_body = JSON.parse(request.body, :create_additions => false) + request_body = FFI_Yajl::Parser.parse(request.body, :create_additions => false) public_key = request_body['public_key'] if !public_key private_key, public_key = server.gen_key_pair request_body['public_key'] = public_key - request.body = JSON.pretty_generate(request_body) + request.body = FFI_Yajl::Encoder.encode(request_body, :pretty => true) end result = super(request) if result[0] == 201 # If we generated a key, stuff it in the response. - response = JSON.parse(result[2], :create_additions => false) + response = FFI_Yajl::Parser.parse(result[2], :create_additions => false) response['private_key'] = private_key if private_key response['public_key'] = public_key json_response(201, response) diff --git a/lib/chef_zero/endpoints/authenticate_user_endpoint.rb b/lib/chef_zero/endpoints/authenticate_user_endpoint.rb index f2c26a0..e6462bd 100644 --- a/lib/chef_zero/endpoints/authenticate_user_endpoint.rb +++ b/lib/chef_zero/endpoints/authenticate_user_endpoint.rb @@ -1,4 +1,4 @@ -require 'json' +require 'ffi_yajl' require 'chef_zero/rest_base' module ChefZero @@ -6,12 +6,12 @@ module ChefZero # /authenticate_user class AuthenticateUserEndpoint < RestBase def post(request) - request_json = JSON.parse(request.body, :create_additions => false) + request_json = FFI_Yajl::Parser.parse(request.body, :create_additions => false) name = request_json['name'] password = request_json['password'] begin user = data_store.get(request.rest_path[0..1] + ['users', name]) - verified = JSON.parse(user, :create_additions => false)['password'] == password + verified = FFI_Yajl::Parser.parse(user, :create_additions => false)['password'] == password rescue DataStore::DataNotFoundError verified = false end diff --git a/lib/chef_zero/endpoints/cookbook_endpoint.rb b/lib/chef_zero/endpoints/cookbook_endpoint.rb index 939ef5c..35919ad 100644 --- a/lib/chef_zero/endpoints/cookbook_endpoint.rb +++ b/lib/chef_zero/endpoints/cookbook_endpoint.rb @@ -19,7 +19,7 @@ module ChefZero result = [] filter_cookbooks(all_cookbooks_list(request), {}, 1) do |name, versions| if versions.size > 0 - cookbook = JSON.parse(get_data(request, request.rest_path[0..1] + ['cookbooks', name, versions[0]]), :create_additions => false) + cookbook = FFI_Yajl::Parser.parse(get_data(request, request.rest_path[0..1] + ['cookbooks', name, versions[0]]), :create_additions => false) result += recipe_names(name, cookbook) end end diff --git a/lib/chef_zero/endpoints/cookbook_version_endpoint.rb b/lib/chef_zero/endpoints/cookbook_version_endpoint.rb index 03eec06..52df163 100644 --- a/lib/chef_zero/endpoints/cookbook_version_endpoint.rb +++ b/lib/chef_zero/endpoints/cookbook_version_endpoint.rb @@ -1,4 +1,4 @@ -require 'json' +require 'ffi_yajl' require 'chef_zero/endpoints/rest_object_endpoint' require 'chef_zero/rest_error_response' require 'chef_zero/data_normalizer' @@ -22,16 +22,16 @@ module ChefZero # Honor frozen if existing_cookbook - existing_cookbook_json = JSON.parse(existing_cookbook, :create_additions => false) + existing_cookbook_json = FFI_Yajl::Parser.parse(existing_cookbook, :create_additions => false) if existing_cookbook_json['frozen?'] if request.query_params['force'] != "true" raise RestErrorResponse.new(409, "The cookbook #{name} at version #{version} is frozen. Use the 'force' option to override.") end # For some reason, you are forever unable to modify "frozen?" on a frozen cookbook. - request_body = JSON.parse(request.body, :create_additions => false) + request_body = FFI_Yajl::Parser.parse(request.body, :create_additions => false) if !request_body['frozen?'] request_body['frozen?'] = true - request.body = JSON.pretty_generate(request_body) + request.body = FFI_Yajl::Encoder.encode(request_body, :pretty => true) end end end @@ -70,7 +70,7 @@ module ChefZero def get_checksums(cookbook) result = [] - JSON.parse(cookbook, :create_additions => false).each_pair do |key, value| + FFI_Yajl::Parser.parse(cookbook, :create_additions => false).each_pair do |key, value| if value.is_a?(Array) value.each do |file| if file.is_a?(Hash) && file.has_key?('checksum') @@ -104,9 +104,9 @@ module ChefZero def populate_defaults(request, response_json) # Inject URIs into each cookbook file - cookbook = JSON.parse(response_json, :create_additions => false) + cookbook = FFI_Yajl::Parser.parse(response_json, :create_additions => false) cookbook = DataNormalizer.normalize_cookbook(self, request.rest_path[0..1], cookbook, request.rest_path[3], request.rest_path[4], request.base_uri, request.method) - JSON.pretty_generate(cookbook) + FFI_Yajl::Encoder.encode(cookbook, :pretty => true) end def latest_version(versions) diff --git a/lib/chef_zero/endpoints/cookbooks_base.rb b/lib/chef_zero/endpoints/cookbooks_base.rb index ccc89ab..e568027 100644 --- a/lib/chef_zero/endpoints/cookbooks_base.rb +++ b/lib/chef_zero/endpoints/cookbooks_base.rb @@ -1,4 +1,4 @@ -require 'json' +require 'ffi_yajl' require 'chef_zero/rest_base' require 'chef_zero/data_normalizer' diff --git a/lib/chef_zero/endpoints/data_bag_endpoint.rb b/lib/chef_zero/endpoints/data_bag_endpoint.rb index 151d25b..8344364 100644 --- a/lib/chef_zero/endpoints/data_bag_endpoint.rb +++ b/lib/chef_zero/endpoints/data_bag_endpoint.rb @@ -1,4 +1,4 @@ -require 'json' +require 'ffi_yajl' require 'chef_zero/endpoints/rest_list_endpoint' require 'chef_zero/endpoints/data_bag_item_endpoint' require 'chef_zero/rest_error_response' @@ -12,7 +12,7 @@ module ChefZero end def post(request) - key = JSON.parse(request.body, :create_additions => false)[identity_key] + key = FFI_Yajl::Parser.parse(request.body, :create_additions => false)[identity_key] response = super(request) if response[0] == 201 already_json_response(201, DataBagItemEndpoint::populate_defaults(request, request.body, request.rest_path[3], key)) @@ -22,7 +22,7 @@ module ChefZero end def get_key(contents) - data_bag_item = JSON.parse(contents, :create_additions => false) + data_bag_item = FFI_Yajl::Parser.parse(contents, :create_additions => false) if data_bag_item['json_class'] == 'Chef::DataBagItem' && data_bag_item['raw_data'] data_bag_item['raw_data']['id'] else diff --git a/lib/chef_zero/endpoints/data_bag_item_endpoint.rb b/lib/chef_zero/endpoints/data_bag_item_endpoint.rb index b92fe92..02c7962 100644 --- a/lib/chef_zero/endpoints/data_bag_item_endpoint.rb +++ b/lib/chef_zero/endpoints/data_bag_item_endpoint.rb @@ -1,4 +1,4 @@ -require 'json' +require 'ffi_yajl' require 'chef_zero/endpoints/rest_object_endpoint' require 'chef_zero/endpoints/data_bag_item_endpoint' require 'chef_zero/data_normalizer' @@ -16,9 +16,9 @@ module ChefZero end def self.populate_defaults(request, response_json, data_bag, data_bag_item) - response = JSON.parse(response_json, :create_additions => false) + response = FFI_Yajl::Parser.parse(response_json, :create_additions => false) response = DataNormalizer.normalize_data_bag_item(response, data_bag, data_bag_item, request.method) - JSON.pretty_generate(response) + FFI_Yajl::Encoder.encode(response, :pretty => true) end end end diff --git a/lib/chef_zero/endpoints/data_bags_endpoint.rb b/lib/chef_zero/endpoints/data_bags_endpoint.rb index a27b35d..5fac935 100644 --- a/lib/chef_zero/endpoints/data_bags_endpoint.rb +++ b/lib/chef_zero/endpoints/data_bags_endpoint.rb @@ -1,4 +1,4 @@ -require 'json' +require 'ffi_yajl' require 'chef_zero/endpoints/rest_list_endpoint' module ChefZero @@ -7,7 +7,7 @@ module ChefZero class DataBagsEndpoint < RestListEndpoint def post(request) contents = request.body - name = JSON.parse(contents, :create_additions => false)[identity_key] + name = FFI_Yajl::Parser.parse(contents, :create_additions => false)[identity_key] if name.nil? error(400, "Must specify '#{identity_key}' in JSON") elsif exists_data_dir?(request, request.rest_path[0..1] + ['data', name]) diff --git a/lib/chef_zero/endpoints/environment_cookbook_endpoint.rb b/lib/chef_zero/endpoints/environment_cookbook_endpoint.rb index efba859..2554c98 100644 --- a/lib/chef_zero/endpoints/environment_cookbook_endpoint.rb +++ b/lib/chef_zero/endpoints/environment_cookbook_endpoint.rb @@ -1,4 +1,4 @@ -require 'json' +require 'ffi_yajl' require 'chef_zero/endpoints/cookbooks_base' module ChefZero @@ -7,7 +7,7 @@ module ChefZero class EnvironmentCookbookEndpoint < CookbooksBase def get(request) cookbook_name = request.rest_path[5] - environment = JSON.parse(get_data(request, request.rest_path[0..3]), :create_additions => false) + environment = FFI_Yajl::Parser.parse(get_data(request, request.rest_path[0..3]), :create_additions => false) constraints = environment['cookbook_versions'] || {} cookbook_versions = list_data(request, request.rest_path[0..1] + request.rest_path[4..5]) if request.query_params['num_versions'] == 'all' diff --git a/lib/chef_zero/endpoints/environment_cookbook_versions_endpoint.rb b/lib/chef_zero/endpoints/environment_cookbook_versions_endpoint.rb index d6e1a80..4046cdd 100644 --- a/lib/chef_zero/endpoints/environment_cookbook_versions_endpoint.rb +++ b/lib/chef_zero/endpoints/environment_cookbook_versions_endpoint.rb @@ -1,4 +1,4 @@ -require 'json' +require 'ffi_yajl' require 'chef_zero/rest_base' require 'chef_zero/rest_error_response' @@ -12,7 +12,7 @@ module ChefZero # Get the list of cookbooks and versions desired by the runlist desired_versions = {} - run_list = JSON.parse(request.body, :create_additions => false)['run_list'] + run_list = FFI_Yajl::Parser.parse(request.body, :create_additions => false)['run_list'] run_list.each do |run_list_entry| if run_list_entry =~ /(.+)::.+\@(.+)/ || run_list_entry =~ /(.+)\@(.+)/ raise RestErrorResponse.new(412, "No such cookbook: #{$1}") if !cookbook_names.include?($1) @@ -26,7 +26,7 @@ module ChefZero end # Filter by environment constraints - environment = JSON.parse(get_data(request, request.rest_path[0..3]), :create_additions => false) + environment = FFI_Yajl::Parser.parse(get_data(request, request.rest_path[0..3]), :create_additions => false) environment_constraints = environment['cookbook_versions'] || {} desired_versions.each_key do |name| @@ -48,7 +48,7 @@ module ChefZero result = {} solved.each_pair do |name, versions| - cookbook = JSON.parse(get_data(request, request.rest_path[0..1] + ['cookbooks', name, versions[0]]), :create_additions => false) + cookbook = FFI_Yajl::Parser.parse(get_data(request, request.rest_path[0..1] + ['cookbooks', name, versions[0]]), :create_additions => false) result[name] = DataNormalizer.normalize_cookbook(self, request.rest_path[0..1], cookbook, name, versions[0], request.base_uri, 'MIN') end json_response(200, result) @@ -74,7 +74,7 @@ module ChefZero new_unsolved = unsolved[1..-1] # Pick this cookbook, and add dependencies - cookbook_obj = JSON.parse(get_data(request, request.rest_path[0..1] + ['cookbooks', solve_for, desired_version]), :create_additions => false) + cookbook_obj = FFI_Yajl::Parser.parse(get_data(request, request.rest_path[0..1] + ['cookbooks', solve_for, desired_version]), :create_additions => false) cookbook_metadata = cookbook_obj['metadata'] || {} cookbook_dependencies = cookbook_metadata['dependencies'] || {} dep_not_found = false diff --git a/lib/chef_zero/endpoints/environment_cookbooks_endpoint.rb b/lib/chef_zero/endpoints/environment_cookbooks_endpoint.rb index c8f129b..166caa3 100644 --- a/lib/chef_zero/endpoints/environment_cookbooks_endpoint.rb +++ b/lib/chef_zero/endpoints/environment_cookbooks_endpoint.rb @@ -1,4 +1,4 @@ -require 'json' +require 'ffi_yajl' require 'chef_zero/endpoints/cookbooks_base' module ChefZero @@ -6,7 +6,7 @@ module ChefZero # /environments/NAME/cookbooks class EnvironmentCookbooksEndpoint < CookbooksBase def get(request) - environment = JSON.parse(get_data(request, request.rest_path[0..3]), :create_additions => false) + environment = FFI_Yajl::Parser.parse(get_data(request, request.rest_path[0..3]), :create_additions => false) constraints = environment['cookbook_versions'] || {} if request.query_params['num_versions'] == 'all' num_versions = nil diff --git a/lib/chef_zero/endpoints/environment_endpoint.rb b/lib/chef_zero/endpoints/environment_endpoint.rb index d792b98..3ada740 100644 --- a/lib/chef_zero/endpoints/environment_endpoint.rb +++ b/lib/chef_zero/endpoints/environment_endpoint.rb @@ -1,4 +1,4 @@ -require 'json' +require 'ffi_yajl' require 'chef_zero/endpoints/rest_object_endpoint' require 'chef_zero/data_normalizer' @@ -24,9 +24,9 @@ module ChefZero end def populate_defaults(request, response_json) - response = JSON.parse(response_json, :create_additions => false) + response = FFI_Yajl::Parser.parse(response_json, :create_additions => false) response = DataNormalizer.normalize_environment(response, request.rest_path[3]) - JSON.pretty_generate(response) + FFI_Yajl::Encoder.encode(response, :pretty => true) end end end diff --git a/lib/chef_zero/endpoints/environment_nodes_endpoint.rb b/lib/chef_zero/endpoints/environment_nodes_endpoint.rb index 6e221fd..e8eaca2 100644 --- a/lib/chef_zero/endpoints/environment_nodes_endpoint.rb +++ b/lib/chef_zero/endpoints/environment_nodes_endpoint.rb @@ -1,4 +1,4 @@ -require 'json' +require 'ffi_yajl' require 'chef_zero/rest_base' module ChefZero @@ -11,7 +11,7 @@ module ChefZero result = {} list_data(request, request.rest_path[0..1] + ['nodes']).each do |name| - node = JSON.parse(get_data(request, request.rest_path[0..1] + ['nodes', name]), :create_additions => false) + node = FFI_Yajl::Parser.parse(get_data(request, request.rest_path[0..1] + ['nodes', name]), :create_additions => false) if node['chef_environment'] == request.rest_path[3] result[name] = build_uri(request.base_uri, request.rest_path[0..1] + ['nodes', name]) end diff --git a/lib/chef_zero/endpoints/environment_recipes_endpoint.rb b/lib/chef_zero/endpoints/environment_recipes_endpoint.rb index 23c612b..4ecd7e0 100644 --- a/lib/chef_zero/endpoints/environment_recipes_endpoint.rb +++ b/lib/chef_zero/endpoints/environment_recipes_endpoint.rb @@ -1,4 +1,4 @@ -require 'json' +require 'ffi_yajl' require 'chef_zero/endpoints/cookbooks_base' module ChefZero @@ -6,12 +6,12 @@ module ChefZero # /environment/NAME/recipes class EnvironmentRecipesEndpoint < CookbooksBase def get(request) - environment = JSON.parse(get_data(request, request.rest_path[0..3]), :create_additions => false) + environment = FFI_Yajl::Parser.parse(get_data(request, request.rest_path[0..3]), :create_additions => false) constraints = environment['cookbook_versions'] || {} result = [] filter_cookbooks(all_cookbooks_list(request), constraints, 1) do |name, versions| if versions.size > 0 - cookbook = JSON.parse(get_data(request, request.rest_path[0..1] + ['cookbooks', name, versions[0]]), :create_additions => false) + cookbook = FFI_Yajl::Parser.parse(get_data(request, request.rest_path[0..1] + ['cookbooks', name, versions[0]]), :create_additions => false) result += recipe_names(name, cookbook) end end diff --git a/lib/chef_zero/endpoints/environment_role_endpoint.rb b/lib/chef_zero/endpoints/environment_role_endpoint.rb index 93c7578..2a87bb4 100644 --- a/lib/chef_zero/endpoints/environment_role_endpoint.rb +++ b/lib/chef_zero/endpoints/environment_role_endpoint.rb @@ -1,4 +1,4 @@ -require 'json' +require 'ffi_yajl' require 'chef_zero/endpoints/cookbooks_base' module ChefZero @@ -18,7 +18,7 @@ module ChefZero # Verify that the environment exists get_data(request, environment_path) - role = JSON.parse(get_data(request, role_path), :create_additions => false) + role = FFI_Yajl::Parser.parse(get_data(request, role_path), :create_additions => false) environment_name = environment_path[3] if environment_name == '_default' run_list = role['run_list'] diff --git a/lib/chef_zero/endpoints/node_endpoint.rb b/lib/chef_zero/endpoints/node_endpoint.rb index 5c35e0c..c73ccf4 100644 --- a/lib/chef_zero/endpoints/node_endpoint.rb +++ b/lib/chef_zero/endpoints/node_endpoint.rb @@ -1,4 +1,4 @@ -require 'json' +require 'ffi_yajl' require 'chef_zero/endpoints/rest_object_endpoint' require 'chef_zero/data_normalizer' @@ -7,9 +7,9 @@ module ChefZero # /nodes/ID class NodeEndpoint < RestObjectEndpoint def populate_defaults(request, response_json) - node = JSON.parse(response_json, :create_additions => false) + node = FFI_Yajl::Parser.parse(response_json, :create_additions => false) node = DataNormalizer.normalize_node(node, request.rest_path[3]) - JSON.pretty_generate(node) + FFI_Yajl::Encoder.encode(node, :pretty => true) end end end diff --git a/lib/chef_zero/endpoints/not_found_endpoint.rb b/lib/chef_zero/endpoints/not_found_endpoint.rb index edbf239..ddf1246 100644 --- a/lib/chef_zero/endpoints/not_found_endpoint.rb +++ b/lib/chef_zero/endpoints/not_found_endpoint.rb @@ -1,10 +1,10 @@ -require 'json' +require 'ffi_yajl' module ChefZero module Endpoints class NotFoundEndpoint def call(request) - return [404, {"Content-Type" => "application/json"}, JSON.pretty_generate({"error" => ["Object not found: #{request.env['REQUEST_PATH']}"]})] + return [404, {"Content-Type" => "application/json"}, FFI_Yajl::Encoder.encode({"error" => ["Object not found: #{request.env['REQUEST_PATH']}"]}, :pretty => true)] end end end diff --git a/lib/chef_zero/endpoints/principal_endpoint.rb b/lib/chef_zero/endpoints/principal_endpoint.rb index 2398334..dd2959d 100644 --- a/lib/chef_zero/endpoints/principal_endpoint.rb +++ b/lib/chef_zero/endpoints/principal_endpoint.rb @@ -1,4 +1,4 @@ -require 'json' +require 'ffi_yajl' require 'chef_zero' require 'chef_zero/rest_base' @@ -19,7 +19,7 @@ module ChefZero json_response(200, { 'name' => name, 'type' => type, - 'public_key' => JSON.parse(json)['public_key'] || PUBLIC_KEY + 'public_key' => FFI_Yajl::Parser.parse(json)['public_key'] || PUBLIC_KEY }) else error(404, 'Principal not found') diff --git a/lib/chef_zero/endpoints/rest_list_endpoint.rb b/lib/chef_zero/endpoints/rest_list_endpoint.rb index 4fa277b..a1b9487 100644 --- a/lib/chef_zero/endpoints/rest_list_endpoint.rb +++ b/lib/chef_zero/endpoints/rest_list_endpoint.rb @@ -1,4 +1,4 @@ -require 'json' +require 'ffi_yajl' require 'chef_zero/rest_base' module ChefZero @@ -33,7 +33,7 @@ module ChefZero end def get_key(contents) - JSON.parse(contents, :create_additions => false)[identity_key] + FFI_Yajl::Parser.parse(contents, :create_additions => false)[identity_key] end end end diff --git a/lib/chef_zero/endpoints/rest_object_endpoint.rb b/lib/chef_zero/endpoints/rest_object_endpoint.rb index 116755d..0252b8e 100644 --- a/lib/chef_zero/endpoints/rest_object_endpoint.rb +++ b/lib/chef_zero/endpoints/rest_object_endpoint.rb @@ -1,4 +1,4 @@ -require 'json' +require 'ffi_yajl' require 'chef_zero/rest_base' require 'chef_zero/rest_error_response' @@ -20,7 +20,7 @@ module ChefZero def put(request) # We grab the old body to trigger a 404 if it doesn't exist old_body = get_data(request) - request_json = JSON.parse(request.body, :create_additions => false) + request_json = FFI_Yajl::Parser.parse(request.body, :create_additions => false) key = request_json[identity_key] || request.rest_path[-1] # If it's a rename, check for conflict and delete the old value rename = key != request.rest_path[-1] @@ -47,11 +47,11 @@ module ChefZero def patch_request_body(request) existing_value = get_data(request, nil, :nil) if existing_value - request_json = JSON.parse(request.body, :create_additions => false) - existing_json = JSON.parse(existing_value, :create_additions => false) + request_json = FFI_Yajl::Parser.parse(request.body, :create_additions => false) + existing_json = FFI_Yajl::Parser.parse(existing_value, :create_additions => false) merged_json = existing_json.merge(request_json) if merged_json.size > request_json.size - return JSON.pretty_generate(merged_json) + return FFI_Yajl::Encoder.encode(merged_json, :pretty => true) end end request.body diff --git a/lib/chef_zero/endpoints/role_endpoint.rb b/lib/chef_zero/endpoints/role_endpoint.rb index 5b7a1b3..e4c4377 100644 --- a/lib/chef_zero/endpoints/role_endpoint.rb +++ b/lib/chef_zero/endpoints/role_endpoint.rb @@ -1,4 +1,4 @@ -require 'json' +require 'ffi_yajl' require 'chef_zero/endpoints/rest_object_endpoint' require 'chef_zero/data_normalizer' @@ -7,9 +7,9 @@ module ChefZero # /roles/NAME class RoleEndpoint < RestObjectEndpoint def populate_defaults(request, response_json) - role = JSON.parse(response_json, :create_additions => false) + role = FFI_Yajl::Parser.parse(response_json, :create_additions => false) role = DataNormalizer.normalize_role(role, request.rest_path[3]) - JSON.pretty_generate(role) + FFI_Yajl::Encoder.encode(role, :pretty => true) end end end diff --git a/lib/chef_zero/endpoints/role_environments_endpoint.rb b/lib/chef_zero/endpoints/role_environments_endpoint.rb index caac47c..d56930a 100644 --- a/lib/chef_zero/endpoints/role_environments_endpoint.rb +++ b/lib/chef_zero/endpoints/role_environments_endpoint.rb @@ -1,4 +1,4 @@ -require 'json' +require 'ffi_yajl' require 'chef_zero/rest_base' module ChefZero @@ -6,7 +6,7 @@ module ChefZero # /roles/NAME/environments class RoleEnvironmentsEndpoint < RestBase def get(request) - role = JSON.parse(get_data(request, request.rest_path[0..3]), :create_additions => false) + role = FFI_Yajl::Parser.parse(get_data(request, request.rest_path[0..3]), :create_additions => false) json_response(200, [ '_default' ] + (role['env_run_lists'].keys || [])) end end diff --git a/lib/chef_zero/endpoints/sandbox_endpoint.rb b/lib/chef_zero/endpoints/sandbox_endpoint.rb index 3a8e139..c6a3508 100644 --- a/lib/chef_zero/endpoints/sandbox_endpoint.rb +++ b/lib/chef_zero/endpoints/sandbox_endpoint.rb @@ -1,13 +1,13 @@ require 'chef_zero/rest_base' require 'chef_zero/rest_error_response' -require 'json' +require 'ffi_yajl' module ChefZero module Endpoints # /sandboxes/ID class SandboxEndpoint < RestBase def put(request) - existing_sandbox = JSON.parse(get_data(request), :create_additions => false) + existing_sandbox = FFI_Yajl::Parser.parse(get_data(request), :create_additions => false) existing_sandbox['checksums'].each do |checksum| if !exists_data?(request, request.rest_path[0..1] + ['file_store', 'checksums', checksum]) raise RestErrorResponse.new(503, "Checksum not uploaded: #{checksum}") diff --git a/lib/chef_zero/endpoints/sandboxes_endpoint.rb b/lib/chef_zero/endpoints/sandboxes_endpoint.rb index 09d2175..88314f7 100644 --- a/lib/chef_zero/endpoints/sandboxes_endpoint.rb +++ b/lib/chef_zero/endpoints/sandboxes_endpoint.rb @@ -1,4 +1,4 @@ -require 'json' +require 'ffi_yajl' require 'chef_zero/rest_base' module ChefZero @@ -13,7 +13,7 @@ module ChefZero def post(request) sandbox_checksums = [] - needed_checksums = JSON.parse(request.body, :create_additions => false)['checksums'] + needed_checksums = FFI_Yajl::Parser.parse(request.body, :create_additions => false)['checksums'] result_checksums = {} needed_checksums.keys.each do |needed_checksum| if list_data(request, request.rest_path[0..1] + ['file_store', 'checksums']).include?(needed_checksum) @@ -34,10 +34,10 @@ module ChefZero 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, JSON.pretty_generate({ + 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]), diff --git a/lib/chef_zero/endpoints/search_endpoint.rb b/lib/chef_zero/endpoints/search_endpoint.rb index 73c44b0..0d46c94 100644 --- a/lib/chef_zero/endpoints/search_endpoint.rb +++ b/lib/chef_zero/endpoints/search_endpoint.rb @@ -1,4 +1,4 @@ -require 'json' +require 'ffi_yajl' require 'chef_zero/endpoints/rest_object_endpoint' require 'chef_zero/data_normalizer' require 'chef_zero/rest_error_response' @@ -17,7 +17,7 @@ module ChefZero def post(request) full_results = search(request) - keys = JSON.parse(request.body, :create_additions => false) + keys = FFI_Yajl::Parser.parse(request.body, :create_additions => false) partial_results = full_results['rows'].map do |name, uri, doc, search_value| data = {} keys.each_pair do |key, path| @@ -110,7 +110,7 @@ module ChefZero result = [] list_data(request, container).each do |name| value = get_data(request, container + [name]) - expanded = expander.call(JSON.parse(value, :create_additions => false), name) + expanded = expander.call(FFI_Yajl::Parser.parse(value, :create_additions => false), name) result << [ name, build_uri(request.base_uri, container + [name]), expanded, expand_for_indexing(expanded, index, name) ] end result = result.select do |name, uri, value, search_value| diff --git a/lib/chef_zero/rest_base.rb b/lib/chef_zero/rest_base.rb index f01950f..3e4d610 100644 --- a/lib/chef_zero/rest_base.rb +++ b/lib/chef_zero/rest_base.rb @@ -112,7 +112,7 @@ module ChefZero end def json_response(response_code, json) - already_json_response(response_code, JSON.pretty_generate(json)) + already_json_response(response_code, FFI_Yajl::Encoder.encode(json, :pretty => true)) end def already_json_response(response_code, json_text) diff --git a/lib/chef_zero/server.rb b/lib/chef_zero/server.rb index bbc0c31..da28cac 100644 --- a/lib/chef_zero/server.rb +++ b/lib/chef_zero/server.rb @@ -351,7 +351,7 @@ module ChefZero end raise "No version specified" if !cookbook_data[:version] data_store.create_dir(['organizations', org_name, 'cookbooks'], cookbook_data[:cookbook_name], :recursive) - data_store.set(['organizations', org_name, 'cookbooks', cookbook_data[:cookbook_name], cookbook_data[:version]], JSON.pretty_generate(cookbook_data), :create) + data_store.set(['organizations', org_name, 'cookbooks', cookbook_data[:cookbook_name], cookbook_data[:version]], FFI_Yajl::Encoder.encode(cookbook_data, :pretty => true), :create) cookbook_data.values.each do |files| next unless files.is_a? Array files.each do |file| @@ -467,7 +467,7 @@ module ChefZero def dejsonize_children(hash) result = {} hash.each_pair do |key, value| - result[key] = value.is_a?(Hash) ? JSON.pretty_generate(value) : value + result[key] = value.is_a?(Hash) ? FFI_Yajl::Encoder.encode(value, :pretty => true) : value end result end diff --git a/lib/chef_zero/version.rb b/lib/chef_zero/version.rb index 3eb4bd9..b3c4ce1 100644 --- a/lib/chef_zero/version.rb +++ b/lib/chef_zero/version.rb @@ -1,3 +1,3 @@ module ChefZero - VERSION = '2.2' + VERSION = '2.2.1' end |