Class: FormWidget

Inherits:
Cuca::Widget show all
Defined in:
lib/cuca/stdlib/form.rb

Overview

FormWidget

To implement a form inherit this class and overwrite:

  • form - generate your form (as if it was the output method of a widget)

    • Use @form_name for your html form name

    • Use @submit_name for your submit button

  • validate - to validate a posted form

    • write @form_errors on errors (to handle them with FormErrors Widget)

  • setup - Define initial values for your form

A form will call form_name_submit(result) on the CONTROLLER if the form was submitted and validation passed. If you don’t want this, overwrite on_submit

A form will use instance variables for form values

Direct Known Subclasses

ARFormWidget, TestFormWidget

Instance Method Summary collapse

Methods inherited from Cuca::Widget

#app, #cgi, #clear, clear_hints, #content, #content=, #controller, define_attr_method, #escape, #escapeHTML, #get_assigns, #hints, #initialize, #log, #params, #query_parameters, #request_method, #request_parameters, run_attr_method, #session, #to_s, #unescape, #unescapeHTML

Constructor Details

This class inherits a constructor from Cuca::Widget

Instance Method Details

#formObject

Create your form by overwriting this demo Name your submit button @submit_name, so the form can detect if it is submitted or not.



44
45
# File 'lib/cuca/stdlib/form.rb', line 44

def form
end

#get_variablesObject

get from params and return them as hash



29
30
31
32
33
# File 'lib/cuca/stdlib/form.rb', line 29

def get_variables
  r = {}
  params.each_pair { |k,v| r[k] = v }
  return r
end

#load_variablesObject

get from params and set instance variables



24
25
26
# File 'lib/cuca/stdlib/form.rb', line 24

def load_variables
  params.each_pair { |k,v| instance_variable_set('@'+k, v)  }
end

#on_submitObject

If form is validated we call on_submit. Default behaviour is to call form_name_submit(result) on the CONTROLLER.



54
55
56
57
58
# File 'lib/cuca/stdlib/form.rb', line 54

def on_submit
 controller.send(@form_name+'_submit', get_variables) unless controller.nil?
 clear
 form
end

#output(form_name, options = {}) ⇒ Object

options can be used for form specific stuff we only use :post_to to set @post_to atm



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
# File 'lib/cuca/stdlib/form.rb', line 62

def output(form_name, options = {})
  @form_name = form_name
  
  @submit_name = 'submit_'+@form_name
  @form_errors = {}

  @options = options
  
  setup

  @post_to   = @options[:post_to] || cgi.path_info


#   form

  if posted? then
    load_variables
    validate
    if @form_errors.empty? then
# What was that thought about?
#        clear		# submitted forms should not have any content that might have been generated
       return on_submit
    else
       form
    end
  else
    form
  end
end

#posted?Boolean

Returns:

  • (Boolean)


19
20
21
# File 'lib/cuca/stdlib/form.rb', line 19

def posted?
  return (request_method == 'POST' && !params[@submit_name].nil?)
end

#setupObject

Overwrite this method to setup initial values This method will not be called if the form get submitted.



37
38
# File 'lib/cuca/stdlib/form.rb', line 37

def setup
end

#validateObject

Overwrite this method with your validation code



49
50
# File 'lib/cuca/stdlib/form.rb', line 49

def validate
end