summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortyler-ball <tyleraball@gmail.com>2014-09-30 16:08:26 -0700
committertyler-ball <tyleraball@gmail.com>2014-09-30 16:08:26 -0700
commitc1dc7de5c872c0dc32ed19c544df796a9b6f0c4f (patch)
treeeff6bf9983880e5f0bcf497ef2931b49a2ae6511
parent231c3abd052e606820297a97e4bc32bdab656a02 (diff)
downloadchef-zero-c1dc7de5c872c0dc32ed19c544df796a9b6f0c4f.tar.gz
Removing json gem dependency, replacing with ffi-yajl
-rw-r--r--CHANGELOG.md4
-rw-r--r--chef-zero.gemspec2
-rw-r--r--lib/chef_zero/cookbook_data.rb2
-rw-r--r--lib/chef_zero/endpoints/actor_endpoint.rb12
-rw-r--r--lib/chef_zero/endpoints/actors_endpoint.rb8
-rw-r--r--lib/chef_zero/endpoints/authenticate_user_endpoint.rb6
-rw-r--r--lib/chef_zero/endpoints/cookbook_endpoint.rb2
-rw-r--r--lib/chef_zero/endpoints/cookbook_version_endpoint.rb14
-rw-r--r--lib/chef_zero/endpoints/cookbooks_base.rb2
-rw-r--r--lib/chef_zero/endpoints/data_bag_endpoint.rb6
-rw-r--r--lib/chef_zero/endpoints/data_bag_item_endpoint.rb6
-rw-r--r--lib/chef_zero/endpoints/data_bags_endpoint.rb4
-rw-r--r--lib/chef_zero/endpoints/environment_cookbook_endpoint.rb4
-rw-r--r--lib/chef_zero/endpoints/environment_cookbook_versions_endpoint.rb10
-rw-r--r--lib/chef_zero/endpoints/environment_cookbooks_endpoint.rb4
-rw-r--r--lib/chef_zero/endpoints/environment_endpoint.rb6
-rw-r--r--lib/chef_zero/endpoints/environment_nodes_endpoint.rb4
-rw-r--r--lib/chef_zero/endpoints/environment_recipes_endpoint.rb6
-rw-r--r--lib/chef_zero/endpoints/environment_role_endpoint.rb4
-rw-r--r--lib/chef_zero/endpoints/node_endpoint.rb6
-rw-r--r--lib/chef_zero/endpoints/not_found_endpoint.rb4
-rw-r--r--lib/chef_zero/endpoints/principal_endpoint.rb4
-rw-r--r--lib/chef_zero/endpoints/rest_list_endpoint.rb4
-rw-r--r--lib/chef_zero/endpoints/rest_object_endpoint.rb10
-rw-r--r--lib/chef_zero/endpoints/role_endpoint.rb6
-rw-r--r--lib/chef_zero/endpoints/role_environments_endpoint.rb4
-rw-r--r--lib/chef_zero/endpoints/sandbox_endpoint.rb4
-rw-r--r--lib/chef_zero/endpoints/sandboxes_endpoint.rb8
-rw-r--r--lib/chef_zero/endpoints/search_endpoint.rb6
-rw-r--r--lib/chef_zero/rest_base.rb2
-rw-r--r--lib/chef_zero/server.rb4
-rw-r--r--lib/chef_zero/version.rb2
32 files changed, 87 insertions, 83 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6a14fe7..c1bd529 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,10 @@
Chef Zero CHANGELOG
===================
+# 2.2.1
+
+- removed 'json' gem dependency, replaced it with 'ffi-yajl'
+
# 2.2 (6/18/2014)
- allow port ranges to be passed in as enumerables, which will be tried in sequence until one works: `ChefZero::Server.new(:port => 80.upto(100))`
diff --git a/chef-zero.gemspec b/chef-zero.gemspec
index e52413c..8ee4e91 100644
--- a/chef-zero.gemspec
+++ b/chef-zero.gemspec
@@ -14,7 +14,7 @@ Gem::Specification.new do |s|
s.add_dependency 'mixlib-log', '~> 1.3'
s.add_dependency 'hashie', '~> 2.0'
- s.add_dependency 'json'
+ s.add_dependency 'ffi-yajl', '~> 1.1'
s.add_dependency 'rack'
s.add_development_dependency 'rake'
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