rack-jquery 1.5.1 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGES.md +7 -0
- data/README.md +2 -2
- data/examples/config.rb +51 -5
- data/examples/config.ru +6 -1
- data/lib/rack/jquery.rb +22 -2
- data/lib/rack/jquery/version.rb +1 -1
- data/spec/rack_jquery_spec.rb +122 -46
- metadata +2 -2
data/CHANGES.md
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
# CH CH CH CHANGES #
|
2
2
|
|
3
|
+
## Saturday the 7th of September 2013, v2.0.0 ##
|
4
|
+
|
5
|
+
* Added ability to pass `use` a default organisation.
|
6
|
+
* Added a failure message for those who don't notice the API changes.
|
7
|
+
|
8
|
+
----
|
9
|
+
|
3
10
|
## Friday the 6th of September 2013, v1.5.1 ##
|
4
11
|
|
5
12
|
* Added the source map and fallback routes for it.
|
data/README.md
CHANGED
@@ -18,11 +18,11 @@ Have a look in the examples directory, but here's a snippet.
|
|
18
18
|
* Install it (see below)
|
19
19
|
* `require 'rack/jquery'`.
|
20
20
|
* If you want fallback then add this to your middleware stack: `use Rack::JQuery`
|
21
|
-
* Put this in the head of your layout (the example is Haml but you can use whatever you like)
|
21
|
+
* Put this in the head of your layout (the example is Haml but you can use whatever you like) and pass it the Rack env:
|
22
22
|
|
23
23
|
<pre><code>
|
24
24
|
%head
|
25
|
-
= Rack::JQuery.cdn
|
25
|
+
= Rack::JQuery.cdn( env )
|
26
26
|
</code></pre>
|
27
27
|
|
28
28
|
Now you have the script tags to Media Temple's CDN in the head (you can also use Google or Microsoft, or Cloudflare, see the docs).
|
data/examples/config.rb
CHANGED
@@ -47,36 +47,82 @@ STR
|
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
|
+
|
51
|
+
class AppWithDefaults < Sinatra::Base
|
52
|
+
|
53
|
+
enable :inline_templates
|
54
|
+
use Rack::JQuery, :organisation => :cloudflare
|
55
|
+
|
56
|
+
get "/" do
|
57
|
+
output = <<STR
|
58
|
+
!!!
|
59
|
+
%body
|
60
|
+
%ul
|
61
|
+
%li
|
62
|
+
%a{ href: "/google-cdn"} google-cdn
|
63
|
+
%li
|
64
|
+
%a{ href: "/media-temple-cdn"} media-temple-cdn
|
65
|
+
%li
|
66
|
+
%a{ href: "/microsoft-cdn"} microsoft-cdn
|
67
|
+
%li
|
68
|
+
%a{ href: "/cloudflare-cdn"} cloudflare-cdn
|
69
|
+
%li
|
70
|
+
%a{ href: "/unspecified-cdn"} unspecified-cdn
|
71
|
+
STR
|
72
|
+
haml output
|
73
|
+
end
|
74
|
+
|
75
|
+
get "/google-cdn" do
|
76
|
+
haml :index, :layout => :google
|
77
|
+
end
|
78
|
+
|
79
|
+
get "/media-temple-cdn" do
|
80
|
+
haml :index, :layout => :mediatemple
|
81
|
+
end
|
82
|
+
|
83
|
+
get "/microsoft-cdn" do
|
84
|
+
haml :index, :layout => :microsoft
|
85
|
+
end
|
86
|
+
|
87
|
+
get "/cloudflare-cdn" do
|
88
|
+
haml :index, :layout => :cloudflare
|
89
|
+
end
|
90
|
+
|
91
|
+
get "/unspecified-cdn" do
|
92
|
+
haml :index, :layout => :unspecified
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
50
96
|
__END__
|
51
97
|
|
52
98
|
@@google
|
53
99
|
%html
|
54
100
|
%head
|
55
|
-
= Rack::JQuery.cdn( :google )
|
101
|
+
= Rack::JQuery.cdn(env, :organisation => :google )
|
56
102
|
= yield
|
57
103
|
|
58
104
|
@@microsoft
|
59
105
|
%html
|
60
106
|
%head
|
61
|
-
= Rack::JQuery.cdn( :microsoft )
|
107
|
+
= Rack::JQuery.cdn( env, :organisation => :microsoft )
|
62
108
|
= yield
|
63
109
|
|
64
110
|
@@mediatemple
|
65
111
|
%html
|
66
112
|
%head
|
67
|
-
= Rack::JQuery.cdn( :media_temple )
|
113
|
+
= Rack::JQuery.cdn( env, :organisation => :media_temple )
|
68
114
|
= yield
|
69
115
|
|
70
116
|
@@cloudflare
|
71
117
|
%html
|
72
118
|
%head
|
73
|
-
= Rack::JQuery.cdn( :cloudflare )
|
119
|
+
= Rack::JQuery.cdn( env, :organisation => :cloudflare )
|
74
120
|
= yield
|
75
121
|
|
76
122
|
@@unspecified
|
77
123
|
%html
|
78
124
|
%head
|
79
|
-
= Rack::JQuery.cdn()
|
125
|
+
= Rack::JQuery.cdn(env)
|
80
126
|
= yield
|
81
127
|
|
82
128
|
@@index
|
data/examples/config.ru
CHANGED
data/lib/rack/jquery.rb
CHANGED
@@ -1,13 +1,17 @@
|
|
1
1
|
require "rack/jquery/version"
|
2
2
|
require "rack/jquery/helpers"
|
3
3
|
|
4
|
+
# @see http://rack.github.io/
|
4
5
|
module Rack
|
5
6
|
|
6
7
|
# jQuery CDN script tags and fallback in one neat package.
|
7
8
|
class JQuery
|
8
9
|
include Helpers
|
9
10
|
|
11
|
+
# Current file name of fallback.
|
10
12
|
JQUERY_FILE_NAME = "jquery-#{JQUERY_VERSION}.min.js"
|
13
|
+
|
14
|
+
# Fallback source map file name.
|
11
15
|
JQUERY_SOURCE_MAP = "jquery-#{JQUERY_VERSION}.min.map"
|
12
16
|
|
13
17
|
|
@@ -37,9 +41,18 @@ module Rack
|
|
37
41
|
</script>
|
38
42
|
STR
|
39
43
|
|
40
|
-
# @param [
|
44
|
+
# @param [Hash] env The rack env hash.
|
45
|
+
# @param [Symbol] organisation Choose which CDN to use, either :google, :microsoft or :media_temple, or :cloudflare. This will override anything set via the `use` statement.
|
41
46
|
# @return [String] The HTML script tags to get the CDN.
|
42
|
-
def self.cdn(
|
47
|
+
def self.cdn( env, options={} )
|
48
|
+
if env.nil? || env.has_key?(:organisation)
|
49
|
+
fail ArgumentError, "The Rack::JQuery.cdn method needs the Rack environment passed to it, or at the very least, an empty hash."
|
50
|
+
end
|
51
|
+
|
52
|
+
organisation = options[:organisation] ||
|
53
|
+
env["rack.jquery.organisation"] ||
|
54
|
+
:media_temple
|
55
|
+
|
43
56
|
script = case organisation
|
44
57
|
when :media_temple
|
45
58
|
CDN::MEDIA_TEMPLE
|
@@ -65,15 +78,21 @@ STR
|
|
65
78
|
# @param [#call] app
|
66
79
|
# @param [Hash] options
|
67
80
|
# @option options [String] :http_path If you wish the jQuery fallback route to be "/js/jquery-1.9.1.min.js" (or whichever version this is at) then do nothing, that's the default. If you want the path to be "/assets/javascripts/jquery-1.9.1.min.js" then pass in `:http_path => "/assets/javascripts".
|
81
|
+
# @option options [Symbol] :organisation see {Rack::JQuery.cdn}
|
68
82
|
# @example
|
69
83
|
# # The default:
|
70
84
|
# use Rack::JQuery
|
85
|
+
#
|
71
86
|
# # With a different route to the fallback:
|
72
87
|
# use Rack::JQuery, :http_path => "/assets/js"
|
88
|
+
#
|
89
|
+
# # With a default organisation:
|
90
|
+
# use Rack::JQuery, :organisation => :cloudflare
|
73
91
|
def initialize( app, options={} )
|
74
92
|
@app, @options = app, DEFAULT_OPTIONS.merge(options)
|
75
93
|
@http_path_to_jquery = ::File.join @options[:http_path], JQUERY_FILE_NAME
|
76
94
|
@http_path_to_source_map = ::File.join @options[:http_path], JQUERY_SOURCE_MAP
|
95
|
+
@organisation = options.fetch :organisation, :media_temple
|
77
96
|
end
|
78
97
|
|
79
98
|
|
@@ -87,6 +106,7 @@ STR
|
|
87
106
|
# @param (see #call)
|
88
107
|
def _call( env )
|
89
108
|
request = Rack::Request.new(env.dup)
|
109
|
+
env.merge! "rack.jquery.organisation" => @organisation
|
90
110
|
if request.path_info == @http_path_to_jquery
|
91
111
|
response = Rack::Response.new
|
92
112
|
# for caching
|
data/lib/rack/jquery/version.rb
CHANGED
data/spec/rack_jquery_spec.rb
CHANGED
@@ -4,8 +4,10 @@ require 'spec_helper'
|
|
4
4
|
require_relative "../lib/rack/jquery.rb"
|
5
5
|
|
6
6
|
describe "The class methods" do
|
7
|
-
|
8
|
-
|
7
|
+
let(:env) { {} }
|
8
|
+
subject { Rack::JQuery.cdn env, :organisation => organisation }
|
9
|
+
|
10
|
+
context "Given the organisation option" do
|
9
11
|
context "of nil (the default)" do
|
10
12
|
let(:organisation) { nil }
|
11
13
|
it { should == "<script src='#{Rack::JQuery::CDN::MEDIA_TEMPLE}'></script>\n#{Rack::JQuery::FALLBACK}" }
|
@@ -27,60 +29,134 @@ describe "The class methods" do
|
|
27
29
|
it { should == "<script src='#{Rack::JQuery::CDN::CLOUDFLARE}'></script>\n#{Rack::JQuery::FALLBACK}" }
|
28
30
|
end
|
29
31
|
end
|
32
|
+
|
33
|
+
context "Given no Rack env argument" do
|
34
|
+
it "should fail and give a message" do
|
35
|
+
expect{ Rack::JQuery.cdn nil }.to raise_error(ArgumentError)
|
36
|
+
end
|
37
|
+
|
38
|
+
context "and an organisation option" do
|
39
|
+
it "should fail and give a message" do
|
40
|
+
expect{ Rack::JQuery.cdn nil, {:organisation => :microsoft} }.to raise_error(ArgumentError)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
30
44
|
end
|
31
45
|
|
32
46
|
describe "Inserting the CDN" do
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
47
|
+
|
48
|
+
# These check the default is overriden
|
49
|
+
# when `cdn` is given a value
|
50
|
+
# but when not, the default is used.
|
51
|
+
context "When given a default" do
|
52
|
+
include_context "All routes" do
|
53
|
+
let(:app){ AppWithDefaults }
|
37
54
|
end
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
55
|
+
context "Check the examples run at all" do
|
56
|
+
before do
|
57
|
+
get "/"
|
58
|
+
end
|
59
|
+
it_should_behave_like "Any route"
|
43
60
|
end
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
61
|
+
context "Google CDN" do
|
62
|
+
before do
|
63
|
+
get "/google-cdn"
|
64
|
+
end
|
65
|
+
it_should_behave_like "Any route"
|
66
|
+
subject { last_response.body }
|
67
|
+
let(:expected) { Rack::JQuery::CDN::GOOGLE }
|
68
|
+
it { should include expected }
|
52
69
|
end
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
70
|
+
context "Microsoft CDN" do
|
71
|
+
before do
|
72
|
+
get "/microsoft-cdn"
|
73
|
+
end
|
74
|
+
it_should_behave_like "Any route"
|
75
|
+
subject { last_response.body }
|
76
|
+
let(:expected) { Rack::JQuery::CDN::MICROSOFT }
|
77
|
+
it { should include expected }
|
61
78
|
end
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
79
|
+
context "Media_temple CDN" do
|
80
|
+
before do
|
81
|
+
get "/media-temple-cdn"
|
82
|
+
end
|
83
|
+
it_should_behave_like "Any route"
|
84
|
+
subject { last_response.body }
|
85
|
+
let(:expected) { Rack::JQuery::CDN::MEDIA_TEMPLE }
|
86
|
+
it { should include expected }
|
87
|
+
end
|
88
|
+
context "Unspecified CDN" do
|
89
|
+
before do
|
90
|
+
get "/unspecified-cdn"
|
91
|
+
end
|
92
|
+
it_should_behave_like "Any route"
|
93
|
+
subject { last_response.body }
|
94
|
+
let(:expected) { Rack::JQuery::CDN::CLOUDFLARE }
|
95
|
+
it { should include expected }
|
96
|
+
end
|
97
|
+
context "Cloudflare CDN" do
|
98
|
+
before do
|
99
|
+
get "/cloudflare-cdn"
|
100
|
+
end
|
101
|
+
it_should_behave_like "Any route"
|
102
|
+
subject { last_response.body }
|
103
|
+
let(:expected) { Rack::JQuery::CDN::CLOUDFLARE }
|
104
|
+
it { should include expected }
|
70
105
|
end
|
71
|
-
it_should_behave_like "Any route"
|
72
|
-
subject { last_response.body }
|
73
|
-
let(:expected) { Rack::JQuery::CDN::MEDIA_TEMPLE }
|
74
|
-
it { should include expected }
|
75
106
|
end
|
76
|
-
context "
|
77
|
-
|
78
|
-
|
107
|
+
context "When not given a default" do
|
108
|
+
include_context "All routes"
|
109
|
+
context "Check the examples run at all" do
|
110
|
+
before do
|
111
|
+
get "/"
|
112
|
+
end
|
113
|
+
it_should_behave_like "Any route"
|
114
|
+
end
|
115
|
+
context "Google CDN" do
|
116
|
+
before do
|
117
|
+
get "/google-cdn"
|
118
|
+
end
|
119
|
+
it_should_behave_like "Any route"
|
120
|
+
subject { last_response.body }
|
121
|
+
let(:expected) { Rack::JQuery::CDN::GOOGLE }
|
122
|
+
it { should include expected }
|
123
|
+
end
|
124
|
+
context "Microsoft CDN" do
|
125
|
+
before do
|
126
|
+
get "/microsoft-cdn"
|
127
|
+
end
|
128
|
+
it_should_behave_like "Any route"
|
129
|
+
subject { last_response.body }
|
130
|
+
let(:expected) { Rack::JQuery::CDN::MICROSOFT }
|
131
|
+
it { should include expected }
|
132
|
+
end
|
133
|
+
context "Media_temple CDN" do
|
134
|
+
before do
|
135
|
+
get "/media-temple-cdn"
|
136
|
+
end
|
137
|
+
it_should_behave_like "Any route"
|
138
|
+
subject { last_response.body }
|
139
|
+
let(:expected) { Rack::JQuery::CDN::MEDIA_TEMPLE }
|
140
|
+
it { should include expected }
|
141
|
+
end
|
142
|
+
context "Unspecified CDN" do
|
143
|
+
before do
|
144
|
+
get "/unspecified-cdn"
|
145
|
+
end
|
146
|
+
it_should_behave_like "Any route"
|
147
|
+
subject { last_response.body }
|
148
|
+
let(:expected) { Rack::JQuery::CDN::MEDIA_TEMPLE }
|
149
|
+
it { should include expected }
|
150
|
+
end
|
151
|
+
context "Cloudflare CDN" do
|
152
|
+
before do
|
153
|
+
get "/cloudflare-cdn"
|
154
|
+
end
|
155
|
+
it_should_behave_like "Any route"
|
156
|
+
subject { last_response.body }
|
157
|
+
let(:expected) { Rack::JQuery::CDN::CLOUDFLARE }
|
158
|
+
it { should include expected }
|
79
159
|
end
|
80
|
-
it_should_behave_like "Any route"
|
81
|
-
subject { last_response.body }
|
82
|
-
let(:expected) { Rack::JQuery::CDN::CLOUDFLARE }
|
83
|
-
it { should include expected }
|
84
160
|
end
|
85
161
|
end
|
86
162
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-jquery
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-09-
|
12
|
+
date: 2013-09-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|