heroku-nav 0.1.0 → 0.1.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.
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: ""