engine_of_war 0.0.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.
@@ -0,0 +1,3 @@
1
+ module EngineOfWar
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,59 @@
1
+ require "spec_helper"
2
+
3
+ describe "given a layout and some assets" do
4
+ before do
5
+ create_template("layouts/application.html.haml", "%h1 Layout\n= yield")
6
+ create_template("one.css.scss", ".foo {color: red}")
7
+ create_template("nested/file.css.scss", ".foo {color: yellow}")
8
+ create_template("two.js.coffee", 'alert "Coffee"')
9
+ create_template("three.css.sass", ".foo\n :clear both\n")
10
+ end
11
+
12
+ it "doesn't render the layout when getting a CSS file" do
13
+ visit "/one.css"
14
+ page.should_not have_selector('h1:contains("Layout")')
15
+ end
16
+
17
+ it "doesn't render the layout when getting a JS file" do
18
+ visit "/two.js"
19
+ page.should_not have_selector('h1:contains("Layout")')
20
+ end
21
+
22
+ it "renders the scss as css" do
23
+ visit "/one.css"
24
+ page.source.should match(%r{color: red;})
25
+ page.response_headers['Content-Type'].should match(%r{text/css})
26
+ end
27
+
28
+ it "renders the sass as css" do
29
+ visit "/three.css"
30
+ page.source.should match(%r{clear: both;})
31
+ end
32
+
33
+ it "renders the coffeescript as js" do
34
+ visit "/two.js"
35
+ page.source.should match(%r{alert\("Coffee"\)})
36
+ end
37
+
38
+ it "renders a template if a cachebuster is used" do
39
+ visit "/two.js?2348347"
40
+ page.source.should match(%r{alert\("Coffee"\)})
41
+ end
42
+
43
+ it "renders the nested asset without issue" do
44
+ visit "/nested/file.css"
45
+ page.source.should match(%r{color: yellow;})
46
+ end
47
+ end
48
+
49
+ describe "An asset in /public" do
50
+ before do
51
+ create_asset("straight.js", 'javascript!')
52
+ end
53
+
54
+ it "is rendered without processing" do
55
+ visit "/straight.js"
56
+ page.source.should == "javascript!"
57
+ end
58
+ end
59
+
data/spec/atom_spec.rb ADDED
@@ -0,0 +1,55 @@
1
+ #!/bin/env rspec
2
+
3
+ require "spec_helper"
4
+
5
+ describe "Given some blog posts" do
6
+ before do
7
+ create_template("posts/a_post.html.haml",
8
+ <<-EOF)
9
+ ---
10
+ title: First post
11
+ date: 1997-07-01
12
+ ---
13
+ %blockquote This is the first post.
14
+ EOF
15
+
16
+ create_template("posts/another_post.html.haml",
17
+ <<-EOF)
18
+ ---
19
+ title: Second post
20
+ date: 2011-01-10
21
+ ---
22
+ This is the second post.
23
+ EOF
24
+
25
+ create_template("posts/textile_post.html.textile",
26
+ <<-EOF)
27
+ ---
28
+ title: Textile post
29
+ date: 2010-01-10
30
+ ---
31
+
32
+ bq. Textile post.
33
+ EOF
34
+ end
35
+
36
+ context "GET /posts.atom" do
37
+ before { visit "/posts.atom" }
38
+
39
+ it "renders the feed as rss" do
40
+ page.should have_selector("rss[version='2.0']")
41
+ page.should have_selector("rss title")
42
+ page.response_headers['Content-Type'].should == "application/rss+xml"
43
+ end
44
+
45
+ it "renders xml for the first post" do
46
+ page.should have_selector('rss channel item title:contains("First post")')
47
+ page.source.should include("http://www.example.com/posts/a_post")
48
+ end
49
+
50
+ it "renders xml for the second post" do
51
+ page.should have_selector('rss channel item title:contains("Second post")')
52
+ page.source.should include("http://www.example.com/posts/another_post")
53
+ end
54
+ end
55
+ end
data/spec/blog_spec.rb ADDED
@@ -0,0 +1,140 @@
1
+ #!/bin/env rspec
2
+
3
+ require "spec_helper"
4
+
5
+ describe "Given some blog posts" do
6
+ before do
7
+ create_template("layouts/application.html.haml",
8
+ <<-EOF)
9
+ %h1 Layout
10
+ = yield
11
+ EOF
12
+
13
+ create_template("layouts/posts.html.haml",
14
+ <<-EOF)
15
+ %h1 Post Layout
16
+ = yield
17
+ EOF
18
+
19
+ create_template("posts.html.haml",
20
+ <<-EOF)
21
+ This is the Blog!
22
+ - collection("posts").each do |post|
23
+ %h2= post.meta[:title]
24
+ = render_page(post)
25
+ EOF
26
+
27
+ create_template("posts/a_post.html.haml",
28
+ <<-EOF)
29
+ ---
30
+ title: First post
31
+ date: 1997-07-01
32
+ ---
33
+ %blockquote This is the first post.
34
+ EOF
35
+
36
+ create_template("posts/another_post.html.haml",
37
+ <<-EOF)
38
+ ---
39
+ title: Second post
40
+ date: 2011-01-10
41
+ ---
42
+ This is the second post.
43
+ EOF
44
+
45
+ create_template("posts/textile_post.html.textile",
46
+ <<-EOF)
47
+ ---
48
+ title: Textile post
49
+ date: 2010-01-10
50
+ ---
51
+
52
+ bq. Textile post.
53
+ EOF
54
+ end
55
+
56
+ context "GET /posts" do
57
+ before { visit "/posts" }
58
+
59
+ it "renders the page" do
60
+ page.source.should =~ /This is the Blog/
61
+ end
62
+
63
+ it "renders the layout" do
64
+ page.should have_selector('h1:contains("Layout")')
65
+ end
66
+
67
+ it "renders the first post title" do
68
+ page.should have_selector('h2:contains("First post")')
69
+ end
70
+
71
+ it "renders the second post title" do
72
+ page.should have_selector('h2:contains("Second post")')
73
+ end
74
+
75
+ it "renders the body of the haml post" do
76
+ page.should have_selector('blockquote:contains("first post")')
77
+ end
78
+
79
+ it "renders the body of the textile post" do
80
+ page.should have_selector('blockquote:contains("Textile post")')
81
+ end
82
+ end
83
+ end
84
+
85
+ describe "Given a blog post" do
86
+ before do
87
+ create_template("layouts/application.html.haml",
88
+ <<-EOF)
89
+ %h1 Layout
90
+ = yield
91
+ EOF
92
+
93
+ create_template("layouts/posts.html.haml",
94
+ <<-EOF)
95
+ %h1 Post Layout
96
+ %h2= meta[:title]
97
+ = yield
98
+ EOF
99
+
100
+ create_template("posts/a_post.html.haml",
101
+ <<-EOF)
102
+ ---
103
+ title: First post
104
+ date: 1997-07-01
105
+ foo: bar
106
+ ---
107
+ %blockquote This is the first post.
108
+ EOF
109
+ end
110
+
111
+ context "navigating to that post" do
112
+ before { visit "/posts/a_post" }
113
+
114
+ it "renders the post layout" do
115
+ page.should have_selector('h1:contains("Post Layout")')
116
+ end
117
+
118
+ it "renders the post title" do
119
+ page.should have_selector('h2:contains("First post")')
120
+ end
121
+
122
+ it "renders the post body" do
123
+ page.should have_selector('blockquote:contains("This is the first post.")')
124
+ end
125
+
126
+ it "doesn't attempt to render the frontmatter" do
127
+ page.source.should_not match("foo")
128
+ end
129
+ end
130
+
131
+ context "navigating to that post with a trailing /" do
132
+ before { visit "/posts/a_post/" }
133
+
134
+ it "renders the post body" do
135
+ page.should have_selector('blockquote:contains("This is the first post.")')
136
+ end
137
+ end
138
+ end
139
+
140
+
@@ -0,0 +1,46 @@
1
+ require "spec_helper"
2
+
3
+ describe "given a textile template with a code sample" do
4
+ before do
5
+ create_template("layouts/application.html.haml", <<-EOS)
6
+ %h1 Layout
7
+ .content
8
+ ~ yield
9
+ EOS
10
+ create_template("index.html.haml", <<-EOF)
11
+ This is the Blog!
12
+ - collection("posts").each do |post|
13
+ %h2= post.meta[:title]
14
+ ~ render_page(post)
15
+ EOF
16
+ create_template("posts/bar.html.textile", <<-EOS)
17
+ @@@ ruby
18
+ [branch "master"]
19
+ remote = origin
20
+ merge = refs/heads/master
21
+ @@@
22
+ EOS
23
+
24
+ end
25
+
26
+ context "the rendered page" do
27
+ before { visit "/posts/bar" }
28
+ subject { page }
29
+
30
+ it { should have_selector('pre code.ruby') }
31
+ it "should not fuck up the indenting" do
32
+ page.source.should match(%r{\S remote = origin})
33
+ end
34
+ end
35
+
36
+ context "the posts index" do
37
+ before { visit "/" }
38
+ subject { page }
39
+
40
+ it { should have_selector('pre code.ruby') }
41
+ it "should not fuck up the indenting" do
42
+ page.source.should match(%r{\S remote = origin})
43
+ end
44
+ end
45
+ end
46
+
@@ -0,0 +1,41 @@
1
+ #!/bin/env rspec
2
+
3
+ require "spec_helper"
4
+
5
+ describe "Given a page with frontmatter" do
6
+ before do
7
+ create_template("layouts/application.html.haml",
8
+ <<-EOF)
9
+ %head
10
+ %title= meta[:title]
11
+ %h1 Layout
12
+ = yield
13
+ EOF
14
+
15
+ create_template("page_with_frontmatter.html.haml",
16
+ <<-EOF)
17
+ ---
18
+ title: Title for this post.
19
+ ---
20
+ This is a post.
21
+ EOF
22
+ end
23
+
24
+ context "GET /page_with_frontmatter" do
25
+ before { visit "/page_with_frontmatter" }
26
+
27
+ it "renders the page" do
28
+ page.source.should =~ /This is a post/
29
+ end
30
+
31
+ it "renders the layout" do
32
+ page.should have_selector('h1:contains("Layout")')
33
+ end
34
+
35
+ it "hands the frontmatter to the layout" do
36
+ page.should have_selector('title:contains("Title for this post.")')
37
+ end
38
+ end
39
+ end
40
+
41
+
@@ -0,0 +1,73 @@
1
+ require "spec_helper"
2
+
3
+ describe "given a textile template with an image link " do
4
+ before { create_template("layouts/application.html.haml", "%h1 Layout\n= yield") }
5
+
6
+ describe "and an image link" do
7
+ before do
8
+ create_asset("images/file/original.jpg", "image data")
9
+ create_template("posts/bar.html.textile", "%file.jpg large%")
10
+ end
11
+
12
+ context "the rendered page" do
13
+ before { visit "/posts/bar" }
14
+ subject { page }
15
+
16
+ it { should have_selector('img[src="/images/file/large.jpg"]') }
17
+ end
18
+ end
19
+
20
+ describe "and an image link with metadata" do
21
+ before do
22
+ create_template("posts/bar.html.textile", "%file.jpg%")
23
+ create_asset("images/file/original.jpg", "image data")
24
+ create_asset("images/file/meta.yml", <<-EOS)
25
+ ---
26
+ :description: Me Speaking
27
+ :source_url: ""
28
+ EOS
29
+ end
30
+
31
+ context "the rendered page" do
32
+ before { visit "/posts/bar" }
33
+ subject { page }
34
+
35
+ it { should have_selector('img[alt="Me Speaking"]') }
36
+ it { should_not have_selector('a img') }
37
+ end
38
+ end
39
+
40
+ describe "and an image link with metadata that includes a url" do
41
+ before do
42
+ create_template("posts/bar.html.textile", "%file.jpg%")
43
+ create_asset("images/file/original.jpg", "image data")
44
+ create_asset("images/file/meta.yml", <<-EOS)
45
+ ---
46
+ :description: ""
47
+ :source_url: http://google.com
48
+ EOS
49
+ end
50
+
51
+ context "the rendered page" do
52
+ before { visit "/posts/bar" }
53
+ subject { page }
54
+
55
+ it { should_not have_selector('img[alt]') }
56
+ it { should have_selector('a[href="http://google.com"] img') }
57
+ end
58
+ end
59
+
60
+ describe "and an image link without a file" do
61
+ before { create_template("posts/bar.html.textile", "%bad_file.jpg%") }
62
+
63
+ context "the rendered page" do
64
+ before { visit "/posts/bar" }
65
+ subject { page }
66
+
67
+ it { should_not have_selector('img') }
68
+ it { should have_selector('.warning') }
69
+ it { page.source.should match("unknown") }
70
+ end
71
+ end
72
+ end
73
+
@@ -0,0 +1,67 @@
1
+ #!/bin/env rspec
2
+
3
+ require "spec_helper"
4
+
5
+ describe "Given some drafts" do
6
+ before do
7
+ create_template("drafts/a_post.html.haml",
8
+ <<-EOF)
9
+ ---
10
+ title: First draft
11
+ date: 1997-07-01
12
+ ---
13
+ This is the first post.
14
+ EOF
15
+
16
+ create_template("drafts/another_post.html.haml",
17
+ <<-EOF)
18
+ ---
19
+ title: Second draft
20
+ date: 2011-01-10
21
+ ---
22
+ This is the second post.
23
+ EOF
24
+ end
25
+
26
+ describe "PageCollection.new('drafts')" do
27
+ before { @collection = EngineOfWar::PageCollection.new('drafts')}
28
+ subject { @collection }
29
+
30
+ it { should_not be_empty }
31
+ it "should return the newest draft first" do
32
+ @collection.first.meta[:title].should == "Second draft"
33
+ end
34
+ end
35
+ end
36
+
37
+ describe "Given some posts" do
38
+ before do
39
+ create_template("posts/a_post.html.haml",
40
+ <<-EOF)
41
+ ---
42
+ title: First post
43
+ date: 1997-07-01
44
+ ---
45
+ This is the first post.
46
+ EOF
47
+
48
+ create_template("posts/another_post.html.haml",
49
+ <<-EOF)
50
+ ---
51
+ title: Second post
52
+ date: 2011-01-10
53
+ ---
54
+ This is the second post.
55
+ EOF
56
+ end
57
+
58
+ describe "PageCollection.new('posts')" do
59
+ before { @collection = EngineOfWar::PageCollection.new('posts')}
60
+ subject { @collection }
61
+
62
+ it { should_not be_empty }
63
+ it "should return the newest post first" do
64
+ @collection.first.meta[:title].should == "Second post"
65
+ end
66
+ end
67
+ end