rack-typekit 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source :rubygems
2
+
3
+ # Specify your gem's dependencies in rack-typekit.gemspec
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,23 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ rack-typekit (0.2.0)
5
+ rack (>= 1.2.0, <= 2.0.0)
6
+
7
+ GEM
8
+ remote: http://rubygems.org/
9
+ specs:
10
+ minitest (2.11.4)
11
+ rack (1.4.1)
12
+ rack-test (0.6.1)
13
+ rack (>= 1.0)
14
+ rake (0.9.2)
15
+
16
+ PLATFORMS
17
+ ruby
18
+
19
+ DEPENDENCIES
20
+ minitest (~> 2.11.4)
21
+ rack-test (~> 0.6.1)
22
+ rack-typekit!
23
+ rake (~> 0.9.2)
data/README.md ADDED
@@ -0,0 +1,22 @@
1
+ # rack-typekit
2
+
3
+ Rack middleware to automatically include your Typekit JavaScript files
4
+
5
+ ## Example
6
+
7
+ ```ruby
8
+ require "rack/typekit"
9
+
10
+ use Rack::Typekit, :kit => "lng5bpe"
11
+ ```
12
+
13
+ Including this in the `config.ru` file of your Rack application will automatically inject the corresponding JavaScript into the `<head>` of your HTML:
14
+
15
+ ```html
16
+ <script src="//use.typekit.com/lng5bpe.js"></script>
17
+ <script>try{Typekit.load();}catch(e){}</script>
18
+ ```
19
+
20
+ ## License
21
+
22
+ rack-typekit is available under the MIT license. See the LICENSE file for more info.
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ require "bundler"
2
+ Bundler.setup
3
+
4
+ gemspec = eval(File.read("rack-typekit.gemspec"))
5
+
6
+ task :build => "#{gemspec.full_name}.gem"
7
+
8
+ file "#{gemspec.full_name}.gem" => gemspec.files + ["rack-typekit.gemspec"] do
9
+ system "gem build rack-typekit.gemspec"
10
+ system "gem install rack-typekit-#{Rack::Typekit::VERSION}.gem"
11
+ end
data/lib/rack/typekit.rb CHANGED
@@ -1,36 +1,35 @@
1
- require 'rack'
2
-
3
1
  module Rack #:nodoc:
4
2
  class Typekit
5
-
6
- VERSION = "0.1.0"
3
+
4
+ VERSION = "0.2.0"
7
5
 
8
6
  def initialize(app, options = {})
9
- raise ArgumentError, "Typekit Kit ID Required" unless options[:kit] and !options[:kit].empty?
7
+ raise ArgumentError, "Typekit Kit ID Required" unless options[:kit] &&
8
+ !options[:kit].empty?
10
9
  @app, @options = app, options
11
10
  end
12
11
 
13
- def call(env); dup._call(env); end
14
-
15
- def _call(env)
12
+ def call(env)
16
13
  @status, @headers, @response = @app.call(env)
17
14
  return [@status, @headers, @response] unless html?
18
15
  response = Rack::Response.new([], @status, @headers)
19
- @response.each { |fragment| response.write inject(fragment) }
16
+ if @response.respond_to?(:to_ary)
17
+ @response.each { |fragment| response.write inject_typekit(fragment) }
18
+ end
20
19
  response.finish
21
20
  end
22
21
 
23
- private
22
+ private
24
23
 
25
- def html?; @headers['Content-Type'] =~ /html/; end
24
+ def html?; @headers["Content-Type"] =~ /html/; end
26
25
 
27
- def inject(response)
26
+ def inject_typekit(response)
28
27
  script = <<-EOF
29
- <script type="text/javascript" src="http://use.typekit.com/#{@options[:kit]}.js"></script>
30
- <script type="text/javascript">try{Typekit.load();}catch(e){}</script>
28
+ <script src="//use.typekit.com/#{@options[:kit]}.js"></script>
29
+ <script>try{Typekit.load();}catch(e){}</script>
31
30
  EOF
32
31
 
33
32
  response.gsub(%r{</head>}, script + "</head>")
34
33
  end
35
34
  end
36
- end
35
+ end
@@ -0,0 +1,25 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "rack/typekit"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "rack-typekit"
7
+ s.authors = ["Mattt Thompson"]
8
+ s.email = "m@mattt.me"
9
+ s.homepage = "http://github.com/mattt/rack-typekit"
10
+ s.version = Rack::Typekit::VERSION
11
+ s.platform = Gem::Platform::RUBY
12
+ s.summary = "rack-typekit"
13
+ s.description = "Rack middleware to automatically include your Typekit JavaScript files"
14
+
15
+ s.add_runtime_dependency "rack", ">= 1.2.0", "<= 2.0.0"
16
+
17
+ s.add_development_dependency "minitest", "~> 2.11.4"
18
+ s.add_development_dependency "rack-test", "~> 0.6.1"
19
+ s.add_development_dependency "rake", "~> 0.9.2"
20
+
21
+ s.files = Dir["./**/*"].reject { |file| file =~ /\.\/(bin|log|pkg|script|spec|test|vendor)/ }
22
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
23
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
24
+ s.require_paths = ["lib"]
25
+ end
@@ -0,0 +1,10 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Rack::Typekit Test</title>
5
+ </head>
6
+ <body>
7
+ <h1>Rack::Typekit</h1>
8
+ <p>Test file.</p>
9
+ </body>
10
+ </html>
@@ -0,0 +1,44 @@
1
+ require "minitest/autorun"
2
+ require "minitest/pride"
3
+ require "rack"
4
+ require "rack/lint"
5
+ require "rack/mock"
6
+ require "rack/typekit"
7
+
8
+ describe Rack::Typekit do
9
+ let(:html_file) do
10
+ File.read(File.expand_path("../fixtures/test.html", __FILE__))
11
+ end
12
+ let(:html_app) { proc{[200,{"Content-Type"=>"text/html"},[html_file]]} }
13
+ let(:text_app) { proc{[200,{"Content-Type"=>"text/plain"},["FOO"]]} }
14
+ let(:typekit_html) { Rack::Typekit.new(html_app, :kit => "123") }
15
+ let(:typekit_text) { Rack::Typekit.new(text_app, :kit => "123") }
16
+
17
+ it { proc{ Rack::Typekit.new(nil) }.must_raise(ArgumentError) }
18
+
19
+ it { typekit_html.must_be_kind_of(Rack::Typekit) }
20
+ it { typekit_text.must_be_kind_of(Rack::Typekit) }
21
+
22
+ describe "script injection" do
23
+ describe "html" do
24
+ let(:request) { Rack::MockRequest.new(Rack::Lint.new(typekit_html)) }
25
+ let(:response) { request.get("/") }
26
+
27
+ it { response.status.must_equal 200 }
28
+ it { response.body.must_match %(<script src="//use.typekit.com/123.js"></script>) }
29
+ it { response.body.must_match "<script>try{Typekit.load();}catch(e){}</script>" }
30
+ it { response.body.must_match "<title>Rack::Typekit Test</title>" }
31
+ it { response.body.must_match "<p>Test file.</p>" }
32
+ end
33
+
34
+ describe "text" do
35
+ let(:request) { Rack::MockRequest.new(Rack::Lint.new(typekit_text)) }
36
+ let(:response) { request.get("/") }
37
+
38
+ it { response.status.must_equal 200 }
39
+ it { response.body.wont_match %(<script src="//use.typekit.com/123.js"></script>) }
40
+ it { response.body.wont_match "<script>try{Typekit.load();}catch(e){}</script>" }
41
+ it { response.body.must_match "FOO" }
42
+ end
43
+ end
44
+ end
metadata CHANGED
@@ -1,69 +1,108 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: rack-typekit
3
- version: !ruby/object:Gem::Version
4
- hash: 27
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 1
9
- - 0
10
- version: 0.1.0
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Mattt Thompson
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-09-19 00:00:00 Z
19
- dependencies: []
20
-
12
+ date: 2012-04-09 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rack
16
+ requirement: &70315536822540 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 1.2.0
22
+ - - <=
23
+ - !ruby/object:Gem::Version
24
+ version: 2.0.0
25
+ type: :runtime
26
+ prerelease: false
27
+ version_requirements: *70315536822540
28
+ - !ruby/object:Gem::Dependency
29
+ name: minitest
30
+ requirement: &70315536820060 !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ~>
34
+ - !ruby/object:Gem::Version
35
+ version: 2.11.4
36
+ type: :development
37
+ prerelease: false
38
+ version_requirements: *70315536820060
39
+ - !ruby/object:Gem::Dependency
40
+ name: rack-test
41
+ requirement: &70315536818780 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: 0.6.1
47
+ type: :development
48
+ prerelease: false
49
+ version_requirements: *70315536818780
50
+ - !ruby/object:Gem::Dependency
51
+ name: rake
52
+ requirement: &70315536814060 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ~>
56
+ - !ruby/object:Gem::Version
57
+ version: 0.9.2
58
+ type: :development
59
+ prerelease: false
60
+ version_requirements: *70315536814060
21
61
  description: Rack middleware to automatically include your Typekit JavaScript files
22
62
  email: m@mattt.me
23
63
  executables: []
24
-
25
64
  extensions: []
26
-
27
65
  extra_rdoc_files: []
28
-
29
- files:
30
- - lib/rack/typekit.rb
31
- - LICENSE
32
- - README.rdoc
66
+ files:
67
+ - ./Gemfile
68
+ - ./Gemfile.lock
69
+ - ./lib/rack/typekit.rb
70
+ - ./LICENSE
71
+ - ./rack-typekit.gemspec
72
+ - ./Rakefile
73
+ - ./README.md
74
+ - spec/fixtures/test.html
75
+ - spec/rack_typekit_spec.rb
33
76
  homepage: http://github.com/mattt/rack-typekit
34
77
  licenses: []
35
-
36
78
  post_install_message:
37
79
  rdoc_options: []
38
-
39
- require_paths:
80
+ require_paths:
40
81
  - lib
41
- required_ruby_version: !ruby/object:Gem::Requirement
82
+ required_ruby_version: !ruby/object:Gem::Requirement
42
83
  none: false
43
- requirements:
44
- - - ">="
45
- - !ruby/object:Gem::Version
46
- hash: 3
47
- segments:
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ segments:
48
89
  - 0
49
- version: "0"
50
- required_rubygems_version: !ruby/object:Gem::Requirement
90
+ hash: 2753315264514289189
91
+ required_rubygems_version: !ruby/object:Gem::Requirement
51
92
  none: false
52
- requirements:
53
- - - ">="
54
- - !ruby/object:Gem::Version
55
- hash: 23
56
- segments:
57
- - 1
58
- - 3
59
- - 6
60
- version: 1.3.6
93
+ requirements:
94
+ - - ! '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ segments:
98
+ - 0
99
+ hash: 2753315264514289189
61
100
  requirements: []
62
-
63
101
  rubyforge_project:
64
- rubygems_version: 1.8.10
102
+ rubygems_version: 1.8.15
65
103
  signing_key:
66
104
  specification_version: 3
67
105
  summary: rack-typekit
68
- test_files: []
69
-
106
+ test_files:
107
+ - spec/fixtures/test.html
108
+ - spec/rack_typekit_spec.rb
data/README.rdoc DELETED
@@ -1,22 +0,0 @@
1
- = rack-typekit
2
-
3
- Rack middleware to automatically include your Typekit JavaScript files
4
-
5
- == Example
6
-
7
- require 'rack/typekit'
8
-
9
- use Rack::TypeKit, :kit => 'lng5bpe'
10
-
11
- Including this in the <tt>config.ru</tt> file of your Rack application will automatically inject the corresponding JavaScript into the <tt><head></tt> of your HTML:
12
-
13
- <script src="http://use.typekit.com/lng5bpe.js" type="text/javascript"></script><script type="text/javascript">
14
- //<![CDATA[
15
- try{Typekit.load();}catch(e){}
16
- //]]>
17
- </script>
18
- <script type="text/javascript">
19
-
20
- == License
21
-
22
- rack-typekit is available under the MIT license. See the LICENSE file for more info.