Module: Sinatra::LinkHeader
- Defined in:
- lib/sinatra/link_header.rb
Overview
Sinatra::LinkHeader
Sinatra::LinkHeader
adds a set of helper methods to generate link HTML tags and their corresponding Link HTTP headers.
Usage
Once you had set up the helpers in your application (see below), you will be able to call the following methods from inside your route handlers, filters and templates:
prefetch
-
Sets the Link HTTP headers and returns HTML tags to prefetch the given resources.
stylesheet
-
Sets the Link HTTP headers and returns HTML tags to use the given stylesheets.
link
-
Sets the Link HTTP headers and returns the corresponding HTML tags for the given resources.
link_headers
-
Returns the corresponding HTML tags for the current Link HTTP headers.
Classic Application
In a classic application simply require the helpers, and start using them:
require "sinatra"
require "sinatra/link_header"
# The rest of your classic application code goes here...
Modular Application
In a modular application you need to require the helpers, and then tell the application you will use them:
require "sinatra/base"
require "sinatra/link_header"
class MyApp < Sinatra::Base
helpers Sinatra::LinkHeader
# The rest of your modular application code goes here...
end
Class Method Summary collapse
Instance Method Summary collapse
-
#link(*urls) ⇒ Object
Sets Link HTTP header and returns corresponding HTML tags.
-
#link_headers ⇒ Object
Takes the current value of th Link header(s) and generates HTML tags from it.
-
#prefetch(*urls) ⇒ Object
Sets Link HTTP header and returns HTML tags for telling the browser to prefetch given resources (only supported by Opera and Firefox at the moment).
-
#stylesheet(*urls) ⇒ Object
Sets Link HTTP header and returns HTML tags for using stylesheets.
Class Method Details
.registered(_base) ⇒ Object
128 129 130 |
# File 'lib/sinatra/link_header.rb', line 128 def self.registered(_base) puts "WARNING: #{self} is a helpers module, not an extension." end |
Instance Method Details
#link(*urls) ⇒ Object
Sets Link HTTP header and returns corresponding HTML tags.
Example:
# Sets header:
# Link: </foo>; rel="next"
# Returns String:
# '<link href="/foo" rel="next" />'
link '/foo', :rel => :next
# Multiple URLs
link :stylesheet, '/a.css', '/b.css'
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/sinatra/link_header.rb', line 83 def link(*urls) opts = urls.last.respond_to?(:to_hash) ? urls.pop : {} opts[:rel] = urls.shift unless urls.first.respond_to? :to_str = opts.map { |k, v| " #{k}=#{v.to_s.inspect}" } html_pattern = "<link href=\"%s\"#{.join} />" http_pattern = ['<%s>', *].join ';' link = (response['Link'] ||= '') link = response['Link'] = +link urls.map do |url| link << "," unless link.empty? link << (http_pattern % url) html_pattern % url end.join end |
#link_headers ⇒ Object
Takes the current value of th Link header(s) and generates HTML tags from it.
Example:
get '/' do
# You can of course use fancy helpers like #link, #stylesheet
# or #prefetch
response["Link"] = '</foo>; rel="next"'
haml :some_page
end
__END__
118 119 120 121 122 123 124 125 126 |
# File 'lib/sinatra/link_header.rb', line 118 def link_headers yield if block_given? return '' unless response.include? 'Link' response['Link'].split(",").map do |line| url, *opts = line.split(';').map(&:strip) "<link href=\"#{url[1..-2]}\" #{opts.join ' '} />" end.join end |
#prefetch(*urls) ⇒ Object
Sets Link HTTP header and returns HTML tags for telling the browser to prefetch given resources (only supported by Opera and Firefox at the moment).
58 59 60 |
# File 'lib/sinatra/link_header.rb', line 58 def prefetch(*urls) link(:prefetch, *urls) end |
#stylesheet(*urls) ⇒ Object
Sets Link HTTP header and returns HTML tags for using stylesheets.
64 65 66 67 68 |
# File 'lib/sinatra/link_header.rb', line 64 def stylesheet(*urls) urls << {} unless urls.last.respond_to? :to_hash urls.last[:type] ||= mime_type(:css) link(:stylesheet, *urls) end |