heroku-nav 0.1.18 → 0.1.19

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/README.md ADDED
@@ -0,0 +1,31 @@
1
+ Heroku Nav
2
+ ==========
3
+
4
+ This is a Ruby gem providing a Rack middleware to help Heroku add-on providers
5
+ displaying a customized header for users coming from a single sign-on session.
6
+
7
+
8
+ ## Usage ######################################################################
9
+
10
+ Use it just like any Rack middleware:
11
+
12
+ require 'heroku/nav'
13
+ use Heroku::Nav::Provider
14
+
15
+ That will fetch the latest header from our API and insert it as the first
16
+ element inside the body tag when the cookie "heroku-nav-data" is defined.
17
+
18
+ For Rails apps, add it to your Gemfile:
19
+
20
+ gem 'heroku-nav', :require => 'heroku/nav'
21
+
22
+ And add the middleware like:
23
+
24
+ config.middleware.use Heroku::Nav::Provider
25
+
26
+
27
+ ## Meta #######################################################################
28
+
29
+ Maintained by Pedro Belo, contributions by Todd Matthews and David Dollar.
30
+
31
+ Released under the MIT license. http://github.com/heroku/heroku-nav
data/Rakefile CHANGED
@@ -21,7 +21,7 @@ begin
21
21
  gemspec.add_dependency(%q<rest-client>, [">= 1.0"])
22
22
  gemspec.add_dependency(%q<json>, [">= 0"])
23
23
 
24
- gemspec.version = '0.1.18'
24
+ gemspec.version = '0.1.19'
25
25
  end
26
26
  rescue LoadError
27
27
  puts "Jeweler not available. Install it with: gem install jeweler"
data/heroku-nav.gemspec CHANGED
@@ -5,15 +5,19 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{heroku-nav}
8
- s.version = "0.1.18"
8
+ s.version = "0.1.19"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["David Dollar", "Pedro Belo", "Todd Matthews"]
12
- s.date = %q{2010-09-10}
12
+ s.date = %q{2010-10-21}
13
13
  s.description = %q{}
14
14
  s.email = ["david@heroku.com", "pedro@heroku.com", "todd@heroku.com"]
15
+ s.extra_rdoc_files = [
16
+ "README.md"
17
+ ]
15
18
  s.files = [
16
19
  ".gitignore",
20
+ "README.md",
17
21
  "Rakefile",
18
22
  "heroku-nav.gemspec",
19
23
  "lib/heroku/nav.rb",
data/lib/heroku/nav.rb CHANGED
@@ -8,7 +8,8 @@ module Heroku
8
8
  def initialize(app, options={})
9
9
  @app = app
10
10
  @options = options
11
- @options[:except] = [@options[:except]] unless @options[:except].is_a?(Array)
11
+ @options[:only] = [@options[:only]].compact unless @options[:only].is_a?(Array)
12
+ @options[:except] = [@options[:except]].compact unless @options[:except].is_a?(Array)
12
13
  @options[:status] ||= [200]
13
14
  refresh
14
15
  end
@@ -24,10 +25,23 @@ module Heroku
24
25
  def can_insert?(env)
25
26
  return unless @options[:status].include?(@status)
26
27
  return unless @headers['Content-Type'] =~ /text\/html/
27
- return if @options[:except].any? { |route| env['PATH_INFO'] =~ route }
28
+ return if !@options[:only].empty? && !@options[:only].any? { |route| match_route(route, env['PATH_INFO']) }
29
+ return if @options[:except].any? { |route| match_route(route, env['PATH_INFO']) }
28
30
  true
29
31
  end
30
32
 
33
+ def match_route(route, path)
34
+ return unless route
35
+ case route.class.name
36
+ when 'Regexp'
37
+ path =~ route
38
+ when 'String'
39
+ path.chomp('/') == route.chomp('/')
40
+ else
41
+ raise "Don't know how to match the route: #{route} (#{route.class.name})"
42
+ end
43
+ end
44
+
31
45
  def refresh
32
46
  @nav = self.class.fetch
33
47
  end
data/spec/nav_spec.rb CHANGED
@@ -65,6 +65,17 @@ describe Heroku::Nav::Header do
65
65
  last_response.body.should.not =~ /<!-- header -->/
66
66
  end
67
67
  end
68
+
69
+ describe "only including certain paths" do
70
+ def app
71
+ make_app { use Heroku::Nav::Header, :only => /x/ }
72
+ end
73
+
74
+ it "respects the :only option" do
75
+ get '/alternate', :body => '<html><body>hi'
76
+ last_response.body.should.not =~ /<!-- header -->/
77
+ end
78
+ end
68
79
  end
69
80
 
70
81
  describe Heroku::Nav::Footer do
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 18
9
- version: 0.1.18
8
+ - 19
9
+ version: 0.1.19
10
10
  platform: ruby
11
11
  authors:
12
12
  - David Dollar
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2010-09-10 00:00:00 -07:00
19
+ date: 2010-10-21 00:00:00 -07:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
@@ -89,10 +89,11 @@ executables: []
89
89
 
90
90
  extensions: []
91
91
 
92
- extra_rdoc_files: []
93
-
92
+ extra_rdoc_files:
93
+ - README.md
94
94
  files:
95
95
  - .gitignore
96
+ - README.md
96
97
  - Rakefile
97
98
  - heroku-nav.gemspec
98
99
  - lib/heroku/nav.rb