[core] `@credential` should always be a symbol

Similar to #504, say your ~/.fog had multiple stanzas:

```yaml
:default:
  :aws_access_key_id: aaa
test:
  :aws_access_key_id: bbb
:prod:
  :aws_access_key_id: ccc
```

By default, fog will look for either the credential *symbol* `:default` or for the *string* stored in `FOG_CREDENTIAL` (in `lib/fog/core/credentials.rb` method `self.credential`). When the fog credentials file given above is read in, it’s passed through `self.symbolize_credentials` which makes *symbols* out of all the keys (so `prod`, `test`, and `default` will all be symbols) and saves the list to credentials then looks for `credentials[credential]` which is indexing a string in a hash of symbols.

Any value that `@credential` is set to should be a symbol, because the hash keys will only be symbols.
This commit is contained in:
Hunter Haugen 2011-11-16 09:51:43 -08:00
parent 40e2c2b133
commit d25b39405f
2 changed files with 4 additions and 4 deletions

View File

@ -8,12 +8,12 @@ module Fog
# @ return [String, Symbol] name of the new credential
def self.credential=(new_credential)
@credentials = nil
@credential = new_credential
@credential = new_credential.to_sym
end
# @return [String, Symbol] The credential to use in Fog
def self.credential
@credential ||= ENV["FOG_CREDENTIAL"] || :default
@credential ||= ENV["FOG_CREDENTIAL"].to_sym || :default
end
# @return [String] The path for configuration_file

View File

@ -18,12 +18,12 @@ Shindo.tests do
tests('credential') do
returns(:default, "is :default") { Fog.credential }
returns("foo", "can be set directly") do
returns(:foo, "can be set directly") do
Fog.credential = "foo"
Fog.credential
end
returns("bar", "can be set with environment variable") do
returns(:bar, "can be set with environment variable") do
ENV["FOG_CREDENTIAL"] = "bar"
Fog.credential
end