lib/usher/splitter.rb in joshbuddy-usher-0.4.1 vs lib/usher/splitter.rb in joshbuddy-usher-0.4.2
- old
+ new
@@ -1,17 +1,16 @@
require 'strscan'
class Usher
class Splitter
- def self.for_delimiters(delimiters)
+ def self.for_delimiters(delimiters, valid_regex)
delimiters_regex = delimiters.collect{|d| Regexp.quote(d)} * '|'
-
SplitterInstance.new(
delimiters,
- Regexp.new('((:|\*)?[0-9A-Za-z\$\-_\+!\*\',]+|' + delimiters_regex + '|\(|\)|\||\{)'),
- Regexp.new(delimiters_regex + '|[0-9A-Za-z\$\-_\+!\*\',]+')
+ Regexp.new('((:|\*)?' + valid_regex + '|' + delimiters_regex + '|\(|\)|\||\{)'),
+ Regexp.new(delimiters_regex + '|' + valid_regex)
)
end
attr_reader :paths
@@ -49,11 +48,11 @@
case part[0]
when ?*, ?:
type = part.slice!(0).chr.to_sym
current_group << Usher::Route::Variable.new(type, part, requirements && requirements[part.to_sym], transformers && transformers[part.to_sym])
when ?{
- pattern = ''
+ pattern = '^'
count = 1
variable = ss.scan(/[:\*]([^,]+),/)
until count.zero?
regex_part = ss.scan(/\{|\}|[^\{\}]+/)
case regex_part[0]
@@ -62,10 +61,10 @@
when ?}
count -= 1
end
pattern << regex_part
end
- pattern.slice!(pattern.size - 1)
+ pattern[pattern.size - 1] = ?$
regex = Regexp.new(pattern)
if variable
variable_type = variable.slice!(0).chr.to_sym
variable_name = variable[0, variable.size - 1].to_sym
current_group << Usher::Route::Variable.new(variable_type, variable_name, requirements && requirements[variable_name], transformers && transformers[variable_name], regex)
\ No newline at end of file