Class: Formbuilder::FormRenderer

Inherits:
Object
  • Object
show all
Includes:
ActionView::Context, ActionView::Helpers::FormTagHelper, ActionView::Helpers::UrlHelper
Defined in:
lib/formbuilder/form_renderer.rb

Constant Summary collapse

DEFAULT_OPTIONS =
{
  action: '',
  method: 'POST'
}

Instance Method Summary collapse

Constructor Details

#initialize(form, entry, options = {}) ⇒ FormRenderer

Returns a new instance of FormRenderer.



15
16
17
18
# File 'lib/formbuilder/form_renderer.rb', line 15

def initialize(form, entry, options = {})
  @form, @entry = form, entry
  @options = self.class::DEFAULT_OPTIONS.merge(options)
end

Instance Method Details

#hidden_fieldsObject



28
29
30
31
32
# File 'lib/formbuilder/form_renderer.rb', line 28

def hidden_fields
  """
    <input type='hidden' name='draft_only' />
  """.html_safe
end

#protect_against_forgery?Boolean

Returns:

  • (Boolean)


8
# File 'lib/formbuilder/form_renderer.rb', line 8

def protect_against_forgery?; false; end

#render_actionsObject



93
94
95
96
97
98
99
100
# File 'lib/formbuilder/form_renderer.rb', line 93

def render_actions
  """
    <div class='form-actions'>
      <button class='button'>Submit</button>
      <a class='button save-draft-button' data-loading-text='All changes saved'>Save draft</a>
    </div>
  """.html_safe
end

#render_descriptionObject



78
79
80
81
82
# File 'lib/formbuilder/form_renderer.rb', line 78

def render_description
  return unless @field.input_field
  return if @field[:field_options]["description"].blank?
  "<span class='help-block'>#{simple_format(@field[:field_options]["description"])}</span>"
end

#render_errorObject



72
73
74
75
76
# File 'lib/formbuilder/form_renderer.rb', line 72

def render_error
  return unless @field.input_field
  return unless @entry.error_for(@field)
  "<span class='help-block validation-message-wrapper'>#{@entry.error_for(@field)}</span>"
end

#render_fieldObject



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/formbuilder/form_renderer.rb', line 41

def render_field
  value = @entry.try(:response_value, @field)

  """
    <div class='response-field-wrapper response-field-#{@field.field_type} #{@entry.try(:error_for, @field) && 'error'}'>
      #{render_label}
      #{@field.render_input(value, entry: @entry)}
      <div class='cf'></div>
      #{render_error}
      #{render_description}
      #{render_length_validations}
      #{render_min_max_validations}
    </div>
  """
end

#render_fieldsObject



34
35
36
37
38
39
# File 'lib/formbuilder/form_renderer.rb', line 34

def render_fields
  @form.response_fields.map do |field|
    @field = field
    render_field
  end.join('').html_safe
end

#render_labelObject



57
58
59
60
61
62
63
64
65
66
# File 'lib/formbuilder/form_renderer.rb', line 57

def render_label
  return unless @field.input_field

  """
    <label>
      #{@field[:label]}
      #{render_label_required if @field.required?}
    </label>
  """
end

#render_label_requiredObject



68
69
70
# File 'lib/formbuilder/form_renderer.rb', line 68

def render_label_required
  "<abbr title='required'>*</abbr>"
end

#render_length_validationsObject



84
85
86
87
# File 'lib/formbuilder/form_renderer.rb', line 84

def render_length_validations
  return unless @field.input_field
  return unless !@field.has_length_validations?
end

#render_min_max_validationsObject



89
90
91
# File 'lib/formbuilder/form_renderer.rb', line 89

def render_min_max_validations
  return unless @field.input_field
end

#to_htmlObject



20
21
22
23
24
25
26
# File 'lib/formbuilder/form_renderer.rb', line 20

def to_html
  form_tag @options[:action], method: @options[:method], class: 'formbuilder-form', multipart: true do
    hidden_fields +
    render_fields +
    render_actions
  end
end