class MusicSanitizer::Processor

Constants

EXCLUDE
IGNORE

Public Class Methods

ignore?(this, compare = nil) click to toggle source
# File lib/music_sanitizer/processor.rb, line 62
def self.ignore?(this, compare = nil)
  IGNORE.
    reject{ |value| compare.to_s.match(/#{value}/i) }.
    map{ |value| this.match(/#{value}/i) }.any?
rescue ArgumentError
  return false
end
new(content) click to toggle source
# File lib/music_sanitizer/processor.rb, line 8
def initialize(content)
  @content = content
end

Public Instance Methods

process() click to toggle source
# File lib/music_sanitizer/processor.rb, line 12
def process
  string = @content.strip

  EXCLUDE.each do |exclude|
    string = string.gsub(/[^ ]*#{exclude}.*$/i, "")
  end

  # Sub
  string = string.gsub(/ยด/, "'").gsub(/`/, "'")

  # Song - A "abc def" => Song - A
  # Song - A [B + C] => Song - A
  # Song A B.mp3 => Song A B
  # 10. Song => Song
  [
    /\.mp3$/, 
    /\[[^\]]*\]/, 
    /".*"/,  
    /(\s+|^)'.*'(\s+|$)/
  ].each do |reg|
    string = string.gsub(reg, " ").strip
  end
  
  [
    /\(.*?(\)|$)/m, 
    /[^a-z0-9]feat(.*?)\s*[^\s]+/i, 
    /[-]+/, 
    /[\s]+/m, 
    /\_/
  ].each do |reg|
    string = string.gsub(reg, " ").strip
  end

  return if string.empty?

  # Split
  # A ft. B => A
  string = string.split(/ft\.\s+/i).first
  # A + B => A
  string = string.split(/\s+\+\s+/).first

  EXCLUDE.each do |exclude|
    string = string.gsub(/#{exclude}.*$/i, "")
  end
  
  string.gsub(/\A\s|\s\z/, "").gsub(/\s+/, " ").strip.downcase
rescue Encoding::CompatibilityError, Encoding::UndefinedConversionError, ArgumentError
  return string
end