Sha256: 6224ddbd821e9556e029a42abe729486d24fd2afeca93c478d0707bf1bf35064

Contents?: true

Size: 1.21 KB

Versions: 1

Compression:

Stored size: 1.21 KB

Contents

module DSL
  class Fennel
    attr_reader :meta

    def initialize(state)
      @state = state

      @state.require_module(:fennel)

      @state.eval(
        'table.insert(package.loaders or package.searchers, fennel.searcher)'
      )

      @state.eval('debug.traceback = fennel.traceback')

      @eval = @state.get(:fennel, :eval)
      @dofile = @state.get(:fennel, :dofile)
      @version = @state.get(:fennel, :version)

      build_meta
    end

    def eval(input, first = nil, second = nil)
      options = _build_options(first, second)

      @eval.([input, options[:options]], options[:outputs])
    end

    def load(path, first = nil, second = nil)
      options = _build_options(first, second)

      @dofile.([path, options[:options]], options[:outputs])
    end

    def build_meta
      meta_data = @state.meta.to_h

      meta_data = meta_data.merge(
        runtime: "Fennel #{@version} on #{meta_data[:runtime]}"
      )

      @meta = Struct.new(*meta_data.keys).new(*meta_data.values)
    end

    def respond_to_missing?(method_name)
      @state.respond_to? method_name
    end

    def method_missing(method_name, *arguments, &block)
      @state.public_send(method_name, *arguments, &block)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sweet-moon-0.0.7 dsl/fennel.rb