module WrapIt::Switches::ClassMethods
{Switches} class methods
Public Instance Methods
Adds `switch`. Switch is a boolean flag. When element created, creation arguments will be scanned for `Symbol`, that equals to `name`. If it founded, switch turned on. Also creation options inspected. If its contains `name: true` key-value pair, this pair removed from options and switch also turned on.
This method also adds getter and setter for this switch in form `name?` and `name=` respectively.
When `html_class` option specified and switch changes its state, HTML
class for element will be computed as follows. if `html_class` options is `true`, html class produced from `html_class_prefix` and `name` of switch. If `html_class` is a String, Symbol or Array of this types, html class produced as array of `html_class_prefix` and each `html_class` concatinations. This classes added to element if switch is on or removed in other case.
@param name [String, Symbol] Switch name. Converted to `Symbol`. @param options [Hash] Switch options @option options [true, String, Symbol, Array<String, Symbol>] :html_class
HTML classes list that will automatically added to element if switch is on or removed from element if switch id off.
@option options [Symbol, Array<Symbol>] :aliases list of aliases.
Warning! Values are not converted - pass only `Symbols` here.
@yield [state] Runs block when switch state changed, gives it to block. @yieldparam state [Boolean] Whether switch is on or off. @yieldreturn [Object, FalseClass] if you return `false`, value will
ommited.
@return [void]
# File lib/wrap_it/switches.rb, line 60 def switch(name, options = {}, &block) options.symbolize_keys! name = name.to_sym options.merge!(block: block, name: name) if options.key?(:html_class) options[:html_class] = if options[:html_class] == true [html_class_prefix + name.to_s] else HTMLClass.sanitize(options[:html_class]).map do |c| html_class_prefix + c end end end define_method("#{name}?") { @switches[name] == true } define_method("#{name}=", &Switches.setter(name, &block)) @switches ||= {} @switches[name] = options o_params = {} a_params = { if: Symbol, and: name } if options.key?(:aliases) aliases = [options[:aliases]].flatten.compact o_params[:if] = [name] + aliases a_params[:and] = [name] + aliases end option(name, **o_params) do |_, v| send("#{options[:name]}=", v == true) end argument(name, **a_params) do |_, _| send("#{options[:name]}=", true) end end