lib/stella/common.rb in stella-0.8.2.003 vs lib/stella/common.rb in stella-0.8.3.001

- old
+ new

@@ -1,10 +1,83 @@ #encoding: utf-8 $KCODE = "u" if RUBY_VERSION =~ /^1.8/ + +# A hash with indifferent access and magic predicates. +# +# hash = Thor::CoreExt::HashWithIndifferentAccess.new 'foo' => 'bar', 'baz' => 'bee', 'force' => true +# +# hash[:foo] #=> 'bar' +# hash['foo'] #=> 'bar' +# hash.foo? #=> true +# +class HashWithIndifferentAccess < ::Hash #:nodoc: + + def initialize(hash={}) + super() + hash.each do |key, value| + self[convert_key(key)] = value + end + end + + def [](key) + super(convert_key(key)) + end + + def []=(key, value) + super(convert_key(key), value) + end + + def delete(key) + super(convert_key(key)) + end + + def values_at(*indices) + indices.collect { |key| self[convert_key(key)] } + end + + def merge(other) + dup.merge!(other) + end + + def merge!(other) + other.each do |key, value| + self[convert_key(key)] = value + end + self + end + + protected + + def convert_key(key) + key.is_a?(Symbol) ? key.to_s : key + end + + # Magic predicates. For instance: + # + # options.force? # => !!options['force'] + # options.shebang # => "/usr/lib/local/ruby" + # options.test_framework?(:rspec) # => options[:test_framework] == :rspec + # + def method_missing(method, *args, &block) + method = method.to_s + if method =~ /^(\w+)\?$/ + if args.empty? + !!self[$1] + else + self[$1] == args.first + end + else + self[method] + end + end + +end + + # Assumes Time::Units and Numeric mixins are available. class String def drydock_stub(*args) @@ -233,14 +306,10 @@ else DIR_NAME = '.stella' USER_PATH = File.join(Stella.sysinfo.home, DIR_NAME, 'config') end PROJECT_PATH = Stella::Config.find_project_config - DEFAULT_CONFIG = <<CONF -apikey: '' -secret: '' -source: '' -CONF + DEFAULT_CONFIG = "" DEFAULT_CONFIG_HASH = YAML.load(DEFAULT_CONFIG).gibbler end class AlreadyInitialized < Stella::Error; end end