Commit 5ec9a737 by Mike Burns

Merge branch 'allow_fog_credentials_to_be_set_via_file' of https://github.com/teamsnap/paperclip

parents e645aafa 77ce88a7
...@@ -42,7 +42,7 @@ module Paperclip ...@@ -42,7 +42,7 @@ module Paperclip
base.instance_eval do base.instance_eval do
@fog_directory = @options[:fog_directory] @fog_directory = @options[:fog_directory]
@fog_credentials = @options[:fog_credentials] @fog_credentials = parse_credentials(@options[:fog_credentials])
@fog_host = @options[:fog_host] @fog_host = @options[:fog_host]
@fog_public = @options.key?(:fog_public) ? @options[:fog_public] : true @fog_public = @options.key?(:fog_public) ? @options[:fog_public] : true
@fog_file = @options[:fog_file] || {} @fog_file = @options[:fog_file] || {}
...@@ -120,8 +120,27 @@ module Paperclip ...@@ -120,8 +120,27 @@ module Paperclip
end end
end end
def parse_credentials creds
creds = find_credentials(creds).stringify_keys
env = Object.const_defined?(:Rails) ? Rails.env : nil
(creds[env] || creds).symbolize_keys
end
private private
def find_credentials creds
case creds
when File
YAML::load(ERB.new(File.read(creds.path)).result)
when String, Pathname
YAML::load(ERB.new(File.read(creds)).result)
when Hash
creds
else
raise ArgumentError, "Credentials are not a path, file, or hash."
end
end
def connection def connection
@connection ||= ::Fog::Storage.new(@fog_credentials) @connection ||= ::Fog::Storage.new(@fog_credentials)
end end
...@@ -129,8 +148,6 @@ module Paperclip ...@@ -129,8 +148,6 @@ module Paperclip
def directory def directory
@directory ||= connection.directories.new(:key => @fog_directory) @directory ||= connection.directories.new(:key => @fog_directory)
end end
end end
end end
end end
development:
provider: AWS
aws_access_key_id: AWS_ID
aws_secret_access_key: AWS_SECRET
test:
provider: AWS
aws_access_key_id: AWS_ID
aws_secret_access_key: AWS_SECRET
...@@ -5,6 +5,40 @@ Fog.mock! ...@@ -5,6 +5,40 @@ Fog.mock!
class FogTest < Test::Unit::TestCase class FogTest < Test::Unit::TestCase
context "" do context "" do
context "with credentials provided in a path string" do
setup do
rebuild_model :styles => { :medium => "300x300>", :thumb => "100x100>" },
:storage => :fog,
:url => '/:attachment/:filename',
:fog_directory => "paperclip",
:fog_credentials => File.join(File.dirname(__FILE__), 'fixtures', 'fog.yml')
@dummy = Dummy.new
@dummy.avatar = File.new(File.join(File.dirname(__FILE__), 'fixtures', '5k.png'), 'rb')
end
should "have the proper information loading credentials from a file" do
assert_equal @dummy.avatar.instance_variable_get("@fog_credentials")[:provider], 'AWS'
end
end
context "with credentials provided in a File object" do
setup do
rebuild_model :styles => { :medium => "300x300>", :thumb => "100x100>" },
:storage => :fog,
:url => '/:attachment/:filename',
:fog_directory => "paperclip",
:fog_credentials => File.open(File.join(File.dirname(__FILE__), 'fixtures', 'fog.yml'))
@dummy = Dummy.new
@dummy.avatar = File.new(File.join(File.dirname(__FILE__), 'fixtures', '5k.png'), 'rb')
end
should "have the proper information loading credentials from a file" do
assert_equal @dummy.avatar.instance_variable_get("@fog_credentials")[:provider], 'AWS'
end
end
context "with default values for path and url" do context "with default values for path and url" do
setup do setup do
rebuild_model :styles => { :medium => "300x300>", :thumb => "100x100>" }, rebuild_model :styles => { :medium => "300x300>", :thumb => "100x100>" },
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment