Sha256: 4c3645ae8445bd5b9031db41488b35067a744796ff2809fc6db089ed27719c3f

Contents?: true

Size: 1.57 KB

Versions: 2

Compression:

Stored size: 1.57 KB

Contents

module Tagomatic

  class FormatCompiler

    FORMAT_REGEXP_ARTIST = '([^\/]+)'
    FORMAT_REGEXP_ALBUM = '([^\/]+)'
    FORMAT_REGEXP_DISC = '\s*([0-9]+)\s*'
    FORMAT_REGEXP_GENRE = '([^\/]+)'
    FORMAT_REGEXP_IGNORE = '([^\/]+)'
    FORMAT_REGEXP_TITLE = '([^\/]+)'
    FORMAT_REGEXP_TRACKNUM = '\s*([0-9]+)\s*'
    FORMAT_REGEXP_YEAR = '\s*([0-9]+)\s*'

    def initialize(format_matcher_factory)
      @format_matcher_factory = format_matcher_factory
    end

    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_ALBUM if tag == Tagomatic::Tagger::FORMAT_ID_ALBUM
        regexp << FORMAT_REGEXP_ARTIST if tag == Tagomatic::Tagger::FORMAT_ID_ARTIST
        regexp << FORMAT_REGEXP_DISC if tag == Tagomatic::Tagger::FORMAT_ID_DISC
        regexp << FORMAT_REGEXP_GENRE if tag == Tagomatic::Tagger::FORMAT_ID_GENRE
        regexp << FORMAT_REGEXP_IGNORE if tag == Tagomatic::Tagger::FORMAT_ID_IGNORE
        regexp << FORMAT_REGEXP_TITLE if tag == Tagomatic::Tagger::FORMAT_ID_TITLE
        regexp << FORMAT_REGEXP_TRACKNUM if tag == Tagomatic::Tagger::FORMAT_ID_TRACKNUM
        regexp << FORMAT_REGEXP_YEAR if tag == Tagomatic::Tagger::FORMAT_ID_YEAR
        regexp << Regexp.escape(tail)
      end

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

  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
tagomatic-0.1.2 lib/tagomatic/format_compiler.rb
tagomatic-0.1.1 lib/tagomatic/format_compiler.rb