Sha256: 3947b7e694e58b8646a031d88c9bbaf601a362644b6db122e6ec2a547128dd58

Contents?: true

Size: 916 Bytes

Versions: 9

Compression:

Stored size: 916 Bytes

Contents

require 'yaml'

class Hash
  def method_missing(m, *args, &block)
    if m.to_s =~ /(.*)=$/ # was assignment
      self[$1] = args[0]
    else
      fetch(m.to_s, nil)
    end
  end
  def recursive_merge(h)
    self.merge!(h) {|key, _old, _new| if _old.class == Hash then _old.recursive_merge(_new) else _new end  } 
  end

end

class Toolchain
  attr_reader :toolchain
  def initialize(toolchain_file)
    @toolchain = YAML::load(File.open(toolchain_file))
    if @toolchain.base
      @based_on = @toolchain.base
    else
      @based_on = "base"
    end
    basechain = YAML::load(File.open(File.join(File.dirname(__FILE__),"#{@based_on}.json")))
    @toolchain = basechain.recursive_merge(@toolchain)
  end
  def method_missing(m, *args, &block)  
    if @toolchain[m.to_s]
      self.class.send(:define_method, m) { @toolchain[m.to_s] }
      @toolchain[m.to_s]
    else
      return super
    end
  end  

end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
cxxproject-0.6.9 lib/cxxproject/toolchain/toolchain.rb
cxxproject-0.6.6 lib/cxxproject/toolchain/toolchain.rb
cxxproject-0.6.5 lib/cxxproject/toolchain/toolchain.rb
cxxproject-0.6.4 lib/cxxproject/toolchain/toolchain.rb
cxxproject-0.6.2 lib/cxxproject/toolchain/toolchain.rb
cxxproject-0.6.1 lib/cxxproject/toolchain/toolchain.rb
cxxproject-0.6.0 lib/cxxproject/toolchain/toolchain.rb
cxxproject-0.5.48 lib/cxxproject/toolchain/toolchain.rb
cxxproject-0.5.47 lib/cxxproject/toolchain/toolchain.rb