TrueCar-chef 0.10.0.beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENSE +201 -0
- data/README.rdoc +171 -0
- data/bin/chef-client +26 -0
- data/bin/chef-solo +25 -0
- data/bin/knife +26 -0
- data/bin/shef +34 -0
- data/distro/README +2 -0
- data/distro/arch/etc/conf.d/chef-client.conf +5 -0
- data/distro/arch/etc/conf.d/chef-server-webui.conf +10 -0
- data/distro/arch/etc/conf.d/chef-server.conf +10 -0
- data/distro/arch/etc/conf.d/chef-solr-indexer.conf +8 -0
- data/distro/arch/etc/conf.d/chef-solr.conf +8 -0
- data/distro/arch/etc/rc.d/chef-client +76 -0
- data/distro/arch/etc/rc.d/chef-server +78 -0
- data/distro/arch/etc/rc.d/chef-server-webui +78 -0
- data/distro/arch/etc/rc.d/chef-solr +78 -0
- data/distro/arch/etc/rc.d/chef-solr-indexer +78 -0
- data/distro/common/man/man1/chef-indexer.1 +42 -0
- data/distro/common/man/man1/chef-server-webui.1 +106 -0
- data/distro/common/man/man1/chef-server.1 +107 -0
- data/distro/common/man/man1/chef-solr-indexer.1 +55 -0
- data/distro/common/man/man1/chef-solr.1 +55 -0
- data/distro/common/man/man8/chef-client.8 +63 -0
- data/distro/common/man/man8/chef-solo.8 +57 -0
- data/distro/common/man/man8/chef-solr-rebuild.8 +37 -0
- data/distro/common/man/man8/knife.8 +1349 -0
- data/distro/common/man/man8/shef.8 +45 -0
- data/distro/common/markdown/README +3 -0
- data/distro/common/markdown/knife.mkd +865 -0
- data/distro/debian/etc/default/chef-client +4 -0
- data/distro/debian/etc/default/chef-server +9 -0
- data/distro/debian/etc/default/chef-server-webui +9 -0
- data/distro/debian/etc/default/chef-solr +8 -0
- data/distro/debian/etc/default/chef-solr-indexer +7 -0
- data/distro/debian/etc/init.d/chef-client +175 -0
- data/distro/debian/etc/init.d/chef-server +122 -0
- data/distro/debian/etc/init.d/chef-server-webui +123 -0
- data/distro/debian/etc/init.d/chef-solr +176 -0
- data/distro/debian/etc/init.d/chef-solr-indexer +176 -0
- data/distro/debian/etc/init/chef-client.conf +17 -0
- data/distro/debian/etc/init/chef-server-webui.conf +17 -0
- data/distro/debian/etc/init/chef-server.conf +17 -0
- data/distro/debian/etc/init/chef-solr-indexer.conf +17 -0
- data/distro/debian/etc/init/chef-solr.conf +17 -0
- data/distro/redhat/etc/init.d/chef-client +106 -0
- data/distro/redhat/etc/init.d/chef-server +112 -0
- data/distro/redhat/etc/init.d/chef-server-webui +112 -0
- data/distro/redhat/etc/init.d/chef-solr +104 -0
- data/distro/redhat/etc/init.d/chef-solr-indexer +104 -0
- data/distro/redhat/etc/logrotate.d/chef-client +8 -0
- data/distro/redhat/etc/logrotate.d/chef-server +8 -0
- data/distro/redhat/etc/logrotate.d/chef-server-webui +8 -0
- data/distro/redhat/etc/logrotate.d/chef-solr +8 -0
- data/distro/redhat/etc/logrotate.d/chef-solr-indexer +8 -0
- data/distro/redhat/etc/sysconfig/chef-client +15 -0
- data/distro/redhat/etc/sysconfig/chef-server +14 -0
- data/distro/redhat/etc/sysconfig/chef-server-webui +14 -0
- data/distro/redhat/etc/sysconfig/chef-solr +8 -0
- data/distro/redhat/etc/sysconfig/chef-solr-indexer +7 -0
- data/lib/chef.rb +40 -0
- data/lib/chef/api_client.rb +264 -0
- data/lib/chef/application.rb +137 -0
- data/lib/chef/application/agent.rb +18 -0
- data/lib/chef/application/client.rb +242 -0
- data/lib/chef/application/knife.rb +169 -0
- data/lib/chef/application/solo.rb +217 -0
- data/lib/chef/applications.rb +4 -0
- data/lib/chef/certificate.rb +194 -0
- data/lib/chef/checksum.rb +182 -0
- data/lib/chef/checksum_cache.rb +189 -0
- data/lib/chef/client.rb +362 -0
- data/lib/chef/config.rb +244 -0
- data/lib/chef/cookbook/chefignore.rb +66 -0
- data/lib/chef/cookbook/cookbook_collection.rb +45 -0
- data/lib/chef/cookbook/cookbook_version_loader.rb +151 -0
- data/lib/chef/cookbook/file_system_file_vendor.rb +56 -0
- data/lib/chef/cookbook/file_vendor.rb +48 -0
- data/lib/chef/cookbook/metadata.rb +592 -0
- data/lib/chef/cookbook/remote_file_vendor.rb +87 -0
- data/lib/chef/cookbook/syntax_check.rb +136 -0
- data/lib/chef/cookbook_loader.rb +103 -0
- data/lib/chef/cookbook_site_streaming_uploader.rb +244 -0
- data/lib/chef/cookbook_uploader.rb +125 -0
- data/lib/chef/cookbook_version.rb +979 -0
- data/lib/chef/cookbook_version_selector.rb +163 -0
- data/lib/chef/couchdb.rb +247 -0
- data/lib/chef/daemon.rb +172 -0
- data/lib/chef/data_bag.rb +223 -0
- data/lib/chef/data_bag_item.rb +267 -0
- data/lib/chef/encrypted_data_bag_item.rb +126 -0
- data/lib/chef/environment.rb +386 -0
- data/lib/chef/exceptions.rb +153 -0
- data/lib/chef/file_access_control.rb +140 -0
- data/lib/chef/file_cache.rb +218 -0
- data/lib/chef/handler.rb +206 -0
- data/lib/chef/handler/json_file.rb +58 -0
- data/lib/chef/index_queue.rb +29 -0
- data/lib/chef/index_queue/amqp_client.rb +116 -0
- data/lib/chef/index_queue/consumer.rb +76 -0
- data/lib/chef/index_queue/indexable.rb +109 -0
- data/lib/chef/json_compat.rb +52 -0
- data/lib/chef/knife.rb +424 -0
- data/lib/chef/knife/bootstrap.rb +185 -0
- data/lib/chef/knife/bootstrap/archlinux-gems.erb +47 -0
- data/lib/chef/knife/bootstrap/centos5-gems.erb +41 -0
- data/lib/chef/knife/bootstrap/client-install.vbs +80 -0
- data/lib/chef/knife/bootstrap/fedora13-gems.erb +38 -0
- data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +32 -0
- data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +46 -0
- data/lib/chef/knife/bootstrap/windows-gems.erb +34 -0
- data/lib/chef/knife/client_bulk_delete.rb +43 -0
- data/lib/chef/knife/client_create.rb +73 -0
- data/lib/chef/knife/client_delete.rb +48 -0
- data/lib/chef/knife/client_edit.rb +48 -0
- data/lib/chef/knife/client_list.rb +43 -0
- data/lib/chef/knife/client_reregister.rb +59 -0
- data/lib/chef/knife/client_show.rb +53 -0
- data/lib/chef/knife/configure.rb +136 -0
- data/lib/chef/knife/configure_client.rb +52 -0
- data/lib/chef/knife/cookbook_bulk_delete.rb +61 -0
- data/lib/chef/knife/cookbook_create.rb +274 -0
- data/lib/chef/knife/cookbook_delete.rb +149 -0
- data/lib/chef/knife/cookbook_download.rb +134 -0
- data/lib/chef/knife/cookbook_list.rb +50 -0
- data/lib/chef/knife/cookbook_metadata.rb +102 -0
- data/lib/chef/knife/cookbook_metadata_from_file.rb +44 -0
- data/lib/chef/knife/cookbook_show.rb +101 -0
- data/lib/chef/knife/cookbook_site_download.rb +58 -0
- data/lib/chef/knife/cookbook_site_list.rb +56 -0
- data/lib/chef/knife/cookbook_site_search.rb +51 -0
- data/lib/chef/knife/cookbook_site_share.rb +114 -0
- data/lib/chef/knife/cookbook_site_show.rb +57 -0
- data/lib/chef/knife/cookbook_site_unshare.rb +56 -0
- data/lib/chef/knife/cookbook_site_vendor.rb +145 -0
- data/lib/chef/knife/cookbook_test.rb +82 -0
- data/lib/chef/knife/cookbook_upload.rb +146 -0
- data/lib/chef/knife/data_bag_create.rb +94 -0
- data/lib/chef/knife/data_bag_delete.rb +51 -0
- data/lib/chef/knife/data_bag_edit.rb +94 -0
- data/lib/chef/knife/data_bag_from_file.rb +85 -0
- data/lib/chef/knife/data_bag_list.rb +46 -0
- data/lib/chef/knife/data_bag_show.rb +81 -0
- data/lib/chef/knife/environment_create.rb +53 -0
- data/lib/chef/knife/environment_delete.rb +45 -0
- data/lib/chef/knife/environment_edit.rb +45 -0
- data/lib/chef/knife/environment_from_file.rb +39 -0
- data/lib/chef/knife/environment_list.rb +42 -0
- data/lib/chef/knife/environment_show.rb +46 -0
- data/lib/chef/knife/exec.rb +51 -0
- data/lib/chef/knife/index_rebuild.rb +50 -0
- data/lib/chef/knife/node_bulk_delete.rb +46 -0
- data/lib/chef/knife/node_create.rb +50 -0
- data/lib/chef/knife/node_delete.rb +47 -0
- data/lib/chef/knife/node_edit.rb +163 -0
- data/lib/chef/knife/node_from_file.rb +45 -0
- data/lib/chef/knife/node_list.rb +46 -0
- data/lib/chef/knife/node_run_list_add.rb +67 -0
- data/lib/chef/knife/node_run_list_remove.rb +48 -0
- data/lib/chef/knife/node_show.rb +62 -0
- data/lib/chef/knife/recipe_list.rb +33 -0
- data/lib/chef/knife/role_bulk_delete.rb +47 -0
- data/lib/chef/knife/role_create.rb +55 -0
- data/lib/chef/knife/role_delete.rb +47 -0
- data/lib/chef/knife/role_edit.rb +48 -0
- data/lib/chef/knife/role_from_file.rb +49 -0
- data/lib/chef/knife/role_list.rb +43 -0
- data/lib/chef/knife/role_show.rb +54 -0
- data/lib/chef/knife/search.rb +123 -0
- data/lib/chef/knife/ssh.rb +318 -0
- data/lib/chef/knife/status.rb +90 -0
- data/lib/chef/knife/subcommand_loader.rb +101 -0
- data/lib/chef/knife/tag_create.rb +31 -0
- data/lib/chef/knife/tag_delete.rb +31 -0
- data/lib/chef/knife/tag_list.rb +29 -0
- data/lib/chef/knife/ui.rb +227 -0
- data/lib/chef/knife/windows_bootstrap.rb +157 -0
- data/lib/chef/log.rb +39 -0
- data/lib/chef/mash.rb +211 -0
- data/lib/chef/mixin/check_helper.rb +31 -0
- data/lib/chef/mixin/checksum.rb +32 -0
- data/lib/chef/mixin/command.rb +221 -0
- data/lib/chef/mixin/command/unix.rb +215 -0
- data/lib/chef/mixin/command/windows.rb +76 -0
- data/lib/chef/mixin/convert_to_class_name.rb +63 -0
- data/lib/chef/mixin/create_path.rb +56 -0
- data/lib/chef/mixin/deep_merge.rb +225 -0
- data/lib/chef/mixin/deprecation.rb +65 -0
- data/lib/chef/mixin/from_file.rb +50 -0
- data/lib/chef/mixin/language.rb +165 -0
- data/lib/chef/mixin/language_include_attribute.rb +61 -0
- data/lib/chef/mixin/language_include_recipe.rb +52 -0
- data/lib/chef/mixin/params_validate.rb +225 -0
- data/lib/chef/mixin/recipe_definition_dsl_core.rb +81 -0
- data/lib/chef/mixin/shell_out.rb +40 -0
- data/lib/chef/mixin/template.rb +95 -0
- data/lib/chef/mixin/xml_escape.rb +140 -0
- data/lib/chef/mixins.rb +15 -0
- data/lib/chef/monkey_patches/dir.rb +36 -0
- data/lib/chef/monkey_patches/numeric.rb +7 -0
- data/lib/chef/monkey_patches/regexp.rb +34 -0
- data/lib/chef/monkey_patches/string.rb +28 -0
- data/lib/chef/monkey_patches/tempfile.rb +64 -0
- data/lib/chef/nil_argument.rb +3 -0
- data/lib/chef/node.rb +661 -0
- data/lib/chef/node/attribute.rb +487 -0
- data/lib/chef/openid_registration.rb +187 -0
- data/lib/chef/platform.rb +409 -0
- data/lib/chef/provider.rb +124 -0
- data/lib/chef/provider/breakpoint.rb +36 -0
- data/lib/chef/provider/cookbook_file.rb +101 -0
- data/lib/chef/provider/cron.rb +186 -0
- data/lib/chef/provider/cron/solaris.rb +195 -0
- data/lib/chef/provider/deploy.rb +320 -0
- data/lib/chef/provider/deploy/revision.rb +80 -0
- data/lib/chef/provider/deploy/timestamped.rb +33 -0
- data/lib/chef/provider/directory.rb +72 -0
- data/lib/chef/provider/env.rb +152 -0
- data/lib/chef/provider/env/windows.rb +75 -0
- data/lib/chef/provider/erl_call.rb +100 -0
- data/lib/chef/provider/execute.rb +60 -0
- data/lib/chef/provider/file.rb +222 -0
- data/lib/chef/provider/git.rb +221 -0
- data/lib/chef/provider/group.rb +133 -0
- data/lib/chef/provider/group/aix.rb +70 -0
- data/lib/chef/provider/group/dscl.rb +121 -0
- data/lib/chef/provider/group/gpasswd.rb +53 -0
- data/lib/chef/provider/group/groupadd.rb +81 -0
- data/lib/chef/provider/group/pw.rb +84 -0
- data/lib/chef/provider/group/usermod.rb +57 -0
- data/lib/chef/provider/group/windows.rb +79 -0
- data/lib/chef/provider/http_request.rb +122 -0
- data/lib/chef/provider/ifconfig.rb +132 -0
- data/lib/chef/provider/link.rb +161 -0
- data/lib/chef/provider/log.rb +54 -0
- data/lib/chef/provider/mdadm.rb +91 -0
- data/lib/chef/provider/mount.rb +117 -0
- data/lib/chef/provider/mount/mount.rb +232 -0
- data/lib/chef/provider/mount/windows.rb +80 -0
- data/lib/chef/provider/ohai.rb +41 -0
- data/lib/chef/provider/package.rb +160 -0
- data/lib/chef/provider/package/apt.rb +110 -0
- data/lib/chef/provider/package/dpkg.rb +112 -0
- data/lib/chef/provider/package/easy_install.rb +136 -0
- data/lib/chef/provider/package/freebsd.rb +123 -0
- data/lib/chef/provider/package/macports.rb +105 -0
- data/lib/chef/provider/package/pacman.rb +101 -0
- data/lib/chef/provider/package/portage.rb +135 -0
- data/lib/chef/provider/package/rpm.rb +101 -0
- data/lib/chef/provider/package/rubygems.rb +462 -0
- data/lib/chef/provider/package/solaris.rb +127 -0
- data/lib/chef/provider/package/yum-dump.py +128 -0
- data/lib/chef/provider/package/yum.rb +261 -0
- data/lib/chef/provider/package/zypper.rb +133 -0
- data/lib/chef/provider/remote_directory.rb +138 -0
- data/lib/chef/provider/remote_file.rb +119 -0
- data/lib/chef/provider/route.rb +195 -0
- data/lib/chef/provider/ruby_block.rb +33 -0
- data/lib/chef/provider/script.rb +55 -0
- data/lib/chef/provider/service.rb +128 -0
- data/lib/chef/provider/service/arch.rb +109 -0
- data/lib/chef/provider/service/debian.rb +130 -0
- data/lib/chef/provider/service/freebsd.rb +156 -0
- data/lib/chef/provider/service/gentoo.rb +54 -0
- data/lib/chef/provider/service/init.rb +71 -0
- data/lib/chef/provider/service/insserv.rb +52 -0
- data/lib/chef/provider/service/redhat.rb +60 -0
- data/lib/chef/provider/service/simple.rb +118 -0
- data/lib/chef/provider/service/solaris.rb +85 -0
- data/lib/chef/provider/service/upstart.rb +192 -0
- data/lib/chef/provider/service/windows.rb +146 -0
- data/lib/chef/provider/subversion.rb +194 -0
- data/lib/chef/provider/template.rb +105 -0
- data/lib/chef/provider/user.rb +187 -0
- data/lib/chef/provider/user/dscl.rb +280 -0
- data/lib/chef/provider/user/pw.rb +113 -0
- data/lib/chef/provider/user/useradd.rb +137 -0
- data/lib/chef/provider/user/windows.rb +124 -0
- data/lib/chef/providers.rb +93 -0
- data/lib/chef/recipe.rb +128 -0
- data/lib/chef/resource.rb +530 -0
- data/lib/chef/resource/apt_package.rb +34 -0
- data/lib/chef/resource/bash.rb +33 -0
- data/lib/chef/resource/breakpoint.rb +35 -0
- data/lib/chef/resource/cookbook_file.rb +45 -0
- data/lib/chef/resource/cron.rb +188 -0
- data/lib/chef/resource/csh.rb +33 -0
- data/lib/chef/resource/deploy.rb +371 -0
- data/lib/chef/resource/deploy_revision.rb +35 -0
- data/lib/chef/resource/directory.rb +76 -0
- data/lib/chef/resource/dpkg_package.rb +34 -0
- data/lib/chef/resource/easy_install_package.rb +57 -0
- data/lib/chef/resource/env.rb +58 -0
- data/lib/chef/resource/erl_call.rb +83 -0
- data/lib/chef/resource/execute.rb +127 -0
- data/lib/chef/resource/file.rb +99 -0
- data/lib/chef/resource/freebsd_package.rb +35 -0
- data/lib/chef/resource/gem_package.rb +53 -0
- data/lib/chef/resource/git.rb +37 -0
- data/lib/chef/resource/group.rb +70 -0
- data/lib/chef/resource/http_request.rb +61 -0
- data/lib/chef/resource/ifconfig.rb +134 -0
- data/lib/chef/resource/link.rb +78 -0
- data/lib/chef/resource/log.rb +62 -0
- data/lib/chef/resource/macports_package.rb +29 -0
- data/lib/chef/resource/mdadm.rb +82 -0
- data/lib/chef/resource/mount.rb +135 -0
- data/lib/chef/resource/ohai.rb +40 -0
- data/lib/chef/resource/package.rb +80 -0
- data/lib/chef/resource/pacman_package.rb +33 -0
- data/lib/chef/resource/perl.rb +33 -0
- data/lib/chef/resource/portage_package.rb +33 -0
- data/lib/chef/resource/python.rb +33 -0
- data/lib/chef/resource/remote_directory.rb +109 -0
- data/lib/chef/resource/remote_file.rb +83 -0
- data/lib/chef/resource/route.rb +135 -0
- data/lib/chef/resource/rpm_package.rb +34 -0
- data/lib/chef/resource/ruby.rb +33 -0
- data/lib/chef/resource/ruby_block.rb +40 -0
- data/lib/chef/resource/scm.rb +147 -0
- data/lib/chef/resource/script.rb +60 -0
- data/lib/chef/resource/service.rb +160 -0
- data/lib/chef/resource/solaris_package.rb +36 -0
- data/lib/chef/resource/subversion.rb +36 -0
- data/lib/chef/resource/template.rb +69 -0
- data/lib/chef/resource/timestamped_deploy.rb +31 -0
- data/lib/chef/resource/user.rb +130 -0
- data/lib/chef/resource/yum_package.rb +43 -0
- data/lib/chef/resource_collection.rb +217 -0
- data/lib/chef/resource_collection/stepable_iterator.rb +124 -0
- data/lib/chef/resource_definition.rb +67 -0
- data/lib/chef/resource_definition_list.rb +38 -0
- data/lib/chef/resources.rb +64 -0
- data/lib/chef/rest.rb +386 -0
- data/lib/chef/rest/auth_credentials.rb +71 -0
- data/lib/chef/rest/cookie_jar.rb +31 -0
- data/lib/chef/rest/rest_request.rb +188 -0
- data/lib/chef/role.rb +341 -0
- data/lib/chef/run_context.rb +126 -0
- data/lib/chef/run_list.rb +165 -0
- data/lib/chef/run_list/run_list_expansion.rb +193 -0
- data/lib/chef/run_list/run_list_item.rb +92 -0
- data/lib/chef/run_list/versioned_recipe_list.rb +68 -0
- data/lib/chef/run_status.rb +121 -0
- data/lib/chef/runner.rb +99 -0
- data/lib/chef/sandbox.rb +153 -0
- data/lib/chef/search/query.rb +65 -0
- data/lib/chef/shef.rb +326 -0
- data/lib/chef/shef/ext.rb +569 -0
- data/lib/chef/shef/model_wrapper.rb +120 -0
- data/lib/chef/shef/shef_rest.rb +28 -0
- data/lib/chef/shef/shef_session.rb +284 -0
- data/lib/chef/shell_out.rb +238 -0
- data/lib/chef/shell_out/unix.rb +223 -0
- data/lib/chef/shell_out/windows.rb +98 -0
- data/lib/chef/solr_query.rb +187 -0
- data/lib/chef/solr_query/lucene.treetop +150 -0
- data/lib/chef/solr_query/lucene_nodes.rb +285 -0
- data/lib/chef/solr_query/query_transform.rb +65 -0
- data/lib/chef/solr_query/solr_http_request.rb +118 -0
- data/lib/chef/streaming_cookbook_uploader.rb +201 -0
- data/lib/chef/tasks/chef_repo.rake +256 -0
- data/lib/chef/util/file_edit.rb +122 -0
- data/lib/chef/util/windows.rb +56 -0
- data/lib/chef/util/windows/net_group.rb +101 -0
- data/lib/chef/util/windows/net_use.rb +121 -0
- data/lib/chef/util/windows/net_user.rb +198 -0
- data/lib/chef/util/windows/volume.rb +59 -0
- data/lib/chef/version.rb +23 -0
- data/lib/chef/version_class.rb +70 -0
- data/lib/chef/version_constraint.rb +116 -0
- data/lib/chef/webui_user.rb +231 -0
- metadata +600 -0
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Seth Falcon (<seth@opscode.com>)
|
|
3
|
+
# Copyright:: Copyright (c) 2010-2011 Opscode, Inc.
|
|
4
|
+
# License:: Apache License, Version 2.0
|
|
5
|
+
#
|
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
# you may not use this file except in compliance with the License.
|
|
8
|
+
# You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
# See the License for the specific language governing permissions and
|
|
16
|
+
# limitations under the License.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
grammar Lucene
|
|
20
|
+
|
|
21
|
+
rule body
|
|
22
|
+
(expression / space)* <Body>
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
rule expression
|
|
26
|
+
operation / group / field / field_range / term / string
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
rule term
|
|
30
|
+
keyword valid_letter+ <Term> / !keyword !"?" valid_letter <Term>
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
rule field
|
|
34
|
+
field_name ":" (term/string/group) <Field>
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
rule field_range
|
|
38
|
+
field_name ":" "[" range_value " TO " range_value "]" <InclFieldRange>
|
|
39
|
+
/
|
|
40
|
+
field_name ":" "{" range_value " TO " range_value "}" <ExclFieldRange>
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
rule field_name
|
|
44
|
+
!keyword valid_letter+ <FieldName>
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
rule range_value
|
|
48
|
+
valid_letter+ <RangeValue> / "*" <RangeValue>
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
rule group
|
|
52
|
+
space? '(' body ')' space? <Group>
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
rule operation
|
|
56
|
+
binary_op / unary_op / fuzzy_op / boost_op
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
rule unary_op
|
|
60
|
+
not_op / required_op / prohibited_op
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
rule binary_op
|
|
64
|
+
(group / field / field_range / term) space? boolean_operator space+ body <BinaryOp>
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
rule boolean_operator
|
|
68
|
+
and_operator / or_operator
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
rule and_operator
|
|
72
|
+
'AND' <AndOperator> / '&&' <AndOperator>
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
rule or_operator
|
|
76
|
+
'OR' <OrOperator> / '||' <OrOperator>
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
rule not_op
|
|
80
|
+
not_operator space (group / field / field_range / term / string) <UnaryOp>
|
|
81
|
+
/
|
|
82
|
+
bang_operator space? (group / field / field_range / term / string) <UnaryOp>
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
rule not_operator
|
|
86
|
+
'NOT' <NotOperator>
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
rule bang_operator
|
|
90
|
+
'!' <NotOperator>
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
rule required_op
|
|
94
|
+
!valid_letter required_operator (term/string) <UnaryOp>
|
|
95
|
+
/
|
|
96
|
+
required_operator (term/string) <UnaryOp>
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
rule required_operator
|
|
100
|
+
'+' <RequiredOperator>
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
rule prohibited_op
|
|
104
|
+
!valid_letter prohibited_operator (field/field_range/term/string) <UnaryOp>
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
rule prohibited_operator
|
|
108
|
+
'-' <ProhibitedOperator>
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
rule boost_op
|
|
112
|
+
(term/string) '^' fuzzy_param <BoostOp>
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
rule fuzzy_op
|
|
116
|
+
(term/string) '~' fuzzy_param? (space / !valid_letter) <FuzzyOp>
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
rule fuzzy_param
|
|
120
|
+
[0-9] '.'? [0-9] <FuzzyParam> / [0-9]+ <FuzzyParam>
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
rule string
|
|
124
|
+
'"' term (space term)* '"' <Phrase>
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
rule keyword
|
|
128
|
+
'AND' / 'OR' / 'NOT'
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
rule valid_letter
|
|
132
|
+
start_letter+ ([a-zA-Z0-9*?_.-] / '\\' special_char)*
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
rule start_letter
|
|
136
|
+
[a-zA-Z0-9._*] / '\\' special_char
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
rule end_letter
|
|
140
|
+
[a-zA-Z0-9*?_.] / '\\' special_char
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
rule special_char
|
|
144
|
+
[-+&|!(){}\[\]^"~*?:\\]
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
rule space
|
|
148
|
+
[\s]+
|
|
149
|
+
end
|
|
150
|
+
end
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Seth Falcon (<seth@opscode.com>)
|
|
3
|
+
# Copyright:: Copyright (c) 2010-2011 Opscode, Inc.
|
|
4
|
+
# License:: Apache License, Version 2.0
|
|
5
|
+
#
|
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
# you may not use this file except in compliance with the License.
|
|
8
|
+
# You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
# See the License for the specific language governing permissions and
|
|
16
|
+
# limitations under the License.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'treetop'
|
|
20
|
+
|
|
21
|
+
module Lucene
|
|
22
|
+
SEP = "__=__"
|
|
23
|
+
|
|
24
|
+
class Term < Treetop::Runtime::SyntaxNode
|
|
25
|
+
def to_array
|
|
26
|
+
"T:#{self.text_value}"
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def transform
|
|
30
|
+
self.text_value
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
class Field < Treetop::Runtime::SyntaxNode
|
|
35
|
+
def to_array
|
|
36
|
+
field = self.elements[0].text_value
|
|
37
|
+
term = self.elements[1].to_array
|
|
38
|
+
"(F:#{field} #{term})"
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def transform
|
|
42
|
+
field = self.elements[0].text_value
|
|
43
|
+
term = self.elements[1]
|
|
44
|
+
if term.is_a? Phrase
|
|
45
|
+
str = term.transform
|
|
46
|
+
# remove quotes
|
|
47
|
+
str = str[1 ... (str.length - 1)]
|
|
48
|
+
"content:\"#{field}#{SEP}#{str}\""
|
|
49
|
+
else
|
|
50
|
+
"content:#{field}#{SEP}#{term.transform}"
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
class FieldRange < Treetop::Runtime::SyntaxNode
|
|
56
|
+
|
|
57
|
+
def to_array
|
|
58
|
+
field = self.elements[0].text_value
|
|
59
|
+
range_start = self.elements[1].to_array
|
|
60
|
+
range_end = self.elements[2].to_array
|
|
61
|
+
"(FR:#{field} #{left}#{range_start}#{right} #{left}#{range_end}#{right})"
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def transform
|
|
65
|
+
field = self.elements[0].text_value
|
|
66
|
+
range_start = self.elements[1].transform
|
|
67
|
+
range_end = self.elements[2].transform
|
|
68
|
+
# FIXME: handle special cases for missing start/end
|
|
69
|
+
if ("*" == range_start && "*" == range_end)
|
|
70
|
+
"content:#{field}#{SEP}*"
|
|
71
|
+
elsif "*" == range_end
|
|
72
|
+
"content:#{left}#{field}#{SEP}#{range_start} TO #{field}#{SEP}\\ufff0#{right}"
|
|
73
|
+
elsif "*" == range_start
|
|
74
|
+
"content:#{left}#{field}#{SEP} TO #{field}#{SEP}#{range_end}#{right}"
|
|
75
|
+
else
|
|
76
|
+
"content:#{left}#{field}#{SEP}#{range_start} TO #{field}#{SEP}#{range_end}#{right}"
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
class InclFieldRange < FieldRange
|
|
83
|
+
def left
|
|
84
|
+
"["
|
|
85
|
+
end
|
|
86
|
+
def right
|
|
87
|
+
"]"
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
class ExclFieldRange < FieldRange
|
|
92
|
+
def left
|
|
93
|
+
"{"
|
|
94
|
+
end
|
|
95
|
+
def right
|
|
96
|
+
"}"
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
class RangeValue < Treetop::Runtime::SyntaxNode
|
|
101
|
+
def to_array
|
|
102
|
+
self.text_value
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def transform
|
|
106
|
+
to_array
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
class FieldName < Treetop::Runtime::SyntaxNode
|
|
111
|
+
def to_array
|
|
112
|
+
self.text_value
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def transform
|
|
116
|
+
to_array
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
class Body < Treetop::Runtime::SyntaxNode
|
|
122
|
+
def to_array
|
|
123
|
+
self.elements.map { |x| x.to_array }.join(" ")
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def transform
|
|
127
|
+
self.elements.map { |x| x.transform }.join(" ")
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
class Group < Treetop::Runtime::SyntaxNode
|
|
132
|
+
def to_array
|
|
133
|
+
"(" + self.elements[0].to_array + ")"
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
def transform
|
|
137
|
+
"(" + self.elements[0].transform + ")"
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
class BinaryOp < Treetop::Runtime::SyntaxNode
|
|
142
|
+
def to_array
|
|
143
|
+
op = self.elements[1].to_array
|
|
144
|
+
a = self.elements[0].to_array
|
|
145
|
+
b = self.elements[2].to_array
|
|
146
|
+
"(#{op} #{a} #{b})"
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
def transform
|
|
150
|
+
op = self.elements[1].transform
|
|
151
|
+
a = self.elements[0].transform
|
|
152
|
+
b = self.elements[2].transform
|
|
153
|
+
"#{a} #{op} #{b}"
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
class AndOperator < Treetop::Runtime::SyntaxNode
|
|
158
|
+
def to_array
|
|
159
|
+
"OP:AND"
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
def transform
|
|
163
|
+
"AND"
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
class OrOperator < Treetop::Runtime::SyntaxNode
|
|
168
|
+
def to_array
|
|
169
|
+
"OP:OR"
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
def transform
|
|
173
|
+
"OR"
|
|
174
|
+
end
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
class FuzzyOp < Treetop::Runtime::SyntaxNode
|
|
178
|
+
def to_array
|
|
179
|
+
a = self.elements[0].to_array
|
|
180
|
+
param = self.elements[1]
|
|
181
|
+
if param
|
|
182
|
+
"(OP:~ #{a} #{param.to_array})"
|
|
183
|
+
else
|
|
184
|
+
"(OP:~ #{a})"
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
def transform
|
|
189
|
+
a = self.elements[0].transform
|
|
190
|
+
param = self.elements[1]
|
|
191
|
+
if param
|
|
192
|
+
"#{a}~#{param.transform}"
|
|
193
|
+
else
|
|
194
|
+
"#{a}~"
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
class BoostOp < Treetop::Runtime::SyntaxNode
|
|
200
|
+
def to_array
|
|
201
|
+
a = self.elements[0].to_array
|
|
202
|
+
param = self.elements[1]
|
|
203
|
+
"(OP:^ #{a} #{param.to_array})"
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
def transform
|
|
207
|
+
a = self.elements[0].transform
|
|
208
|
+
param = self.elements[1]
|
|
209
|
+
"#{a}^#{param.transform}"
|
|
210
|
+
end
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
class FuzzyParam < Treetop::Runtime::SyntaxNode
|
|
214
|
+
def to_array
|
|
215
|
+
self.text_value
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
def transform
|
|
219
|
+
self.text_value
|
|
220
|
+
end
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
class UnaryOp < Treetop::Runtime::SyntaxNode
|
|
224
|
+
def to_array
|
|
225
|
+
op = self.elements[0].to_array
|
|
226
|
+
a = self.elements[1].to_array
|
|
227
|
+
"(#{op} #{a})"
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
def transform
|
|
231
|
+
op = self.elements[0].transform
|
|
232
|
+
a = self.elements[1].transform
|
|
233
|
+
spc = case op
|
|
234
|
+
when "+", "-"
|
|
235
|
+
""
|
|
236
|
+
else
|
|
237
|
+
" "
|
|
238
|
+
end
|
|
239
|
+
"#{op}#{spc}#{a}"
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
class NotOperator < Treetop::Runtime::SyntaxNode
|
|
245
|
+
def to_array
|
|
246
|
+
"OP:NOT"
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
def transform
|
|
250
|
+
"NOT"
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
class RequiredOperator < Treetop::Runtime::SyntaxNode
|
|
256
|
+
def to_array
|
|
257
|
+
"OP:+"
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
def transform
|
|
261
|
+
"+"
|
|
262
|
+
end
|
|
263
|
+
|
|
264
|
+
end
|
|
265
|
+
|
|
266
|
+
class ProhibitedOperator < Treetop::Runtime::SyntaxNode
|
|
267
|
+
def to_array
|
|
268
|
+
"OP:-"
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
def transform
|
|
272
|
+
"-"
|
|
273
|
+
end
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
class Phrase < Treetop::Runtime::SyntaxNode
|
|
277
|
+
def to_array
|
|
278
|
+
"STR:#{self.text_value}"
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
def transform
|
|
282
|
+
"#{self.text_value}"
|
|
283
|
+
end
|
|
284
|
+
end
|
|
285
|
+
end
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Seth Falcon (<seth@opscode.com>)
|
|
3
|
+
# Copyright:: Copyright (c) 2010-2011 Opscode, Inc.
|
|
4
|
+
# License:: Apache License, Version 2.0
|
|
5
|
+
#
|
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
# you may not use this file except in compliance with the License.
|
|
8
|
+
# You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
# See the License for the specific language governing permissions and
|
|
16
|
+
# limitations under the License.
|
|
17
|
+
#
|
|
18
|
+
require 'treetop'
|
|
19
|
+
require 'chef/solr_query/lucene_nodes'
|
|
20
|
+
|
|
21
|
+
class Chef
|
|
22
|
+
class Exceptions
|
|
23
|
+
class QueryParseError < StandardError
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
class Chef
|
|
29
|
+
class SolrQuery
|
|
30
|
+
class QueryTransform
|
|
31
|
+
@@base_path = File.expand_path(File.dirname(__FILE__))
|
|
32
|
+
Treetop.load(File.join(@@base_path, 'lucene.treetop'))
|
|
33
|
+
@@parser = LuceneParser.new
|
|
34
|
+
|
|
35
|
+
def self.parse(data)
|
|
36
|
+
tree = @@parser.parse(data)
|
|
37
|
+
msg = "Parse error at offset: #{@@parser.index}\n"
|
|
38
|
+
msg += "Reason: #{@@parser.failure_reason}"
|
|
39
|
+
raise Chef::Exceptions::QueryParseError, msg if tree.nil?
|
|
40
|
+
self.clean_tree(tree)
|
|
41
|
+
tree.to_array
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def self.transform(data)
|
|
45
|
+
return "*:*" if data == "*:*"
|
|
46
|
+
tree = @@parser.parse(data)
|
|
47
|
+
msg = "Parse error at offset: #{@@parser.index}\n"
|
|
48
|
+
msg += "Reason: #{@@parser.failure_reason}"
|
|
49
|
+
raise Chef::Exceptions::QueryParseError, msg if tree.nil?
|
|
50
|
+
self.clean_tree(tree)
|
|
51
|
+
tree.transform
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
private
|
|
55
|
+
|
|
56
|
+
def self.clean_tree(root_node)
|
|
57
|
+
return if root_node.elements.nil?
|
|
58
|
+
root_node.elements.delete_if do |node|
|
|
59
|
+
node.class.name == "Treetop::Runtime::SyntaxNode"
|
|
60
|
+
end
|
|
61
|
+
root_node.elements.each { |node| self.clean_tree(node) }
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|