Convert to Zeitwerk for code loading (#402)
- Add zeitwerk to the gemspec - Add `lib/hanami-controller.rb` so the gem follows a conventional structure - Set up the Zeitwerk loader inside `lib/hanami/action.rb` (call it `.gem_loader` instead of `.loader` like we have done in other gems, since `Hanami::Action` is a class with other responsibilities, and `loader` is too generic a term) - Move conditional requires below the `gem_loader.setup` line to ensure any internal autoloader work - Remove all now-unneeded manual requires for files inside the gem
This commit is contained in:
parent
f66d91beef
commit
2e025d26c3
|
@ -20,9 +20,10 @@ Gem::Specification.new do |spec|
|
|||
spec.metadata["rubygems_mfa_required"] = "true"
|
||||
spec.required_ruby_version = ">= 3.0"
|
||||
|
||||
spec.add_dependency "rack", "~> 2.0"
|
||||
spec.add_dependency "rack", "~> 2.0"
|
||||
spec.add_dependency "hanami-utils", "~> 2.0.0.rc1"
|
||||
spec.add_dependency "dry-configurable", "~> 1.0", "< 2"
|
||||
spec.add_dependency "zeitwerk", "~> 2.6"
|
||||
|
||||
spec.add_development_dependency "bundler", ">= 1.6", "< 3"
|
||||
spec.add_development_dependency "rack-test", "~> 2.0"
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require_relative "hanami/controller"
|
|
@ -1,29 +1,15 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
begin
|
||||
require "dry/core"
|
||||
require "dry/types"
|
||||
require "hanami/validations"
|
||||
require "hanami/action/validatable"
|
||||
rescue LoadError # rubocop:disable Lint/SuppressedException
|
||||
end
|
||||
|
||||
require "dry/configurable"
|
||||
require "hanami/utils/callbacks"
|
||||
require "hanami/utils"
|
||||
require "hanami/utils/string"
|
||||
require "hanami/utils/callbacks"
|
||||
require "hanami/utils/kernel"
|
||||
require "hanami/utils/string"
|
||||
require "rack"
|
||||
require "rack/utils"
|
||||
require "zeitwerk"
|
||||
|
||||
require_relative "action/config"
|
||||
require_relative "action/constants"
|
||||
require_relative "action/base_params"
|
||||
require_relative "action/halt"
|
||||
require_relative "action/mime"
|
||||
require_relative "action/rack/file"
|
||||
require_relative "action/request"
|
||||
require_relative "action/response"
|
||||
require_relative "action/errors"
|
||||
|
||||
module Hanami
|
||||
|
@ -42,6 +28,32 @@ module Hanami
|
|||
#
|
||||
# @api public
|
||||
class Action
|
||||
# @since 2.0.0
|
||||
# @api private
|
||||
def self.gem_loader
|
||||
@gem_loader ||= Zeitwerk::Loader.new.tap do |loader|
|
||||
root = File.expand_path("..", __dir__)
|
||||
loader.tag = "hanami-controller"
|
||||
loader.inflector = Zeitwerk::GemInflector.new("#{root}/hanami-controller.rb")
|
||||
loader.push_dir(root)
|
||||
loader.ignore(
|
||||
"#{root}/hanami-controller.rb",
|
||||
"#{root}/hanami/controller/version.rb",
|
||||
"#{root}/hanami/action/{constants,errors,params,validatable}.rb"
|
||||
)
|
||||
loader.inflector.inflect("csrf_protection" => "CSRFProtection")
|
||||
end
|
||||
end
|
||||
|
||||
gem_loader.setup
|
||||
|
||||
# Make conditional requires after Zeitwerk setup so any internal autoloading works as expected
|
||||
begin
|
||||
require "hanami/validations"
|
||||
require_relative "action/validatable"
|
||||
rescue LoadError # rubocop:disable Lint/SuppressedException
|
||||
end
|
||||
|
||||
extend Dry::Configurable(config_class: Config)
|
||||
|
||||
# See {Config} for individual setting accessor API docs
|
||||
|
|
|
@ -1,9 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require "hanami/action/cache/cache_control"
|
||||
require "hanami/action/cache/expires"
|
||||
require "hanami/action/cache/conditional_get"
|
||||
|
||||
module Hanami
|
||||
class Action
|
||||
# Cache type API
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require "hanami/action/cache/directives"
|
||||
|
||||
module Hanami
|
||||
class Action
|
||||
module Cache
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require "hanami/action/cache/cache_control"
|
||||
|
||||
module Hanami
|
||||
class Action
|
||||
module Cache
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require "dry/configurable"
|
||||
require_relative "mime"
|
||||
|
||||
module Hanami
|
||||
class Action
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require "hanami/action/base_params"
|
||||
require "hanami/validations/form"
|
||||
|
||||
module Hanami
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require "hanami/action/flash"
|
||||
require "rack/mime"
|
||||
require "rack/request"
|
||||
require "rack/utils"
|
||||
|
|
|
@ -3,11 +3,6 @@
|
|||
require "rack"
|
||||
require "rack/response"
|
||||
require "hanami/utils/kernel"
|
||||
require "hanami/action/halt"
|
||||
require "hanami/action/cookie_jar"
|
||||
require "hanami/action/cache/cache_control"
|
||||
require "hanami/action/cache/expires"
|
||||
require "hanami/action/cache/conditional_get"
|
||||
require_relative "errors"
|
||||
|
||||
module Hanami
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require "hanami/action/flash"
|
||||
|
||||
module Hanami
|
||||
class Action
|
||||
# Session support for actions.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require "hanami/action/params"
|
||||
require_relative "params"
|
||||
|
||||
module Hanami
|
||||
class Action
|
||||
|
|
|
@ -9,22 +9,10 @@ require "hanami/controller/version"
|
|||
module Hanami
|
||||
# A set of logically grouped actions
|
||||
#
|
||||
# @since 0.1.0
|
||||
#
|
||||
# @see Hanami::Action
|
||||
#
|
||||
# @example
|
||||
# require "hanami/controller"
|
||||
#
|
||||
# module Articles
|
||||
# class Index < Hanami::Action
|
||||
# # ...
|
||||
# end
|
||||
#
|
||||
# class Show < Hanami::Action
|
||||
# # ...
|
||||
# end
|
||||
# end
|
||||
# @since 0.1.0
|
||||
# @api public
|
||||
module Controller
|
||||
end
|
||||
end
|
||||
|
|
|
@ -2,6 +2,11 @@
|
|||
|
||||
module Hanami
|
||||
module Controller
|
||||
# The current hanami-controller version.
|
||||
#
|
||||
# @return [String]
|
||||
#
|
||||
# @since 0.1.0
|
||||
# @api public
|
||||
VERSION = "2.0.0.rc1"
|
||||
end
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require "hanami/router"
|
||||
require "hanami/action/cache"
|
||||
|
||||
module CacheControl
|
||||
class Default < Hanami::Action
|
||||
|
|
|
@ -3,8 +3,6 @@
|
|||
$LOAD_PATH.unshift "lib"
|
||||
require "hanami/utils"
|
||||
require "hanami/devtools/unit"
|
||||
require "hanami/controller"
|
||||
require "hanami/action/cookies"
|
||||
require "hanami/action/session"
|
||||
require "hanami/action"
|
||||
|
||||
Hanami::Utils.require!("spec/support")
|
||||
|
|
|
@ -5,10 +5,6 @@ require "digest/md5"
|
|||
require "hanami/router"
|
||||
require "hanami/middleware/body_parser"
|
||||
require "hanami/utils/escape"
|
||||
require "hanami/action/params"
|
||||
require "hanami/action/cookies"
|
||||
require "hanami/action/session"
|
||||
require "hanami/action/cache"
|
||||
require_relative "./renderer"
|
||||
|
||||
require_relative "./validations"
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require "hanami/action"
|
||||
require "hanami/action/csrf_protection"
|
||||
|
||||
RSpec.describe Hanami::Action::CSRFProtection do
|
||||
subject(:action) {
|
||||
Class.new(Hanami::Action) {
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require "hanami/action/flash"
|
||||
|
||||
RSpec.describe Hanami::Action::Flash do
|
||||
let(:flash) { described_class.new(input_hash) }
|
||||
let(:input_hash) { {} }
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require "hanami/action/request"
|
||||
|
||||
RSpec.describe Hanami::Action::Request do
|
||||
describe "#body" do
|
||||
it "exposes the raw body of the request" do
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require "hanami/action/response"
|
||||
require "hanami/action/request"
|
||||
|
||||
RSpec.describe Hanami::Action::Response, "session features" do
|
||||
subject(:response) {
|
||||
described_class.new(
|
||||
|
|
Loading…
Reference in New Issue