Module: WrapIt::Switches::ClassMethods

Included in:
Base, WrapIt::Switches
Defined in:
lib/wrap_it/switches.rb

Overview

WrapIt::Switches class methods

Instance Method Summary collapse

Instance Method Details

#switch(name, options = {}) {|state| ... } ⇒ void

This method returns an undefined value.

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.

Parameters:

  • name (String, Symbol)

    Switch name. Converted to Symbol.

  • options (Hash) (defaults to: {})

    Switch options

Options Hash (options):

  • :html_class (true, String, Symbol, Array<String, Symbol>)

    HTML classes list that will automatically added to element if switch is on or removed from element if switch id off.

  • :aliases (Symbol, Array<Symbol>)

    list of aliases. Warning! Values are not converted - pass only Symbols here.

Yields:

  • (state)

    Runs block when switch state changed, gives it to block.

Yield Parameters:

  • state (Boolean)

    Whether switch is on or off.

Yield Returns:

  • (Object, FalseClass)

    if you return false, value will ommited.



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# 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