Skip to content

Commit

Permalink
Add #session_enabled? to Request and Response (#423)
Browse files Browse the repository at this point in the history
This will be useful for external code needing to check whether the sesison is enabled before interacting with it (like Hanami’s form helpers need to do before attempting to fetch a CSRF token from the request).
  • Loading branch information
timriley committed Apr 28, 2023
1 parent 70d9bf1 commit 110da91
Show file tree
Hide file tree
Showing 6 changed files with 38 additions and 17 deletions.
8 changes: 4 additions & 4 deletions lib/hanami/action.rb
Original file line number Diff line number Diff line change
Expand Up @@ -309,15 +309,15 @@ def call(env)
request = build_request(
env: env,
params: params,
sessions_enabled: sessions_enabled?
session_enabled: session_enabled?
)
response = build_response(
request: request,
config: config,
content_type: Mime.response_content_type_with_charset(request, config),
env: env,
headers: config.default_headers,
sessions_enabled: sessions_enabled?
session_enabled: session_enabled?
)

enforce_accepted_mime_types(request)
Expand Down Expand Up @@ -424,10 +424,10 @@ def exception_handler(exception)
nil
end

# @see Session#sessions_enabled?
# @see Session#session_enabled?
# @since 2.0.0
# @api private
def sessions_enabled?
def session_enabled?
false
end

Expand Down
21 changes: 16 additions & 5 deletions lib/hanami/action/request.rb
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,11 @@ class Request < ::Rack::Request

# @since 2.0.0
# @api private
def initialize(env:, params:, sessions_enabled: false)
def initialize(env:, params:, session_enabled: false)
super(env)

@params = params
@sessions_enabled = sessions_enabled
@session_enabled = session_enabled
end

# Returns the request's ID
Expand All @@ -47,18 +47,29 @@ def id
@id ||= @env[Action::REQUEST_ID] = SecureRandom.hex(Action::DEFAULT_ID_LENGTH)
end

# Returns true if the session is enabled for the request.
#
# @return [Boolean]
#
# @api public
# @since x.x.x
def session_enabled?
@session_enabled
end

# Returns the session for the request.
#
# @return [Hash] the session object
#
# @raise [MissingSessionError] if sessions are not enabled
# @raise [MissingSessionError] if the session is not enabled
#
# @see #session_enabled?
# @see Response#session
#
# @since 2.0.0
# @api public
def session
unless @sessions_enabled
unless session_enabled?
raise Hanami::Action::MissingSessionError.new("Hanami::Action::Request#session")
end

Expand All @@ -76,7 +87,7 @@ def session
# @since 2.0.0
# @api public
def flash
unless @sessions_enabled
unless session_enabled?
raise Hanami::Action::MissingSessionError.new("Hanami::Action::Request#flash")
end

Expand Down
18 changes: 14 additions & 4 deletions lib/hanami/action/response.rb
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ def self.build(status, env)

# @since 2.0.0
# @api private
def initialize(request:, config:, content_type: nil, env: {}, headers: {}, view_options: nil, sessions_enabled: false) # rubocop:disable Layout/LineLength, Metrics/ParameterLists
def initialize(request:, config:, content_type: nil, env: {}, headers: {}, view_options: nil, session_enabled: false) # rubocop:disable Layout/LineLength, Metrics/ParameterLists
super([], 200, headers.dup)
self.content_type = content_type if content_type

Expand All @@ -59,7 +59,7 @@ def initialize(request:, config:, content_type: nil, env: {}, headers: {}, view_
@env = env
@view_options = view_options || DEFAULT_VIEW_OPTIONS

@sessions_enabled = sessions_enabled
@session_enabled = session_enabled
@sending_file = false
end

Expand Down Expand Up @@ -187,6 +187,16 @@ def []=(key, value)
@exposures[key] = value
end

# Returns true if the session is enabled for the request.
#
# @return [Boolean]
#
# @api public
# @since x.x.x
def session_enabled?
@session_enabled
end

# Returns the session for the response.
#
# This is the same session object as the {Request}.
Expand All @@ -200,7 +210,7 @@ def []=(key, value)
# @since 2.0.0
# @api public
def session
unless @sessions_enabled
unless session_enabled?
raise Hanami::Action::MissingSessionError.new("Hanami::Action::Response#session")
end

Expand All @@ -220,7 +230,7 @@ def session
# @since 2.0.0
# @api public
def flash
unless @sessions_enabled
unless session_enabled?
raise Hanami::Action::MissingSessionError.new("Hanami::Action::Response#flash")
end

Expand Down
2 changes: 1 addition & 1 deletion lib/hanami/action/session.rb
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ def self.included(base)

private

def sessions_enabled?
def session_enabled?
true
end

Expand Down
4 changes: 2 additions & 2 deletions spec/unit/hanami/action/response/session_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@
env: rack_env,
request: request,
config: Hanami::Action.config.dup,
sessions_enabled: true
session_enabled: true
)
}
let(:request) {
Hanami::Action::Request.new(env: rack_env, params: {}, sessions_enabled: true)
Hanami::Action::Request.new(env: rack_env, params: {}, session_enabled: true)
}
let(:rack_env) {
Rack::MockRequest.env_for("http://example.com/foo?q=bar")
Expand Down
2 changes: 1 addition & 1 deletion spec/unit/hanami/action/response/status_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
)
}
let(:request) {
Hanami::Action::Request.new(env: rack_env, params: {}, sessions_enabled: true)
Hanami::Action::Request.new(env: rack_env, params: {}, session_enabled: true)
}
let(:rack_env) {
Rack::MockRequest.env_for("http://example.com/foo?q=bar")
Expand Down

0 comments on commit 110da91

Please sign in to comment.