Module: WrapIt::Switches::ClassMethods

Defined in:
lib/wrap_it/switches.rb

Overview

Class methods to include

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`.

  • opts (Hash)

    Switch options

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.



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/wrap_it/switches.rb', line 72

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
  names = [name] + [[options[:aliases]] || []].flatten.compact
  define_method("#{name}?") { @switches[name] == true }
  define_method("#{name}=", &Switches.setter(name, &block))
  @switches ||= {}
  names.each { |n| @switches[n] = options }
end