Sha256: 4d02d469bd06f3f8638dc667e9aa5be5856a4502884383488a22b16e996983f2

Contents?: true

Size: 1.04 KB

Versions: 3

Compression:

Stored size: 1.04 KB

Contents

require 'open-uri'
require 'uri'
require_relative 'command'

module Boxy
  class Dsl
    def self.interpret(url)
      Dsl.new(url).send(:interpret)
    end

  private

    def initialize(url)
      @url = URI.parse(url.to_s)
      @commands = []
    end

    def interpret
      instance_eval(open(@url.to_s).read)
      @commands
    end

    def method_missing(sym, *args)
      add_command(sym, args.shift, args.shift.to_h)
    end

    def include(path_or_url)
      url = include_url(path_or_url)
      @commands += Dsl.interpret(url)
    end

    def include_url(url)
      url = URI.parse(url)
      if url.absolute?
        url
      else
        dirname = File.dirname(@url.path)
        path = "#{dirname}/#{url.to_s}"
        include_url = @url.clone
        include_url.path = path
        include_url
      end
    end

    # This is required to override Kernel.gem
    def gem(name, args = {})
      add_command(:gem, name, args)
    end
  
    def add_command(type, name, options)
      @commands << Command.new(type, name, options)
    end

  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
boxy-0.2.1 lib/boxy/dsl.rb
boxy-0.2.0 lib/boxy/dsl.rb
boxy-0.1.0 lib/boxy/dsl.rb