46 lines
672 B
Ruby
46 lines
672 B
Ruby
|
class Object
|
||
|
def to_param
|
||
|
to_s
|
||
|
end
|
||
|
end
|
||
|
|
||
|
class TrueClass
|
||
|
def to_param
|
||
|
self
|
||
|
end
|
||
|
end
|
||
|
|
||
|
class FalseClass
|
||
|
def to_param
|
||
|
self
|
||
|
end
|
||
|
end
|
||
|
|
||
|
class NilClass
|
||
|
def to_param
|
||
|
self
|
||
|
end
|
||
|
end
|
||
|
|
||
|
class Regexp #:nodoc:
|
||
|
def number_of_captures
|
||
|
Regexp.new("|#{source}").match('').captures.length
|
||
|
end
|
||
|
|
||
|
class << self
|
||
|
def optionalize(pattern)
|
||
|
case unoptionalize(pattern)
|
||
|
when /\A(.|\(.*\))\Z/ then "#{pattern}?"
|
||
|
else "(?:#{pattern})?"
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def unoptionalize(pattern)
|
||
|
[/\A\(\?:(.*)\)\?\Z/, /\A(.|\(.*\))\?\Z/].each do |regexp|
|
||
|
return $1 if regexp =~ pattern
|
||
|
end
|
||
|
return pattern
|
||
|
end
|
||
|
end
|
||
|
end
|