chef-zero 14.0.13 → 14.0.17
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +4 -6
- data/Rakefile +9 -1
- data/chef-zero.gemspec +1 -4
- data/lib/chef_zero.rb +1 -1
- data/lib/chef_zero/chef_data/cookbook_data.rb +1 -1
- data/lib/chef_zero/chef_data/data_normalizer.rb +9 -7
- data/lib/chef_zero/chef_data/default_creator.rb +8 -5
- data/lib/chef_zero/data_store/data_already_exists_error.rb +1 -1
- data/lib/chef_zero/data_store/data_error.rb +1 -1
- data/lib/chef_zero/data_store/data_not_found_error.rb +1 -1
- data/lib/chef_zero/data_store/default_facade.rb +4 -4
- data/lib/chef_zero/data_store/interface_v2.rb +1 -1
- data/lib/chef_zero/data_store/memory_store.rb +3 -3
- data/lib/chef_zero/data_store/memory_store_v2.rb +22 -14
- data/lib/chef_zero/data_store/raw_file_store.rb +6 -4
- data/lib/chef_zero/data_store/v1_to_v2_adapter.rb +11 -1
- data/lib/chef_zero/data_store/v2_to_v1_adapter.rb +1 -1
- data/lib/chef_zero/endpoints/acl_endpoint.rb +3 -2
- data/lib/chef_zero/endpoints/acls_endpoint.rb +5 -4
- data/lib/chef_zero/endpoints/actor_default_key_endpoint.rb +2 -1
- data/lib/chef_zero/endpoints/actor_endpoint.rb +3 -3
- data/lib/chef_zero/endpoints/actor_key_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/actor_keys_endpoint.rb +3 -2
- data/lib/chef_zero/endpoints/actors_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/authenticate_user_endpoint.rb +2 -1
- data/lib/chef_zero/endpoints/container_endpoint.rb +2 -2
- data/lib/chef_zero/endpoints/containers_endpoint.rb +2 -2
- data/lib/chef_zero/endpoints/controls_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/cookbook_artifact_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/cookbook_artifact_identifier_endpoint.rb +3 -3
- data/lib/chef_zero/endpoints/cookbook_artifacts_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/cookbook_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/cookbook_version_endpoint.rb +7 -5
- data/lib/chef_zero/endpoints/cookbooks_base.rb +4 -2
- data/lib/chef_zero/endpoints/cookbooks_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/data_bag_endpoint.rb +3 -3
- data/lib/chef_zero/endpoints/data_bag_item_endpoint.rb +3 -3
- data/lib/chef_zero/endpoints/data_bags_endpoint.rb +2 -2
- data/lib/chef_zero/endpoints/environment_cookbook_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/environment_cookbook_versions_endpoint.rb +13 -10
- data/lib/chef_zero/endpoints/environment_cookbooks_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/environment_endpoint.rb +2 -2
- data/lib/chef_zero/endpoints/environment_nodes_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/environment_recipes_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/environment_role_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/file_store_file_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/group_endpoint.rb +2 -2
- data/lib/chef_zero/endpoints/groups_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/license_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/node_endpoint.rb +2 -2
- data/lib/chef_zero/endpoints/node_identifiers_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/nodes_endpoint.rb +2 -2
- data/lib/chef_zero/endpoints/not_found_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/organization_association_request_endpoint.rb +2 -1
- data/lib/chef_zero/endpoints/organization_association_requests_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/organization_authenticate_user_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/organization_endpoint.rb +3 -2
- data/lib/chef_zero/endpoints/organization_user_base.rb +1 -1
- data/lib/chef_zero/endpoints/organization_user_default_key_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/organization_user_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/organization_user_key_endpoint.rb +2 -2
- data/lib/chef_zero/endpoints/organization_user_keys_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/organization_users_endpoint.rb +2 -2
- data/lib/chef_zero/endpoints/organization_validator_key_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/organizations_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/policies_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/policy_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/policy_group_endpoint.rb +2 -2
- data/lib/chef_zero/endpoints/policy_group_policy_endpoint.rb +3 -3
- data/lib/chef_zero/endpoints/policy_groups_endpoint.rb +2 -2
- data/lib/chef_zero/endpoints/policy_revision_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/policy_revisions_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/principal_endpoint.rb +2 -2
- data/lib/chef_zero/endpoints/rest_list_endpoint.rb +2 -2
- data/lib/chef_zero/endpoints/rest_object_endpoint.rb +3 -2
- data/lib/chef_zero/endpoints/role_endpoint.rb +2 -2
- data/lib/chef_zero/endpoints/role_environments_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/sandbox_endpoint.rb +3 -3
- data/lib/chef_zero/endpoints/sandboxes_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/search_endpoint.rb +8 -8
- data/lib/chef_zero/endpoints/searches_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/server_api_version_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/system_recovery_endpoint.rb +3 -3
- data/lib/chef_zero/endpoints/universe_endpoint.rb +2 -2
- data/lib/chef_zero/endpoints/user_association_request_endpoint.rb +2 -1
- data/lib/chef_zero/endpoints/user_association_requests_count_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/user_association_requests_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/user_organizations_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/version_endpoint.rb +2 -2
- data/lib/chef_zero/rest_base.rb +15 -15
- data/lib/chef_zero/rest_request.rb +4 -4
- data/lib/chef_zero/rest_router.rb +2 -2
- data/lib/chef_zero/rspec.rb +3 -2
- data/lib/chef_zero/server.rb +87 -83
- data/lib/chef_zero/socketless_server_map.rb +2 -1
- data/lib/chef_zero/solr/query/phrase.rb +2 -2
- data/lib/chef_zero/solr/query/range_query.rb +3 -3
- data/lib/chef_zero/solr/query/term.rb +1 -1
- data/lib/chef_zero/solr/solr_parser.rb +12 -10
- data/lib/chef_zero/version.rb +1 -1
- data/spec/run_oc_pedant.rb +5 -3
- data/spec/search_spec.rb +2 -2
- data/spec/socketless_server_map_spec.rb +1 -1
- data/spec/support/oc_pedant.rb +1 -1
- metadata +3 -31
data/lib/chef_zero/rest_base.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
require_relative "rest_request"
|
2
|
+
require_relative "rest_error_response"
|
3
|
+
require_relative "data_store/data_not_found_error"
|
4
|
+
require_relative "chef_data/acl_path"
|
5
5
|
|
6
6
|
module ChefZero
|
7
7
|
class RestBase
|
@@ -30,15 +30,13 @@ module ChefZero
|
|
30
30
|
}
|
31
31
|
|
32
32
|
return json_response(406,
|
33
|
-
|
34
|
-
|
35
|
-
)
|
33
|
+
response,
|
34
|
+
request_version: version, response_version: -1)
|
36
35
|
end
|
37
36
|
rescue ArgumentError
|
38
37
|
json_response(406,
|
39
|
-
|
40
|
-
|
41
|
-
)
|
38
|
+
{ "username" => request.requestor },
|
39
|
+
request_version: -1, response_version: -1)
|
42
40
|
end
|
43
41
|
|
44
42
|
def call(request)
|
@@ -46,14 +44,15 @@ module ChefZero
|
|
46
44
|
return response unless response.nil?
|
47
45
|
|
48
46
|
method = request.method.downcase.to_sym
|
49
|
-
|
50
|
-
accept_methods =
|
47
|
+
unless respond_to?(method)
|
48
|
+
accept_methods = %i{get put post delete}.select { |m| respond_to?(m) }
|
51
49
|
accept_methods_str = accept_methods.map { |m| m.to_s.upcase }.join(", ")
|
52
|
-
return [405, { "Content-Type" => "text/plain", "Allow" => accept_methods_str }, "Bad request method for '#{request.env[
|
50
|
+
return [405, { "Content-Type" => "text/plain", "Allow" => accept_methods_str }, "Bad request method for '#{request.env["REQUEST_PATH"]}': #{request.env["REQUEST_METHOD"]}"]
|
53
51
|
end
|
54
52
|
if json_only && !accepts?(request, "application", "json")
|
55
53
|
return [406, { "Content-Type" => "text/plain" }, "Must accept application/json"]
|
56
54
|
end
|
55
|
+
|
57
56
|
# Dispatch to get()/post()/put()/delete()
|
58
57
|
begin
|
59
58
|
send(method, request)
|
@@ -70,7 +69,8 @@ module ChefZero
|
|
70
69
|
def accepts?(request, category, type)
|
71
70
|
# If HTTP_ACCEPT is not sent at all, assume it accepts anything
|
72
71
|
# This parses as per http://tools.ietf.org/html/rfc7231#section-5.3
|
73
|
-
return true
|
72
|
+
return true unless request.env["HTTP_ACCEPT"]
|
73
|
+
|
74
74
|
accepts = request.env["HTTP_ACCEPT"].split(/,\s*/).map { |x| x.split(";", 2)[0].strip }
|
75
75
|
accepts.include?("#{category}/#{type}") || accepts.include?("#{category}/*") || accepts.include?("*/*")
|
76
76
|
end
|
@@ -284,7 +284,7 @@ module ChefZero
|
|
284
284
|
end
|
285
285
|
|
286
286
|
def self.build_uri(base_uri, rest_path)
|
287
|
-
"#{base_uri}/#{rest_path.map { |v| URI.escape(v) }.join(
|
287
|
+
"#{base_uri}/#{rest_path.map { |v| URI.escape(v) }.join("/")}"
|
288
288
|
end
|
289
289
|
|
290
290
|
def populate_defaults(request, response)
|
@@ -18,7 +18,7 @@ module ChefZero
|
|
18
18
|
else
|
19
19
|
scheme = env["rack.url_scheme"]
|
20
20
|
end
|
21
|
-
@base_uri ||= "#{scheme}://#{env[
|
21
|
+
@base_uri ||= "#{scheme}://#{env["HTTP_HOST"]}#{env["SCRIPT_NAME"]}"
|
22
22
|
end
|
23
23
|
|
24
24
|
def base_uri=(value)
|
@@ -68,14 +68,14 @@ module ChefZero
|
|
68
68
|
end
|
69
69
|
|
70
70
|
def to_s
|
71
|
-
result = "#{method} #{rest_path.join(
|
71
|
+
result = "#{method} #{rest_path.join("/")}"
|
72
72
|
if query_params.size > 0
|
73
|
-
result << "?#{query_params.map { |k, v| "#{k}=#{v}" }.join(
|
73
|
+
result << "?#{query_params.map { |k, v| "#{k}=#{v}" }.join("&")}"
|
74
74
|
end
|
75
75
|
if body.chomp != ""
|
76
76
|
result << "\n--- #{method} BODY ---\n"
|
77
77
|
result << body
|
78
|
-
result << "\n"
|
78
|
+
result << "\n" unless body.end_with?("\n")
|
79
79
|
result << "--- END #{method} BODY ---"
|
80
80
|
end
|
81
81
|
result
|
@@ -5,9 +5,9 @@ module ChefZero
|
|
5
5
|
def initialize(routes)
|
6
6
|
@routes = routes.map do |route, endpoint|
|
7
7
|
if route =~ /\*\*$/
|
8
|
-
pattern = Regexp.new("^#{route[0..-3].gsub(
|
8
|
+
pattern = Regexp.new("^#{route[0..-3].gsub("*", "[^/]*")}")
|
9
9
|
else
|
10
|
-
pattern = Regexp.new("^#{route.gsub(
|
10
|
+
pattern = Regexp.new("^#{route.gsub("*", "[^/]*")}$")
|
11
11
|
end
|
12
12
|
[ pattern, endpoint ]
|
13
13
|
end
|
data/lib/chef_zero/rspec.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require "tempfile"
|
2
|
-
|
3
|
-
|
2
|
+
require_relative "server"
|
3
|
+
require_relative "rest_request"
|
4
4
|
|
5
5
|
module ChefZero
|
6
6
|
module RSpec
|
@@ -69,6 +69,7 @@ module ChefZero
|
|
69
69
|
if chef_server_options[:server_scope] != self.class.chef_server_options[:server_scope]
|
70
70
|
raise "server_scope: #{chef_server_options[:server_scope]} will not be honored: it can only be set on when_the_chef_server!"
|
71
71
|
end
|
72
|
+
|
72
73
|
Log.info("Starting #{ChefZero::Dist::PRODUCT} server with options #{chef_server_options}")
|
73
74
|
|
74
75
|
ChefZero::RSpec.set_server_options(chef_server_options)
|
data/lib/chef_zero/server.rb
CHANGED
@@ -26,87 +26,87 @@ require "rack"
|
|
26
26
|
require "webrick"
|
27
27
|
require "webrick/https"
|
28
28
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
29
|
+
require_relative "../chef_zero"
|
30
|
+
require_relative "socketless_server_map"
|
31
|
+
require_relative "chef_data/cookbook_data"
|
32
|
+
require_relative "chef_data/acl_path"
|
33
|
+
require_relative "rest_router"
|
34
|
+
require_relative "data_store/memory_store_v2"
|
35
|
+
require_relative "data_store/v1_to_v2_adapter"
|
36
|
+
require_relative "data_store/default_facade"
|
37
|
+
require_relative "version"
|
38
38
|
require "chef_zero/dist.rb"
|
39
39
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
40
|
+
require_relative "endpoints/rest_list_endpoint"
|
41
|
+
require_relative "endpoints/authenticate_user_endpoint"
|
42
|
+
require_relative "endpoints/acls_endpoint"
|
43
|
+
require_relative "endpoints/acl_endpoint"
|
44
|
+
require_relative "endpoints/actor_endpoint"
|
45
|
+
require_relative "endpoints/actors_endpoint"
|
46
|
+
require_relative "endpoints/actor_key_endpoint"
|
47
|
+
require_relative "endpoints/organization_user_key_endpoint"
|
48
|
+
require_relative "endpoints/organization_user_default_key_endpoint"
|
49
|
+
require_relative "endpoints/organization_user_keys_endpoint"
|
50
|
+
require_relative "endpoints/actor_default_key_endpoint"
|
51
|
+
require_relative "endpoints/actor_keys_endpoint"
|
52
|
+
require_relative "endpoints/cookbooks_endpoint"
|
53
|
+
require_relative "endpoints/cookbook_endpoint"
|
54
|
+
require_relative "endpoints/cookbook_version_endpoint"
|
55
|
+
require_relative "endpoints/cookbook_artifacts_endpoint"
|
56
|
+
require_relative "endpoints/cookbook_artifact_endpoint"
|
57
|
+
require_relative "endpoints/cookbook_artifact_identifier_endpoint"
|
58
|
+
require_relative "endpoints/containers_endpoint"
|
59
|
+
require_relative "endpoints/container_endpoint"
|
60
|
+
require_relative "endpoints/controls_endpoint"
|
61
|
+
require_relative "endpoints/dummy_endpoint"
|
62
|
+
require_relative "endpoints/data_bags_endpoint"
|
63
|
+
require_relative "endpoints/data_bag_endpoint"
|
64
|
+
require_relative "endpoints/data_bag_item_endpoint"
|
65
|
+
require_relative "endpoints/groups_endpoint"
|
66
|
+
require_relative "endpoints/group_endpoint"
|
67
|
+
require_relative "endpoints/environment_endpoint"
|
68
|
+
require_relative "endpoints/environment_cookbooks_endpoint"
|
69
|
+
require_relative "endpoints/environment_cookbook_endpoint"
|
70
|
+
require_relative "endpoints/environment_cookbook_versions_endpoint"
|
71
|
+
require_relative "endpoints/environment_nodes_endpoint"
|
72
|
+
require_relative "endpoints/environment_recipes_endpoint"
|
73
|
+
require_relative "endpoints/environment_role_endpoint"
|
74
|
+
require_relative "endpoints/license_endpoint"
|
75
|
+
require_relative "endpoints/node_endpoint"
|
76
|
+
require_relative "endpoints/nodes_endpoint"
|
77
|
+
require_relative "endpoints/node_identifiers_endpoint"
|
78
|
+
require_relative "endpoints/organizations_endpoint"
|
79
|
+
require_relative "endpoints/organization_endpoint"
|
80
|
+
require_relative "endpoints/organization_association_requests_endpoint"
|
81
|
+
require_relative "endpoints/organization_association_request_endpoint"
|
82
|
+
require_relative "endpoints/organization_authenticate_user_endpoint"
|
83
|
+
require_relative "endpoints/organization_users_endpoint"
|
84
|
+
require_relative "endpoints/organization_user_endpoint"
|
85
|
+
require_relative "endpoints/organization_validator_key_endpoint"
|
86
|
+
require_relative "endpoints/policies_endpoint"
|
87
|
+
require_relative "endpoints/policy_endpoint"
|
88
|
+
require_relative "endpoints/policy_revisions_endpoint"
|
89
|
+
require_relative "endpoints/policy_revision_endpoint"
|
90
|
+
require_relative "endpoints/policy_groups_endpoint"
|
91
|
+
require_relative "endpoints/policy_group_endpoint"
|
92
|
+
require_relative "endpoints/policy_group_policy_endpoint"
|
93
|
+
require_relative "endpoints/principal_endpoint"
|
94
|
+
require_relative "endpoints/role_endpoint"
|
95
|
+
require_relative "endpoints/role_environments_endpoint"
|
96
|
+
require_relative "endpoints/sandboxes_endpoint"
|
97
|
+
require_relative "endpoints/sandbox_endpoint"
|
98
|
+
require_relative "endpoints/searches_endpoint"
|
99
|
+
require_relative "endpoints/search_endpoint"
|
100
|
+
require_relative "endpoints/system_recovery_endpoint"
|
101
|
+
require_relative "endpoints/user_association_requests_endpoint"
|
102
|
+
require_relative "endpoints/user_association_requests_count_endpoint"
|
103
|
+
require_relative "endpoints/user_association_request_endpoint"
|
104
|
+
require_relative "endpoints/user_organizations_endpoint"
|
105
|
+
require_relative "endpoints/file_store_file_endpoint"
|
106
|
+
require_relative "endpoints/not_found_endpoint"
|
107
|
+
require_relative "endpoints/version_endpoint"
|
108
|
+
require_relative "endpoints/server_api_version_endpoint"
|
109
|
+
require_relative "endpoints/universe_endpoint"
|
110
110
|
|
111
111
|
module ChefZero
|
112
112
|
|
@@ -176,7 +176,8 @@ module ChefZero
|
|
176
176
|
end
|
177
177
|
|
178
178
|
def local_mode_url
|
179
|
-
raise "Port not yet set, cannot generate URL" unless port.
|
179
|
+
raise "Port not yet set, cannot generate URL" unless port.is_a?(Integer)
|
180
|
+
|
180
181
|
"chefzero://localhost:#{port}"
|
181
182
|
end
|
182
183
|
|
@@ -275,7 +276,7 @@ module ChefZero
|
|
275
276
|
true
|
276
277
|
rescue Errno::EADDRINUSE
|
277
278
|
ChefZero::Log.warn("Port #{port} not available")
|
278
|
-
@server.listeners.each
|
279
|
+
@server.listeners.each(&:close)
|
279
280
|
@server.listeners.clear
|
280
281
|
false
|
281
282
|
end
|
@@ -305,7 +306,7 @@ module ChefZero
|
|
305
306
|
break
|
306
307
|
end
|
307
308
|
end
|
308
|
-
|
309
|
+
unless @port
|
309
310
|
raise Errno::EADDRINUSE,
|
310
311
|
"No port in :port range #{options[:port]} is available"
|
311
312
|
end
|
@@ -501,11 +502,13 @@ module ChefZero
|
|
501
502
|
else
|
502
503
|
cookbook_data = ChefData::CookbookData.to_hash(cookbook, name_version)
|
503
504
|
end
|
504
|
-
raise "No version specified"
|
505
|
+
raise "No version specified" unless cookbook_data[:version]
|
506
|
+
|
505
507
|
data_store.create_dir(["organizations", org_name, cookbook_type], cookbook_data[:cookbook_name], :recursive)
|
506
508
|
data_store.set(["organizations", org_name, cookbook_type, cookbook_data[:cookbook_name], cookbook_data[:version]], FFI_Yajl::Encoder.encode(cookbook_data, pretty: true), :create)
|
507
509
|
cookbook_data.values.each do |files|
|
508
510
|
next unless files.is_a? Array
|
511
|
+
|
509
512
|
files.each do |file|
|
510
513
|
data_store.set(["organizations", org_name, "file_store", "checksums", file[:checksum]], get_file(cookbook, file[:path]), :create)
|
511
514
|
end
|
@@ -642,6 +645,7 @@ module ChefZero
|
|
642
645
|
|
643
646
|
def app
|
644
647
|
return @app if @app
|
648
|
+
|
645
649
|
router = RestRouter.new(endpoints)
|
646
650
|
router.not_found = NotFoundEndpoint.new
|
647
651
|
|
@@ -18,7 +18,7 @@
|
|
18
18
|
|
19
19
|
require "thread"
|
20
20
|
require "singleton"
|
21
|
-
|
21
|
+
require_relative "dist"
|
22
22
|
|
23
23
|
module ChefZero
|
24
24
|
|
@@ -85,6 +85,7 @@ module ChefZero
|
|
85
85
|
def request(port, request_env)
|
86
86
|
server = @servers_by_port[port]
|
87
87
|
raise ServerNotFound, "No socketless #{ChefZero::Dist::PRODUCT} server on given port #{port.inspect}" unless server
|
88
|
+
|
88
89
|
server.handle_socketless_request(request_env)
|
89
90
|
end
|
90
91
|
|
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
require_relative "regexpable_query"
|
2
2
|
|
3
3
|
module ChefZero
|
4
4
|
module Solr
|
@@ -11,7 +11,7 @@ module ChefZero
|
|
11
11
|
else
|
12
12
|
literal_string = nil
|
13
13
|
end
|
14
|
-
super(terms.map
|
14
|
+
super(terms.map(&:regexp_string).join("#{NON_WORD_CHARACTER}+"), literal_string)
|
15
15
|
end
|
16
16
|
|
17
17
|
def to_s
|
@@ -10,7 +10,7 @@ module ChefZero
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def to_s
|
13
|
-
"#{@from_inclusive ?
|
13
|
+
"#{@from_inclusive ? "[" : "{"}#{@from} TO #{@to}#{@to_inclusive ? "]" : "}"}"
|
14
14
|
end
|
15
15
|
|
16
16
|
def matches_values?(values)
|
@@ -20,7 +20,7 @@ module ChefZero
|
|
20
20
|
when -1
|
21
21
|
return false
|
22
22
|
when 0
|
23
|
-
return false
|
23
|
+
return false unless @from_inclusive
|
24
24
|
end
|
25
25
|
end
|
26
26
|
unless @to == "*"
|
@@ -28,7 +28,7 @@ module ChefZero
|
|
28
28
|
when 1
|
29
29
|
return false
|
30
30
|
when 0
|
31
|
-
return false
|
31
|
+
return false unless @to_inclusive
|
32
32
|
end
|
33
33
|
end
|
34
34
|
return true
|
@@ -1,9 +1,9 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
1
|
+
require_relative "query/binary_operator"
|
2
|
+
require_relative "query/unary_operator"
|
3
|
+
require_relative "query/term"
|
4
|
+
require_relative "query/phrase"
|
5
|
+
require_relative "query/range_query"
|
6
|
+
require_relative "query/subquery"
|
7
7
|
|
8
8
|
module ChefZero
|
9
9
|
module Solr
|
@@ -50,7 +50,7 @@ module ChefZero
|
|
50
50
|
if @query_string[@index] == '\\'
|
51
51
|
@index += 1
|
52
52
|
end
|
53
|
-
@index += 1
|
53
|
+
@index += 1 unless eof?
|
54
54
|
break if eof? || !peek_term_token
|
55
55
|
end
|
56
56
|
@query_string[start_index..@index - 1]
|
@@ -66,6 +66,7 @@ module ChefZero
|
|
66
66
|
|
67
67
|
def peek_term_token
|
68
68
|
return nil if @query_string[@index] =~ /\s/
|
69
|
+
|
69
70
|
op = peek_operator_token
|
70
71
|
!op || op == "-"
|
71
72
|
end
|
@@ -79,6 +80,7 @@ module ChefZero
|
|
79
80
|
return result
|
80
81
|
end
|
81
82
|
end
|
83
|
+
|
82
84
|
nil
|
83
85
|
end
|
84
86
|
|
@@ -145,13 +147,13 @@ module ChefZero
|
|
145
147
|
# If it's the start of a range query, build that
|
146
148
|
elsif token == "{" || token == "["
|
147
149
|
left = next_token
|
148
|
-
parse_error(left, "Expected left term in range query")
|
150
|
+
parse_error(left, "Expected left term in range query") unless left
|
149
151
|
to = next_token
|
150
152
|
parse_error(left, "Expected TO in range query") if to != "TO"
|
151
153
|
right = next_token
|
152
|
-
parse_error(right, "Expected left term in range query")
|
154
|
+
parse_error(right, "Expected left term in range query") unless right
|
153
155
|
end_range = next_token
|
154
|
-
parse_error(right, "Expected end range '#{end_range}")
|
156
|
+
parse_error(right, "Expected end range '#{end_range}") unless ["}", "]"].include?(end_range)
|
155
157
|
Query::RangeQuery.new(left, right, token == "[", end_range == "]")
|
156
158
|
|
157
159
|
elsif token == "("
|