module PoiseLanguages::Command::Mixin::Resource
A mixin for resources that run language commands. Also available as a parameterized mixin via `include PoiseLanguages::Command::Mixin::Resource(name)`.
@example
class MyLangThing include PoiseLanguages::Command::Mixin::Resource(:mylang) # ... end
Private Instance Methods
default_language_command_runtime(name, default_binary)
click to toggle source
Compute the path to the default runtime binary.
@api private @param name [Symbol] Language name. @return [String]
# File lib/poise_languages/command/mixin.rb, line 92 def default_language_command_runtime(name, default_binary) parent = send(:"parent_#{name}") if parent parent.send(:"#{name}_binary") else PoiseLanguages::Utils.which(default_binary || name.to_s) end end
language_command_runtime(name, runtime, default_binary, val=Poise::NOT_PASSED)
click to toggle source
Implementation of the $name accessor.
@api private @param name [Symbol] Language name. @param runtime [Symbol] Language runtime resource name. @param val [String, Chef::Resource, Poise::NOT_PASSED, nil] Accessor value. @return [String]
# File lib/poise_languages/command/mixin.rb, line 54 def language_command_runtime(name, runtime, default_binary, val=Poise::NOT_PASSED) unless val == Poise::NOT_PASSED path_arg = parent_arg = nil # Figure out which property we are setting. if val.is_a?(String) # Check if it is a runtime resource. begin parent_arg = run_context.resource_collection.find("#{runtime}[#{val}]") rescue Chef::Exceptions::ResourceNotFound # Check if something looks like a path, defined as containing # either / or \. While a single word could be a path, I think the # UX win of better error messages should take priority. might_be_path = val =~ %r{/|\\} if might_be_path Chef::Log.debug("[#{self}] #{runtime}[#{val}] not found, treating it as a path") path_arg = val else # Surface the error up to the user. raise end end else parent_arg = val end # Set both attributes. send(:"parent_#{name}", parent_arg) set_or_return(name, path_arg, kind_of: [String, NilClass]) else # Getter behavior. Using the ivar directly is kind of gross but oh well. instance_variable_get(:"@#{name}") || default_language_command_runtime(name, default_binary) end end
language_command_runtime_from_parent(name, resource)
click to toggle source
Inherit language parent from another resource.
@api private @param name [Symbol] Language name. @param resource [Chef::Resource] Resource
to inherit from. @return [void]
# File lib/poise_languages/command/mixin.rb, line 107 def language_command_runtime_from_parent(name, resource) parent = resource.send(:"parent_#{name}") if parent send(:"parent_#{name}", parent) else path = resource.send(name) if path send(name, path) end end end