Sha256: 840d3de4b17a98789284db9fdab7e57394d203075dff59471e561e953812b348

Contents?: true

Size: 1.04 KB

Versions: 2

Compression:

Stored size: 1.04 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, outputs = 1)
      @eval.([input], outputs)
    end

    def load(path, outputs = 1)
      @dofile.([path], 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

2 entries across 2 versions & 1 rubygems

Version Path
sweet-moon-0.0.6 dsl/fennel.rb
sweet-moon-0.0.5 dsl/fennel.rb