Module: Sinatra::LinkHeader
| Relationships & Source Files | |
| Defined in: | sinatra-contrib/lib/sinatra/link_header.rb |
Overview
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
Instance Method Summary
-
#link(*urls)
Sets Link HTTP header and returns corresponding HTML tags.
-
#link_headers
Takes the current value of th Link header(s) and generates HTML tags from it.
-
#prefetch(*urls)
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)
Sets Link HTTP header and returns HTML tags for using stylesheets.
Class Method Details
.registered(_base)
[ GitHub ]# File 'sinatra-contrib/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)
Sets Link HTTP header and returns corresponding HTML tags.
Example:
# Sets header: # Link: ; rel="next" # Returns String: # '' link '/foo', :rel => :next
# Multiple URLs link :stylesheet, '/a.css', '/b.css'
# File 'sinatra-contrib/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
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"] = '; rel="next"' haml :some_page end
END
@@ layout %head= link_headers %body= yield
# File 'sinatra-contrib/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)
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).
# File 'sinatra-contrib/lib/sinatra/link_header.rb', line 58
def prefetch(*urls) link(:prefetch, *urls) end
#stylesheet(*urls)
Sets Link HTTP header and returns HTML tags for using stylesheets.