Class: ActsAsTaggableOn::DefaultParser

Inherits:
GenericParser show all
Defined in:
lib/acts-as-taggable-on/default_parser.rb

Overview

Returns a new TagList using the given tag string.

Example:

tag_list = ActsAsTaggableOn::DefaultParser.parse("One , Two,  Three")
tag_list # ["One", "Two", "Three"]

Instance Method Summary collapse

Methods inherited from GenericParser

#initialize

Constructor Details

This class inherits a constructor from ActsAsTaggableOn::GenericParser

Instance Method Details

#delimiterObject

private



39
40
41
42
43
44
45
# File 'lib/acts-as-taggable-on/default_parser.rb', line 39

def delimiter
  # Parse the quoted tags
  d = ActsAsTaggableOn.delimiter
  # Separate multiple delimiters by bitwise operator
  d = d.join('|') if d.is_a?(Array)
  d
end

#double_quote_patternObject

( # Tag start delimiter ($1) A | # Either string start or ##delimiter # a delimiter ) s*“ # quote (”) optionally preceded by whitespace (.*?) # Tag ($2) “s* # quote (”) optionally followed by whitespace (?= # Tag end delimiter (not consumed; is zero-length lookahead) ##delimiters* | # Either a delimiter optionally followed by whitespace or z # string end )



58
59
60
# File 'lib/acts-as-taggable-on/default_parser.rb', line 58

def double_quote_pattern
  /(\A|#{delimiter})\s*"(.*?)"\s*(?=#{delimiter}\s*|\z)/
end

#parseObject



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/acts-as-taggable-on/default_parser.rb', line 11

def parse
  string = @tag_list

  string = string.join(ActsAsTaggableOn.glue) if string.respond_to?(:join)
  TagList.new.tap do |tag_list|
    string = string.to_s.dup

    string.gsub!(double_quote_pattern) do
      # Append the matched tag to the tag list
      tag_list << Regexp.last_match[2]
      # Return the matched delimiter ($3) to replace the matched items
      ''
    end

    string.gsub!(single_quote_pattern) do
      # Append the matched tag ($2) to the tag list
      tag_list << Regexp.last_match[2]
      # Return an empty string to replace the matched items
      ''
    end

    # split the string by the delimiter
    # and add to the tag_list
    tag_list.add(string.split(Regexp.new(delimiter)))
  end
end

#single_quote_patternObject

( # Tag start delimiter ($1) A | # Either string start or ##delimiter # a delimiter ) s*‘ # quote (’) optionally preceded by whitespace (.*?) # Tag ($2) ‘s* # quote (’) optionally followed by whitespace (?= # Tag end delimiter (not consumed; is zero-length lookahead) ##delimiters* | d # Either a delimiter optionally followed by whitespace or z # string end )



73
74
75
# File 'lib/acts-as-taggable-on/default_parser.rb', line 73

def single_quote_pattern
  /(\A|#{delimiter})\s*'(.*?)'\s*(?=#{delimiter}\s*|\z)/
end