Class: Tagomatic::FormatCompiler

Inherits:
Object
  • Object
show all
Includes:
Tags
Defined in:
lib/tagomatic/format_compiler.rb

Constant Summary

Constants included from Tags

Tags::FORMAT_ID_ALBUM, Tags::FORMAT_ID_ALBUM_AGAIN, Tags::FORMAT_ID_ARTIST, Tags::FORMAT_ID_ARTIST_AGAIN, Tags::FORMAT_ID_DISC, Tags::FORMAT_ID_EXTENDED_WHITESPACE, Tags::FORMAT_ID_GENRE, Tags::FORMAT_ID_IGNORE, Tags::FORMAT_ID_TITLE, Tags::FORMAT_ID_TRACKNUM, Tags::FORMAT_ID_WHITESPACE, Tags::FORMAT_ID_YEAR, Tags::FORMAT_REGEXP_ALBUM, Tags::FORMAT_REGEXP_ALBUM_AGAIN, Tags::FORMAT_REGEXP_ARTIST, Tags::FORMAT_REGEXP_ARTIST_AGAIN, Tags::FORMAT_REGEXP_DISC, Tags::FORMAT_REGEXP_EXTENDED_WHITESPACE, Tags::FORMAT_REGEXP_GENRE, Tags::FORMAT_REGEXP_IGNORE, Tags::FORMAT_REGEXP_TITLE, Tags::FORMAT_REGEXP_TRACKNUM, Tags::FORMAT_REGEXP_WHITESPACE, Tags::FORMAT_REGEXP_YEAR

Instance Method Summary collapse

Constructor Details

#initialize(format_matcher_factory) ⇒ FormatCompiler

Returns a new instance of FormatCompiler.



9
10
11
# File 'lib/tagomatic/format_compiler.rb', line 9

def initialize(format_matcher_factory)
  @format_matcher_factory = format_matcher_factory
end

Instance Method Details

#compile_format(format) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/tagomatic/format_compiler.rb', line 13

def compile_format(format)
  parts = format.split('%')
  prefix = parts.shift
  tag_mapping = []
  regexp = Regexp.escape(prefix)
  parts.each do |tag_and_tail|
    tag = tag_and_tail[0, 1]
    tail = tag_and_tail[1..-1]
    tag_mapping << tag
    regexp << FORMAT_REGEXP_ARTIST if tag == FORMAT_ID_ARTIST
    regexp << FORMAT_REGEXP_ARTIST_AGAIN if tag == FORMAT_ID_ARTIST_AGAIN
    regexp << FORMAT_REGEXP_ALBUM if tag == FORMAT_ID_ALBUM
    regexp << FORMAT_REGEXP_ALBUM_AGAIN if tag == FORMAT_ID_ALBUM_AGAIN
    regexp << FORMAT_REGEXP_DISC if tag == FORMAT_ID_DISC
    regexp << FORMAT_REGEXP_GENRE if tag == FORMAT_ID_GENRE
    regexp << FORMAT_REGEXP_IGNORE if tag == FORMAT_ID_IGNORE
    regexp << FORMAT_REGEXP_TRACKNUM if tag == FORMAT_ID_TRACKNUM
    regexp << FORMAT_REGEXP_TITLE if tag == FORMAT_ID_TITLE
    regexp << FORMAT_REGEXP_WHITESPACE if tag == FORMAT_ID_WHITESPACE
    regexp << FORMAT_REGEXP_EXTENDED_WHITESPACE if tag == FORMAT_ID_EXTENDED_WHITESPACE
    regexp << FORMAT_REGEXP_YEAR if tag == FORMAT_ID_YEAR
    regexp << Regexp.escape(tail)
  end

  compiled = Regexp.compile(regexp, Regexp::IGNORECASE)
  @format_matcher_factory.create_format_matcher(compiled, tag_mapping, format)
end