summaryrefslogtreecommitdiff
path: root/tasks/docs.rb
diff options
context:
space:
mode:
Diffstat (limited to 'tasks/docs.rb')
-rwxr-xr-xtasks/docs.rb136
1 files changed, 59 insertions, 77 deletions
diff --git a/tasks/docs.rb b/tasks/docs.rb
index cfa937c58d..f0aff0e32a 100755
--- a/tasks/docs.rb
+++ b/tasks/docs.rb
@@ -33,10 +33,12 @@ namespace :docs_site do
text = ""
text << "#{resource_name} 'name' do\n"
properties.each do |p|
+ pretty_default = pretty_default(p["default"])
+
text << " #{p["name"].ljust(padding_size)}"
text << friendly_types_list(p["is"])
text << " # default value: 'name' unless specified" if p["name_property"]
- text << " # default value: #{pretty_default(p["default"])}" unless pretty_default(p["default"]).nil?
+ text << " # default value: #{pretty_default}" unless pretty_default.nil? || (pretty_default.is_a?(String) && pretty_default.length > 45) # 45 chars is too long for these example blocks
text << "\n"
end
text << " #{"action".ljust(padding_size)}Symbol # defaults to :#{default_action.first} if not specified\n"
@@ -55,12 +57,16 @@ namespace :docs_site do
end
def friendly_full_property_list(name, properties)
- [
+ prop_list = [
"`#{name}` is the resource.",
"`name` is the name given to the resource block.",
"`action` identifies which steps Chef Infra Client will take to bring the node into the desired state.",
- friendly_property_list(properties),
]
+
+ # handle the case where we have no properties
+ prop_list << friendly_property_list(properties) unless properties.empty?
+
+ prop_list
end
# given an array of properties print out a single comma separated string
@@ -83,8 +89,9 @@ namespace :docs_site do
end
# given an array of types print out a single comma separated string
- # handling a nil value that needs to be printed as "nil" and TrueClass/FalseClass
- # which needs to be "true" and "false"
+ # handling TrueClass/FalseClass which needs to be "true" and "false"
+ # and removing any nil values since those are less types in properties
+ # and more side effects of legacy design
# @return String
# TODO:
# - still does not include nil (?)
@@ -95,41 +102,28 @@ namespace :docs_site do
"true"
when "FalseClass"
"false"
- when "NilClass", nil
- "nil"
+ when "NilClass"
+ nil
else
x
end
end
+ # compact to remove the nil values
fixed_arr.compact.join(", ")
end
- # Makes sure the resource name is bolded within the description
- # @return String
- def bolded_description(name, description)
- return nil if description.nil? # handle resources missing descriptions
-
- # we only want to bold occurences of the resource name in the first 5 words so treat it as an array
- desc_array = description.split(" ")
-
- desc_array = desc_array[0..4].map! { |x| name == x ? "**#{x}**" : x } + desc_array[5..-1]
-
- # strip out notes and return just the description
- desc_array.join(" ").split("Note: ").first.strip
- end
-
+ # split out notes from the description field. We didn't design a note syntax so we stick them in there
def note_text(description)
return nil if description.nil?
- note = description.split("Note: ")[1]
- if note
- <<-HEREDOC
+ description.split("Note: ")[1]
+ end
- .. note::
+ # Returns description without embedded notes that may be present
+ def description_text(description)
+ return nil if description.nil?
- #{note}
- HEREDOC
- end
+ description.split(" Note:")[0]
end
# build the menu entry for this resource
@@ -180,7 +174,7 @@ namespace :docs_site do
values["required"] = property["required"]
values["default_value"] = default_val unless default_val.nil?
values["new_in"] = property["introduced"] unless property["introduced"].nil?
- values["allowed_values"] = property["equal_to"].join(', ') unless property["equal_to"].empty?
+ values["allowed_values"] = property["equal_to"].join(", ") unless property["equal_to"].empty?
values["description_list"] = [{ "markdown" => property["description"] }]
values
end
@@ -189,85 +183,69 @@ namespace :docs_site do
def special_properties(name, data)
properties = {}
- properties["common_resource_functionality_multiple_packages"] =
- case name
- when "yum_package", "apt_package", "zypper_package", "homebrew_package", "dnf_package", "pacman_package"
- true
- when "package"
- nil
- else
- false
- end
+ # these package properties support passing arrays for the package name
+ properties["common_resource_functionality_multiple_packages"] = true if %w{yum_package apt_package zypper_package homebrew_package dnf_package pacman_package}.include?(name)
- properties["common_resource_functionality_resources_common_windows_security"] = name == "remote_directory"
+ properties["common_resource_functionality_resources_common_windows_security"] = true if name == "remote_directory"
- properties["cookbook_file_specificity"] = name == "cookbook_file"
+ properties["cookbook_file_specificity"] = true if name == "cookbook_file"
- properties["debug_recipes_chef_shell"] = name == "breakpoint"
+ properties["debug_recipes_chef_shell"] = true if name == "breakpoint"
- properties["handler_custom"] = name == "chef_handler"
+ properties["handler_custom"] = true if name == "chef_handler"
- properties["handler_types"] = name == "chef_handler"
+ properties["handler_types"] = true if name == "chef_handler"
- properties["nameless_apt_update"] = name == "apt_update"
+ properties["nameless_apt_update"] = true if name == "apt_update"
- properties["nameless_build_essential"] = name == "build_essential"
+ properties["nameless_build_essential"] = true if name == "build_essential"
- properties["properties_multiple_packages"] = %w{dnf_package package zypper_package}.include?(name)
+ properties["properties_multiple_packages"] = true if %w{dnf_package package zypper_package}.include?(name)
- properties["properties_resources_common_windows_security"] = %w{cookbook_file file template remote_file directory}.include?(name)
+ properties["properties_resources_common_windows_security"] = true if %w{cookbook_file file template remote_file directory}.include?(name)
properties["properties_shortcode"] =
case name
- when "breakpoint"
- "resource_breakpoint_properties.md"
when "ohai"
"resource_ohai_properties.md"
when "log"
"resource_log_properties.md"
- else
- nil
end
- properties["ps_credential_helper"] = name == "dsc_script"
+ properties["ps_credential_helper"] = true if name == "dsc_script"
- properties["registry_key"] = name == "registry_key"
+ properties["registry_key"] = true if name == "registry_key"
- properties["remote_directory_recursive_directories"] = name == "remote_directory"
+ properties["remote_directory_recursive_directories"] = true if name == "remote_directory"
- properties["remote_file_prevent_re_downloads"] = name == "remote_file"
+ properties["remote_file_prevent_re_downloads"] = true if name == "remote_file"
- properties["remote_file_unc_path"] = name == "remote_file"
+ properties["remote_file_unc_path"] = true if name == "remote_file"
- properties["resource_directory_recursive_directories"] = %w{directory remote_directory}.include?(name)
+ properties["resource_directory_recursive_directories"] = true if %w{directory remote_directory}.include?(name)
- properties["resource_package_options"] = name == "package"
+ properties["resource_package_options"] = true if name == "package"
- properties["resources_common_atomic_update"] = %w{cookbook_file file template remote_file}.include?(name)
+ properties["resources_common_atomic_update"] = true if %w{cookbook_file file template remote_file}.include?(name)
- properties["resources_common_guard_interpreter"] = name == "script"
+ properties["resources_common_guard_interpreter"] = true if name == "script"
- properties["resources_common_guards"] = !%w{ruby_block chef_acl chef_environment chef_data_bag chef_mirror chef_container chef_client chef_organization remote_file chef_node chef_group breakpoint chef_role registry_key chef_data_bag_item chef_user package}.include?(name)
+ properties["resources_common_guards"] = true unless %w{ruby_block chef_acl chef_environment chef_data_bag chef_mirror chef_container chef_client chef_organization remote_file chef_node chef_group breakpoint chef_role registry_key chef_data_bag_item chef_user package}.include?(name)
- properties["resources_common_notification"] = !%w{ruby_block chef_acl python chef_environment chef_data_bag chef_mirror perl chef_container chef_client chef_organization remote_file chef_node chef_group breakpoint chef_role registry_key chef_data_bag_item chef_user ruby package}.include?(name)
+ properties["resources_common_notification"] = true unless %w{ruby_block chef_acl python chef_environment chef_data_bag chef_mirror perl chef_container chef_client chef_organization remote_file chef_node chef_group breakpoint chef_role registry_key chef_data_bag_item chef_user ruby package}.include?(name)
- properties["resources_common_properties"] = !%w{ruby_block chef_acl python chef_environment chef_data_bag chef_mirror perl chef_container chef_client chef_organization remote_file chef_node chef_group breakpoint chef_role registry_key chef_data_bag_item chef_user ruby package}.include?(name)
+ properties["resources_common_properties"] = true unless %w{ruby_block chef_acl python chef_environment chef_data_bag chef_mirror perl chef_container chef_client chef_organization remote_file chef_node chef_group breakpoint chef_role registry_key chef_data_bag_item chef_user ruby package}.include?(name)
- properties["ruby_style_basics_chef_log"] = name == "log"
+ properties["ruby_style_basics_chef_log"] = true if name == "log"
- properties["syntax_shortcode"] =
- case name
- when "breakpoint"
- "resource_breakpoint_syntax.md"
- when "log"
- "resource_log_syntax.md"
- else
- nil
- end
+ properties["syntax_shortcode"] = "resource_log_syntax.md" if name == "log"
- properties["template_requirements"] = name == "template"
+ properties["template_requirements"] = true if name == "template"
- properties["unit_file_verification"] = name == "systemd_unit"
+ properties["unit_file_verification"] = true if name == "systemd_unit"
+
+ # these packages all provide 'package' depending on OS and we want to inject a warning / note that you can just use 'package' instead
+ properties["notes_resource_based_on_package" ] = true if %w{apt_package bff_package dnf_package homebrew_package ips_package openbsd_package pacman_package portage_package smartos_package solaris_package windows_package yum_package zypper_package}.include?(name)
properties
end
@@ -289,8 +267,12 @@ namespace :docs_site do
r["aliases"] = ["/resource_#{name}.html"]
r["menu"] = build_menu_item(name)
r["resource_description_list"] = {}
- r["resource_description_list"] = [{ "markdown" => data["description"] }]
- r["resource_new_in"] = data["introduced"]
+ r["resource_description_list"] = [{ "markdown" => description_text(data["description"]) }]
+
+ # if the description contained a note then add it
+ r["resource_description_list"] << { "note" => { "markdown" => note_text(data["description"]) } } unless note_text(data["description"]).nil?
+
+ r["resource_new_in"] = data["introduced"] unless data["introduced"].nil?
r["syntax_full_code_block"] = generate_resource_block(name, properties, data["default_action"])
r["syntax_properties_list"] = nil
r["syntax_full_properties_list"] = friendly_full_property_list(name, properties)