class Ebert

Public Class Methods

inspect(options = {}) click to toggle source
# File lib/ebert.rb, line 10
def inspect(options = {})
  raise ArgumentError, "Must supply either an input file or a pregenerated response" if options[:raw_response].nil? and options[:file].nil?
  raise ArgumentError, "File not found: #{options[:file]}" if options[:file] and !FileTest.exist?(options[:file])
  full_response_command = options[:full_response] ? '-f' : ''
  parse_results(options[:raw_response] || `mediainfo #{Shellwords.escape(options[:file])} #{full_response_command}`)
end
make_key(str) click to toggle source
# File lib/ebert.rb, line 51
def make_key(str)
  str.strip.gsub(/[\(\)]/, "").gsub(/\W+/, "_").gsub(/_$/, "").downcase.to_sym
end
parse_results(mediainfo_results) click to toggle source
# File lib/ebert.rb, line 17
def parse_results(mediainfo_results)
  mediainfo_results.split("\n").inject({}) do |ebert_results, row|
    result = parse_row(row)
    if result.is_a?(Symbol)
      @prefix = result
      ebert_results[@prefix] ||= {}
    elsif result.is_a?(Hash)
      if @prefix.nil?
        if ebert_results.key?(result.keys.first)
          ebert_results[result.keys.first] << result.values.first
        else
          ebert_results[result.keys.first] = [result.values.first]
        end
      else
        if ebert_results[@prefix].key?(result.keys.first)
          ebert_results[@prefix][result.keys.first].push(result.values.first)
        else
          ebert_results[@prefix][result.keys.first] = [result.values.first]
        end
      end
    end
    ebert_results
  end
end
parse_row(row) click to toggle source
# File lib/ebert.rb, line 42
def parse_row(row)
  results = /(.*) : (.*)/.match(row)
  if results
    return { make_key(results[1]) => results[2].strip }
  elsif row =~ /\w+/ && row !=~ /General/i
    return row.strip.downcase.to_sym
  end
end