Extracted various computations in the constructor of UriChunk to local methods.
This commit is contained in:
parent
d3b12631dd
commit
dbfe531abb
|
@ -70,24 +70,21 @@ class URIChunk < Chunk::Abstract
|
||||||
|
|
||||||
def initialize(match_data)
|
def initialize(match_data)
|
||||||
super(match_data)
|
super(match_data)
|
||||||
@scheme, @user, @host, @port, @path, @query, @fragment = match_data[1..-1]
|
|
||||||
|
|
||||||
# If there is no scheme, add an appropriate one, otherwise
|
@link_text = match_data[0]
|
||||||
# set the URI to the matched text.
|
|
||||||
@text_scheme = scheme
|
|
||||||
@uri = (scheme ? match_data[0] : nil )
|
|
||||||
@scheme = scheme || ( user ? 'mailto' : 'http' )
|
|
||||||
@delimiter = ( scheme == 'mailto' ? ':' : '://' )
|
|
||||||
@uri ||= scheme + @delimiter + match_data[0]
|
|
||||||
|
|
||||||
# Build up the link text. Schemes are omitted unless explicitly given.
|
@original_scheme, @user, @host, @port, @path, @query, @fragment = match_data[1..-1]
|
||||||
@link_text = ''
|
|
||||||
@link_text << "#{@scheme}#{@delimiter}" if @text_scheme
|
# If the last character matched by URI pattern is in ! or ), this may be part of the markup,
|
||||||
@link_text << "#{@user}@" if @user
|
# not a URL. We should handle it as such. It is possible to do it by a regexp, but
|
||||||
@link_text << "#{@host}" if @host
|
# much easier to do programmatically
|
||||||
@link_text << ":#{@port}" if @port
|
|
||||||
@link_text << "#{@path}" if @path
|
last_char = @link_text[-1..-1]
|
||||||
@link_text << "?#{@query}" if @query
|
if last_char == ')' or last_char == '!'
|
||||||
|
@trailing_punctuation = last_char
|
||||||
|
@link_text.chop!
|
||||||
|
[@original_scheme, @user, @host, @port, @path, @query, @fragment].compact.last.chop!
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# If the text should be escaped then don't keep this chunk.
|
# If the text should be escaped then don't keep this chunk.
|
||||||
|
@ -101,4 +98,30 @@ class URIChunk < Chunk::Abstract
|
||||||
# If there is no hostname in the URI, do not render it
|
# If there is no hostname in the URI, do not render it
|
||||||
# It's probably only contains the scheme, eg 'something:'
|
# It's probably only contains the scheme, eg 'something:'
|
||||||
def escaped_text() ( host.nil? ? @uri : nil ) end
|
def escaped_text() ( host.nil? ? @uri : nil ) end
|
||||||
|
|
||||||
|
def scheme
|
||||||
|
@original_scheme or (@user ? 'mailto' : 'http')
|
||||||
|
end
|
||||||
|
|
||||||
|
def scheme_delimiter
|
||||||
|
scheme == 'mailto' ? ':' : '://'
|
||||||
|
end
|
||||||
|
|
||||||
|
def user_delimiter
|
||||||
|
'@' unless @user.nil?
|
||||||
|
end
|
||||||
|
|
||||||
|
def port_delimiter
|
||||||
|
':' unless @port.nil?
|
||||||
|
end
|
||||||
|
|
||||||
|
def query_delimiter
|
||||||
|
'?' unless @query.nil?
|
||||||
|
end
|
||||||
|
|
||||||
|
def uri
|
||||||
|
[scheme, scheme_delimiter, user, user_delimiter, host, port_delimiter, port, path,
|
||||||
|
query_delimiter, query].compact.join
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue