rack-gist 1.1.9 → 1.2.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/VERSION +1 -1
- data/lib/rack/gist.rb +29 -23
- data/rack-gist.gemspec +8 -8
- data/spec/rack-gist_spec.rb +14 -5
- metadata +38 -40
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.2.0
|
data/lib/rack/gist.rb
CHANGED
@@ -3,14 +3,11 @@ require 'rest-client'
|
|
3
3
|
|
4
4
|
module Rack
|
5
5
|
class Gist
|
6
|
+
DefaultCacheTime = 3600
|
7
|
+
|
6
8
|
def initialize(app, options = {})
|
7
9
|
@app = app
|
8
|
-
@options =
|
9
|
-
:jquery => true,
|
10
|
-
:cache_time => 3600,
|
11
|
-
:http_cache_time => 3600,
|
12
|
-
:encoding => 'utf-8'
|
13
|
-
}.merge(options)
|
10
|
+
@options = options
|
14
11
|
end
|
15
12
|
|
16
13
|
def call(env)
|
@@ -37,11 +34,11 @@ module Rack
|
|
37
34
|
if swap_tags(doc)
|
38
35
|
doc.at('head').add_child(css_html)
|
39
36
|
doc.at('body').tap do |node|
|
40
|
-
node.add_child(jquery_link) if @options
|
41
|
-
node.add_child(jquery_helper)
|
37
|
+
node.add_child(jquery_link) if @options.fetch(:jquery, true)
|
38
|
+
node.add_child(jquery_helper) if @options.fetch(:helper, true)
|
42
39
|
end
|
43
40
|
end
|
44
|
-
end.to_html(:encoding => @options
|
41
|
+
end.to_html(:encoding => @options.fetch(:encoding, 'utf-8'))
|
45
42
|
end
|
46
43
|
|
47
44
|
def stringify_body(body)
|
@@ -56,8 +53,16 @@ module Rack
|
|
56
53
|
extras = true
|
57
54
|
tag['src'].match(%r{gist\.github\.com/([a-f0-9]+)\.js(?:\?file=(.*))?}).tap do |match|
|
58
55
|
id, file = match[1, 2]
|
59
|
-
|
60
|
-
|
56
|
+
url = "/gist.github.com/#{id}"
|
57
|
+
if file
|
58
|
+
url += "/#{file}"
|
59
|
+
suffix = "#file_#{file}"
|
60
|
+
extra = %Q{rack-gist-file="#{file}"}
|
61
|
+
else
|
62
|
+
suffix = nil
|
63
|
+
extra = nil
|
64
|
+
end
|
65
|
+
tag.swap(%Q{<p class="rack-gist" id="rack-gist-#{id}"" gist-id="#{id}" rack-gist-url="#{url}.js" #{extra}>Can't see this Gist? <a rel="nofollow" href="http://gist.github.com/#{id}#{suffix}">View it on Github!</a></p>})
|
61
66
|
end
|
62
67
|
end
|
63
68
|
extras
|
@@ -65,21 +70,27 @@ module Rack
|
|
65
70
|
|
66
71
|
def serve_gist(env)
|
67
72
|
gist_id, file = path(env).match(regex)[1,2]
|
68
|
-
|
69
|
-
gist = (cache ? cache.fetch(cache_key(gist_id, file), :expires_in => @options[:cache_time]) { get_gist(gist_id, file) } : get_gist(gist_id, file)).to_s
|
73
|
+
gist = fetch_gist(gist_id, file).to_s
|
70
74
|
headers = {
|
71
75
|
'Content-Type' => 'application/javascript',
|
72
76
|
'Content-Length' => Rack::Utils.bytesize(gist).to_s,
|
73
77
|
'Vary' => 'Accept-Encoding'
|
74
78
|
}
|
75
79
|
|
76
|
-
|
77
|
-
headers['Cache-Control'] = "public, must-revalidate, max-age=#{@options[:http_cache_time]}"
|
78
|
-
end
|
80
|
+
headers['Cache-Control'] = "public, must-revalidate, max-age=#{@options.fetch(:http_cache_time, DefaultCacheTime)}"
|
79
81
|
|
80
82
|
[200, headers, [gist]]
|
81
83
|
end
|
82
84
|
|
85
|
+
def fetch_gist(gist_id, file)
|
86
|
+
if cache = @options.fetch(:cache, false)
|
87
|
+
expires = @options.fetch(:cache_time, DefaultCacheTime)
|
88
|
+
cache.fetch(cache_key(gist_id, file), :expires_in => expires) { get_gist(gist_id, file) }
|
89
|
+
else
|
90
|
+
get_gist(gist_id, file)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
83
94
|
def get_gist(gist_id, file)
|
84
95
|
gist = RestClient.get(gist_url(gist_id, file))
|
85
96
|
gist = gist.split("\n").reject do |part|
|
@@ -115,7 +126,7 @@ module Rack
|
|
115
126
|
end
|
116
127
|
|
117
128
|
def jquery_link
|
118
|
-
"<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.
|
129
|
+
"<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js'></script>\n"
|
119
130
|
end
|
120
131
|
|
121
132
|
def jquery_helper
|
@@ -124,13 +135,8 @@ module Rack
|
|
124
135
|
//<![CDATA[
|
125
136
|
$(document).ready(function() {
|
126
137
|
$('.rack-gist').each(function() {
|
127
|
-
var url = '/gist.github.com/' + $(this).attr('gist-id');
|
128
|
-
var file = false;
|
129
|
-
if (file = $(this).attr('rack-gist-file')) {
|
130
|
-
url += '/' + file;
|
131
|
-
}
|
132
138
|
$.ajax({
|
133
|
-
url: url
|
139
|
+
url: $(this).attr('rack-gist-url'),
|
134
140
|
dataType: 'script',
|
135
141
|
cache: true
|
136
142
|
});
|
data/rack-gist.gemspec
CHANGED
@@ -4,14 +4,14 @@
|
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
|
-
s.name =
|
8
|
-
s.version = "1.
|
7
|
+
s.name = "rack-gist"
|
8
|
+
s.version = "1.2.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Daniel Huckstep"]
|
12
|
-
s.date =
|
13
|
-
s.description =
|
14
|
-
s.email =
|
12
|
+
s.date = "2012-05-05"
|
13
|
+
s.description = "Load gists in the background. KTHXBYE!"
|
14
|
+
s.email = "darkhelmet@darkhelmetlive.com"
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"LICENSE",
|
17
17
|
"README.rdoc"
|
@@ -39,10 +39,10 @@ Gem::Specification.new do |s|
|
|
39
39
|
"spec/spec.opts",
|
40
40
|
"spec/spec_helper.rb"
|
41
41
|
]
|
42
|
-
s.homepage =
|
42
|
+
s.homepage = "http://github.com/darkhelmet/rack-gist"
|
43
43
|
s.require_paths = ["lib"]
|
44
|
-
s.rubygems_version =
|
45
|
-
s.summary =
|
44
|
+
s.rubygems_version = "1.8.18"
|
45
|
+
s.summary = "Asynchronous Github Gists. All with rack."
|
46
46
|
|
47
47
|
if s.respond_to? :specification_version then
|
48
48
|
s.specification_version = 3
|
data/spec/rack-gist_spec.rb
CHANGED
@@ -66,7 +66,7 @@ describe "Rack::Gist" do
|
|
66
66
|
status, headers, body = a.call(mock_env('/partial'))
|
67
67
|
status.should == 200
|
68
68
|
headers['Content-Type'].should == 'text/html'
|
69
|
-
pbody(body).should have_html_tag('p').with('id' => "rack-gist-#{@gist_id}", 'gist-id' => @gist_id, 'class' => 'rack-gist', 'rack-gist-file' => 'example.pig')
|
69
|
+
pbody(body).should have_html_tag('p').with('id' => "rack-gist-#{@gist_id}", 'gist-id' => @gist_id, 'class' => 'rack-gist', 'rack-gist-file' => 'example.pig', 'rack-gist-url' => '/gist.github.com/348301/example.pig.js')
|
70
70
|
end
|
71
71
|
end
|
72
72
|
|
@@ -115,6 +115,15 @@ describe "Rack::Gist" do
|
|
115
115
|
end
|
116
116
|
end
|
117
117
|
|
118
|
+
it "shouldn't include the jquery helper if told not to" do
|
119
|
+
middleware(:jquery => false, :helper => false).tap do |a|
|
120
|
+
status, headers, body = a.call(mock_env)
|
121
|
+
status.should == 200
|
122
|
+
headers['Content-Type'].should == 'text/html'
|
123
|
+
pbody(body).should_not have_html_tag('script').containing('CDATA')
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
118
127
|
it "shouldn't include the jquery helper if no gist is present" do
|
119
128
|
middleware.tap do |a|
|
120
129
|
status, headers, body = a.call(mock_env)
|
@@ -129,7 +138,7 @@ describe "Rack::Gist" do
|
|
129
138
|
status, headers, body = a.call(mock_env)
|
130
139
|
status.should == 200
|
131
140
|
headers['Content-Type'].should == 'text/html'
|
132
|
-
headers['Content-Length'].should == '
|
141
|
+
headers['Content-Length'].should == '992'
|
133
142
|
end
|
134
143
|
end
|
135
144
|
|
@@ -208,11 +217,11 @@ describe "Rack::Gist" do
|
|
208
217
|
end
|
209
218
|
end
|
210
219
|
|
211
|
-
it 'should be able to disable caching by setting http_cache_time to
|
212
|
-
middleware(:http_cache_time =>
|
220
|
+
it 'should be able to disable caching by setting http_cache_time to 0' do
|
221
|
+
middleware(:http_cache_time => 0).tap do |a|
|
213
222
|
status, headers, body = a.call(mock_env("/gist.github.com/#{@gist_id}/example.pig.js"))
|
214
223
|
headers['Vary'].should == 'Accept-Encoding'
|
215
|
-
headers['Cache-Control'].should
|
224
|
+
headers['Cache-Control'].should == "public, must-revalidate, max-age=0"
|
216
225
|
end
|
217
226
|
end
|
218
227
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-gist
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 31
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 1.
|
8
|
+
- 2
|
9
|
+
- 0
|
10
|
+
version: 1.2.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Daniel Huckstep
|
@@ -15,12 +15,13 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
19
|
-
default_executable:
|
18
|
+
date: 2012-05-05 00:00:00 Z
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
21
|
+
prerelease: false
|
22
|
+
name: nokogiri
|
22
23
|
type: :runtime
|
23
|
-
|
24
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
24
25
|
none: false
|
25
26
|
requirements:
|
26
27
|
- - ~>
|
@@ -30,12 +31,12 @@ dependencies:
|
|
30
31
|
- 1
|
31
32
|
- 4
|
32
33
|
version: "1.4"
|
33
|
-
|
34
|
-
name: nokogiri
|
35
|
-
prerelease: false
|
34
|
+
requirement: *id001
|
36
35
|
- !ruby/object:Gem::Dependency
|
36
|
+
prerelease: false
|
37
|
+
name: rest-client
|
37
38
|
type: :runtime
|
38
|
-
|
39
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
39
40
|
none: false
|
40
41
|
requirements:
|
41
42
|
- - ~>
|
@@ -45,12 +46,12 @@ dependencies:
|
|
45
46
|
- 1
|
46
47
|
- 6
|
47
48
|
version: "1.6"
|
48
|
-
|
49
|
-
name: rest-client
|
50
|
-
prerelease: false
|
49
|
+
requirement: *id002
|
51
50
|
- !ruby/object:Gem::Dependency
|
51
|
+
prerelease: false
|
52
|
+
name: jeweler
|
52
53
|
type: :development
|
53
|
-
|
54
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
54
55
|
none: false
|
55
56
|
requirements:
|
56
57
|
- - ~>
|
@@ -60,12 +61,12 @@ dependencies:
|
|
60
61
|
- 1
|
61
62
|
- 6
|
62
63
|
version: "1.6"
|
63
|
-
|
64
|
-
name: jeweler
|
65
|
-
prerelease: false
|
64
|
+
requirement: *id003
|
66
65
|
- !ruby/object:Gem::Dependency
|
66
|
+
prerelease: false
|
67
|
+
name: fakeweb
|
67
68
|
type: :development
|
68
|
-
|
69
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
69
70
|
none: false
|
70
71
|
requirements:
|
71
72
|
- - ~>
|
@@ -76,12 +77,12 @@ dependencies:
|
|
76
77
|
- 2
|
77
78
|
- 8
|
78
79
|
version: 1.2.8
|
79
|
-
|
80
|
-
name: fakeweb
|
81
|
-
prerelease: false
|
80
|
+
requirement: *id004
|
82
81
|
- !ruby/object:Gem::Dependency
|
82
|
+
prerelease: false
|
83
|
+
name: rspec
|
83
84
|
type: :development
|
84
|
-
|
85
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
85
86
|
none: false
|
86
87
|
requirements:
|
87
88
|
- - ~>
|
@@ -92,12 +93,12 @@ dependencies:
|
|
92
93
|
- 3
|
93
94
|
- 0
|
94
95
|
version: 1.3.0
|
95
|
-
|
96
|
-
name: rspec
|
97
|
-
prerelease: false
|
96
|
+
requirement: *id005
|
98
97
|
- !ruby/object:Gem::Dependency
|
98
|
+
prerelease: false
|
99
|
+
name: yard
|
99
100
|
type: :development
|
100
|
-
|
101
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
101
102
|
none: false
|
102
103
|
requirements:
|
103
104
|
- - ~>
|
@@ -108,12 +109,12 @@ dependencies:
|
|
108
109
|
- 5
|
109
110
|
- 8
|
110
111
|
version: 0.5.8
|
111
|
-
|
112
|
-
name: yard
|
113
|
-
prerelease: false
|
112
|
+
requirement: *id006
|
114
113
|
- !ruby/object:Gem::Dependency
|
114
|
+
prerelease: false
|
115
|
+
name: rack
|
115
116
|
type: :development
|
116
|
-
|
117
|
+
version_requirements: &id007 !ruby/object:Gem::Requirement
|
117
118
|
none: false
|
118
119
|
requirements:
|
119
120
|
- - ~>
|
@@ -124,12 +125,12 @@ dependencies:
|
|
124
125
|
- 2
|
125
126
|
- 1
|
126
127
|
version: 1.2.1
|
127
|
-
|
128
|
-
name: rack
|
129
|
-
prerelease: false
|
128
|
+
requirement: *id007
|
130
129
|
- !ruby/object:Gem::Dependency
|
130
|
+
prerelease: false
|
131
|
+
name: activesupport
|
131
132
|
type: :development
|
132
|
-
|
133
|
+
version_requirements: &id008 !ruby/object:Gem::Requirement
|
133
134
|
none: false
|
134
135
|
requirements:
|
135
136
|
- - ~>
|
@@ -140,9 +141,7 @@ dependencies:
|
|
140
141
|
- 3
|
141
142
|
- 8
|
142
143
|
version: 2.3.8
|
143
|
-
|
144
|
-
name: activesupport
|
145
|
-
prerelease: false
|
144
|
+
requirement: *id008
|
146
145
|
description: Load gists in the background. KTHXBYE!
|
147
146
|
email: darkhelmet@darkhelmetlive.com
|
148
147
|
executables: []
|
@@ -174,7 +173,6 @@ files:
|
|
174
173
|
- spec/rack-gist_spec.rb
|
175
174
|
- spec/spec.opts
|
176
175
|
- spec/spec_helper.rb
|
177
|
-
has_rdoc: true
|
178
176
|
homepage: http://github.com/darkhelmet/rack-gist
|
179
177
|
licenses: []
|
180
178
|
|
@@ -204,7 +202,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
204
202
|
requirements: []
|
205
203
|
|
206
204
|
rubyforge_project:
|
207
|
-
rubygems_version: 1.
|
205
|
+
rubygems_version: 1.8.18
|
208
206
|
signing_key:
|
209
207
|
specification_version: 3
|
210
208
|
summary: Asynchronous Github Gists. All with rack.
|