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