sinatra-static-assets 1.0.2 → 1.0.3
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/lib/sinatra/static_assets.rb +35 -2
- data/sinatra-static-assets.gemspec +1 -1
- data/test/public/test.css +2 -0
- data/test/sinatra_app.rb +9 -4
- data/test/sinatra_baseapp.rb +0 -3
- data/test/sinatra_static_assets_test.rb +12 -0
- data/test/sinatra_static_assets_xhtml_test.rb +1 -0
- data/test/test_helper.rb +6 -0
- metadata +11 -9
@@ -3,6 +3,10 @@ require 'sinatra/base'
|
|
3
3
|
module Sinatra
|
4
4
|
module StaticAssets
|
5
5
|
module Helpers
|
6
|
+
|
7
|
+
@@asset_timestamps_cache = {}
|
8
|
+
@@asset_mutex ||= Mutex.new
|
9
|
+
|
6
10
|
# In HTML <link> and <img> tags have no end tag.
|
7
11
|
# In XHTML, on the contrary, these tags must be properly closed.
|
8
12
|
#
|
@@ -40,6 +44,35 @@ module Sinatra
|
|
40
44
|
def url_for(addr, absolute = false)
|
41
45
|
uri(addr, absolute == :full ? true : false, true)
|
42
46
|
end
|
47
|
+
|
48
|
+
def is_uri?(path)
|
49
|
+
path =~ %r{^[-a-z]+://|^cid:|^//}
|
50
|
+
end
|
51
|
+
|
52
|
+
def asset_url_for(source)
|
53
|
+
url = url_for(source)
|
54
|
+
return url if is_uri?(source)
|
55
|
+
|
56
|
+
timestamp = asset_timestamp(source)
|
57
|
+
url += "?#{timestamp}" unless timestamp.empty?
|
58
|
+
return url
|
59
|
+
end
|
60
|
+
|
61
|
+
def asset_timestamp(source)
|
62
|
+
if timestamp = @@asset_timestamps_cache[source]
|
63
|
+
return timestamp
|
64
|
+
else
|
65
|
+
path = asset_file_path(source)
|
66
|
+
timestamp = File.exists?(path) ? File.mtime(path).to_i.to_s : ''
|
67
|
+
@@asset_mutex.synchronize {
|
68
|
+
@@asset_timestamps_cache[source] = timestamp
|
69
|
+
}
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def asset_file_path(path)
|
74
|
+
File.join(settings.root, 'public', path)
|
75
|
+
end
|
43
76
|
|
44
77
|
def tag(name, local_options = {})
|
45
78
|
start_tag = "<#{name}#{tag_options(local_options) if local_options}"
|
@@ -63,12 +96,12 @@ module Sinatra
|
|
63
96
|
def stylesheet_tag(source, options = {})
|
64
97
|
tag("link", { :type => "text/css",
|
65
98
|
:charset => "utf-8", :media => "screen", :rel => "stylesheet",
|
66
|
-
:href =>
|
99
|
+
:href => asset_url_for(source) }.merge(options))
|
67
100
|
end
|
68
101
|
|
69
102
|
def javascript_tag(source, options = {})
|
70
103
|
tag("script", { :type => "text/javascript", :charset => "utf-8",
|
71
|
-
:src =>
|
104
|
+
:src => asset_url_for(source) }.merge(options)) do
|
72
105
|
end
|
73
106
|
end
|
74
107
|
|
data/test/sinatra_app.rb
CHANGED
@@ -1,6 +1,3 @@
|
|
1
|
-
path = File.expand_path("../lib" + File.dirname(__FILE__))
|
2
|
-
$:.unshift(path) unless $:.include?(path)
|
3
|
-
|
4
1
|
require 'rubygems'
|
5
2
|
|
6
3
|
require 'sinatra'
|
@@ -15,6 +12,14 @@ get "/url_for" do
|
|
15
12
|
EOD
|
16
13
|
end
|
17
14
|
|
15
|
+
get "/asset_url_for" do
|
16
|
+
content_type "text/plain"
|
17
|
+
<<"EOD"
|
18
|
+
#{asset_url_for("test.css")}
|
19
|
+
#{asset_url_for("http://example.org/test.css")}
|
20
|
+
EOD
|
21
|
+
end
|
22
|
+
|
18
23
|
get "/image_tag" do
|
19
24
|
content_type "text/plain"
|
20
25
|
<<"EOD"
|
@@ -25,7 +30,7 @@ end
|
|
25
30
|
get "/stylesheet_link_tag" do
|
26
31
|
content_type "text/plain"
|
27
32
|
<<"EOD"
|
28
|
-
#{stylesheet_link_tag("/stylesheets/winter.css", "/stylesheets/summer.css", :media => "projection")}
|
33
|
+
#{stylesheet_link_tag("/stylesheets/winter.css", "/stylesheets/summer.css", "test.css", :media => "projection")}
|
29
34
|
EOD
|
30
35
|
end
|
31
36
|
|
data/test/sinatra_baseapp.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
+
require './test/test_helper'
|
1
2
|
require './test/sinatra_app'
|
2
3
|
require 'test/unit'
|
3
4
|
require 'rack/test'
|
5
|
+
require 'sinatra/static_assets'
|
4
6
|
|
5
7
|
set :environment, :test
|
6
8
|
|
@@ -18,6 +20,15 @@ class SintraStaticAssetsTest < Test::Unit::TestCase
|
|
18
20
|
/bar/
|
19
21
|
/bar/foo
|
20
22
|
http://example.org/bar/foo
|
23
|
+
EOD
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_asset_url_for_returns_timestamp_only_on_existing_paths
|
27
|
+
get '/asset_url_for', {}, 'SCRIPT_NAME' => '/bar'
|
28
|
+
assert last_response.ok?
|
29
|
+
assert_equal last_response.body, <<EOD
|
30
|
+
/bar/test.css?#{asset_timestamp('test.css')}
|
31
|
+
http://example.org/test.css
|
21
32
|
EOD
|
22
33
|
end
|
23
34
|
|
@@ -35,6 +46,7 @@ EOD
|
|
35
46
|
assert_equal last_response.body, <<EOD
|
36
47
|
<link charset="utf-8" href="/bar/stylesheets/winter.css" media="projection" rel="stylesheet" type="text/css">
|
37
48
|
<link charset="utf-8" href="/bar/stylesheets/summer.css" media="projection" rel="stylesheet" type="text/css">
|
49
|
+
<link charset="utf-8" href="/bar/test.css?#{asset_timestamp('test.css')}" media="projection" rel="stylesheet" type="text/css">
|
38
50
|
EOD
|
39
51
|
end
|
40
52
|
|
data/test/test_helper.rb
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sinatra-static-assets
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-01
|
12
|
+
date: 2012-03-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sinatra
|
16
|
-
requirement: &
|
16
|
+
requirement: &16409220 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 1.1.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *16409220
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rack
|
27
|
-
requirement: &
|
27
|
+
requirement: &16408580 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *16408580
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rack-test
|
38
|
-
requirement: &
|
38
|
+
requirement: &16407840 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *16407840
|
47
47
|
description: ! "This Sinatra extensions provides following helper methods:\n -
|
48
48
|
image_tag\n - stylesheet_link_tag\n - javascript_script_tag"
|
49
49
|
email:
|
@@ -97,10 +97,12 @@ files:
|
|
97
97
|
- examples/winter/winter.rb
|
98
98
|
- lib/sinatra/static_assets.rb
|
99
99
|
- sinatra-static-assets.gemspec
|
100
|
+
- test/public/test.css
|
100
101
|
- test/sinatra_app.rb
|
101
102
|
- test/sinatra_baseapp.rb
|
102
103
|
- test/sinatra_static_assets_test.rb
|
103
104
|
- test/sinatra_static_assets_xhtml_test.rb
|
105
|
+
- test/test_helper.rb
|
104
106
|
homepage: ''
|
105
107
|
licenses: []
|
106
108
|
post_install_message:
|
@@ -121,7 +123,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
121
123
|
version: '0'
|
122
124
|
requirements: []
|
123
125
|
rubyforge_project: sinatra-static-assets
|
124
|
-
rubygems_version: 1.8.
|
126
|
+
rubygems_version: 1.8.15
|
125
127
|
signing_key:
|
126
128
|
specification_version: 3
|
127
129
|
summary: A Sinatra extension.
|