From a39eb735f53f9ab311bea443b2208c461c7ca49f Mon Sep 17 00:00:00 2001 From: Jon Yurek Date: Mon, 5 Jan 2015 10:19:59 -0500 Subject: [PATCH] Don't assume we have Rails.env if we have Rails See #1739 --- Gemfile | 2 +- lib/paperclip.rb | 1 + lib/paperclip/rails_environment.rb | 23 +++++++++++++++++ lib/paperclip/storage/fog.rb | 3 +-- lib/paperclip/storage/s3.rb | 3 +-- spec/paperclip/rails_environment_spec.rb | 33 ++++++++++++++++++++++++ 6 files changed, 60 insertions(+), 5 deletions(-) create mode 100644 lib/paperclip/rails_environment.rb create mode 100644 spec/paperclip/rails_environment_spec.rb diff --git a/Gemfile b/Gemfile index 76301193e..b8ecfdbd5 100644 --- a/Gemfile +++ b/Gemfile @@ -2,7 +2,7 @@ source "https://rubygems.org" gemspec -gem 'sqlite3', '1.3.8', :platforms => :ruby +gem 'sqlite3', '~>1.3.8', :platforms => :ruby gem 'jruby-openssl', :platforms => :jruby gem 'activerecord-jdbcsqlite3-adapter', :platforms => :jruby diff --git a/lib/paperclip.rb b/lib/paperclip.rb index 3fe6fdb3d..929ca37f4 100644 --- a/lib/paperclip.rb +++ b/lib/paperclip.rb @@ -55,6 +55,7 @@ require 'paperclip/has_attached_file' require 'paperclip/attachment_registry' require 'paperclip/filename_cleaner' +require 'paperclip/rails_environment' require 'mime/types' require 'logger' require 'cocaine' diff --git a/lib/paperclip/rails_environment.rb b/lib/paperclip/rails_environment.rb new file mode 100644 index 000000000..8a0ec7958 --- /dev/null +++ b/lib/paperclip/rails_environment.rb @@ -0,0 +1,23 @@ +module Paperclip + class RailsEnvironment + def self.get + new.get + end + + def get + if rails_exists? && rails_environment_exists? + Rails.env + else + nil + end + end + + def rails_exists? + Object.const_defined?("Rails") + end + + def rails_environment_exists? + Rails.respond_to?(:env) + end + end +end diff --git a/lib/paperclip/storage/fog.rb b/lib/paperclip/storage/fog.rb index e880386c5..2f10f8bbe 100644 --- a/lib/paperclip/storage/fog.rb +++ b/lib/paperclip/storage/fog.rb @@ -156,8 +156,7 @@ def expiring_url(time = (Time.now + 3600), style_name = default_style) def parse_credentials(creds) creds = find_credentials(creds).stringify_keys - env = Object.const_defined?(:Rails) ? Rails.env : nil - (creds[env] || creds).symbolize_keys + (creds[RailsEnvironment.get] || creds).symbolize_keys end def copy_to_local_file(style, local_dest_path) diff --git a/lib/paperclip/storage/s3.rb b/lib/paperclip/storage/s3.rb index 25125328f..411a394dc 100644 --- a/lib/paperclip/storage/s3.rb +++ b/lib/paperclip/storage/s3.rb @@ -288,8 +288,7 @@ def set_storage_class(storage_class) def parse_credentials creds creds = creds.respond_to?('call') ? creds.call(self) : creds creds = find_credentials(creds).stringify_keys - env = Object.const_defined?(:Rails) ? Rails.env : nil - (creds[env] || creds).symbolize_keys + (creds[RailsEnvironment.get] || creds).symbolize_keys end def exists?(style = default_style) diff --git a/spec/paperclip/rails_environment_spec.rb b/spec/paperclip/rails_environment_spec.rb new file mode 100644 index 000000000..56ecdb5a4 --- /dev/null +++ b/spec/paperclip/rails_environment_spec.rb @@ -0,0 +1,33 @@ +require 'spec_helper' + +describe Paperclip::RailsEnvironment do + + it "returns nil when Rails isn't defined" do + resetting_rails_to(nil) do + expect(Paperclip::RailsEnvironment.get).to be_nil + end + end + + it "returns nil when Rails.env isn't defined" do + resetting_rails_to({}) do + expect(Paperclip::RailsEnvironment.get).to be_nil + end + end + + it "returns the value of Rails.env if it is set" do + resetting_rails_to(OpenStruct.new(env: "foo")) do + expect(Paperclip::RailsEnvironment.get).to eq "foo" + end + end + + def resetting_rails_to(new_value) + begin + previous_rails = Object.send(:remove_const, "Rails") + Object.const_set("Rails", new_value) unless new_value.nil? + yield + ensure + Object.send(:remove_const, "Rails") if Object.const_defined?("Rails") + Object.const_set("Rails", previous_rails) + end + end +end