Skip to content

Commit

Permalink
Make Hanami::Lambda::Application as a type of Hanami::Slice
Browse files Browse the repository at this point in the history
  • Loading branch information
elct9620 committed Jan 3, 2024
1 parent f92f4d3 commit 88acd4c
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 75 deletions.
30 changes: 8 additions & 22 deletions lib/hanami/lambda.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# frozen_string_literal: true

require "zeitwerk"
require "hanami"

# @see Hanami::Lambda
# @since 0.1.0
Expand All @@ -15,34 +16,19 @@ module Lambda

@_mutex = Mutex.new

# Returns the Hanami::Lambda application.
#
# @return [Hanami::Lambda::Application] the application
# @raise [Hanami::Lambda::AppLoadError] if the application isn't configured
# Return the application
#
# @api public
# @since 0.1.0
#
# @return [Hanami::Lambda::Application] the application
def self.app
@_mutex.synchronize do
unless defined?(@_app)
raise AppLoadError,
"Hanami::Lambda.app is not yet configured. "
end

@_app
end
end

# @api private
# @since 0.1.0
def self.app=(klass)
@_mutex.synchronize do
raise AppLoadError, "Hanami::Lambda.app is already configured." if instance_variable_defined?(:@_app)

@_app = klass unless klass.name.nil?
end
Hanami.app
end

# Run the application
#
# @api public
def self.call(event:, context:)
app.boot
app.call(event: event, context: context)
Expand Down
29 changes: 10 additions & 19 deletions lib/hanami/lambda/application.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,23 @@ module Lambda
# The application to configure for AWS Lambda.
#
# @since 0.1.0
class Application
class Application < Hanami::Slice
@_mutex = Mutex.new

# @api private
def self.inherited(subclass)
super

require "hanami/setup"

Hanami::Lambda.app = subclass
Hanami.app = subclass
subclass.extend(Hanami::App::ClassMethods)
subclass.extend(ClassMethods)

@_mutex.synchronize do
subclass.class_eval do
@config = Hanami::Config.new(app_name: slice_name, env: Hanami.env)
Hanami::Env.load
end
end
end

module ClassMethods
Expand Down Expand Up @@ -51,21 +57,6 @@ def dispatcher
@dispatcher ||= build_dispatcher
end

# Hanami application
#
# @api private
# @since 0.2.0
def app
Hanami.app
end

# Boot the application
#
# @api private
def boot
app.boot
end

# Build Dispatcher
#
# @api private
Expand Down
37 changes: 3 additions & 34 deletions spec/hanami/lambda/application_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,45 +9,14 @@
end
end

around do |example|
tmpdir = Pathname.new(Dir.mktmpdir)
Dir.chdir(tmpdir) do
tmpdir.join("config").mkpath
tmpdir.join("config/app.rb").write <<~RUBY
require "hanami"
module TestApp
class App < Hanami::App
end
end
RUBY

example.run
end
FileUtils.rm_rf(tmpdir)
end

after do
Hanami::Lambda.remove_instance_variable(:@_app) if Hanami::Lambda.instance_variable_defined?(:@_app)
end

it { is_expected.to be_a(Hanami::Slice::ClassMethods) }
it { is_expected.to be_a(Hanami::App::ClassMethods) }
it { is_expected.to be_a(Hanami::Lambda::Application::ClassMethods) }

describe ".app" do
subject { app.app }

it { is_expected.to be_a(Hanami::App::ClassMethods) }
end

describe ".boot" do
subject(:boot) { app.boot }

it "is expected to boot Hanami" do
boot
expect(Hanami.app).to be_booted
end
end

describe ".definitions" do
subject(:definitions) { app.definitions }

Expand Down Expand Up @@ -75,7 +44,7 @@ class App < Hanami::App
let(:context) { double(:context, function_name: "ExampleApi") }

before do
allow(Hanami).to receive(:app).and_return(rack_app)
allow(app).to receive(:app).and_return(rack_app)
end

it { is_expected.to include(statusCode: 200) }
Expand Down

0 comments on commit 88acd4c

Please sign in to comment.