::FormValidator
Add some Hash-ish methods for convenient access to FormValidator#valid.
Originally written by Cal Henderson c.f. iamcal.com/publish/articles/php/parsing_email/
Translated to Ruby by Tim Fletcher, with changes suggested by Dan Kubb.
Licensed under a Creative Commons Attribution-ShareAlike 2.5 License creativecommons.org/licenses/by-sa/2.5/
(Not documented)
Create a new Arrow::FormValidator object.
# File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 112
112: def initialize( profile, params=nil )
113: @profile = Defaults.merge( profile )
114: validate( params ) if params
115: end
Index operator; fetch the validated value for form field key.
# File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 170
170: def []( key )
171: @form[ key.to_s ]
172: end
Index assignment operator; set the validated value for form field key to the specified val.
# File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 177
177: def []=( key, val )
178: @form[ key.to_s ] = val
179: end
Returns true if there were arguments given.
# File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 189
189: def args?
190: return !@form.empty?
191: end
Overridden to remove the check for extra keys.
# File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 165
165: def check_profile_syntax( profile )
166: end
Hash of field descriptions
# File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 138
138: def descriptions
139: @profile[:descriptions]
140: end
Set hash of field descriptions
# File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 144
144: def descriptions=( new_descs )
145: @profile[:descriptions] = new_descs
146: end
Returns true if there were no arguments given.
# File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 183
183: def empty?
184: return @form.empty?
185: end
Return an array of field names which had some kind of error associated with them.
# File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 225
225: def error_fields
226: return self.missing | self.invalid.keys
227: end
Return an error message for each missing or invalid field; if includeUnknown is true, also include messages for unknown fields.
# File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 245
245: def error_messages( include_unknown=false )
246: self.log.debug "Building error messages from descriptions: %p" %
247: [ @profile[:descriptions] ]
248: msgs = []
249: self.missing.each do |field|
250: msgs << "Missing value for '%s'" % self.get_description( field )
251: end
252:
253: self.invalid.each do |field, constraint|
254: msgs << "Invalid value for '%s'" % self.get_description( field )
255: end
256:
257: if include_unknown
258: self.unknown.each do |field|
259: msgs << "Unknown parameter '%s'" % self.get_description( field )
260: end
261: end
262:
263: return msgs
264: end
Returns true if any fields are missing or contain invalid values.
# File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 195
195: def errors?
196: return !self.okay?
197: end
Get the description for the specified field.
# File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 231
231: def get_description( field )
232: return @profile[:descriptions][ field.to_s ] if
233: @profile[:descriptions].key?( field.to_s )
234:
235: desc = field.to_s.
236: gsub( /.*\[(\w+)\]/, "\\1" ).
237: gsub( /_(.)/ ) {|m| " " + m[1,1].upcase }.
238: gsub( /^(.)/ ) {|m| m.upcase }
239: return desc
240: end
Constrain a value to alpha characters (a-z, case-insensitive)
# File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 334
334: def match_alpha( val )
335: if val =~ /^([a-z]+)$/i
336: return $1
337: else
338: return nil
339: end
340: end
Constrain a value to alpha characters (a-z, case-insensitive and 0-9)
# File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 344
344: def match_alphanumeric( val )
345: if val =~ /^([a-z0-9]+)$/i
346: return $1
347: else
348: return nil
349: end
350: end
Constrain a value to true (or yes) and false (or no).
# File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 303
303: def match_boolean( val )
304: rval = nil
305: if ( val =~ /^(t(?:rue)?|y(?:es)?)$/i )
306: rval = true
307: elsif ( val =~ /^(no?|f(?:alse)?)$/i )
308: rval = false
309: end
310:
311: return rval
312: end
Constrain a value to a parseable Date
# File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 328
328: def match_date( val )
329: return Date.parse( val ) rescue nil
330: end
Contrain a value to a Float
# File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 322
322: def match_float( val )
323: return Float( val ) rescue nil
324: end
Constrain a value to an integer
# File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 316
316: def match_integer( val )
317: return Integer( val ) rescue nil
318: end
Constrain a value to any printable characters
# File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 354
354: def match_printable( val )
355: if val =~ /^([[:print:][:space:]]{0,255})$/
356: return val
357: else
358: return nil
359: end
360: end
Returns a distinct list of missing fields. Overridden to eliminate the "undefined method `<=>’ for :foo:Symbol" error.
# File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 269
269: def missing
270: @missing_fields.uniq.sort_by {|f| f.to_s}
271: end
Return true if all required fields were present and validated correctly.
# File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 203
203: def okay?
204: self.missing.empty? && self.invalid.empty?
205: end
Stringified description of the validator
# File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 133
133: def to_s
134: ""
135: end
Returns a distinct list of unknown fields.
# File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 274
274: def unknown
275: (@unknown_fields - @invalid_fields.keys).uniq.sort_by {|f| f.to_s}
276: end
Returns true if the given field is one that should be untainted.
# File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 209
209: def untaint?( field )
210: self.log.debug "Checking to see if %p should be untainted." % [field]
211: rval = ( @untaint_all || @untaint_fields.include?(field) )
212: if rval
213: self.log.debug " ...yep it should."
214: else
215: self.log.debug " ...nope."
216: end
217:
218: return rval
219: end
Returns the valid fields after expanding Rails-style ‘customer[address][street]’ variables into multi-level hashes.
# File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 281
281: def valid
282: if @parsed_params.nil?
283: @parsed_params = {}
284: valid = super()
285:
286: for key, value in valid
287: value = [value] if key =~ /.*\[\]$/
288: unless key.include?( '[' )
289: @parsed_params[ key ] = value
290: else
291: build_deep_hash( value, @parsed_params, get_levels(key) )
292: end
293: end
294: end
295:
296: return @parsed_params
297: end
Validate the input in params. If the optional additional_profile is given, merge it with the validator‘s default profile before validating.
# File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 151
151: def validate( params, additional_profile=nil )
152: @raw_form = params.dup
153: profile = @profile
154:
155: if additional_profile
156: self.log.debug "Merging additional profile %p" % [additional_profile]
157: profile = @profile.merge( additional_profile )
158: end
159:
160: super( params, profile )
161: end
--- SEC00053
--- ""
--- - name: raw_form rw: R a_desc: ""
---
- methods:
- visibility: public
aref: M000314
name: new
sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 112</span>\n\
112: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-identifier\">initialize</span>( <span class=\"ruby-identifier\">profile</span>, <span class=\"ruby-identifier\">params</span>=<span class=\"ruby-keyword kw\">nil</span> )\n\
113: <span class=\"ruby-ivar\">@profile</span> = <span class=\"ruby-constant\">Defaults</span>.<span class=\"ruby-identifier\">merge</span>( <span class=\"ruby-identifier\">profile</span> )\n\
114: <span class=\"ruby-identifier\">validate</span>( <span class=\"ruby-identifier\">params</span> ) <span class=\"ruby-keyword kw\">if</span> <span class=\"ruby-identifier\">params</span>\n\
115: <span class=\"ruby-keyword kw\">end</span>"
m_desc: |-
<p>
Create a <a href="FormValidator.html#M000314">new</a> <a
href="FormValidator.html">Arrow::FormValidator</a> object.
</p>
params: ( profile, params=nil )
category: Class
type: Public
- methods:
- visibility: public
aref: M000320
name: "[]"
sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 170</span>\n\
170: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-operator\">[]</span>( <span class=\"ruby-identifier\">key</span> )\n\
171: <span class=\"ruby-ivar\">@form</span>[ <span class=\"ruby-identifier\">key</span>.<span class=\"ruby-identifier\">to_s</span> ]\n\
172: <span class=\"ruby-keyword kw\">end</span>"
m_desc: |-
<p>
Index operator; fetch the validated value for form field <tt>key</tt>.
</p>
params: ( key )
- visibility: public
aref: M000321
name: "[]="
sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 177</span>\n\
177: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-operator\">[]=</span>( <span class=\"ruby-identifier\">key</span>, <span class=\"ruby-identifier\">val</span> )\n\
178: <span class=\"ruby-ivar\">@form</span>[ <span class=\"ruby-identifier\">key</span>.<span class=\"ruby-identifier\">to_s</span> ] = <span class=\"ruby-identifier\">val</span>\n\
179: <span class=\"ruby-keyword kw\">end</span>"
m_desc: |-
<p>
Index assignment operator; set the validated value for form field
<tt>key</tt> to the specified <tt>val</tt>.
</p>
params: ( key, val )
- visibility: public
aref: M000323
name: args?
sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 189</span>\n\
189: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-identifier\">args?</span>\n\
190: <span class=\"ruby-keyword kw\">return</span> <span class=\"ruby-operator\">!</span><span class=\"ruby-ivar\">@form</span>.<span class=\"ruby-identifier\">empty?</span>\n\
191: <span class=\"ruby-keyword kw\">end</span>"
m_desc: |-
<p>
Returns <tt>true</tt> if there were arguments given.
</p>
params: ()
- visibility: public
aref: M000319
name: check_profile_syntax
sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 165</span>\n\
165: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-identifier\">check_profile_syntax</span>( <span class=\"ruby-identifier\">profile</span> )\n\
166: <span class=\"ruby-keyword kw\">end</span>"
m_desc: |-
<p>
Overridden to remove the check for extra keys.
</p>
params: ( profile )
- visibility: public
aref: M000316
name: descriptions
sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 138</span>\n\
138: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-identifier\">descriptions</span>\n\
139: <span class=\"ruby-ivar\">@profile</span>[<span class=\"ruby-identifier\">:descriptions</span>]\n\
140: <span class=\"ruby-keyword kw\">end</span>"
m_desc: |-
<p>
Hash of field <a href="FormValidator.html#M000316">descriptions</a>
</p>
params: ()
- visibility: public
aref: M000317
name: descriptions=
sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 144</span>\n\
144: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-identifier\">descriptions=</span>( <span class=\"ruby-identifier\">new_descs</span> )\n\
145: <span class=\"ruby-ivar\">@profile</span>[<span class=\"ruby-identifier\">:descriptions</span>] = <span class=\"ruby-identifier\">new_descs</span>\n\
146: <span class=\"ruby-keyword kw\">end</span>"
m_desc: |-
<p>
Set hash of field <a href="FormValidator.html#M000316">descriptions</a>
</p>
params: ( new_descs )
- visibility: public
aref: M000322
name: empty?
sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 183</span>\n\
183: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-identifier\">empty?</span>\n\
184: <span class=\"ruby-keyword kw\">return</span> <span class=\"ruby-ivar\">@form</span>.<span class=\"ruby-identifier\">empty?</span>\n\
185: <span class=\"ruby-keyword kw\">end</span>"
m_desc: |-
<p>
Returns <tt>true</tt> if there were no arguments given.
</p>
params: ()
- visibility: public
aref: M000328
name: error_fields
sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 225</span>\n\
225: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-identifier\">error_fields</span>\n\
226: <span class=\"ruby-keyword kw\">return</span> <span class=\"ruby-keyword kw\">self</span>.<span class=\"ruby-identifier\">missing</span> <span class=\"ruby-operator\">|</span> <span class=\"ruby-keyword kw\">self</span>.<span class=\"ruby-identifier\">invalid</span>.<span class=\"ruby-identifier\">keys</span>\n\
227: <span class=\"ruby-keyword kw\">end</span>"
m_desc: |-
<p>
Return an array of field names which had some kind of error associated with
them.
</p>
params: ()
- visibility: public
aref: M000330
name: error_messages
sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 245</span>\n\
245: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-identifier\">error_messages</span>( <span class=\"ruby-identifier\">include_unknown</span>=<span class=\"ruby-keyword kw\">false</span> )\n\
246: <span class=\"ruby-keyword kw\">self</span>.<span class=\"ruby-identifier\">log</span>.<span class=\"ruby-identifier\">debug</span> <span class=\"ruby-value str\">"Building error messages from descriptions: %p"</span> <span class=\"ruby-operator\">%</span>\n\
247: [ <span class=\"ruby-ivar\">@profile</span>[<span class=\"ruby-identifier\">:descriptions</span>] ]\n\
248: <span class=\"ruby-identifier\">msgs</span> = []\n\
249: <span class=\"ruby-keyword kw\">self</span>.<span class=\"ruby-identifier\">missing</span>.<span class=\"ruby-identifier\">each</span> <span class=\"ruby-keyword kw\">do</span> <span class=\"ruby-operator\">|</span><span class=\"ruby-identifier\">field</span><span class=\"ruby-operator\">|</span>\n\
250: <span class=\"ruby-identifier\">msgs</span> <span class=\"ruby-operator\"><<</span> <span class=\"ruby-value str\">"Missing value for '%s'"</span> <span class=\"ruby-operator\">%</span> <span class=\"ruby-keyword kw\">self</span>.<span class=\"ruby-identifier\">get_description</span>( <span class=\"ruby-identifier\">field</span> )\n\
251: <span class=\"ruby-keyword kw\">end</span>\n\
252: \n\
253: <span class=\"ruby-keyword kw\">self</span>.<span class=\"ruby-identifier\">invalid</span>.<span class=\"ruby-identifier\">each</span> <span class=\"ruby-keyword kw\">do</span> <span class=\"ruby-operator\">|</span><span class=\"ruby-identifier\">field</span>, <span class=\"ruby-identifier\">constraint</span><span class=\"ruby-operator\">|</span>\n\
254: <span class=\"ruby-identifier\">msgs</span> <span class=\"ruby-operator\"><<</span> <span class=\"ruby-value str\">"Invalid value for '%s'"</span> <span class=\"ruby-operator\">%</span> <span class=\"ruby-keyword kw\">self</span>.<span class=\"ruby-identifier\">get_description</span>( <span class=\"ruby-identifier\">field</span> )\n\
255: <span class=\"ruby-keyword kw\">end</span>\n\
256: \n\
257: <span class=\"ruby-keyword kw\">if</span> <span class=\"ruby-identifier\">include_unknown</span>\n\
258: <span class=\"ruby-keyword kw\">self</span>.<span class=\"ruby-identifier\">unknown</span>.<span class=\"ruby-identifier\">each</span> <span class=\"ruby-keyword kw\">do</span> <span class=\"ruby-operator\">|</span><span class=\"ruby-identifier\">field</span><span class=\"ruby-operator\">|</span>\n\
259: <span class=\"ruby-identifier\">msgs</span> <span class=\"ruby-operator\"><<</span> <span class=\"ruby-value str\">"Unknown parameter '%s'"</span> <span class=\"ruby-operator\">%</span> <span class=\"ruby-keyword kw\">self</span>.<span class=\"ruby-identifier\">get_description</span>( <span class=\"ruby-identifier\">field</span> )\n\
260: <span class=\"ruby-keyword kw\">end</span>\n\
261: <span class=\"ruby-keyword kw\">end</span>\n\
262: \n\
263: <span class=\"ruby-keyword kw\">return</span> <span class=\"ruby-identifier\">msgs</span>\n\
264: <span class=\"ruby-keyword kw\">end</span>"
m_desc: |-
<p>
Return an error message for each <a
href="FormValidator.html#M000331">missing</a> or invalid field; if
<tt>includeUnknown</tt> is <tt>true</tt>, also include messages for <a
href="FormValidator.html#M000332">unknown</a> fields.
</p>
params: ( include_unknown=false )
- visibility: public
aref: M000324
name: errors?
sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 195</span>\n\
195: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-identifier\">errors?</span>\n\
196: <span class=\"ruby-keyword kw\">return</span> <span class=\"ruby-operator\">!</span><span class=\"ruby-keyword kw\">self</span>.<span class=\"ruby-identifier\">okay?</span>\n\
197: <span class=\"ruby-keyword kw\">end</span>"
aka:
- aref: FormValidator.html#M000325
name: has_errors?
m_desc: |-
<p>
Returns <tt>true</tt> if any fields are <a
href="FormValidator.html#M000331">missing</a> or contain invalid values.
</p>
params: ()
- visibility: public
aref: M000329
name: get_description
sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 231</span>\n\
231: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-identifier\">get_description</span>( <span class=\"ruby-identifier\">field</span> )\n\
232: <span class=\"ruby-keyword kw\">return</span> <span class=\"ruby-ivar\">@profile</span>[<span class=\"ruby-identifier\">:descriptions</span>][ <span class=\"ruby-identifier\">field</span>.<span class=\"ruby-identifier\">to_s</span> ] <span class=\"ruby-keyword kw\">if</span>\n\
233: <span class=\"ruby-ivar\">@profile</span>[<span class=\"ruby-identifier\">:descriptions</span>].<span class=\"ruby-identifier\">key?</span>( <span class=\"ruby-identifier\">field</span>.<span class=\"ruby-identifier\">to_s</span> )\n\
234: \n\
235: <span class=\"ruby-identifier\">desc</span> = <span class=\"ruby-identifier\">field</span>.<span class=\"ruby-identifier\">to_s</span>.\n\
236: <span class=\"ruby-identifier\">gsub</span>( <span class=\"ruby-regexp re\">/.*\\[(\\w+)\\]/</span>, <span class=\"ruby-value str\">"\\\\1"</span> ).\n\
237: <span class=\"ruby-identifier\">gsub</span>( <span class=\"ruby-regexp re\">/_(.)/</span> ) {<span class=\"ruby-operator\">|</span><span class=\"ruby-identifier\">m</span><span class=\"ruby-operator\">|</span> <span class=\"ruby-value str\">" "</span> <span class=\"ruby-operator\">+</span> <span class=\"ruby-identifier\">m</span>[<span class=\"ruby-value\">1</span>,<span class=\"ruby-value\">1</span>].<span class=\"ruby-identifier\">upcase</span> }.\n\
238: <span class=\"ruby-identifier\">gsub</span>( <span class=\"ruby-regexp re\">/^(.)/</span> ) {<span class=\"ruby-operator\">|</span><span class=\"ruby-identifier\">m</span><span class=\"ruby-operator\">|</span> <span class=\"ruby-identifier\">m</span>.<span class=\"ruby-identifier\">upcase</span> }\n\
239: <span class=\"ruby-keyword kw\">return</span> <span class=\"ruby-identifier\">desc</span>\n\
240: <span class=\"ruby-keyword kw\">end</span>"
m_desc: |-
<p>
Get the description for the specified field.
</p>
params: ( field )
- visibility: public
aref: M000325
name: has_errors?
m_desc: |-
<p>
Alias for #errors?
</p>
params: ()
- visibility: public
aref: M000338
name: match_alpha
sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 334</span>\n\
334: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-identifier\">match_alpha</span>( <span class=\"ruby-identifier\">val</span> )\n\
335: <span class=\"ruby-keyword kw\">if</span> <span class=\"ruby-identifier\">val</span> <span class=\"ruby-operator\">=~</span> <span class=\"ruby-regexp re\">/^([a-z]+)$/i</span>\n\
336: <span class=\"ruby-keyword kw\">return</span> <span class=\"ruby-identifier\">$1</span>\n\
337: <span class=\"ruby-keyword kw\">else</span>\n\
338: <span class=\"ruby-keyword kw\">return</span> <span class=\"ruby-keyword kw\">nil</span>\n\
339: <span class=\"ruby-keyword kw\">end</span>\n\
340: <span class=\"ruby-keyword kw\">end</span>"
m_desc: |-
<p>
Constrain a value to alpha characters (a-z, case-insensitive)
</p>
params: ( val )
- visibility: public
aref: M000339
name: match_alphanumeric
sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 344</span>\n\
344: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-identifier\">match_alphanumeric</span>( <span class=\"ruby-identifier\">val</span> )\n\
345: <span class=\"ruby-keyword kw\">if</span> <span class=\"ruby-identifier\">val</span> <span class=\"ruby-operator\">=~</span> <span class=\"ruby-regexp re\">/^([a-z0-9]+)$/i</span>\n\
346: <span class=\"ruby-keyword kw\">return</span> <span class=\"ruby-identifier\">$1</span>\n\
347: <span class=\"ruby-keyword kw\">else</span>\n\
348: <span class=\"ruby-keyword kw\">return</span> <span class=\"ruby-keyword kw\">nil</span>\n\
349: <span class=\"ruby-keyword kw\">end</span>\n\
350: <span class=\"ruby-keyword kw\">end</span>"
m_desc: |-
<p>
Constrain a value to alpha characters (a-z, case-insensitive and 0-9)
</p>
params: ( val )
- visibility: public
aref: M000334
name: match_boolean
sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 303</span>\n\
303: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-identifier\">match_boolean</span>( <span class=\"ruby-identifier\">val</span> )\n\
304: <span class=\"ruby-identifier\">rval</span> = <span class=\"ruby-keyword kw\">nil</span>\n\
305: <span class=\"ruby-keyword kw\">if</span> ( <span class=\"ruby-identifier\">val</span> <span class=\"ruby-operator\">=~</span> <span class=\"ruby-regexp re\">/^(t(?:rue)?|y(?:es)?)$/i</span> )\n\
306: <span class=\"ruby-identifier\">rval</span> = <span class=\"ruby-keyword kw\">true</span>\n\
307: <span class=\"ruby-keyword kw\">elsif</span> ( <span class=\"ruby-identifier\">val</span> <span class=\"ruby-operator\">=~</span> <span class=\"ruby-regexp re\">/^(no?|f(?:alse)?)$/i</span> )\n\
308: <span class=\"ruby-identifier\">rval</span> = <span class=\"ruby-keyword kw\">false</span>\n\
309: <span class=\"ruby-keyword kw\">end</span>\n\
310: \n\
311: <span class=\"ruby-keyword kw\">return</span> <span class=\"ruby-identifier\">rval</span>\n\
312: <span class=\"ruby-keyword kw\">end</span>"
m_desc: |-
<p>
Constrain a value to <tt>true</tt> (or <tt>yes</tt>) and <tt>false</tt> (or
<tt>no</tt>).
</p>
params: ( val )
- visibility: public
aref: M000337
name: match_date
sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 328</span>\n\
328: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-identifier\">match_date</span>( <span class=\"ruby-identifier\">val</span> )\n\
329: <span class=\"ruby-keyword kw\">return</span> <span class=\"ruby-constant\">Date</span>.<span class=\"ruby-identifier\">parse</span>( <span class=\"ruby-identifier\">val</span> ) <span class=\"ruby-keyword kw\">rescue</span> <span class=\"ruby-keyword kw\">nil</span>\n\
330: <span class=\"ruby-keyword kw\">end</span>"
m_desc: |-
<p>
Constrain a value to a parseable Date
</p>
params: ( val )
- visibility: public
aref: M000336
name: match_float
sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 322</span>\n\
322: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-identifier\">match_float</span>( <span class=\"ruby-identifier\">val</span> )\n\
323: <span class=\"ruby-keyword kw\">return</span> <span class=\"ruby-constant\">Float</span>( <span class=\"ruby-identifier\">val</span> ) <span class=\"ruby-keyword kw\">rescue</span> <span class=\"ruby-keyword kw\">nil</span>\n\
324: <span class=\"ruby-keyword kw\">end</span>"
m_desc: |-
<p>
Contrain a value to a Float
</p>
params: ( val )
- visibility: public
aref: M000335
name: match_integer
sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 316</span>\n\
316: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-identifier\">match_integer</span>( <span class=\"ruby-identifier\">val</span> )\n\
317: <span class=\"ruby-keyword kw\">return</span> <span class=\"ruby-constant\">Integer</span>( <span class=\"ruby-identifier\">val</span> ) <span class=\"ruby-keyword kw\">rescue</span> <span class=\"ruby-keyword kw\">nil</span>\n\
318: <span class=\"ruby-keyword kw\">end</span>"
m_desc: |-
<p>
Constrain a value to an integer
</p>
params: ( val )
- visibility: public
aref: M000340
name: match_printable
sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 354</span>\n\
354: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-identifier\">match_printable</span>( <span class=\"ruby-identifier\">val</span> )\n\
355: <span class=\"ruby-keyword kw\">if</span> <span class=\"ruby-identifier\">val</span> <span class=\"ruby-operator\">=~</span> <span class=\"ruby-regexp re\">/^([[:print:][:space:]]{0,255})$/</span>\n\
356: <span class=\"ruby-keyword kw\">return</span> <span class=\"ruby-identifier\">val</span>\n\
357: <span class=\"ruby-keyword kw\">else</span>\n\
358: <span class=\"ruby-keyword kw\">return</span> <span class=\"ruby-keyword kw\">nil</span>\n\
359: <span class=\"ruby-keyword kw\">end</span>\n\
360: <span class=\"ruby-keyword kw\">end</span>"
m_desc: |-
<p>
Constrain a value to any printable characters
</p>
params: ( val )
- visibility: public
aref: M000331
name: missing
sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 269</span>\n\
269: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-identifier\">missing</span>\n\
270: <span class=\"ruby-ivar\">@missing_fields</span>.<span class=\"ruby-identifier\">uniq</span>.<span class=\"ruby-identifier\">sort_by</span> {<span class=\"ruby-operator\">|</span><span class=\"ruby-identifier\">f</span><span class=\"ruby-operator\">|</span> <span class=\"ruby-identifier\">f</span>.<span class=\"ruby-identifier\">to_s</span>}\n\
271: <span class=\"ruby-keyword kw\">end</span>"
m_desc: |-
<p>
Returns a distinct list of <a href="FormValidator.html#M000331">missing</a>
fields. Overridden to eliminate the "undefined method
`<=>’ for :foo:Symbol" error.
</p>
params: ()
- visibility: public
aref: M000326
name: okay?
sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 203</span>\n\
203: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-identifier\">okay?</span>\n\
204: <span class=\"ruby-keyword kw\">self</span>.<span class=\"ruby-identifier\">missing</span>.<span class=\"ruby-identifier\">empty?</span> <span class=\"ruby-operator\">&&</span> <span class=\"ruby-keyword kw\">self</span>.<span class=\"ruby-identifier\">invalid</span>.<span class=\"ruby-identifier\">empty?</span>\n\
205: <span class=\"ruby-keyword kw\">end</span>"
m_desc: |-
<p>
Return <tt>true</tt> if all required fields were present and validated
correctly.
</p>
params: ()
- visibility: public
aref: M000315
name: to_s
sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 133</span>\n\
133: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-identifier\">to_s</span>\n\
134: <span class=\"ruby-value str\">""</span>\n\
135: <span class=\"ruby-keyword kw\">end</span>"
m_desc: |-
<p>
Stringified description of the validator
</p>
params: ()
- visibility: public
aref: M000332
name: unknown
sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 274</span>\n\
274: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-identifier\">unknown</span>\n\
275: (<span class=\"ruby-ivar\">@unknown_fields</span> <span class=\"ruby-operator\">-</span> <span class=\"ruby-ivar\">@invalid_fields</span>.<span class=\"ruby-identifier\">keys</span>).<span class=\"ruby-identifier\">uniq</span>.<span class=\"ruby-identifier\">sort_by</span> {<span class=\"ruby-operator\">|</span><span class=\"ruby-identifier\">f</span><span class=\"ruby-operator\">|</span> <span class=\"ruby-identifier\">f</span>.<span class=\"ruby-identifier\">to_s</span>}\n\
276: <span class=\"ruby-keyword kw\">end</span>"
m_desc: |-
<p>
Returns a distinct list of <a href="FormValidator.html#M000332">unknown</a>
fields.
</p>
params: ()
- visibility: public
aref: M000327
name: untaint?
sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 209</span>\n\
209: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-identifier\">untaint?</span>( <span class=\"ruby-identifier\">field</span> )\n\
210: <span class=\"ruby-keyword kw\">self</span>.<span class=\"ruby-identifier\">log</span>.<span class=\"ruby-identifier\">debug</span> <span class=\"ruby-value str\">"Checking to see if %p should be untainted."</span> <span class=\"ruby-operator\">%</span> [<span class=\"ruby-identifier\">field</span>]\n\
211: <span class=\"ruby-identifier\">rval</span> = ( <span class=\"ruby-ivar\">@untaint_all</span> <span class=\"ruby-operator\">||</span> <span class=\"ruby-ivar\">@untaint_fields</span>.<span class=\"ruby-identifier\">include?</span>(<span class=\"ruby-identifier\">field</span>) )\n\
212: <span class=\"ruby-keyword kw\">if</span> <span class=\"ruby-identifier\">rval</span>\n\
213: <span class=\"ruby-keyword kw\">self</span>.<span class=\"ruby-identifier\">log</span>.<span class=\"ruby-identifier\">debug</span> <span class=\"ruby-value str\">" ...yep it should."</span>\n\
214: <span class=\"ruby-keyword kw\">else</span>\n\
215: <span class=\"ruby-keyword kw\">self</span>.<span class=\"ruby-identifier\">log</span>.<span class=\"ruby-identifier\">debug</span> <span class=\"ruby-value str\">" ...nope."</span>\n\
216: <span class=\"ruby-keyword kw\">end</span>\n\
217: \n\
218: <span class=\"ruby-keyword kw\">return</span> <span class=\"ruby-identifier\">rval</span>\n\
219: <span class=\"ruby-keyword kw\">end</span>"
m_desc: |-
<p>
Returns <tt>true</tt> if the given <tt>field</tt> is one that should be
untainted.
</p>
params: ( field )
- visibility: public
aref: M000333
name: valid
sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 281</span>\n\
281: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-identifier\">valid</span>\n\
282: <span class=\"ruby-keyword kw\">if</span> <span class=\"ruby-ivar\">@parsed_params</span>.<span class=\"ruby-identifier\">nil?</span>\n\
283: <span class=\"ruby-ivar\">@parsed_params</span> = {}\n\
284: <span class=\"ruby-identifier\">valid</span> = <span class=\"ruby-keyword kw\">super</span>()\n\
285: \n\
286: <span class=\"ruby-keyword kw\">for</span> <span class=\"ruby-identifier\">key</span>, <span class=\"ruby-identifier\">value</span> <span class=\"ruby-keyword kw\">in</span> <span class=\"ruby-identifier\">valid</span>\n\
287: <span class=\"ruby-identifier\">value</span> = [<span class=\"ruby-identifier\">value</span>] <span class=\"ruby-keyword kw\">if</span> <span class=\"ruby-identifier\">key</span> <span class=\"ruby-operator\">=~</span> <span class=\"ruby-regexp re\">/.*\\[\\]$/</span>\n\
288: <span class=\"ruby-keyword kw\">unless</span> <span class=\"ruby-identifier\">key</span>.<span class=\"ruby-identifier\">include?</span>( <span class=\"ruby-value str\">'['</span> )\n\
289: <span class=\"ruby-ivar\">@parsed_params</span>[ <span class=\"ruby-identifier\">key</span> ] = <span class=\"ruby-identifier\">value</span>\n\
290: <span class=\"ruby-keyword kw\">else</span>\n\
291: <span class=\"ruby-identifier\">build_deep_hash</span>( <span class=\"ruby-identifier\">value</span>, <span class=\"ruby-ivar\">@parsed_params</span>, <span class=\"ruby-identifier\">get_levels</span>(<span class=\"ruby-identifier\">key</span>) )\n\
292: <span class=\"ruby-keyword kw\">end</span>\n\
293: <span class=\"ruby-keyword kw\">end</span>\n\
294: <span class=\"ruby-keyword kw\">end</span>\n\
295: \n\
296: <span class=\"ruby-keyword kw\">return</span> <span class=\"ruby-ivar\">@parsed_params</span>\n\
297: <span class=\"ruby-keyword kw\">end</span>"
m_desc: |-
<p>
Returns the <a href="FormValidator.html#M000333">valid</a> fields after
expanding Rails-style ‘customer[address][street]’ variables
into multi-level hashes.
</p>
params: ()
- visibility: public
aref: M000318
name: validate
sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 151</span>\n\
151: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-identifier\">validate</span>( <span class=\"ruby-identifier\">params</span>, <span class=\"ruby-identifier\">additional_profile</span>=<span class=\"ruby-keyword kw\">nil</span> )\n\
152: <span class=\"ruby-ivar\">@raw_form</span> = <span class=\"ruby-identifier\">params</span>.<span class=\"ruby-identifier\">dup</span>\n\
153: <span class=\"ruby-identifier\">profile</span> = <span class=\"ruby-ivar\">@profile</span>\n\
154: \n\
155: <span class=\"ruby-keyword kw\">if</span> <span class=\"ruby-identifier\">additional_profile</span>\n\
156: <span class=\"ruby-keyword kw\">self</span>.<span class=\"ruby-identifier\">log</span>.<span class=\"ruby-identifier\">debug</span> <span class=\"ruby-value str\">"Merging additional profile %p"</span> <span class=\"ruby-operator\">%</span> [<span class=\"ruby-identifier\">additional_profile</span>]\n\
157: <span class=\"ruby-identifier\">profile</span> = <span class=\"ruby-ivar\">@profile</span>.<span class=\"ruby-identifier\">merge</span>( <span class=\"ruby-identifier\">additional_profile</span> ) \n\
158: <span class=\"ruby-keyword kw\">end</span>\n\
159: \n\
160: <span class=\"ruby-keyword kw\">super</span>( <span class=\"ruby-identifier\">params</span>, <span class=\"ruby-identifier\">profile</span> )\n\
161: <span class=\"ruby-keyword kw\">end</span>"
m_desc: |-
<p>
Validate the input in <tt>params</tt>. If the optional
<tt>additional_profile</tt> is given, merge it with the validator‘s
default profile before validating.
</p>
params: ( params, additional_profile=nil )
category: Instance
type: Public
---
---
- name: SVNRev
desc: |+
SVN Revision
value: "%q$Rev: 437 $"
- name: SVNId
desc: |+
SVN Id
value: "%q$Id: formvalidator.rb 437 2008-03-28 00:49:20Z deveiant $"
- name: Defaults
value: "{ :descriptions => {}, }"
- name: RFC822EmailAddress
desc: |
RFC822 Email Address Regex
<hr size="10"></hr><p>
Originally written by Cal Henderson c.f. <a
href="http://iamcal.com/publish/articles/php/parsing_email">iamcal.com/publish/articles/php/parsing_email</a>/
</p>
<p>
Translated to Ruby by Tim Fletcher, with changes suggested by Dan Kubb.
</p>
<p>
Licensed under a Creative Commons Attribution-ShareAlike 2.5 License <a
href="http://creativecommons.org/licenses/by-sa/2.5">creativecommons.org/licenses/by-sa/2.5</a>/
</p>
value: begin qtext = '[^\\x0d\\x22\\x5c\\x80-\\xff]'
Generated with the Darkfish Rdoc Generator.