class Rack::Refresh

Constants

VERSION

Public Class Methods

new(app, url: nil, interval: 0, **options, &block) click to toggle source
# File lib/rack/refresh.rb, line 5
def initialize(app, url: nil, interval: 0, **options, &block)
  @app      = app
  @url      = url
  @interval = interval
  instance_eval(&block) if block_given?
end

Public Instance Methods

_call(env) click to toggle source
# File lib/rack/refresh.rb, line 16
def _call(env)
  response = @app.call(env)
  route = find_refresh_route_from(env)
  refresh_for(response, route[:interval], route[:url]) if route
  response
end
call(env) click to toggle source
# File lib/rack/refresh.rb, line 12
def call(env)
  dup._call(env)
end
refresh(path = nil, interval: nil, url: nil, &matcher) click to toggle source
# File lib/rack/refresh.rb, line 23
def refresh(path = nil, interval: nil, url: nil, &matcher)
  current_route = {interval: interval || @interval, url: url || @url}
  raise ArgumentError, "`:url` must be set in refresh" unless current_route[:url]
  return unless path || block_given?
  current_route[:path] = path
  current_route[:matcher] = matcher
  routes << current_route
end

Private Instance Methods

find_refresh_route_from(env) click to toggle source
# File lib/rack/refresh.rb, line 36
def find_refresh_route_from(env)
  path_info = env["PATH_INFO"]
  routes.find{|route| route[:path] ? (route[:path] === path_info) : route[:matcher].call(env) }
end
refresh_for(response, interval, url) click to toggle source
# File lib/rack/refresh.rb, line 32
def refresh_for(response, interval, url)
  response[1]["Refresh"] = "#{interval}; url=#{url}"
end
routes() click to toggle source
# File lib/rack/refresh.rb, line 41
def routes
  @routes ||= []
end