class Nitlink::Splitter
Public Class Methods
new(string)
click to toggle source
# File lib/nitlink/splitter.rb, line 5 def initialize(string) @string = string @scanner = StringScanner.new(string) end
Public Instance Methods
in_url?()
click to toggle source
# File lib/nitlink/splitter.rb, line 35 def in_url? preceeding = @scanner.string[0...(@scanner.pos - 1)].strip preceeding.end_with?(',') || preceeding.empty? end
split_on_unquoted(seperator)
click to toggle source
# File lib/nitlink/splitter.rb, line 10 def split_on_unquoted(seperator) # 0 = start of string split_positions, ignored_split_positions = [0], [] in_quote = false until @scanner.eos? char = @scanner.getch @scanner.getch if in_quote && char == "\\" in_quote = !in_quote if char == '"' @scanner.skip_until(/>/) and next if char == '<' && in_url? if char == seperator ignored_split_positions = [] (in_quote ? ignored_split_positions : split_positions) << @scanner.pos end end split_positions << @string.length # end of string split_positions += ignored_split_positions if in_quote # dangling quote split_positions.sort.each_cons(2).inject([]) do |split_parts, (start_pos, end_pos)| split_parts << @string[start_pos...end_pos].chomp(seperator) end end