webby 0.9.0 → 0.9.1
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +11 -0
- data/Manifest.txt +45 -2
- data/Rakefile +1 -2
- data/examples/webby/content/css/site.css +1 -1
- data/examples/webby/content/learn/index.txt +1 -1
- data/examples/webby/content/release-notes/index.txt +21 -0
- data/examples/webby/content/release-notes/rel-0-9-0/index.txt +1 -0
- data/examples/webby/content/release-notes/rel-0-9-1/index.txt +93 -0
- data/examples/webby/content/tips_and_tricks/index.txt +14 -13
- data/examples/webby/content/tutorial/index.txt +13 -9
- data/examples/webby/content/user-manual/index.txt +8 -8
- data/examples/webby/layouts/default.txt +1 -1
- data/lib/webby.rb +2 -1
- data/lib/webby/apps/main.rb +25 -13
- data/lib/webby/auto_builder.rb +2 -0
- data/lib/webby/builder.rb +2 -5
- data/lib/webby/filters.rb +5 -13
- data/lib/webby/renderer.rb +7 -5
- data/lib/webby/resources.rb +54 -14
- data/lib/webby/resources/db.rb +4 -4
- data/lib/webby/resources/layout.rb +14 -23
- data/lib/webby/resources/meta_file.rb +208 -0
- data/lib/webby/resources/page.rb +21 -58
- data/lib/webby/resources/partial.rb +10 -4
- data/lib/webby/resources/resource.rb +68 -27
- data/lib/webby/resources/static.rb +6 -22
- data/lib/webby/stelan/paginator.rb +17 -2
- data/spec/data/Sitefile +9 -0
- data/spec/data/content/_partial.txt +10 -0
- data/spec/data/content/css/coderay.css +111 -0
- data/spec/data/content/css/site.css +67 -0
- data/spec/data/content/css/tumblog.css +308 -0
- data/spec/data/content/images/tumblog/permalink.gif +0 -0
- data/spec/data/content/images/tumblog/rss.gif +0 -0
- data/spec/data/content/index.txt +19 -0
- data/spec/data/content/photos.txt +21 -0
- data/spec/data/content/tumblog/200806/the-noble-chicken/index.txt +12 -0
- data/spec/data/content/tumblog/200807/historical-perspectives-on-the-classic-chicken-joke/index.txt +12 -0
- data/spec/data/content/tumblog/200807/mad-city-chickens/index.txt +10 -0
- data/spec/data/content/tumblog/200807/the-wisdom-of-the-dutch/index.txt +11 -0
- data/spec/data/content/tumblog/200807/up-a-tree/index.txt +13 -0
- data/spec/data/content/tumblog/index.txt +37 -0
- data/spec/data/content/tumblog/rss.txt +37 -0
- data/spec/data/hooligans/bad_meta_data_1.txt +34 -0
- data/spec/data/hooligans/bad_meta_data_2.txt +34 -0
- data/spec/data/layouts/default.txt +58 -0
- data/spec/data/layouts/tumblog/default.txt +44 -0
- data/spec/data/layouts/tumblog/post.txt +15 -0
- data/spec/data/lib/breadcrumbs.rb +28 -0
- data/spec/data/lib/tumblog_helper.rb +32 -0
- data/spec/data/tasks/tumblog.rake +30 -0
- data/spec/data/templates/_partial.erb +10 -0
- data/spec/data/templates/atom_feed.erb +40 -0
- data/spec/data/templates/page.erb +18 -0
- data/spec/data/templates/presentation.erb +40 -0
- data/spec/data/templates/tumblog/conversation.erb +12 -0
- data/spec/data/templates/tumblog/link.erb +10 -0
- data/spec/data/templates/tumblog/photo.erb +13 -0
- data/spec/data/templates/tumblog/post.erb +12 -0
- data/spec/data/templates/tumblog/quote.erb +11 -0
- data/spec/spec_helper.rb +37 -0
- data/spec/webby/apps/generator_spec.rb +4 -0
- data/spec/webby/apps/main_spec.rb +16 -3
- data/spec/webby/filters/textile_spec.rb +20 -0
- data/spec/webby/renderer_spec.rb +139 -0
- data/spec/webby/resources/db_spec.rb +250 -0
- data/spec/webby/resources/layout_spec.rb +83 -0
- data/spec/webby/resources/meta_file_spec.rb +157 -0
- data/spec/webby/resources/page_spec.rb +111 -0
- data/spec/webby/resources/partial_spec.rb +58 -0
- data/spec/webby/resources/resource_spec.rb +214 -0
- data/spec/webby/resources/static_spec.rb +49 -0
- data/spec/webby/resources_spec.rb +55 -3
- metadata +64 -6
- data/lib/webby/resources/file.rb +0 -221
- 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,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.
|
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
|
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.
|
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
|