::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.