class Chef::Resource::PlistResource
Constants
- DEFAULTS_EXECUTABLE
- PLISTBUDDY_EXECUTABLE
- PLUTIL_EXECUTABLE
- PLUTIL_FORMAT_MAP
Public Instance Methods
convert_to_data_type_from_string(type, value)
click to toggle source
Question: Should I refactor these methods into an action_class? Answer: NO Why: We need them in both the action and in load_current_value. If you put them in the
action class then they're only in the Provider class and are not available to load_current_value
# File lib/chef/resource/plist.rb, line 143 def convert_to_data_type_from_string(type, value) case type when "boolean" # Since we've determined this is a boolean data type, we can assume that: # If the value as an int is 1, return true # If the value as an int is 0 (not 1), return false value.to_i == 1 when "integer" value.to_i when "float" value.to_f when "string", "dictionary" value when nil "" else raise "Unknown or unsupported data type: #{type.class}" end end
entry_in_plist?(entry, path)
click to toggle source
# File lib/chef/resource/plist.rb, line 182 def entry_in_plist?(entry, path) print_entry = plistbuddy_command :print, entry, path cmd = shell_out print_entry cmd.exitstatus == 0 end
plistbuddy_command(subcommand, entry, path, value = nil)
click to toggle source
# File lib/chef/resource/plist.rb, line 188 def plistbuddy_command(subcommand, entry, path, value = nil) sep = " " arg = case subcommand.to_s when "add" type_to_commandline_string(value) when "set" if value.is_a?(Hash) sep = ":" value.map { |k, v| "#{k} #{v}" } else value end else "" end entry_with_arg = ["\"#{entry}\"", arg].join(sep).strip subcommand = "#{subcommand.capitalize} :#{entry_with_arg}" [PLISTBUDDY_EXECUTABLE, "-c", "\'#{subcommand}\'", "\"#{path}\""].join(" ") end
setting_from_plist(entry, path)
click to toggle source
# File lib/chef/resource/plist.rb, line 208 def setting_from_plist(entry, path) defaults_read_type_output = shell_out(DEFAULTS_EXECUTABLE, "read-type", path, entry).stdout data_type = defaults_read_type_output.split.last if value.class == Hash plutil_output = shell_out(PLUTIL_EXECUTABLE, "-extract", entry, "xml1", "-o", "-", path).stdout.chomp { key_type: data_type, key_value: ::Plist.parse_xml(plutil_output) } else defaults_read_output = shell_out(DEFAULTS_EXECUTABLE, "read", path, entry).stdout { key_type: data_type, key_value: defaults_read_output.strip } end end
type_to_commandline_string(value)
click to toggle source
# File lib/chef/resource/plist.rb, line 163 def type_to_commandline_string(value) case value when Array "array" when Integer "integer" when FalseClass, TrueClass "bool" when Hash "dict" when String "string" when Float "float" else raise "Unknown or unsupported data type: #{value} of #{value.class}" end end