Module: Wedge::Plugins::Render

Included in:
Form
Defined in:
lib/wedge/plugins/render.rb

Instance Method Summary collapse

Instance Method Details

#_error_name(key, error) ⇒ Object



95
96
97
98
99
100
101
102
103
104
105
106
# 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 = {}, &block) ⇒ Object Also known as: render_errors



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# 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

#render_values(dom = false, key = false, data = false) ⇒ Object



54
55
56
57
58
59
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
# 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