class IML::Patterns

Contains methods to build the regexp to match against the input filenames

Public Class Methods

config() click to toggle source

@return [IML::Hash] pattern config singleton version

# File lib/iml/patterns.rb, line 11
def self.config
  new.config
end

Public Instance Methods

config() click to toggle source

@return [IML::Hash] pattern config

# File lib/iml/patterns.rb, line 6
def config
  IML::Hash.new ::YAML.load_file(pattern_file)
end
method_missing(method_name) click to toggle source

Mini format arrtibute DSL

Calls superclass method
# File lib/iml/patterns.rb, line 16
def method_missing(method_name)
  m = config[method_name]
  super unless m
  if m.is_a?(Hash)
    "(?<#{method_name}>(#{m.keys.join('|')}))"
  elsif m.is_a?(Array)
    "(?<#{method_name}>(#{m.join('|')}))"
  elsif m.is_a?(String)
    "(?<#{method_name}>#{m})"
  end
end
movie() click to toggle source

@return [Array<Regex>] Array of Regexp patterns to match filenames of Movies

# File lib/iml/patterns.rb, line 34
def movie
  [
    /#{format_pattern('^%<title>s\.%<year>s\.?%<quality>s?\.%<source>s\.%<codec>s\.?%<audio>s?-?%<group>s\.%<extension>s$')}/i,
    /#{format_pattern('^%<title>s_\(%<year>s\)_\[%<quality>s,%<source>s,%<audio>s,%<codec>s\]_-_%<group>s.%<extension>s$')}/i
  ]
end
respond_to_missing?(method_name, _include_private = false) click to toggle source

@return <Boolean> true when method name is a config key

# File lib/iml/patterns.rb, line 29
def respond_to_missing?(method_name, _include_private = false)
  config.key?(method_name) || false
end
tv() click to toggle source

@return [Array<Regex>] Array of Regexp patterns to match filenames of TV Shows

# File lib/iml/patterns.rb, line 42
def tv
  [
    /#{format_pattern('^%<title>s.S%<season>sE%<episode>s.?%<episode_title>s?.?%<quality>s?.%<source>s.%<audio>s?\.?%<codec>s-%<group>s.%<extension>s$')}/i
  ]
end

Private Instance Methods

format_pattern(pattern) click to toggle source
# File lib/iml/patterns.rb, line 61
def format_pattern(pattern)
  format(pattern, media_info)
end
media_info() click to toggle source
# File lib/iml/patterns.rb, line 54
def media_info
  {
    title: title, year: year, quality: quality, source: source, codec: codec, audio: audio, group: group,
    extension: extension, season: season, episode: episode, episode_title: episode_title
  }
end
pattern_file() click to toggle source
# File lib/iml/patterns.rb, line 50
def pattern_file
  Pathname(__dir__) + '..' + '..' + 'patterns.yml'
end