Class: Rack::JQuery
- Inherits:
-
Object
- Object
- Rack::JQuery
- Includes:
- Helpers
- Defined in:
- lib/rack/jquery.rb,
lib/rack/jquery/version.rb
Overview
jQuery CDN script tags and fallback in one neat package.
Defined Under Namespace
Modules: CDN
Constant Summary collapse
- JQUERY_FILE_NAME =
Current file name of fallback.
"jquery-#{JQUERY_VERSION}.min.js"- JQUERY_SOURCE_MAP =
Fallback source map file name.
"jquery-#{JQUERY_VERSION}.min.map"- FALLBACK =
This javascript checks if the jQuery object has loaded. If not, that most likely means the CDN is unreachable, so it uses the local minified jQuery.
"<script type=\"text/javascript\">\n if (typeof jQuery == 'undefined') {\n document.write(unescape(\"%3Cscript src='/js/\#{JQUERY_FILE_NAME}' type='text/javascript'%3E%3C/script%3E\"))\n };\n</script>\n"- DEFAULT_OPTIONS =
Default options hash for the middleware.
{ :http_path => "/js" }
- VERSION =
the version of this library
"2.0.0"- JQUERY_VERSION =
the version of jQuery it supports.
"2.0.3"- JQUERY_VERSION_DATE =
TODO:
remember to change Last-Modified with each release!
This is the release date of the jQuery file, it makes an easy “Last-Modified” date for setting the headers around caching.
"Thu, 18 Apr 2013 00:00:00 +0100"
Class Method Summary collapse
-
.cdn(env, options = {}) ⇒ String
The HTML script tags to get the CDN.
Instance Method Summary collapse
-
#_call(env) ⇒ Object
For thread safety.
- #call(env) ⇒ Object
-
#initialize(app, options = {}) ⇒ JQuery
constructor
A new instance of JQuery.
Constructor Details
#initialize(app, options = {}) ⇒ JQuery
Returns a new instance of JQuery.
91 92 93 94 95 96 |
# File 'lib/rack/jquery.rb', line 91 def initialize( app, ={} ) @app, = app, DEFAULT_OPTIONS.merge() @http_path_to_jquery = ::File.join [:http_path], JQUERY_FILE_NAME @http_path_to_source_map = ::File.join [:http_path], JQUERY_SOURCE_MAP @organisation = .fetch :organisation, :media_temple end |
Class Method Details
.cdn(env, options = {}) ⇒ String
Returns The HTML script tags to get the CDN.
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/rack/jquery.rb', line 47 def self.cdn( env, ={} ) if env.nil? || env.has_key?(:organisation) fail ArgumentError, "The Rack::JQuery.cdn method needs the Rack environment passed to it, or at the very least, an empty hash." end organisation = [:organisation] || env["rack.jquery.organisation"] || :media_temple script = case organisation when :media_temple CDN::MEDIA_TEMPLE when :microsoft CDN::MICROSOFT when :cloudflare CDN::CLOUDFLARE when :google CDN::GOOGLE else CDN::MEDIA_TEMPLE end "<script src='#{script}'></script>\n#{FALLBACK}" end |
Instance Method Details
#_call(env) ⇒ Object
For thread safety
107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
# File 'lib/rack/jquery.rb', line 107 def _call( env ) request = Rack::Request.new(env.dup) env.merge! "rack.jquery.organisation" => @organisation if request.path_info == @http_path_to_jquery response = Rack::Response.new # for caching response.headers.merge! caching_headers( JQUERY_FILE_NAME, JQUERY_VERSION_DATE) # There's no need to test if the IF_MODIFIED_SINCE against the release date because the header will only be passed if the file was previously accessed by the requester, and the file is never updated. If it is updated then it is accessed by a different path. if request.env['HTTP_IF_MODIFIED_SINCE'] response.status = 304 else response.status = 200 response.write ::File.read( ::File. "../../../vendor/assets/javascripts/#{JQUERY_FILE_NAME}", __FILE__) end response.finish elsif request.path_info == @http_path_to_source_map response = Rack::Response.new # No need for caching with the source map response.status = 200 response.write ::File.read( ::File. "../../../vendor/assets/javascripts/#{JQUERY_SOURCE_MAP}", __FILE__) response.finish else @app.call(env) end end |
#call(env) ⇒ Object
100 101 102 |
# File 'lib/rack/jquery.rb', line 100 def call( env ) dup._call env end |