Class: Taglish::TagType

Inherits:
Object
  • Object
show all
Defined in:
lib/taglish/tag_type.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, opts = {}) ⇒ TagType

Returns a new instance of TagType.



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/taglish/tag_type.rb', line 5

def initialize(name, opts={})
  opts = {
    :scored => false,
    :ordered => false,
    :delimiter => Taglish::DEFAULT_DELIMITER,
    :score_delimiter => Taglish::DEFAULT_SCORE_DELIMITER,
    :force_parameterize => false,
    :force_lowercase => false
  }.merge(opts)
  
  self.name               = name
  self.scored             = opts[:scored]
  self.ordered            = opts[:ordered]
  self.delimiter          = opts[:delimiter]
  self.score_delimiter    = opts[:score_delimiter]
  self.force_parameterize = opts[:force_parameterize]
  self.force_lowercase    = opts[:force_lowercase]
end

Instance Attribute Details

#delimiterObject

Returns the value of attribute delimiter.



2
3
4
# File 'lib/taglish/tag_type.rb', line 2

def delimiter
  @delimiter
end

#force_lowercaseObject

Returns the value of attribute force_lowercase.



2
3
4
# File 'lib/taglish/tag_type.rb', line 2

def force_lowercase
  @force_lowercase
end

#force_parameterizeObject

Returns the value of attribute force_parameterize.



2
3
4
# File 'lib/taglish/tag_type.rb', line 2

def force_parameterize
  @force_parameterize
end

#nameObject

Returns the value of attribute name.



2
3
4
# File 'lib/taglish/tag_type.rb', line 2

def name
  @name
end

#orderedObject

Returns the value of attribute ordered.



2
3
4
# File 'lib/taglish/tag_type.rb', line 2

def ordered
  @ordered
end

#score_delimiterObject

Returns the value of attribute score_delimiter.



2
3
4
# File 'lib/taglish/tag_type.rb', line 2

def score_delimiter
  @score_delimiter
end

#scoredObject

Returns the value of attribute scored.



2
3
4
# File 'lib/taglish/tag_type.rb', line 2

def scored
  @scored
end

Instance Method Details

#find_or_create_tags(*tag_list) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/taglish/tag_type.rb', line 41

def find_or_create_tags(*tag_list)
  return [] if tag_list.empty?
  
  list = scored ? tag_list.map{|t| name_and_score(t)[0]} : tag_list

  existing_tags = Tag.named_any(list).all
  new_tag_names = list.reject do |name|
    name = comparable_name(name)
    existing_tags.any? {|tag| comparable_name(tag.name) == name}
  end
  created_tags = new_tag_names.map {|name| Tag.create(:name => name) }

  existing_tags + created_tags
end

#glueObject

Returns the proper string used to join tags: basically the first choice of delimiters, with a space after each delimiter.



60
61
62
63
# File 'lib/taglish/tag_type.rb', line 60

def glue
  d = delimiter.kind_of?(Array) ? delimiter[0] : delimiter
  d.ends_with?(" ") ? d : "#{d} "
end

#name_and_score(tag_str) ⇒ Object



32
33
34
35
36
37
38
39
# File 'lib/taglish/tag_type.rb', line 32

def name_and_score(tag_str)
  if scored
    tag_str =~ Taglish::Taggable::SCORED_TAG_REGEX or raise "Scored tag has no score: #{tag_str}"
    [$1, $2.to_i]
  else
    [tag_str, nil]
  end
end

#ordered?Boolean

Returns:

  • (Boolean)


28
29
30
# File 'lib/taglish/tag_type.rb', line 28

def ordered?
  ordered
end

#scored?Boolean

Returns:

  • (Boolean)


24
25
26
# File 'lib/taglish/tag_type.rb', line 24

def scored?
  scored
end