Sha256: dc22f77155f1d62d3a407b6a04db18eeb10c7d926cb564df1a954a50d15c02ab

Contents?: true

Size: 1.11 KB

Versions: 1

Compression:

Stored size: 1.11 KB

Contents

require_relative '../livetext'
require_relative '../helpers'
require_relative 'string'

make_exception(:BadVariableName, "Error: invalid variable name")
make_exception(:NoEqualSign,     "Error: no equal sign found")

# FIXME probably belongs elsewhere?

class Livetext::ParseMixin   # < StringParser

  include Helpers

  def initialize(name)
    @name = name
    @file = find_file(name)
  end

  def self.get_module(name)
    parse = self.new(name)
    modname, code = parse.read_mixin
    eval(code)   # Avoid in the future
    newmod = Object.const_get("::" + modname)
    # return actual module
    newmod
  end

  def read_mixin
    modname = @name.gsub("/","_").capitalize
    meths = grab_file(@file)
    [modname, "module ::#{modname}; #{meths}\nend"]
  end

  private

  def cwd_root?
    File.dirname(File.expand_path(".")) == "/"
  end

  def find_file(name, ext=".rb")
    base = "./#{name}#{ext}"
    file = "#{Plugins}/#{base}"
    return file if File.exist?(file)

    file = base
    return file if File.exist?(file)

    raise "No such mixin '#{name}'" if cwd_root?
    Dir.chdir("..") { find_file(name) }
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
livetext-0.9.15 lib/parser/mixin.rb