Subversion Info

Rev
437
Last Checked In
2008-03-28 00:49:20 (2 weeks ago)
Checked in by
deveiant

Parent

Included Modules

Class Index

Quicksearch

Arrow::FormValidator

Add some Hash-ish methods for convenient access to FormValidator#valid.

Constants

SVNRev
SVN Revision
SVNId
SVN Id
Defaults
(Not documented)
RFC822EmailAddress
RFC822 Email Address Regex

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/

Attributes

raw_form[R]

(Not documented)

Public Class Methods

new( profile, params=nil ) click to toggle source

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

Public Instance Methods

[]( key ) click to toggle source

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
[]=( key, val ) click to toggle source

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
args?() click to toggle source

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
check_profile_syntax( profile ) click to toggle source

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
descriptions() click to toggle source

Hash of field descriptions

     # File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 138
138:     def descriptions
139:         @profile[:descriptions]
140:     end
descriptions=( new_descs ) click to toggle source

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
empty?() click to toggle source

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
error_fields() click to toggle source

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
error_messages( include_unknown=false ) click to toggle source

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
errors?() click to toggle source

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
Also aliased as: has_errors?
get_description( field ) click to toggle source

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
has_errors?() click to toggle source

Alias for #errors?

match_alpha( val ) click to toggle source

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
match_alphanumeric( val ) click to toggle source

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
match_boolean( val ) click to toggle source

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
match_date( val ) click to toggle source

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
match_float( val ) click to toggle source

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
match_integer( val ) click to toggle source

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
match_printable( val ) click to toggle source

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
missing() click to toggle source

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
okay?() click to toggle source

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
to_s() click to toggle source

Stringified description of the validator

     # File /Users/ged/source/ruby/Arrow/lib/arrow/formvalidator.rb, line 133
133:     def to_s
134:         ""
135:     end
unknown() click to toggle source

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
untaint?( field ) click to toggle source

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
valid() click to toggle source

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( params, additional_profile=nil ) click to toggle source

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

secsequence

--- SEC00053

seccomment

--- ""

attributes

--- 
- name: raw_form
  rw: R
  a_desc: ""

method_list

--- 
- 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\">&quot;Building error messages from descriptions: %p&quot;</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\">&lt;&lt;</span> <span class=\"ruby-value str\">&quot;Missing value for '%s'&quot;</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\">&lt;&lt;</span> <span class=\"ruby-value str\">&quot;Invalid value for '%s'&quot;</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\">&lt;&lt;</span> <span class=\"ruby-value str\">&quot;Unknown parameter '%s'&quot;</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\">&quot;\\\\1&quot;</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\">&quot; &quot;</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 &quot;undefined method
      `&lt;=&gt;&#8217; for :foo:Symbol&quot; 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\">&amp;&amp;</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\">&quot;&quot;</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\">&quot;Checking to see if %p should be untainted.&quot;</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\">&quot;  ...yep it should.&quot;</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\">&quot;  ...nope.&quot;</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 &#8216;customer[address][street]&#8217; 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\">&quot;Merging additional profile %p&quot;</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&#8216;s
      default profile before validating.
      </p>
    params: ( params, additional_profile=nil )
  category: Instance
  type: Public

sectitle

--- 

constants

--- 
- 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 =&gt; {},     }"
- 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]'

[Validate]

Generated with the Darkfish Rdoc Generator.