Sha256: 161864c350e377099b6f29e8aad57920e548efac3b82bd815c65cc85c6b9f9c8

Contents?: true

Size: 1.88 KB

Versions: 1

Compression:

Stored size: 1.88 KB

Contents

require 'malt/kernel'
require 'malt/render'

module Malt

  class << self
    include Malt::Kernel
  end

  #
  def self.register(malt_class, *exts)
    exts.each do |ext|
      type = ext_to_type(ext)
      registry[type] = malt_class
    end
  end

  #
  def self.registry
    @registry ||= {}
  end


  #
  def self.file(file, options={})
    type = options[:type] || options[:format] || File.extname(file)
    type = ext_to_type(type)
    malt_class = registry[type]
    raise "unkown type -- #{type}" unless malt_class
    malt_class.new(options.merge(:file=>file,:type=>type))
  end

  #
  def self.text(text, options={})
    if file = options[:file]
      ext = File.extname(file)
      ext = nil if ext.empty?
    end
    type = options[:type] || options[:format] || ext
    type = ext_to_type(type)
    malt_class = registry[type] || Formats::Text
    #raise "unkown type -- #{type}" unless malt_class
    malt_class.new(options.merge(:text=>text,:file=>file,:type=>type))
  end

  #
  def self.open(url, options={})
    require 'open-uri'
    text = open(url).read
    file = File.basename(url) # parse better with URI.parse
    text(text, :file=>file)
  end

  #
  def self.main(*args)
    require 'optparse'
    itype, otype = nil, nil
    OptionParser.new{|o|
      o.on('-t TYPE', 'input type'){  |t| itype  = t }
      o.on('-o TYPE', 'output type'){ |t| otype = t }
      o.on('--help', '-h'       , 'display this help message'){ puts o; exit }
    }.parse!
    db, files = *args.partition{ |x| x.index('=') }
    db = db.inject({}){ |h,kv| k,v = kv.split('='); h[k] = v; h}
    files.each do |file|
      puts Malt.render(:file=>file, :type=>itype, :format=>otype)
      #file = itype ? Malt.file(file, :type=>itype) : Malt.file(file)
      #if otype
      #  puts file.render(otype, db)
      #else
      #  puts file.render(db)
      #end
    end
  end

end

require 'malt/engines'
require 'malt/formats'

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
malt-0.1.0 lib/malt.rb