diff options
author | David Heinemeier Hansson <david@loudthinking.com> | 2017-07-04 16:44:50 +0200 |
---|---|---|
committer | David Heinemeier Hansson <david@loudthinking.com> | 2017-07-04 16:44:50 +0200 |
commit | efd950ae706cfbb55dffebd5d0c85e30acfd7a45 (patch) | |
tree | 49830af75a1fc0a0ec2c634f060fb984908a7e38 | |
parent | ccaba581c0cf8653f61ce212667eaa1cc6f0a28e (diff) | |
download | rails-efd950ae706cfbb55dffebd5d0c85e30acfd7a45.tar.gz rails-efd950ae706cfbb55dffebd5d0c85e30acfd7a45.tar.bz2 rails-efd950ae706cfbb55dffebd5d0c85e30acfd7a45.zip |
Use lazy-loaded factory method for site configuration
-rw-r--r-- | Gemfile | 5 | ||||
-rw-r--r-- | lib/active_file/disk_controller.rb | 2 | ||||
-rw-r--r-- | lib/active_file/site.rb | 14 | ||||
-rw-r--r-- | lib/active_file/site/disk_site.rb (renamed from lib/active_file/sites/disk_site.rb) | 2 | ||||
-rw-r--r-- | lib/active_file/site/gcs_site.rb (renamed from lib/active_file/sites/gcs_site.rb) | 2 | ||||
-rw-r--r-- | lib/active_file/site/mirror_site.rb (renamed from lib/active_file/sites/mirror_site.rb) | 2 | ||||
-rw-r--r-- | lib/active_file/site/s3_site.rb (renamed from lib/active_file/sites/s3_site.rb) | 2 | ||||
-rw-r--r-- | test/site/.gitignore (renamed from test/sites/.gitignore) | 0 | ||||
-rw-r--r-- | test/site/configurations-example.yml (renamed from test/sites/configurations-example.yml) | 0 | ||||
-rw-r--r-- | test/site/disk_site_test.rb | 8 | ||||
-rw-r--r-- | test/site/gcs_site_test.rb | 11 | ||||
-rw-r--r-- | test/site/s3_site_test.rb | 11 | ||||
-rw-r--r-- | test/site/shared_site_tests.rb (renamed from test/sites/shared_site_tests.rb) | 2 | ||||
-rw-r--r-- | test/sites/disk_site_test.rb | 8 | ||||
-rw-r--r-- | test/sites/gcs_site_test.rb | 11 | ||||
-rw-r--r-- | test/sites/s3_site_test.rb | 11 | ||||
-rw-r--r-- | test/test_helper.rb | 2 |
17 files changed, 47 insertions, 46 deletions
@@ -6,5 +6,6 @@ gem 'rake' gem 'byebug' gem 'sqlite3' -gem 'aws-sdk' -gem 'google-cloud' + +gem 'aws-sdk', require: false +gem 'google-cloud', require: false diff --git a/lib/active_file/disk_controller.rb b/lib/active_file/disk_controller.rb index b5a19fa5fc..f016c90fc5 100644 --- a/lib/active_file/disk_controller.rb +++ b/lib/active_file/disk_controller.rb @@ -10,7 +10,7 @@ class ActiveFile::DiskController < ActionController::Base private def decode_verified_key - ActiveFile::Sites::DiskSite::VerifiedKeyWithExpiration.decode(params[:id]) + ActiveFile::Site::DiskSite::VerifiedKeyWithExpiration.decode(params[:id]) end def disposition_param diff --git a/lib/active_file/site.rb b/lib/active_file/site.rb index eb72ef39d4..31640695d5 100644 --- a/lib/active_file/site.rb +++ b/lib/active_file/site.rb @@ -1,5 +1,12 @@ # Abstract class serving as an interface for concrete sites. class ActiveFile::Site + def self.configure(site, **options) + begin + require "active_file/site/#{site.to_s.downcase}_site" + ActiveFile::Site.const_get(:"#{site}Site").new(**options) + end + end + def initialize end @@ -36,10 +43,3 @@ class ActiveFile::Site raise NotImplementedError end end - -module ActiveFile::Sites -end - -require "active_file/sites/disk_site" -require "active_file/sites/gcs_site" -require "active_file/sites/s3_site" diff --git a/lib/active_file/sites/disk_site.rb b/lib/active_file/site/disk_site.rb index e5572073ed..1fa77029c7 100644 --- a/lib/active_file/sites/disk_site.rb +++ b/lib/active_file/site/disk_site.rb @@ -1,7 +1,7 @@ require "fileutils" require "pathname" -class ActiveFile::Sites::DiskSite < ActiveFile::Site +class ActiveFile::Site::DiskSite < ActiveFile::Site attr_reader :root def initialize(root:) diff --git a/lib/active_file/sites/gcs_site.rb b/lib/active_file/site/gcs_site.rb index f5f8696f56..c5f3d634cf 100644 --- a/lib/active_file/sites/gcs_site.rb +++ b/lib/active_file/site/gcs_site.rb @@ -1,6 +1,6 @@ require "google/cloud/storage" -class ActiveFile::Sites::GCSSite < ActiveFile::Site +class ActiveFile::Site::GCSSite < ActiveFile::Site attr_reader :client, :bucket def initialize(project:, keyfile:, bucket:) diff --git a/lib/active_file/sites/mirror_site.rb b/lib/active_file/site/mirror_site.rb index 051d139af1..65f28cd437 100644 --- a/lib/active_file/sites/mirror_site.rb +++ b/lib/active_file/site/mirror_site.rb @@ -1,4 +1,4 @@ -class ActiveFile::Sites::MirrorSite < ActiveFile::Site +class ActiveFile::Site::MirrorSite < ActiveFile::Site attr_reader :sites def initialize(sites:) diff --git a/lib/active_file/sites/s3_site.rb b/lib/active_file/site/s3_site.rb index e13b609881..7bb8197245 100644 --- a/lib/active_file/sites/s3_site.rb +++ b/lib/active_file/site/s3_site.rb @@ -1,6 +1,6 @@ require "aws-sdk" -class ActiveFile::Sites::S3Site < ActiveFile::Site +class ActiveFile::Site::S3Site < ActiveFile::Site attr_reader :client, :bucket def initialize(access_key_id:, secret_access_key:, region:, bucket:) diff --git a/test/sites/.gitignore b/test/site/.gitignore index c102131f3d..c102131f3d 100644 --- a/test/sites/.gitignore +++ b/test/site/.gitignore diff --git a/test/sites/configurations-example.yml b/test/site/configurations-example.yml index 031197342a..031197342a 100644 --- a/test/sites/configurations-example.yml +++ b/test/site/configurations-example.yml diff --git a/test/site/disk_site_test.rb b/test/site/disk_site_test.rb new file mode 100644 index 0000000000..63f12ad335 --- /dev/null +++ b/test/site/disk_site_test.rb @@ -0,0 +1,8 @@ +require "tmpdir" +require "site/shared_site_tests" + +class ActiveFile::Site::DiskSiteTest < ActiveSupport::TestCase + SITE = ActiveFile::Site.configure(:Disk, root: File.join(Dir.tmpdir, "active_file")) + + include ActiveFile::Site::SharedSiteTests +end diff --git a/test/site/gcs_site_test.rb b/test/site/gcs_site_test.rb new file mode 100644 index 0000000000..c5f32a0595 --- /dev/null +++ b/test/site/gcs_site_test.rb @@ -0,0 +1,11 @@ +require "site/shared_site_tests" + +if SITE_CONFIGURATIONS[:gcs] + class ActiveFile::Site::GCSSiteTest < ActiveSupport::TestCase + SITE = ActiveFile::Site.configure(:GCS, SITE_CONFIGURATIONS[:gcs]) + + include ActiveFile::Site::SharedSiteTests + end +else + puts "Skipping GCS Site tests because no GCS configuration was supplied" +end diff --git a/test/site/s3_site_test.rb b/test/site/s3_site_test.rb new file mode 100644 index 0000000000..7629b78ad5 --- /dev/null +++ b/test/site/s3_site_test.rb @@ -0,0 +1,11 @@ +require "site/shared_site_tests" + +if SITE_CONFIGURATIONS[:s3] + class ActiveFile::Site::S3SiteTest < ActiveSupport::TestCase + SITE = ActiveFile::Site.configure(:S3, SITE_CONFIGURATIONS[:s3]) + + include ActiveFile::Site::SharedSiteTests + end +else + puts "Skipping S3 Site tests because no S3 configuration was supplied" +end diff --git a/test/sites/shared_site_tests.rb b/test/site/shared_site_tests.rb index de28d7ae63..de1a54b874 100644 --- a/test/sites/shared_site_tests.rb +++ b/test/site/shared_site_tests.rb @@ -8,7 +8,7 @@ rescue Errno::ENOENT puts "Missing site configuration file in test/sites/configurations.yml" end -module ActiveFile::Sites::SharedSiteTests +module ActiveFile::Site::SharedSiteTests extend ActiveSupport::Concern FIXTURE_KEY = SecureRandom.base58(24) diff --git a/test/sites/disk_site_test.rb b/test/sites/disk_site_test.rb deleted file mode 100644 index 0956f08528..0000000000 --- a/test/sites/disk_site_test.rb +++ /dev/null @@ -1,8 +0,0 @@ -require "tmpdir" -require "sites/shared_site_tests" - -class ActiveFile::Sites::DiskSiteTest < ActiveSupport::TestCase - SITE = ActiveFile::Sites::DiskSite.new(root: File.join(Dir.tmpdir, "active_file")) - - include ActiveFile::Sites::SharedSiteTests -end diff --git a/test/sites/gcs_site_test.rb b/test/sites/gcs_site_test.rb deleted file mode 100644 index fbf6c4a242..0000000000 --- a/test/sites/gcs_site_test.rb +++ /dev/null @@ -1,11 +0,0 @@ -require "sites/shared_site_tests" - -if SITE_CONFIGURATIONS[:gcs] - class ActiveFile::Sites::GCSSiteTest < ActiveSupport::TestCase - SITE = ActiveFile::Sites::GCSSite.new(SITE_CONFIGURATIONS[:gcs]) - - include ActiveFile::Sites::SharedSiteTests - end -else - puts "Skipping GCS Site tests because no GCS configuration was supplied" -end diff --git a/test/sites/s3_site_test.rb b/test/sites/s3_site_test.rb deleted file mode 100644 index 12f5d084f6..0000000000 --- a/test/sites/s3_site_test.rb +++ /dev/null @@ -1,11 +0,0 @@ -require "sites/shared_site_tests" - -if SITE_CONFIGURATIONS[:s3] - class ActiveFile::Sites::S3SiteTest < ActiveSupport::TestCase - SITE = ActiveFile::Sites::S3Site.new(SITE_CONFIGURATIONS[:s3]) - - include ActiveFile::Sites::SharedSiteTests - end -else - puts "Skipping S3 Site tests because no S3 configuration was supplied" -end diff --git a/test/test_helper.rb b/test/test_helper.rb index 5be2631ceb..1f947fce90 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -6,7 +6,7 @@ require "byebug" require "active_file" require "active_file/site" -ActiveFile::Blob.site = ActiveFile::Sites::DiskSite.new(root: File.join(Dir.tmpdir, "active_file")) +ActiveFile::Blob.site = ActiveFile::Site.configure(:Disk, root: File.join(Dir.tmpdir, "active_file")) require "active_file/verified_key_with_expiration" ActiveFile::VerifiedKeyWithExpiration.verifier = ActiveSupport::MessageVerifier.new("Testing") |