Sha256: 83330d0e3c8832c39256cc5eb023a673a2f8f9009feb7c0311a20c773e15e23b

Contents?: true

Size: 1.48 KB

Versions: 2

Compression:

Stored size: 1.48 KB

Contents

module ImportEverything
  class DetermineType
    include FromHash
    def self.get_filename(file)
      if file.kind_of?(String)
        ''
      else
        file.first_responding(:original_filename, :filename, :path, :name)
      end
    end
    
    
    fattr(:filename) { self.class.get_filename(file) }
    fattr(:file) { open(filename) }
    
    # Get the file extension
    # @return [String] file extension
    fattr(:ext) { filename.split(".").last.downcase }
    def method_missing(sym,*args,&b)
      if sym.to_s[-1..-1] == '='
        self.addl_ops[sym.to_s[0..-2]] = args.first
      else
        super
      end
    end
    
    # Store addl ops
    fattr(:addl_ops) { {} }
    fattr(:parser_ops) { {:file => file}.merge(addl_ops) }
    
    # Determines what parser class should be used for this file
    def parser_class
      h = {'sqlite' => SqliteParser, 'sqlite3' => SqliteParser, 'csv' => CsvParser, 'xml' => XmlParser, 'sql' => SqlInsertParser, 'dmp' => SqlInsertParser, 'html' => TableParser}
      h[ext].tap { |x| return x if x }
      h.each do |k,klass|
        return klass if ext =~ /^#{k}\d\d/
      end
      raise "no parser found for #{ext}"
    end
    
    # Creates the parser
    def parser
      parser_class.new(parser_ops)
    end
    
    module Include
      fattr(:dt) do
        DetermineType.new
      end

      %w(filename file).each do |m|
        define_method(m) { dt.send(m) }
        define_method("#{m}=") { |v| dt.send("#{m}=",v) }
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
import_everything-0.1.3 lib/import_everything/determine_type.rb
import_everything-0.1.2 lib/import_everything/determine_type.rb