Files
chromebrew/lib/package_helpers.rb
SupeChicken666 91f0f2ac98 lib/package: Get rid of eval strings (#10117)
* lib/package: Cleanup functions, get rid of `eval` strings

Signed-off-by: supechicken <me@supechicken666.dev>

* Fix error

Signed-off-by: supechicken <me@supechicken666.dev>

* Fix error

Signed-off-by: supechicken <me@supechicken666.dev>

* Add comments

Signed-off-by: supechicken <me@supechicken666.dev>

* Make rubocop happy

Signed-off-by: supechicken <me@supechicken666.dev>

* Fix error

Signed-off-by: supechicken <me@supechicken666.dev>

* Simplify

Signed-off-by: supechicken <me@supechicken666.dev>

* Bump crew version

Signed-off-by: supechicken <me@supechicken666.dev>

---------

Signed-off-by: supechicken <me@supechicken666.dev>
2024-07-10 14:49:10 -05:00

58 lines
1.8 KiB
Ruby

class InstallError < RuntimeError; end
def create_placeholder(*functions)
# create_placeholder: create a placeholder for functions that will be used by crew later
functions.each do |func_name|
define_singleton_method(func_name) { true }
end
end
def property(*properties)
# property: like attr_accessor, but `=` is not needed to define a value
# Examples:
# {prop_name}('example') # set {prop_name} to 'example'
# {prop_name} # return the value of {prop_name}
properties.each do |prop_name|
define_singleton_method(prop_name) do |prop_value = nil, &block|
prop_var_name = "@#{prop_name}"
if block
# store the block if a block is provided
instance_variable_set(prop_var_name, block)
elsif prop_value
instance_variable_set(prop_var_name, prop_value)
else
# return current value if nothing is provided
return instance_variable_get(prop_var_name)
end
end
end
end
def boolean_property(*boolean_properties)
# boolean_property: if this exists in a package, it will return true
# Examples:
# {prop_name} # this will return #{prop_name} as true
define_singleton_method(:available_boolean_properties) do
# available_boolean_properties: Return all available boolean properties for use in commands/{prop,help}.rb
# Usage:
# puts Package.available_boolean_properties => [:conflicts_ok, ...]
return boolean_properties
end
boolean_properties.each do |prop_name|
prop_var_name = "@#{prop_name}"
# Adds the self.{symbol} method
define_singleton_method(prop_name) do
instance_variable_set(prop_var_name, true)
end
# Adds the self.{symbol}? method
define_singleton_method("#{prop_name}?") do
return !!instance_variable_get(prop_var_name)
end
end
end