webby 0.9.0 → 0.9.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. data/History.txt +11 -0
  2. data/Manifest.txt +45 -2
  3. data/Rakefile +1 -2
  4. data/examples/webby/content/css/site.css +1 -1
  5. data/examples/webby/content/learn/index.txt +1 -1
  6. data/examples/webby/content/release-notes/index.txt +21 -0
  7. data/examples/webby/content/release-notes/rel-0-9-0/index.txt +1 -0
  8. data/examples/webby/content/release-notes/rel-0-9-1/index.txt +93 -0
  9. data/examples/webby/content/tips_and_tricks/index.txt +14 -13
  10. data/examples/webby/content/tutorial/index.txt +13 -9
  11. data/examples/webby/content/user-manual/index.txt +8 -8
  12. data/examples/webby/layouts/default.txt +1 -1
  13. data/lib/webby.rb +2 -1
  14. data/lib/webby/apps/main.rb +25 -13
  15. data/lib/webby/auto_builder.rb +2 -0
  16. data/lib/webby/builder.rb +2 -5
  17. data/lib/webby/filters.rb +5 -13
  18. data/lib/webby/renderer.rb +7 -5
  19. data/lib/webby/resources.rb +54 -14
  20. data/lib/webby/resources/db.rb +4 -4
  21. data/lib/webby/resources/layout.rb +14 -23
  22. data/lib/webby/resources/meta_file.rb +208 -0
  23. data/lib/webby/resources/page.rb +21 -58
  24. data/lib/webby/resources/partial.rb +10 -4
  25. data/lib/webby/resources/resource.rb +68 -27
  26. data/lib/webby/resources/static.rb +6 -22
  27. data/lib/webby/stelan/paginator.rb +17 -2
  28. data/spec/data/Sitefile +9 -0
  29. data/spec/data/content/_partial.txt +10 -0
  30. data/spec/data/content/css/coderay.css +111 -0
  31. data/spec/data/content/css/site.css +67 -0
  32. data/spec/data/content/css/tumblog.css +308 -0
  33. data/spec/data/content/images/tumblog/permalink.gif +0 -0
  34. data/spec/data/content/images/tumblog/rss.gif +0 -0
  35. data/spec/data/content/index.txt +19 -0
  36. data/spec/data/content/photos.txt +21 -0
  37. data/spec/data/content/tumblog/200806/the-noble-chicken/index.txt +12 -0
  38. data/spec/data/content/tumblog/200807/historical-perspectives-on-the-classic-chicken-joke/index.txt +12 -0
  39. data/spec/data/content/tumblog/200807/mad-city-chickens/index.txt +10 -0
  40. data/spec/data/content/tumblog/200807/the-wisdom-of-the-dutch/index.txt +11 -0
  41. data/spec/data/content/tumblog/200807/up-a-tree/index.txt +13 -0
  42. data/spec/data/content/tumblog/index.txt +37 -0
  43. data/spec/data/content/tumblog/rss.txt +37 -0
  44. data/spec/data/hooligans/bad_meta_data_1.txt +34 -0
  45. data/spec/data/hooligans/bad_meta_data_2.txt +34 -0
  46. data/spec/data/layouts/default.txt +58 -0
  47. data/spec/data/layouts/tumblog/default.txt +44 -0
  48. data/spec/data/layouts/tumblog/post.txt +15 -0
  49. data/spec/data/lib/breadcrumbs.rb +28 -0
  50. data/spec/data/lib/tumblog_helper.rb +32 -0
  51. data/spec/data/tasks/tumblog.rake +30 -0
  52. data/spec/data/templates/_partial.erb +10 -0
  53. data/spec/data/templates/atom_feed.erb +40 -0
  54. data/spec/data/templates/page.erb +18 -0
  55. data/spec/data/templates/presentation.erb +40 -0
  56. data/spec/data/templates/tumblog/conversation.erb +12 -0
  57. data/spec/data/templates/tumblog/link.erb +10 -0
  58. data/spec/data/templates/tumblog/photo.erb +13 -0
  59. data/spec/data/templates/tumblog/post.erb +12 -0
  60. data/spec/data/templates/tumblog/quote.erb +11 -0
  61. data/spec/spec_helper.rb +37 -0
  62. data/spec/webby/apps/generator_spec.rb +4 -0
  63. data/spec/webby/apps/main_spec.rb +16 -3
  64. data/spec/webby/filters/textile_spec.rb +20 -0
  65. data/spec/webby/renderer_spec.rb +139 -0
  66. data/spec/webby/resources/db_spec.rb +250 -0
  67. data/spec/webby/resources/layout_spec.rb +83 -0
  68. data/spec/webby/resources/meta_file_spec.rb +157 -0
  69. data/spec/webby/resources/page_spec.rb +111 -0
  70. data/spec/webby/resources/partial_spec.rb +58 -0
  71. data/spec/webby/resources/resource_spec.rb +214 -0
  72. data/spec/webby/resources/static_spec.rb +49 -0
  73. data/spec/webby/resources_spec.rb +55 -3
  74. metadata +64 -6
  75. data/lib/webby/resources/file.rb +0 -221
  76. data/spec/webby/resources/file_spec.rb +0 -104
@@ -0,0 +1,18 @@
1
+ ---
2
+ title: <%= title %>
3
+ created_at: <%= Time.now.to_y %>
4
+ filter:
5
+ - erb
6
+ - textile
7
+ ---
8
+ p(title). <%%= h(@page.title) %>
9
+
10
+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nunc congue ipsum vestibulum libero. Aenean vitae justo. Nam eget tellus. Etiam convallis, est eu lobortis mattis, lectus tellus tempus felis, a ultricies erat ipsum at metus.
11
+
12
+ h2. Litora Sociis
13
+
14
+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi et risus. Aliquam nisl. Nulla facilisi. Cras accumsan vestibulum ante. Vestibulum sed tortor. Praesent tempus fringilla elit. Ut elit diam, sagittis in, nonummy in, gravida non, nunc. Ut orci. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Nam egestas, orci eu imperdiet malesuada, nisl purus fringilla odio, quis commodo est orci vitae justo. Aliquam placerat odio tincidunt nulla. Cras in libero. Aenean rutrum, magna non tristique posuere, erat odio eleifend nisl, non convallis est tortor blandit ligula. Nulla id augue.
15
+
16
+ bq. Nullam mattis, odio ut tempus facilisis, metus nisl facilisis metus, auctor consectetuer felis ligula nec mauris. Vestibulum odio erat, fermentum at, commodo vitae, ultrices et, urna. Mauris vulputate, mi pulvinar sagittis condimentum, sem nulla aliquam velit, sed imperdiet mi purus eu magna. Nulla varius metus ut eros. Aenean aliquet magna eget orci. Class aptent taciti sociosqu ad litora.
17
+
18
+ Vivamus euismod. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Suspendisse vel nibh ut turpis dictum sagittis. Aliquam vel velit a elit auctor sollicitudin. Nam vel dui vel neque lacinia pretium. Quisque nunc erat, venenatis id, volutpat ut, scelerisque sed, diam. Mauris ante. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec mattis. Morbi dignissim sollicitudin libero. Nulla lorem.
@@ -0,0 +1,40 @@
1
+ ---
2
+ title: <%= title %>
3
+ created_at: <%= Time.now.to_y %>
4
+ author: You
5
+ company: Company
6
+ copyright: Creative Commons
7
+ filter:
8
+ - erb
9
+ - textile
10
+ - slides
11
+ layout: presentation
12
+ ---
13
+ h1. Presentation Title
14
+
15
+ Clever introductory text that will grab the audience's attention.
16
+
17
+
18
+ h1. Title of the First Slide
19
+
20
+ A little more build up before really getting into the meat of it.
21
+
22
+
23
+ h1. Title of the Second Slide
24
+
25
+ Finally, some code!
26
+
27
+ <%% uv :lang => 'ruby', :line_numbers => false do -%>
28
+ class EnglishMajor
29
+ def supercilious
30
+ 'behaving or looking as though one thinks one is superior to others'
31
+ end
32
+ end
33
+ <%% end -%>
34
+
35
+
36
+ h1. The Final Slide
37
+
38
+ And that about sums it up!
39
+
40
+ Thanks for visiting
@@ -0,0 +1,12 @@
1
+ ---
2
+ title: <%= title %>
3
+ created_at: <%= Time.now.to_y %>
4
+ author: Your Name
5
+ filter:
6
+ - textile
7
+ layout: tumblog/post
8
+ tumblog_type: conversation
9
+ ---
10
+ * %(label)me :% Why did the chicken cross the road?
11
+ * %(label)Buddha :% If you ask this question, you deny your own chicken nature.
12
+ * %(label)Darwin :% Chickens, over great periods of time, have been naturally selected in such a way that they are now genetically predisposed to cross roads.
@@ -0,0 +1,10 @@
1
+ ---
2
+ title: <%= title %>
3
+ created_at: <%= Time.now.to_y %>
4
+ author: Your Name
5
+ filter:
6
+ - textile
7
+ layout: tumblog/post
8
+ tumblog_type: link
9
+ ---
10
+ "(link)Raising chickens in Madison, WI":http://www.madcitychickens.com/
@@ -0,0 +1,13 @@
1
+ ---
2
+ title: <%= title %>
3
+ created_at: <%= Time.now.to_y %>
4
+ author: Your Name
5
+ filter:
6
+ - erb
7
+ - textile
8
+ layout: tumblog/post
9
+ tumblog_type: photo
10
+ ---
11
+ !http://www.madcitychickens.com/images/bttrcups_tree.jpg(<%%= h(@page.title) %>)!
12
+
13
+ p(caption). via "Mad City Chickens":http://www.madcitychickens.com/
@@ -0,0 +1,12 @@
1
+ ---
2
+ title: <%= title %>
3
+ created_at: <%= Time.now.to_y %>
4
+ author: Your Name
5
+ filter:
6
+ - textile
7
+ layout: tumblog/post
8
+ tumblog_type: regular
9
+ ---
10
+ The *chicken* (_Gallus gallus_, sometimes _G. gallus domesticus_) is a domesticated fowl likely descended from the wild Indian and southeast Asian Red Junglefowl (_Gallus gallus_) and the related Grey Junglefowl (_G. sonneratii_). Traditionally it has been widely accepted that the chicken was descended solely from the former, as hybrids of both wild types tended toward sterility; but recent genetic work has revealed that the genotype for yellow skin present in the domestic fowl is not present in what is otherwise its closest kin, the Red Junglefowl. It is deemed most likely, then, that the yellow skin trait in domestic birds originated in the Grey Junglefowl.
11
+
12
+ The chicken is one of the most common and widespread domestic animals. With a population of more than 24 billion in 2003, there are more chickens in the world than any other bird. Humans keep chickens primarily as a source of food, with both their meat and their eggs consumed.
@@ -0,0 +1,11 @@
1
+ ---
2
+ title: <%= title %>
3
+ created_at: <%= Time.now.to_y %>
4
+ author: Your Name
5
+ filter:
6
+ - textile
7
+ layout: tumblog/post
8
+ tumblog_type: quote
9
+ ---
10
+ <big>&#147;</big> You can't hatch chickens from fried eggs.
11
+ %(source)Dutch Proverb%
data/spec/spec_helper.rb CHANGED
@@ -5,10 +5,47 @@ WEBBY_SPEC_HELPER = true
5
5
 
6
6
  require 'rubygems'
7
7
  require 'fileutils'
8
+ require 'stringio'
8
9
 
9
10
  require File.expand_path(
10
11
  File.join(File.dirname(__FILE__), %w[.. lib webby]))
11
12
 
13
+ Spec::Runner.configure do |config|
14
+ config.before :all do
15
+ @pwd = Dir.pwd
16
+ Dir.chdir Webby.datapath
17
+ FileUtils.mkdir_p Webby.datapath(::Webby.site.output_dir)
18
+ end
19
+
20
+ config.after :all do
21
+ FileUtils.rm_rf(Webby.datapath(::Webby.cairn))
22
+ FileUtils.rm_rf(Dir.glob(Webby.datapath %w[output *]))
23
+ Dir.chdir @pwd
24
+ end
25
+
26
+ # == Mock Framework
27
+ #
28
+ # RSpec uses it's own mocking framework by default. If you prefer to
29
+ # use mocha, flexmock or RR, uncomment the appropriate line:
30
+ #
31
+ # config.mock_with :mocha
32
+ # config.mock_with :flexmock
33
+ # config.mock_with :rr
34
+ end
35
+
36
+ module Webby
37
+ DATAPATH = ::Webby.path(%w[spec data])
38
+ def self.datapath( *args )
39
+ args.empty? ? DATAPATH : ::File.join(DATAPATH, args.flatten)
40
+ end
41
+ end
42
+
43
+ $webby_log_output = StringIO.new
44
+
45
+ logger = Logging::Logger['Webby']
46
+ logger.clear_appenders
47
+ logger.add_appenders(Logging::Appenders::IO.new('stringio', $webby_log_output))
48
+
12
49
  end # unless defined?
13
50
 
14
51
  # EOF
@@ -93,6 +93,10 @@ describe Webby::Apps::Generator do
93
93
  end
94
94
 
95
95
  it "should exit if a site is not specified" do
96
+ # we need to force an error by changing directories back to the top
97
+ # level so we no longer have a Sitefile in the current directory
98
+ Dir.chdir @pwd
99
+
96
100
  lambda{@generator.parse %w[website]}.
97
101
  should raise_error(SystemExit, 'exit')
98
102
  @strio.to_s.split("\n").first.
@@ -55,11 +55,24 @@ describe Webby::Apps::Main do
55
55
  args.page.should == "foo/bar/10-percent-inspiration-and-90-percent-perspiration"
56
56
  end
57
57
 
58
- # TODO: Is this desired behavior?
59
58
  it "should set the title by joining the raw args, getting the basename, and titlecasing" do
60
- page = "foo/bar/this-is-a-page.txt"
59
+ page = "foo/bar/this is a page.txt"
60
+ args = @main.capture_command_line_args([page])
61
+ args.title.should == "This Is a Page"
62
+ end
63
+
64
+ it "should preserve any page extensions" do
65
+ page = "foo/bar/this is a page.txt"
66
+ args = @main.capture_command_line_args([page])
67
+ args.page.should == "foo/bar/this-is-a-page.txt"
68
+
69
+ page = "This is another page.haml"
70
+ args = @main.capture_command_line_args([page])
71
+ args.page.should == "this-is-another-page.haml"
72
+
73
+ page = "one/more/for the road"
61
74
  args = @main.capture_command_line_args([page])
62
- args.title.should == "This-Is-a-Page"
75
+ args.page.should == "one/more/for-the-road"
63
76
  end
64
77
  end
65
78
 
@@ -0,0 +1,20 @@
1
+
2
+ require ::File.expand_path(
3
+ ::File.join(::File.dirname(__FILE__), %w[.. .. spec_helper]))
4
+
5
+ # ---------------------------------------------------------------------------
6
+ describe 'Webby::Filters::Textile' do
7
+
8
+ it 'should regsiter the textile filter handler' do
9
+ Webby::Filters._handlers['textile'].should_not be_nil
10
+ end
11
+
12
+ it 'processes textile markup into HTML' do
13
+ input = "p(foo). this is a paragraph of text"
14
+ output = Webby::Filters._handlers['textile'].call(input)
15
+
16
+ output.should == %q{<p class="foo">this is a paragraph of text</p>}
17
+ end
18
+ end
19
+
20
+ # EOF
@@ -0,0 +1,139 @@
1
+
2
+ require File.expand_path(
3
+ File.join(File.dirname(__FILE__), %w[.. spec_helper]))
4
+
5
+ # ---------------------------------------------------------------------------
6
+ describe Webby::Renderer do
7
+ before :each do
8
+ layout = Webby::Resources::Layout.
9
+ new(Webby.datapath %w[layouts tumblog default.txt])
10
+ Webby::Resources.stub!(:find_layout).and_return(layout)
11
+
12
+ @filename = File.join %w[content tumblog index.txt]
13
+ @page = Webby::Resources::Page.new(@filename)
14
+ @renderer = Webby::Renderer.new(@page)
15
+ end
16
+
17
+ it 'needs some more specs'
18
+
19
+ # -------------------------------------------------------------------------
20
+ describe 'when paginating' do
21
+ after :each do
22
+ ::Webby.site.create_mode = 'page'
23
+ end
24
+
25
+ it 'paginates a set of items' do
26
+ items = %w[one two three four five six seven eight]
27
+ output = []
28
+
29
+ @renderer.instance_variable_get(:@pager).should be_nil
30
+
31
+ # the first page of items
32
+ @renderer.paginate(items, 3) {|item| output << item}
33
+ pager = @renderer.instance_variable_get(:@pager)
34
+
35
+ pager.should_not be_nil
36
+ pager.number_of_pages.should == 3
37
+ pager.prev?.should == false
38
+ pager.next?.should == true
39
+
40
+ output.should == %w[one two three]
41
+ @page.destination.should == 'output/tumblog/index.html'
42
+
43
+ # go to the next page of items
44
+ @renderer._next_page.should == true
45
+ output.should == %w[one two three]
46
+
47
+ pager = @renderer.instance_variable_get(:@pager)
48
+ pager.should_not be_nil
49
+ pager.number_of_pages.should == 3
50
+ pager.prev?.should == true
51
+ pager.next?.should == true
52
+
53
+ @page.destination.should == 'output/tumblog/index2.html'
54
+
55
+ @renderer.paginate(items, 3) {|item| output << item}
56
+ output.should == %w[one two three four five six]
57
+
58
+ # go to the last page of items
59
+ @renderer._next_page.should == true
60
+ output.should == %w[one two three four five six]
61
+
62
+ pager = @renderer.instance_variable_get(:@pager)
63
+ pager.should_not be_nil
64
+ pager.number_of_pages.should == 3
65
+ pager.prev?.should == true
66
+ pager.next?.should == false
67
+
68
+ @page.destination.should == 'output/tumblog/index3.html'
69
+
70
+ @renderer.paginate(items, 3) {|item| output << item}
71
+ output.should == %w[one two three four five six seven eight]
72
+
73
+ # after the last page
74
+ @renderer._next_page.should == false
75
+ pager = @renderer.instance_variable_get(:@pager)
76
+ pager.should be_nil
77
+ @page.destination.should == 'output/tumblog/index.html'
78
+ end
79
+
80
+ it 'obeys the create_mode of the site' do
81
+ ::Webby.site.create_mode = 'directory'
82
+ items = %w[one two three four five six seven eight]
83
+ output = []
84
+
85
+ @renderer.instance_variable_get(:@pager).should be_nil
86
+
87
+ # the first page of items
88
+ @renderer.paginate(items, 3) {|item| output << item}
89
+ pager = @renderer.instance_variable_get(:@pager)
90
+
91
+ pager.should_not be_nil
92
+ pager.number_of_pages.should == 3
93
+ pager.prev?.should == false
94
+ pager.next?.should == true
95
+
96
+ output.should == %w[one two three]
97
+ @page.destination.should == 'output/tumblog/index.html'
98
+
99
+ # go to the next page of items
100
+ @renderer._next_page.should == true
101
+ output.should == %w[one two three]
102
+
103
+ pager = @renderer.instance_variable_get(:@pager)
104
+ pager.should_not be_nil
105
+ pager.number_of_pages.should == 3
106
+ pager.prev?.should == true
107
+ pager.next?.should == true
108
+
109
+ @page.destination.should == 'output/tumblog/2/index.html'
110
+
111
+ @renderer.paginate(items, 3) {|item| output << item}
112
+ output.should == %w[one two three four five six]
113
+
114
+ # go to the last page of items
115
+ @renderer._next_page.should == true
116
+ output.should == %w[one two three four five six]
117
+
118
+ pager = @renderer.instance_variable_get(:@pager)
119
+ pager.should_not be_nil
120
+ pager.number_of_pages.should == 3
121
+ pager.prev?.should == true
122
+ pager.next?.should == false
123
+
124
+ @page.destination.should == 'output/tumblog/3/index.html'
125
+
126
+ @renderer.paginate(items, 3) {|item| output << item}
127
+ output.should == %w[one two three four five six seven eight]
128
+
129
+ # after the last page
130
+ @renderer._next_page.should == false
131
+ pager = @renderer.instance_variable_get(:@pager)
132
+ pager.should be_nil
133
+ @page.destination.should == 'output/tumblog/index.html'
134
+ end
135
+ end
136
+
137
+ end # describe Webby::Renderer
138
+
139
+ # EOF
@@ -0,0 +1,250 @@
1
+
2
+ require File.expand_path(
3
+ File.join(File.dirname(__FILE__), %w[.. .. spec_helper]))
4
+
5
+ # -------------------------------------------------------------------------
6
+ describe Webby::Resources::DB do
7
+
8
+ before :each do
9
+ layout = Webby::Resources::Layout.
10
+ new(Webby.datapath %w[layouts tumblog default.txt])
11
+ Webby::Resources.stub!(:find_layout).and_return(layout)
12
+
13
+ @db = Webby::Resources::DB.new
14
+ Dir.glob('content/tumblog/**/*').each do |fn|
15
+ next unless test(?f, fn)
16
+ @db.add Webby::Resources::Page.new(fn)
17
+ end
18
+ @db_hash = @db.instance_variable_get(:@db)
19
+ end
20
+
21
+ it 'stores resources by directory' do
22
+ @db_hash.keys.sort.should == %w[
23
+ tumblog
24
+ tumblog/200806/the-noble-chicken
25
+ tumblog/200807/historical-perspectives-on-the-classic-chicken-joke
26
+ tumblog/200807/mad-city-chickens
27
+ tumblog/200807/the-wisdom-of-the-dutch
28
+ tumblog/200807/up-a-tree
29
+ ]
30
+ @db_hash['tumblog'].length.should == 2
31
+ @db_hash['tumblog/200807/up-a-tree'].length.should == 1
32
+ @db_hash['tumblog/200807/up-a-tree'].first.filename.should == 'index'
33
+ end
34
+
35
+ it 'replaces resources when adding' do
36
+ ary = @db_hash['tumblog/200806/the-noble-chicken']
37
+ page = ary.first
38
+
39
+ @db.add Webby::Resources::Page.
40
+ new('content/tumblog/200806/the-noble-chicken/index.txt')
41
+
42
+ ary.first.should_not equal(page)
43
+ ary.first.path.should == page.path
44
+ end
45
+
46
+ it 'clears the stored resources' do
47
+ @db_hash.should_not be_empty
48
+ @db.clear
49
+ @db_hash.should be_empty
50
+ end
51
+
52
+ it 'iterates over the resources in order' do
53
+ ary = []
54
+ @db.each {|page| ary << page.url}
55
+ ary.should == %w[
56
+ /tumblog
57
+ /tumblog/rss.xml
58
+ /tumblog/200806/the-noble-chicken
59
+ /tumblog/200807/historical-perspectives-on-the-classic-chicken-joke
60
+ /tumblog/200807/mad-city-chickens
61
+ /tumblog/200807/the-wisdom-of-the-dutch
62
+ /tumblog/200807/up-a-tree
63
+ ]
64
+ end
65
+
66
+ it 'returns the parent of a resource' do
67
+ page = Webby::Resources::Page.new('content/tumblog/index.txt')
68
+ parent = @db.parent_of(page)
69
+ (parent == nil).should == true
70
+
71
+ page = Webby::Resources::Page.new('content/tumblog/rss.txt')
72
+ parent = @db.parent_of(page)
73
+ parent.url.should == '/tumblog'
74
+
75
+ page = Webby::Resources::Page.new('content/tumblog/200807/up-a-tree/index.txt')
76
+ parent = @db.parent_of(page)
77
+ parent.url.should == '/tumblog'
78
+ end
79
+
80
+ it 'returns the siblings of a resource' do
81
+ page = Webby::Resources::Page.new('content/tumblog/index.txt')
82
+ siblings = @db.siblings(page)
83
+
84
+ siblings.length.should == 1
85
+ siblings.first.path.should == 'content/tumblog/rss.txt'
86
+
87
+ page = Webby::Resources::Page.new('content/tumblog/200806/the-noble-chicken/index.txt')
88
+ siblings = @db.siblings(page)
89
+ siblings.should be_empty
90
+ end
91
+
92
+ # -----------------------------------------------------------------------
93
+ describe '.children' do
94
+ it 'returns the children of a resource' do
95
+ page = Webby::Resources::Page.new('content/tumblog/index.txt')
96
+ children = @db.children(page)
97
+
98
+ children.length.should == 5
99
+ children.map {|page| page.url}.sort.should == %w[
100
+ /tumblog/200806/the-noble-chicken
101
+ /tumblog/200807/historical-perspectives-on-the-classic-chicken-joke
102
+ /tumblog/200807/mad-city-chickens
103
+ /tumblog/200807/the-wisdom-of-the-dutch
104
+ /tumblog/200807/up-a-tree
105
+ ]
106
+ end
107
+
108
+ it 'returns them in the specified sort order' do
109
+ page = Webby::Resources::Page.new('content/tumblog/index.txt')
110
+ children = @db.children(page, :sort_by => :url)
111
+
112
+ children.length.should == 5
113
+ children.map {|page| page.url}.should == %w[
114
+ /tumblog/200806/the-noble-chicken
115
+ /tumblog/200807/historical-perspectives-on-the-classic-chicken-joke
116
+ /tumblog/200807/mad-city-chickens
117
+ /tumblog/200807/the-wisdom-of-the-dutch
118
+ /tumblog/200807/up-a-tree
119
+ ]
120
+ end
121
+
122
+ it 'returns them in the reversed sort order' do
123
+ page = Webby::Resources::Page.new('content/tumblog/index.txt')
124
+ children = @db.children(page, :sort_by => :url, :reverse => true)
125
+
126
+ children.length.should == 5
127
+ children.map {|page| page.url}.should == %w[
128
+ /tumblog/200806/the-noble-chicken
129
+ /tumblog/200807/historical-perspectives-on-the-classic-chicken-joke
130
+ /tumblog/200807/mad-city-chickens
131
+ /tumblog/200807/the-wisdom-of-the-dutch
132
+ /tumblog/200807/up-a-tree
133
+ ].reverse
134
+ end
135
+ end
136
+
137
+ # -----------------------------------------------------------------------
138
+ describe '.find' do
139
+ it 'returns the first page if no options are given' do
140
+ page = @db.each {|p| break p}
141
+ @db.find.path.should == page.path
142
+ end
143
+
144
+ it 'returns all pages' do
145
+ ary = []
146
+ @db.each {|p| ary << p.path}
147
+
148
+ pages = @db.find(:all)
149
+ pages.map! {|p| p.path}
150
+ pages.should == ary
151
+
152
+ pages = @db.find(:limit => :all)
153
+ pages.map! {|p| p.path}
154
+ pages.should == ary
155
+
156
+ pages = @db.find('all')
157
+ pages.map! {|p| p.path}
158
+ pages.should == ary
159
+ end
160
+
161
+ it 'returns a limited number of pages' do
162
+ ary = []
163
+ @db.each {|p| ary << p.path}
164
+ ary = ary.slice(0,3)
165
+
166
+ pages = @db.find(3)
167
+ pages.map! {|p| p.path}
168
+ pages.should == ary
169
+
170
+ pages = @db.find(:limit => 3)
171
+ pages.map! {|p| p.path}
172
+ pages.should == ary
173
+ end
174
+
175
+ it 'can sorty by a given meta-data field' do
176
+ pages = @db.find(:all, :sort_by => 'title')
177
+ pages.map! {|p| p.title}
178
+ pages.should == [
179
+ 'A Mother Clucker',
180
+ 'A Mother Clucker',
181
+ 'Historical Perspectives on the Classic Chicken Joke',
182
+ 'Mad City Chickens',
183
+ 'The Noble Chicken',
184
+ 'The Wisdom of the Dutch',
185
+ 'Up a Tree'
186
+ ]
187
+
188
+ pages = @db.find(:all, :sort_by => 'tumblog_type')
189
+ pages.map! {|p| p.tumblog_type}
190
+ pages.should == %w[conversation link photo quote regular]
191
+ end
192
+
193
+ it 'can reverse the sort order' do
194
+ pages = @db.find(:all, :sort_by => 'tumblog_type', :reverse => true)
195
+ pages.map! {|p| p.tumblog_type}
196
+ pages.should == %w[conversation link photo quote regular].reverse
197
+
198
+ pages = @db.find(3, :sort_by => 'tumblog_type', :reverse => true)
199
+ pages.map! {|p| p.tumblog_type}
200
+ pages.should == %w[regular quote photo]
201
+ end
202
+
203
+ it 'can search is a specific directory' do
204
+ pages = @db.find('all', :in_directory => 'tumblog')
205
+ pages.map! {|p| p.path}
206
+ pages.should == %w[
207
+ content/tumblog/index.txt
208
+ content/tumblog/rss.txt
209
+ ]
210
+ end
211
+
212
+ it 'can recurse into directories' do
213
+ pages = @db.find('all', :in_directory => 'tumblog/200807', :recursive => true)
214
+ pages.map! {|p| p.title}
215
+ pages.should == [
216
+ 'The Wisdom of the Dutch',
217
+ 'Mad City Chickens',
218
+ 'Historical Perspectives on the Classic Chicken Joke',
219
+ 'Up a Tree'
220
+ ]
221
+ end
222
+
223
+ it 'can combine all these options' do
224
+ pages = @db.find(:limit => 2,
225
+ :in_directory => 'tumblog/200807', :recursive => true,
226
+ :sort_by => 'title', :reverse => true,
227
+ :author => 'Tim Pease')
228
+ pages.map! {|p| p.title}
229
+ pages.should == [
230
+ 'Up a Tree',
231
+ 'Mad City Chickens'
232
+ ]
233
+ end
234
+
235
+ it 'can find pages using a user supplied search block' do
236
+ pages = @db.find(:all, :sort_by => 'title') do |page|
237
+ %w[quote conversation photo].include? page.tumblog_type
238
+ end
239
+ pages.map! {|p| p.title}
240
+ pages.should == [
241
+ 'Historical Perspectives on the Classic Chicken Joke',
242
+ 'The Wisdom of the Dutch',
243
+ 'Up a Tree'
244
+ ]
245
+ end
246
+ end
247
+
248
+ end # describe Webby::Resources::DB
249
+
250
+ # EOF