heroku-nav 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -21,7 +21,7 @@ begin
21
21
  gemspec.add_dependency(%q<rest-client>, ["~> 1.2.0"])
22
22
  gemspec.add_dependency(%q<json>, [">= 0"])
23
23
 
24
- gemspec.version = '0.1.0'
24
+ gemspec.version = '0.1.1'
25
25
  end
26
26
  rescue LoadError
27
27
  puts "Jeweler not available. Install it with: gem install jeweler"
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{heroku-nav}
8
- s.version = "0.1.0"
8
+ s.version = "0.1.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Todd Matthews", "Pedro Belo"]
12
- s.date = %q{2010-02-24}
12
+ s.date = %q{2010-02-25}
13
13
  s.description = %q{}
14
14
  s.email = %q{pedro@heroku.com}
15
15
  s.files = [
@@ -24,7 +24,7 @@ Gem::Specification.new do |s|
24
24
  s.homepage = %q{http://heroku.com}
25
25
  s.rdoc_options = ["--charset=UTF-8"]
26
26
  s.require_paths = ["lib"]
27
- s.rubygems_version = %q{1.3.5}
27
+ s.rubygems_version = %q{1.3.6}
28
28
  s.summary = %q{}
29
29
  s.test_files = [
30
30
  "spec/api_spec.rb",
@@ -4,21 +4,26 @@ require 'json'
4
4
  module Heroku
5
5
  module Nav
6
6
  class Base
7
- def initialize(app)
8
- @app = app
7
+ def initialize(app, options={})
8
+ @app = app
9
+ if @except = options[:except]
10
+ @except = [@except] unless @except.is_a?(Array)
11
+ end
9
12
  refresh
10
13
  end
11
14
 
12
15
  def call(env)
13
16
  @status, @headers, @body = @app.call(env)
14
- insert! if can_insert?
17
+ insert! if can_insert?(env)
15
18
  [@status, @headers, @body]
16
19
  end
17
20
 
18
- def can_insert?
19
- return unless @headers['Content-Type'] == 'text/html'
20
- return unless @body.respond_to?(:[])
21
- return unless @body[0] =~ /<body.*?>/i
21
+ def can_insert?(env)
22
+ return unless @headers['Content-Type'] =~ /text\/html/ || (@body.respond_to?(:headers) && @body.headers['Content-Type'] =~ /text\/html/)
23
+ @body_accessor = [:first, :body].detect { |m| @body.respond_to?(m) }
24
+ return unless @body_accessor
25
+ return unless @body.send(@body_accessor) =~ /<body.*?>/i
26
+ return if @except && @except.any? { |route| env['PATH_INFO'] =~ route }
22
27
  true
23
28
  end
24
29
 
@@ -50,17 +55,17 @@ module Heroku
50
55
 
51
56
  class Header < Base
52
57
  def insert!
53
- @body[0].gsub!(/(<head>)/i, "\\1<style type=\"text/css\">#{@css}</style>") if @css
54
- @body[0].gsub!(/(<body.*?>\s*(<div .*?class=["'].*?container.*?["'].*?>)?)/i, "\\1#{@html}") if @html
55
- @headers['Content-Length'] = @body[0].size.to_s
58
+ @body.send(@body_accessor).gsub!(/(<head>)/i, "\\1<style type=\"text/css\">#{@css}</style>") if @css
59
+ @body.send(@body_accessor).gsub!(/(<body.*?>\s*(<div .*?class=["'].*?container.*?["'].*?>)?)/i, "\\1#{@html}") if @html
60
+ @headers['Content-Length'] = @body.send(@body_accessor).size.to_s
56
61
  end
57
62
  end
58
63
 
59
64
  class Footer < Base
60
65
  def insert!
61
- @body[0].gsub!(/(<head>)/i, "\\1<style type=\"text/css\">#{@css}</style>") if @css
62
- @body[0].gsub!(/(<\/body>)/i, "#{@html}\\1") if @html
63
- @headers['Content-Length'] = @body[0].size.to_s
66
+ @body.send(@body_accessor).gsub!(/(<head>)/i, "\\1<style type=\"text/css\">#{@css}</style>") if @css
67
+ @body.send(@body_accessor).gsub!(/(<\/body>)/i, "#{@html}\\1") if @html
68
+ @headers['Content-Length'] = @body.send(@body_accessor).size.to_s
64
69
  end
65
70
  end
66
71
  end
@@ -41,6 +41,17 @@ describe Heroku::Nav::Header do
41
41
  get '/', :body => '<html><head>... <body>'
42
42
  last_response.body.should.equal '<html><head><style type="text/css">#header</style>... <body><!-- header -->'
43
43
  end
44
+
45
+ describe "excluding paths" do
46
+ def app
47
+ make_app { use Heroku::Nav::Header, :except => [/x/, /alt/] }
48
+ end
49
+
50
+ it "respects the :except option" do
51
+ get '/alternate', :body => '<html><body>hi'
52
+ last_response.body.should.equal '<html><body>hi'
53
+ end
54
+ end
44
55
  end
45
56
 
46
57
  describe Heroku::Nav::Footer do
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: heroku-nav
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 1
9
+ version: 0.1.1
5
10
  platform: ruby
6
11
  authors:
7
12
  - Todd Matthews
@@ -10,59 +15,71 @@ autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
17
 
13
- date: 2010-02-24 00:00:00 -08:00
18
+ date: 2010-02-25 00:00:00 -08:00
14
19
  default_executable:
15
20
  dependencies:
16
21
  - !ruby/object:Gem::Dependency
17
22
  name: baconmocha
18
- type: :development
19
- version_requirement:
20
- version_requirements: !ruby/object:Gem::Requirement
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
21
25
  requirements:
22
26
  - - ">="
23
27
  - !ruby/object:Gem::Version
28
+ segments:
29
+ - 0
24
30
  version: "0"
25
- version:
31
+ type: :development
32
+ version_requirements: *id001
26
33
  - !ruby/object:Gem::Dependency
27
34
  name: sinatra
28
- type: :development
29
- version_requirement:
30
- version_requirements: !ruby/object:Gem::Requirement
35
+ prerelease: false
36
+ requirement: &id002 !ruby/object:Gem::Requirement
31
37
  requirements:
32
38
  - - ">="
33
39
  - !ruby/object:Gem::Version
40
+ segments:
41
+ - 0
34
42
  version: "0"
35
- version:
43
+ type: :development
44
+ version_requirements: *id002
36
45
  - !ruby/object:Gem::Dependency
37
46
  name: rack-test
38
- type: :development
39
- version_requirement:
40
- version_requirements: !ruby/object:Gem::Requirement
47
+ prerelease: false
48
+ requirement: &id003 !ruby/object:Gem::Requirement
41
49
  requirements:
42
50
  - - ">="
43
51
  - !ruby/object:Gem::Version
52
+ segments:
53
+ - 0
44
54
  version: "0"
45
- version:
55
+ type: :development
56
+ version_requirements: *id003
46
57
  - !ruby/object:Gem::Dependency
47
58
  name: rest-client
48
- type: :runtime
49
- version_requirement:
50
- version_requirements: !ruby/object:Gem::Requirement
59
+ prerelease: false
60
+ requirement: &id004 !ruby/object:Gem::Requirement
51
61
  requirements:
52
62
  - - ~>
53
63
  - !ruby/object:Gem::Version
64
+ segments:
65
+ - 1
66
+ - 2
67
+ - 0
54
68
  version: 1.2.0
55
- version:
69
+ type: :runtime
70
+ version_requirements: *id004
56
71
  - !ruby/object:Gem::Dependency
57
72
  name: json
58
- type: :runtime
59
- version_requirement:
60
- version_requirements: !ruby/object:Gem::Requirement
73
+ prerelease: false
74
+ requirement: &id005 !ruby/object:Gem::Requirement
61
75
  requirements:
62
76
  - - ">="
63
77
  - !ruby/object:Gem::Version
78
+ segments:
79
+ - 0
64
80
  version: "0"
65
- version:
81
+ type: :runtime
82
+ version_requirements: *id005
66
83
  description: ""
67
84
  email: pedro@heroku.com
68
85
  executables: []
@@ -92,18 +109,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
92
109
  requirements:
93
110
  - - ">="
94
111
  - !ruby/object:Gem::Version
112
+ segments:
113
+ - 0
95
114
  version: "0"
96
- version:
97
115
  required_rubygems_version: !ruby/object:Gem::Requirement
98
116
  requirements:
99
117
  - - ">="
100
118
  - !ruby/object:Gem::Version
119
+ segments:
120
+ - 0
101
121
  version: "0"
102
- version:
103
122
  requirements: []
104
123
 
105
124
  rubyforge_project:
106
- rubygems_version: 1.3.5
125
+ rubygems_version: 1.3.6
107
126
  signing_key:
108
127
  specification_version: 3
109
128
  summary: ""