Skip to content

Commit

Permalink
Merge pull request #2674 from sonalkr132/rails-6-0-default
Browse files Browse the repository at this point in the history
Enable zeitwerk autoloader
  • Loading branch information
sonalkr132 committed Mar 21, 2021
2 parents 2867aa2 + ec60e1d commit 1e079cd
Show file tree
Hide file tree
Showing 12 changed files with 99 additions and 87 deletions.
2 changes: 2 additions & 0 deletions config/application.rb
Expand Up @@ -25,6 +25,8 @@ class Application < Rails::Application
# Initialize configuration defaults for originally generated Rails version.
config.load_defaults 5.2

config.autoloader = :zeitwerk

# Settings in config/environments/* take precedence over those specified here.
# Application configuration can go into files in config/initializers
# -- all .rb files in that directory are automatically loaded after loading
Expand Down
4 changes: 2 additions & 2 deletions config/environments/development.rb
@@ -1,4 +1,4 @@
require_relative "../../lib/middleware/hostess"
require_relative "../../lib/gemcutter/middleware/hostess"
require "active_support/core_ext/integer/time"

Rails.application.configure do
Expand Down Expand Up @@ -66,7 +66,7 @@
# Raises error for missing translations.
# config.i18n.raise_on_missing_translations = true

config.middleware.use Hostess
config.middleware.use Gemcutter::Middleware::Hostess
# Annotate rendered view with file names.
# config.action_view.annotate_rendered_view_with_filenames = true

Expand Down
4 changes: 2 additions & 2 deletions config/environments/production.rb
@@ -1,5 +1,5 @@
require Rails.root.join("config", "secret") if Rails.root.join("config", "secret.rb").file?
require_relative "../../lib/middleware/redirector"
require_relative "../../lib/gemcutter/middleware/redirector"
require "active_support/core_ext/integer/time"

Rails.application.configure do
Expand Down Expand Up @@ -120,7 +120,7 @@
compression_min_size: 524_288
}

config.middleware.use Redirector
config.middleware.use Gemcutter::Middleware::Redirector

# Inserts middleware to perform automatic connection switching.
# The `database_selector` hash is used to pass options to the DatabaseSelector
Expand Down
4 changes: 2 additions & 2 deletions config/environments/staging.rb
@@ -1,5 +1,5 @@
require Rails.root.join("config", "secret") if Rails.root.join("config", "secret.rb").file?
require_relative "../../lib/middleware/redirector"
require_relative "../../lib/gemcutter/middleware/redirector"

Rails.application.configure do
# Settings specified here will take precedence over those in config/application.rb.
Expand Down Expand Up @@ -117,5 +117,5 @@
compression_min_size: 524_288
}

config.middleware.use Redirector
config.middleware.use Gemcutter::Middleware::Redirector
end
2 changes: 1 addition & 1 deletion config/environments/test.rb
@@ -1,4 +1,4 @@
require_relative "../../lib/middleware/redirector"
require_relative "../../lib/gemcutter/middleware/redirector"
require "active_support/core_ext/integer/time"

# The test environment is used exclusively to run your application's
Expand Down
6 changes: 6 additions & 0 deletions config/initializers/zeitwerk.rb
@@ -0,0 +1,6 @@
# ignore rake tasks because don't need to autoload them
Rails.autoloaders.main.ignore(Rails.root.join("lib/tasks"))

# does not require autoload. ignore SqsWorker to supress following:
# expected file lib/shoryuken/sqs_worker.rb to define constant Shoryuken::SqsWorker
Rails.autoloaders.main.ignore(Rails.root.join("lib/shoryuken"))
51 changes: 51 additions & 0 deletions lib/gemcutter/middleware/hostess.rb
@@ -0,0 +1,51 @@
module Gemcutter::Middleware
class Hostess < Rack::Static
def initialize(app, options = {})
options[:root] = RubygemFs.instance.base_dir

options[:urls] = %w[
/specs.4.8.gz
/latest_specs.4.8.gz
/prerelease_specs.4.8.gz
/quick/rubygems-update-1.3.6.gemspec.rz
/yaml.Z
/yaml.z
/Marshal.4.8.Z
/quick/index.rz
/quick/latest_index.rz
/yaml
/Marshal.4.8
/specs.4.8
/latest_specs.4.8
/prerelease_specs.4.8
/quick/index
/quick/latest_index
]

super(app, options)
end

def can_serve(path)
super(path) || gem_download_path(path) || path =~ %r{/quick/Marshal\.4\.8/.*\.gemspec.rz}
end

def gem_download_path(path)
Regexp.last_match(1) if path =~ %r{/gems/(.*)\.gem}
end

def call(env)
path = env["PATH_INFO"]

return [302, { "Location" => "/gems/#{Regexp.last_match(1)}.gem" }, []] if path =~ %r{/downloads/(.*)\.gem}

download_path = gem_download_path(path)
name = Version.rubygem_name_for(download_path) if download_path
if name
GemDownload.transaction do
GemDownload.bulk_update([[download_path, 1]])
end
end
super
end
end
end
28 changes: 28 additions & 0 deletions lib/gemcutter/middleware/redirector.rb
@@ -0,0 +1,28 @@
module Gemcutter::Middleware
class Redirector
def initialize(app)
@app = app
end

def call(env)
request = Rack::Request.new(env)

allowed_hosts = [Gemcutter::HOST, "index.rubygems.org", "fastly.rubygems.org", "bundler.rubygems.org"]

if !allowed_hosts.include?(request.host) && request.path !~ %r{^/api|^/internal} && request.host !~ /docs/
fake_request = Rack::Request.new(env.merge("HTTP_HOST" => Gemcutter::HOST))
redirect_to(fake_request.url)
elsif request.path =~ %r{^/(book|chapter|export|read|shelf|syndicate)} && request.host !~ /docs/
redirect_to("https://docs.rubygems.org#{request.path}")
else
@app.call(env)
end
end

private

def redirect_to(url)
[301, { "Location" => url }, []]
end
end
end
49 changes: 0 additions & 49 deletions lib/middleware/hostess.rb

This file was deleted.

26 changes: 0 additions & 26 deletions lib/middleware/redirector.rb

This file was deleted.

@@ -1,15 +1,15 @@
require "test_helper"
require_relative "../../lib/middleware/hostess"
require_relative "../../../../lib/gemcutter/middleware/hostess"

class HostessTest < ActiveSupport::TestCase
class Gemcutter::Middleware::HostessTest < ActiveSupport::TestCase
include Rack::Test::Methods

setup do
create(:gem_download)
end

def app
Hostess.new(-> { [200, {}, ""] })
Gemcutter::Middleware::Hostess.new(-> { [200, {}, ""] })
end

def touch(path)
Expand Down
@@ -1,11 +1,11 @@
require "test_helper"

class RedirectorTest < ActiveSupport::TestCase
class Gemcutter::Middleware::RedirectorTest < ActiveSupport::TestCase
include Rack::Test::Methods

def app
Rack::Builder.new do
use Redirector
use Gemcutter::Middleware::Redirector
run ->(_) { [200, { "Content-Type" => "text/html" }, []] }
end
end
Expand Down

0 comments on commit 1e079cd

Please sign in to comment.