module Wedge::Plugins::Render

Public Instance Methods

_error_name(key, error) click to toggle source
# File lib/wedge/plugins/render.rb, line 95
def _error_name key, error
  case error.to_s.to_sym
  when :not_email
    'Email Isn\'t Valid.'
  when :not_present
    'Required.'
  when :not_equal
    'Password does not match.'
  else
    !error.to_s[/\s/] ? error.to_s.gsub(/_/, ' ').titleize : error
  end
end
display_errors(options = {}) click to toggle source
# File lib/wedge/plugins/render.rb, line 4
def display_errors options = {}, &block
  dom = options.delete(:dom) || _options[:dom]
  d_errors = errors.deep_dup

  if override_errors = options[:override_errors]
    d_errors = override_errors
  end

  keys = options.delete(:keys) || (_options[:key] ? [_options[:key]] : [])
  options[:position] ||= :before

  if extra_errors = options.delete(:errors)
    extra_errors.each do |key, value|
      d_errors[key] = value
    end
  end

  d_errors.each do |key, error|
    d_keys = (keys.dup << key)

    if error.is_a?(IndifferentHash)
      d_options = options.dup
      d_options[:keys] = d_keys
      d_options[:override_errors] = d_errors[key]

      display_errors d_options, &block
    elsif !block_given? || block.call(d_keys, error.first) == false
      name = d_keys.each_with_index.map do |field, i|
        i != 0 ? "[#{field}]" : field
      end.join

      if tmpl = options[:tmpl]
        if client?
          field_error_dom = DOM.new(`#{tmpl.dom}[0].outerHTML`)
        else
          field_error_dom = DOM.new(tmpl.dom.to_html)
        end
      else
        field_error_dom = DOM.new('<span class="field-error"><span>')
      end

      field_error_dom.html _error_name(key, error.first)

      field = dom.find("[name='#{name}']")
      field.send(options[:position], field_error_dom.dom)
    end
  end
end
Also aliased as: render_errors
render_errors(options = {})
Alias for: display_errors
render_values(dom = false, key = false, data = false) click to toggle source
# File lib/wedge/plugins/render.rb, line 54
def render_values dom = false, key = false, data = false
  dom = _options[:dom] unless dom
  key = _options[:key] if !key && _options.key?(:key)

  dom.find('input, select, textarea') do |element|
    name  = element['name']
    next if name.nil?
    name  = name.gsub(/\A#{key}/, '') if key
    keys  = name.gsub(/\A\[/, '').gsub(/[^a-z0-9_]/, '|').gsub(/\|\|/, '|').gsub(/\|$/, '').split('|')
    value = false

    keys.each do |k|
      begin
        value = value != false ? value.send(k) : send(k)
      rescue
        value = ''
      end
    end

    case element.name
    when 'select'
      element.find('option') do |x|
        x['selected'] = true if x['value'] == value.to_s
      end
    when 'input'
      if %w(radio checkbox).include? element['type']
        if element['value'] == value.to_s
          element['checked'] = true
        else
          element.delete 'checked'
        end
      else
        value = sprintf('%.2f', value) if value.is_a? BigDecimal
        element['value'] = value.to_s
      end
    when 'textarea'
      element.val value.to_s
    end
  end
end