rack-fonts 0.1

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.
Binary file
Binary file
@@ -0,0 +1,4 @@
1
+ /* sample css asset */
2
+ body {
3
+ color: green;
4
+ }
@@ -0,0 +1,2 @@
1
+ // sample js file
2
+ alert('all green!');
@@ -0,0 +1,146 @@
1
+ require './test/test_helper'
2
+ require 'rack/mock'
3
+
4
+ class RackFontsTest < MiniTest::Unit::TestCase
5
+
6
+ # test original app responds unaltered
7
+
8
+ def test_the_original_app_responds_unaltered_headers
9
+ @res = request.get('/')
10
+ assert_status 200
11
+ assert_equal 2, @res.headers.keys.size
12
+ assert_h 'Content-Type', 'text/html'
13
+ assert_h 'Content-Length', '11'
14
+ end
15
+
16
+ def test_original_app_responds_unaltered_content
17
+ @res = request.get('/')
18
+ assert_equal 'Hello World', @res.body
19
+ end
20
+
21
+ # testing content types
22
+
23
+ def test_css_file
24
+ @res = request.get('/assets/sample.css')
25
+ assert_status 200
26
+ assert_h 'Content-Type', 'text/css'
27
+ assert_equal asset_file_content('sample.css'), @res.body
28
+ end
29
+
30
+ def test_js_file
31
+ @res = request.get('/assets/sample.js')
32
+ assert_status 200
33
+ assert_h 'Content-Type', 'application/javascript'
34
+ assert_equal asset_file_content('sample.js'), @res.body
35
+ end
36
+
37
+ def test_ttf_file
38
+ @res = request.get('/assets/Forum.ttf')
39
+ assert_status 200
40
+ assert_h 'Content-Type', 'font/truetype'
41
+ assert_equal asset_file_content('Forum.ttf'), @res.body
42
+ end
43
+
44
+ def test_otf_file
45
+ @res = request.get('/assets/Forum.otf')
46
+ assert_status 200
47
+ assert_h 'Content-Type', 'font/opentype'
48
+ assert_equal asset_file_content('Forum.otf'), @res.body
49
+ end
50
+
51
+ def test_woff_file
52
+ @res = request.get('/assets/Forum.woff')
53
+ assert_status 200
54
+ assert_h 'Content-Type', 'font/woff'
55
+ assert_equal asset_file_content('Forum.woff'), @res.body
56
+ end
57
+
58
+ def test_eot_file
59
+ @res = request.get('/assets/Forum.eot')
60
+ assert_status 200
61
+ assert_h 'Content-Type', 'application/vnd.ms-fontobject'
62
+ assert_equal asset_file_content('Forum.eot'), @res.body
63
+ end
64
+
65
+ def test_svg_file
66
+ @res = request.get('/assets/Forum.svg')
67
+ assert_status 200
68
+ assert_h 'Content-Type', 'image/svg+xml'
69
+ assert_equal asset_file_content('Forum.svg'), @res.body
70
+ end
71
+
72
+ def test_wildcard_access_control_allow_origin
73
+ @res = request.get('/assets/Forum.svg')
74
+ assert_status 200
75
+ assert_h 'Access-Control-Allow-Origin', '*'
76
+ end
77
+
78
+ def test_cache_control_lasts_a_year
79
+ @res = request.get('/assets/Forum.svg')
80
+ assert_status 200
81
+ assert_h 'Cache-Control', 'public, max-age=31536000'
82
+ end
83
+
84
+ def test_expires_in_a_year
85
+ @res = request.get('/assets/Forum.svg')
86
+ assert_status 200
87
+ assert_h 'Expires', (Time.now + 31536000).httpdate
88
+ end
89
+
90
+ def test_allows_customizing_cache_time
91
+ custom_cache_time = 3600
92
+ web_app = lambda { |env| [ 200, {}, ["Hello World"] ] }
93
+ app = Rack::Fonts.new(web_app, :urls => %w[/], :root => assets_dir, :cache_time => custom_cache_time)
94
+ request = Rack::MockRequest.new(app)
95
+ res = request.get('/Forum.svg')
96
+
97
+ assert_equal 200, res.status
98
+ assert_equal((Time.now + custom_cache_time).httpdate, res.headers['Expires'])
99
+ assert_equal "public, max-age=#{custom_cache_time}", res.headers['Cache-Control']
100
+ end
101
+
102
+ # helpers
103
+
104
+ def assert_h(header, expected)
105
+ error_msg = "Response header #{header} returns #{@res[header]}, but should be #{expected}"
106
+ assert_equal expected, @res.headers[header], error_msg
107
+ end
108
+
109
+ def assert_status(expected)
110
+ assert_equal expected, @res.status
111
+ end
112
+
113
+ def inspect(obj)
114
+ require 'yaml'
115
+ puts obj.to_yaml
116
+ end
117
+
118
+ def asset_file_content(filename)
119
+ path = File.join(assets_dir, filename)
120
+ open(path, "rb") {|io| io.read }
121
+ end
122
+
123
+ def assets_dir
124
+ File.join tests_dir, 'assets'
125
+ end
126
+
127
+ def tests_dir
128
+ File.dirname(File.expand_path(__FILE__))
129
+ end
130
+
131
+ def request(options = {})
132
+ web_app = lambda do |env|
133
+ [
134
+ 200,
135
+ {
136
+ 'Content-Type' => 'text/html',
137
+ 'Content-Length' => '11'
138
+ },
139
+ ["Hello World"]
140
+ ]
141
+ end
142
+ app = Rack::Fonts.new(web_app, {:urls => ['/assets'], :root => tests_dir})
143
+ request = Rack::MockRequest.new(app)
144
+ end
145
+
146
+ end
@@ -0,0 +1,3 @@
1
+ require 'rubygems'
2
+ require 'minitest/autorun'
3
+ require './lib/rack-fonts'
metadata ADDED
@@ -0,0 +1,123 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rack-fonts
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ version: "0.1"
9
+ platform: ruby
10
+ authors:
11
+ - Raul Murciano
12
+ autorequire:
13
+ bindir: bin
14
+ cert_chain: []
15
+
16
+ date: 2011-07-09 00:00:00 -07:00
17
+ default_executable:
18
+ dependencies:
19
+ - !ruby/object:Gem::Dependency
20
+ name: rack
21
+ prerelease: false
22
+ requirement: &id001 !ruby/object:Gem::Requirement
23
+ none: false
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 1
29
+ - 2
30
+ - 3
31
+ version: 1.2.3
32
+ type: :runtime
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: minitest
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ">"
41
+ - !ruby/object:Gem::Version
42
+ segments:
43
+ - 2
44
+ - 0
45
+ version: "2.0"
46
+ type: :development
47
+ version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: rack-test
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ segments:
57
+ - 0
58
+ - 6
59
+ - 0
60
+ version: 0.6.0
61
+ type: :development
62
+ version_requirements: *id003
63
+ description: Wraps Rack::Static by adding useful headers to serve web fonts.
64
+ email:
65
+ - raul@murciano.net
66
+ executables: []
67
+
68
+ extensions: []
69
+
70
+ extra_rdoc_files: []
71
+
72
+ files:
73
+ - lib/rack-fonts.rb
74
+ - test/assets/Forum-Font-License-OFL.txt
75
+ - test/assets/Forum.eot
76
+ - test/assets/Forum.otf
77
+ - test/assets/Forum.svg
78
+ - test/assets/Forum.ttf
79
+ - test/assets/Forum.woff
80
+ - test/assets/sample.css
81
+ - test/assets/sample.js
82
+ - test/rack-fonts_test.rb
83
+ - test/test_helper.rb
84
+ - examples/config.ru
85
+ - Changelog.md
86
+ - Gemfile
87
+ - LICENSE
88
+ - RakeFile
89
+ - README.md
90
+ has_rdoc: true
91
+ homepage: http://github.com/raul/rack-assets
92
+ licenses: []
93
+
94
+ post_install_message:
95
+ rdoc_options: []
96
+
97
+ require_paths:
98
+ - lib
99
+ required_ruby_version: !ruby/object:Gem::Requirement
100
+ none: false
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ segments:
105
+ - 0
106
+ version: "0"
107
+ required_rubygems_version: !ruby/object:Gem::Requirement
108
+ none: false
109
+ requirements:
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ segments:
113
+ - 0
114
+ version: "0"
115
+ requirements: []
116
+
117
+ rubyforge_project: rack-fonts
118
+ rubygems_version: 1.3.7
119
+ signing_key:
120
+ specification_version: 3
121
+ summary: Rack middleware to serve static files, with special love to web fonts.
122
+ test_files: []
123
+