class Flunkey::Metadata

Constants

ARRAY
SINGLE

Public Class Methods

parse(string) click to toggle source
# File lib/flunkey/metadata.rb, line 6
def self.parse(string)
  meta = Metadata.new

  lines = string.lines
  idx = 0
  arr_key = arr_value = nil

  while idx < lines.length

    if arr_key
      ARRAY.match(lines[idx]) do |m|
        value = m[1]
        if value == ')'
          # array is complete
          meta[arr_key] = arr_value
          arr_key = arr_value = nil
        else
          value.gsub!(/,$/, '')
          arr_value << (value=='(null)' ? nil : value.gsub('"',''))
        end
      end
    else
      SINGLE.match(lines[idx]) do |m|
        key, value = m[1], m[2]
        if value=='('
          # we'll start an array
          arr_key = key
          arr_value = []
        else
          meta[key] = (value=='(null)' ? nil : value.gsub('"',''))
        end
      end
    end

    idx += 1
  end

  meta.each { |k, v| meta[k] = DateTime.parse(v) if k =~ /Date/ }

  meta
end