Sha256: 6248f322167d07fc19dfcb897bcc1383239d9ea74f50d8a91949d17a2e6fd4fb

Contents?: true

Size: 954 Bytes

Versions: 18

Compression:

Stored size: 954 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

18 entries across 18 versions & 1 rubygems

Version Path
cxxproject-0.5.76 lib/cxxproject/toolchain/toolchain.rb
cxxproject-0.5.75 lib/cxxproject/toolchain/toolchain.rb
cxxproject-0.5.74 lib/cxxproject/toolchain/toolchain.rb
cxxproject-0.5.73 lib/cxxproject/toolchain/toolchain.rb
cxxproject-0.5.72 lib/cxxproject/toolchain/toolchain.rb
cxxproject-0.5.71 lib/cxxproject/toolchain/toolchain.rb
cxxproject-0.5.70 lib/cxxproject/toolchain/toolchain.rb
cxxproject-0.5.69 lib/cxxproject/toolchain/toolchain.rb
cxxproject-0.5.68 lib/cxxproject/toolchain/toolchain.rb
cxxproject-0.5.67 lib/cxxproject/toolchain/toolchain.rb
cxxproject-0.5.66 lib/cxxproject/toolchain/toolchain.rb
cxxproject-0.5.65 lib/cxxproject/toolchain/toolchain.rb
cxxproject-0.5.64 lib/cxxproject/toolchain/toolchain.rb
cxxproject-0.5.63 lib/cxxproject/toolchain/toolchain.rb
cxxproject-0.5.62 lib/cxxproject/toolchain/toolchain.rb
cxxproject-0.5.61 lib/cxxproject/toolchain/toolchain.rb
cxxproject-0.5.60 lib/cxxproject/toolchain/toolchain.rb
cxxproject-0.5.59 lib/cxxproject/toolchain/toolchain.rb