History

Make :skip_links option apply to pages instead of individual links

Thibaut committed 12 years ago

Commit 47eb7ee1 parent 6c8eea17 files · +59 −43Browse files

Unified · Split

7 files
  1. lib/docs/filters/core/internal_urls.rb +5 −5
  2. lib/docs/scrapers/backbone.rb +1 −1
  3. lib/docs/scrapers/coffeescript.rb +1 −1
  4. lib/docs/scrapers/less.rb +1 −1
  5. lib/docs/scrapers/lodash.rb +1 −1
  6. lib/docs/scrapers/underscore.rb +1 −1
  7. test/lib/docs/filters/core/internal_urls_test.rb +49 −33
lib/docs/filters/core/internal_urls.rb+5−5
@@ -3,10 +3,10 @@ require 'set' · 2 unmodified lines
33 module Docs
44 class InternalUrlsFilter < Filter
55 def call
6+ return doc if skip_links?
67 internal_urls = Set.new if follow_links?
78
89 css('a').each do |link|
9− next if skip_link?(link)
1010 next unless url = parse_href(link['href'])
1111 next unless subpath = subpath_to(url)
1212
@@ -24,12 +24,12 @@ module Docs · 11 unmodified lines
2424 doc
2525 end
2626
27− def follow_links?
28− !(context[:follow_links] && context[:follow_links].call(self) == false)
27+ def skip_links?
28+ context[:skip_links] && context[:skip_links].call(self)
2929 end
3030
31− def skip_link?(link)
32− context[:skip_links] && context[:skip_links].call(link)
31+ def follow_links?
32+ !(context[:follow_links] && context[:follow_links].call(self) == false)
3333 end
3434
3535 def parse_href(str)
lib/docs/scrapers/backbone.rb+1−1
@@ -10,7 +10,7 @@ module Docs · 9 unmodified lines
1010
1111 options[:title] = 'Backbone.js'
1212 options[:container] = '.container'
13− options[:skip_links] = -> (_) { true }
13+ options[:skip_links] = ->(filter) { true }
1414
1515 options[:attribution] = <<-HTML
1616 &copy; 2010&ndash;2013 Jeremy Ashkenas, DocumentCloud<br>
lib/docs/scrapers/coffeescript.rb+1−1
@@ -9,7 +9,7 @@ module Docs · 8 unmodified lines
99
1010 options[:title] = 'CoffeeScript'
1111 options[:container] = '.container'
12− options[:skip_links] = -> (_) { true }
12+ options[:skip_links] = ->(filter) { true }
1313
1414 options[:attribution] = <<-HTML
1515 &copy; 2009&ndash;2013 Jeremy Ashkenas<br>
lib/docs/scrapers/less.rb+1−1
@@ -8,7 +8,7 @@ module Docs · 7 unmodified lines
88
99 options[:title] = 'LESS'
1010 options[:container] = 'section'
11− options[:skip_links] = -> (_) { true }
11+ options[:skip_links] = ->(filter) { true }
1212
1313 options[:attribution] = <<-HTML
1414 &copy; 2009&ndash;2013 Alexis Sellier &amp; The Core Less Team<br>
lib/docs/scrapers/lodash.rb+1−1
@@ -10,7 +10,7 @@ module Docs · 9 unmodified lines
1010
1111 options[:title] = 'Lo-Dash'
1212 options[:container] = 'h1+div+div'
13− options[:skip_links] = -> (_) { true }
13+ options[:skip_links] = ->(filter) { true }
1414
1515 options[:attribution] = <<-HTML
1616 &copy; 2012&ndash;2013 The Dojo Foundation<br>
lib/docs/scrapers/underscore.rb+1−1
@@ -10,7 +10,7 @@ module Docs · 9 unmodified lines
1010
1111 options[:title] = 'Underscore.js'
1212 options[:container] = '#documentation'
13− options[:skip_links] = -> (_) { true }
13+ options[:skip_links] = ->(filter) { true }
1414
1515 options[:attribution] = <<-HTML
1616 &copy; 2009&ndash;2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters &amp; Editors<br>
test/lib/docs/filters/core/internal_urls_test.rb+49−33
@@ -5,16 +5,15 @@ class InternalUrlsFilterTest < MiniTest::Spec · 4 unmodified lines
55 include FilterTestHelper
66 self.filter_class = Docs::InternalUrlsFilter
77
8− describe ":internal_urls" do
9− before do
10− context[:base_url] = context[:root_url] = 'http://example.com/dir'
11− context[:url] = 'http://example.com/dir'
12− end
8+ before do
9+ context[:base_url] = context[:root_url] = context[:url] = 'http://example.com/dir'
10+ end
1311
14− let :internal_urls do
15− filter_result[:internal_urls]
16− end
12+ let :internal_urls do
13+ filter_result[:internal_urls]
14+ end
1715
16+ describe ":internal_urls" do
1817 it "is an array" do
1918 assert_instance_of Array, internal_urls
2019 end
@@ -135,31 +134,6 @@ class InternalUrlsFilterTest < MiniTest::Spec · 114 unmodified lines
135134 end
136135 end
137136
138− context "when context[:skip_links] is a block" do
139− let :block do
140− context[:skip_links] = Proc.new {}
141− end
142−
143− it "passes all links to the block" do
144− @body = link_to 'http://example.com'
145− context[:skip_links] = ->(arg) { @arg = arg }
146− internal_urls
147− assert_equal @body, @arg.to_s
148− end
149−
150− it "doesn't include urls from links where the block returns true" do
151− @body = link_to 'http://example.com/dir/path'
152− context[:skip_links] = ->(_) { true }
153− assert_empty internal_urls
154− end
155−
156− it "includes urls from links where the block returns false" do
157− @body = link_to 'http://example.com/dir/path'
158− context[:skip_links] = ->(_) { false }
159− assert_equal 1, internal_urls.length
160− end
161− end
162−
163137 context "when context[:follow_links] is a block" do
164138 before do
165139 @body = link_to context[:url]
@@ -305,4 +279,46 @@ class InternalUrlsFilterTest < MiniTest::Spec · 139 unmodified lines
305279 end
306280 end
307281 end
282+
283+ context "context[:skip_links]" do
284+ before do
285+ @body = link_to context[:url]
286+ end
287+
288+ context "when it is a block" do
289+ it "calls the block with the filter instance" do
290+ context[:skip_links] = ->(arg) { @arg = arg; nil }
291+ filter.call
292+ assert_equal filter, @arg
293+ end
294+
295+ context "and the block returns true" do
296+ before do
297+ context[:skip_links] = ->(_) { true }
298+ end
299+
300+ it "doesn't set :internal_urls" do
301+ refute internal_urls
302+ end
303+
304+ it "doesn't replace urls" do
305+ assert_equal @body, filter_output_string
306+ end
307+ end
308+
309+ context "and the block returns false" do
310+ before do
311+ context[:skip_links] = ->(_) { false }
312+ end
313+
314+ it "set :internal_urls" do
315+ assert internal_urls
316+ end
317+
318+ it "replaces urls" do
319+ refute_equal @body, filter_output_string
320+ end
321+ end
322+ end
323+ end
308324 end