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