Skip to content

Commit

Permalink
API docs. Made flash public API. [ci skip]
Browse files Browse the repository at this point in the history
  • Loading branch information
jodosha committed Mar 13, 2017
1 parent 81b598b commit 7c4b4dc
Show file tree
Hide file tree
Showing 20 changed files with 137 additions and 30 deletions.
3 changes: 3 additions & 0 deletions lib/hanami/action/base_params.rb
Expand Up @@ -7,12 +7,14 @@ class BaseParams
# The key that returns raw input from the Rack env
#
# @since 0.7.0
# @api private
RACK_INPUT = 'rack.input'.freeze

# The key that returns router params from the Rack env
# This is a builtin integration for Hanami::Router
#
# @since 0.7.0
# @api private
ROUTER_PARAMS = 'router.params'.freeze

# The key that returns Rack session params from the Rack env
Expand Down Expand Up @@ -46,6 +48,7 @@ class BaseParams
# @return [Params]
#
# @since 0.7.0
# @api private
def initialize(env)
@env = env
@raw = _extract_params
Expand Down
7 changes: 1 addition & 6 deletions lib/hanami/action/cache.rb
Expand Up @@ -20,7 +20,7 @@ module Cache
# @since 0.3.0
# @api private
#
# @see http://www.ruby-doc.org/core-2.1.2/Module.html#method-i-included
# @see http://www.ruby-doc.org/core/Module.html#method-i-included
def self.included(base)
base.class_eval do
include CacheControl, Expires
Expand Down Expand Up @@ -51,7 +51,6 @@ def self.included(base)
# @return void
#
# @since 0.3.0
# @api public
#
# @example
# require 'hanami/controller'
Expand All @@ -74,7 +73,6 @@ def self.included(base)
#
# end
# end
#
def cache_control(*values)
cache_control = CacheControl::Directives.new(*values)
headers.merge!(cache_control.headers)
Expand All @@ -91,7 +89,6 @@ def cache_control(*values)
# @return void
#
# @since 0.3.0
# @api public
#
# @example
# require 'hanami/controller'
Expand All @@ -115,7 +112,6 @@ def cache_control(*values)
#
# end
# end
#
def expires(amount, *values)
expires = Expires::Directives.new(amount, *values)
headers.merge!(expires.headers)
Expand All @@ -132,7 +128,6 @@ def expires(amount, *values)
# @return void
#
# @since 0.3.0
# @api public
#
# @example
# require 'hanami/controller'
Expand Down
16 changes: 12 additions & 4 deletions lib/hanami/action/cache/cache_control.rb
Expand Up @@ -3,31 +3,37 @@
module Hanami
module Action
module Cache

# Module with Cache-Control logic
#
# @since 0.3.0
# @api private
module CacheControl

# The HTTP header for Cache-Control
#
# @since 0.3.0
# @api private
HEADER = 'Cache-Control'.freeze

# @since 0.3.0
# @api private
def self.included(base)
base.class_eval do
extend ClassMethods
@cache_control_directives = nil
end
end

# @since 0.3.0
# @api private
module ClassMethods
# @since 0.3.0
# @api private
def cache_control(*values)
@cache_control_directives ||= Directives.new(*values)
end

# @since 0.3.0
# @api private
def cache_control_directives
@cache_control_directives || Object.new.tap do |null_object|
def null_object.headers
Expand All @@ -51,14 +57,16 @@ def finish
# Class which stores CacheControl values
#
# @since 0.3.0
#
# @api private
#
class Directives
# @since 0.3.0
# @api private
def initialize(*values)
@directives = Hanami::Action::Cache::Directives.new(*values)
end

# @since 0.3.0
# @api private
def headers
if @directives.any?
{ HEADER => @directives.join(', ') }
Expand Down
23 changes: 22 additions & 1 deletion lib/hanami/action/cache/conditional_get.rb
Expand Up @@ -25,22 +25,29 @@ module Cache
#
# @since 0.3.0
# @api private
#
class ETag
# @since 0.3.0
# @api private
def initialize(env, value)
@env, @value = env, value
end

# @since 0.3.0
# @api private
def fresh?
none_match && @value == none_match
end

# @since 0.3.0
# @api private
def header
{ ETAG => @value } if none_match
end

private

# @since 0.3.0
# @api private
def none_match
@env[IF_NONE_MATCH]
end
Expand All @@ -51,20 +58,28 @@ def none_match
# @since 0.3.0
# @api private
class LastModified
# @since 0.3.0
# @api private
def initialize(env, value)
@env, @value = env, value
end

# @since 0.3.0
# @api private
def fresh?
!Hanami::Utils::Blank.blank?(modified_since) && Time.httpdate(modified_since).to_i >= @value.to_i
end

# @since 0.3.0
# @api private
def header
{ LAST_MODIFIED => @value.httpdate } if modified_since
end

private

# @since 0.3.0
# @api private
def modified_since
@env[IF_MODIFIED_SINCE]
end
Expand All @@ -76,14 +91,20 @@ def modified_since
# @since 0.3.0
# @api private
class ConditionalGet
# @since 0.3.0
# @api private
def initialize(env, options)
@validations = [ ETag.new(env, options[:etag]), LastModified.new(env, options[:last_modified]) ]
end

# @since 0.3.0
# @api private
def fresh?
yield if @validations.any?(&:fresh?)
end

# @since 0.3.0
# @api private
def headers
@validations.map(&:header).compact.reduce Hash.new, :merge
end
Expand Down
27 changes: 26 additions & 1 deletion lib/hanami/action/cache/directives.rb
@@ -1,7 +1,6 @@
module Hanami
module Action
module Cache

# Cache-Control directives which have values
#
# @since 0.3.0
Expand All @@ -21,16 +20,24 @@ module Cache
# @since 0.3.0
# @api private
class ValueDirective
# @since 0.3.0
# @api private
attr_reader :name

# @since 0.3.0
# @api private
def initialize(name, value)
@name, @value = name, value
end

# @since 0.3.0
# @api private
def to_str
"#{@name.to_s.tr('_', '-')}=#{@value.to_i}"
end

# @since 0.3.0
# @api private
def valid?
VALUE_DIRECTIVES.include? @name
end
Expand All @@ -43,16 +50,24 @@ def valid?
# @since 0.3.0
# @api private
class NonValueDirective
# @since 0.3.0
# @api private
attr_reader :name

# @since 0.3.0
# @api private
def initialize(name)
@name = name
end

# @since 0.3.0
# @api private
def to_str
@name.to_s.tr('_', '-')
end

# @since 0.3.0
# @api private
def valid?
NON_VALUE_DIRECTIVES.include? @name
end
Expand All @@ -65,6 +80,8 @@ def valid?
class Directives
include Enumerable

# @since 0.3.0
# @api private
def initialize(*values)
@directives = []
values.each do |directive_key|
Expand All @@ -76,20 +93,28 @@ def initialize(*values)
end
end

# @since 0.3.0
# @api private
def each
@directives.each { |d| yield d }
end

# @since 0.3.0
# @api private
def <<(directive)
@directives << directive if directive.valid?
end

# @since 0.3.0
# @api private
def values
@directives.delete_if do |directive|
directive.name == :public && @directives.map(&:name).include?(:private)
end
end

# @since 0.3.0
# @api private
def join(separator)
values.join(separator)
end
Expand Down
18 changes: 14 additions & 4 deletions lib/hanami/action/cache/expires.rb
Expand Up @@ -3,31 +3,37 @@
module Hanami
module Action
module Cache

# Module with Expires logic
#
# @since 0.3.0
# @api private
module Expires

# The HTTP header for Expires
#
# @since 0.3.0
# @api private
HEADER = 'Expires'.freeze

# @since 0.3.0
# @api private
def self.included(base)
base.class_eval do
extend ClassMethods
@expires_directives = nil
end
end

# @since 0.3.0
# @api private
module ClassMethods
# @since 0.3.0
# @api private
def expires(amount, *values)
@expires_directives ||= Directives.new(amount, *values)
end

# @since 0.3.0
# @api private
def expires_directives
@expires_directives || Object.new.tap do |null_object|
def null_object.headers
Expand All @@ -51,21 +57,25 @@ def finish
# Class which stores Expires directives
#
# @since 0.3.0
#
# @api private
#
class Directives
# @since 0.3.0
# @api private
def initialize(amount, *values)
@amount = amount
@cache_control = Hanami::Action::Cache::CacheControl::Directives.new(*(values << { max_age: amount }))
end

# @since 0.3.0
# @api private
def headers
{ HEADER => time.httpdate }.merge(@cache_control.headers)
end

private

# @since 0.3.0
# @api private
def time
Time.now + @amount.to_i
end
Expand Down
4 changes: 4 additions & 0 deletions lib/hanami/action/callbacks.rb
Expand Up @@ -197,10 +197,14 @@ def call(params)
end

private
# @since 0.1.0
# @api private
def _run_before_callbacks(params)
self.class.before_callbacks.run(self, params)
end

# @since 0.1.0
# @api private
def _run_after_callbacks(params)
self.class.after_callbacks.run(self, params)
end
Expand Down
1 change: 1 addition & 0 deletions lib/hanami/action/configurable.rb
Expand Up @@ -41,6 +41,7 @@ def self.included(base)

private

# @since 0.2.0
def configuration
self.class.configuration
end
Expand Down

0 comments on commit 7c4b4dc

Please sign in to comment.