staticpress 0.1.0

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.
Files changed (93) hide show
  1. data/.gitignore +9 -0
  2. data/.rbenv-version +1 -0
  3. data/.rvmrc +1 -0
  4. data/Gemfile +3 -0
  5. data/Rakefile +21 -0
  6. data/bin/staticpress +6 -0
  7. data/lib/skeleton/Gemfile +10 -0
  8. data/lib/skeleton/README.markdown +21 -0
  9. data/lib/skeleton/config.rb +14 -0
  10. data/lib/skeleton/config.ru +8 -0
  11. data/lib/skeleton/config.yml +63 -0
  12. data/lib/staticpress/booter.rb +7 -0
  13. data/lib/staticpress/cli.rb +123 -0
  14. data/lib/staticpress/configuration.rb +24 -0
  15. data/lib/staticpress/content/base.rb +122 -0
  16. data/lib/staticpress/content/category.rb +34 -0
  17. data/lib/staticpress/content/collection_content.rb +13 -0
  18. data/lib/staticpress/content/index.rb +20 -0
  19. data/lib/staticpress/content/page.rb +64 -0
  20. data/lib/staticpress/content/post.rb +88 -0
  21. data/lib/staticpress/content/resource_content.rb +28 -0
  22. data/lib/staticpress/content/static_content.rb +24 -0
  23. data/lib/staticpress/content/tag.rb +34 -0
  24. data/lib/staticpress/content/theme.rb +48 -0
  25. data/lib/staticpress/error.rb +4 -0
  26. data/lib/staticpress/helpers.rb +57 -0
  27. data/lib/staticpress/js_object.rb +51 -0
  28. data/lib/staticpress/metadata.rb +24 -0
  29. data/lib/staticpress/plugin.rb +33 -0
  30. data/lib/staticpress/plugins/blockquote.rb +6 -0
  31. data/lib/staticpress/plugins/gist.rb +6 -0
  32. data/lib/staticpress/plugins/titlecase.rb +6 -0
  33. data/lib/staticpress/plugins.rb +6 -0
  34. data/lib/staticpress/route.rb +123 -0
  35. data/lib/staticpress/server.rb +21 -0
  36. data/lib/staticpress/site.rb +57 -0
  37. data/lib/staticpress/theme.rb +43 -0
  38. data/lib/staticpress/version.rb +12 -0
  39. data/lib/staticpress/view_helpers.rb +35 -0
  40. data/lib/staticpress.rb +15 -0
  41. data/lib/themes/classic/assets/scripts/application.js +4 -0
  42. data/lib/themes/classic/assets/styles/all.sass +0 -0
  43. data/lib/themes/classic/includes/list_posts.haml +3 -0
  44. data/lib/themes/classic/layouts/archive.haml +0 -0
  45. data/lib/themes/classic/layouts/atom.haml +0 -0
  46. data/lib/themes/classic/layouts/default.haml +5 -0
  47. data/lib/themes/classic/layouts/index.haml +0 -0
  48. data/lib/themes/classic/layouts/post_index.haml +5 -0
  49. data/lib/themes/classic/views/default.haml +5 -0
  50. data/staticpress.gemspec +33 -0
  51. data/tests/lib/staticpress/cli_test.rb +65 -0
  52. data/tests/lib/staticpress/configuration_test.rb +4 -0
  53. data/tests/lib/staticpress/content/base_test.rb +9 -0
  54. data/tests/lib/staticpress/content/category_test.rb +62 -0
  55. data/tests/lib/staticpress/content/index_test.rb +45 -0
  56. data/tests/lib/staticpress/content/page_test.rb +133 -0
  57. data/tests/lib/staticpress/content/post_test.rb +81 -0
  58. data/tests/lib/staticpress/content/tag_test.rb +60 -0
  59. data/tests/lib/staticpress/content/theme_test.rb +103 -0
  60. data/tests/lib/staticpress/helpers_test.rb +57 -0
  61. data/tests/lib/staticpress/js_object_test.rb +45 -0
  62. data/tests/lib/staticpress/metadata_test.rb +19 -0
  63. data/tests/lib/staticpress/plugin_test.rb +4 -0
  64. data/tests/lib/staticpress/route_test.rb +210 -0
  65. data/tests/lib/staticpress/server_test.rb +4 -0
  66. data/tests/lib/staticpress/site_test.rb +25 -0
  67. data/tests/lib/staticpress/theme_test.rb +68 -0
  68. data/tests/lib/staticpress/view_helpers_test.rb +32 -0
  69. data/tests/lib/staticpress_test.rb +15 -0
  70. data/tests/sample_sites/test_blog/Gemfile +10 -0
  71. data/tests/sample_sites/test_blog/README.markdown +21 -0
  72. data/tests/sample_sites/test_blog/config.rb +14 -0
  73. data/tests/sample_sites/test_blog/config.ru +8 -0
  74. data/tests/sample_sites/test_blog/config.yml +4 -0
  75. data/tests/sample_sites/test_blog/content/_posts/2011-07-20-hello.markdown +5 -0
  76. data/tests/sample_sites/test_blog/content/_posts/2011-08-01-announcing-staticpress.markdown +7 -0
  77. data/tests/sample_sites/test_blog/content/_posts/2011-08-02-staticpress.markdown +7 -0
  78. data/tests/sample_sites/test_blog/content/_posts/2011-08-06-blogging-with-staticpress.markdown +7 -0
  79. data/tests/sample_sites/test_blog/content/_posts/2011-08-06-conferences.markdown +5 -0
  80. data/tests/sample_sites/test_blog/content/_posts/2011-08-06-in-charlotte.markdown +9 -0
  81. data/tests/sample_sites/test_blog/content/_posts/2011-08-20-forever.markdown +1 -0
  82. data/tests/sample_sites/test_blog/content/about.markdown +1 -0
  83. data/tests/sample_sites/test_blog/content/contact.markdown +3 -0
  84. data/tests/sample_sites/test_blog/content/foo/bar/baz.markdown +1 -0
  85. data/tests/sample_sites/test_blog/content/plain.txt +1 -0
  86. data/tests/sample_sites/test_blog/content/ruby.png +0 -0
  87. data/tests/sample_sites/test_blog/content/style1.css +3 -0
  88. data/tests/sample_sites/test_blog/content/style2.css.sass +2 -0
  89. data/tests/sample_sites/test_blog/content/style3.sass +2 -0
  90. data/tests/test_helper.rb +17 -0
  91. data.tar.gz.sig +0 -0
  92. metadata +255 -0
  93. metadata.gz.sig +3 -0
@@ -0,0 +1,45 @@
1
+ require_relative '../../test_helper'
2
+
3
+ require 'staticpress/js_object'
4
+
5
+ class JSObjectTest < TestHelper
6
+ JSO = Staticpress::JSObject
7
+
8
+ def setup
9
+ @js_object = JSO.new :key => :value, :nested => { :a => :b }
10
+ end
11
+
12
+ def test__minus
13
+ assert_equal(JSO.new({ :key => :value, :nested => { :a => :b } }), @js_object - {})
14
+ assert_equal(JSO.new({ :nested => { :a => :b } }), @js_object - { :key => :value })
15
+ assert_equal(JSO.new({ :key => :value }), @js_object - { :nested => { :a => :b } })
16
+ assert_equal(JSO.new({}), @js_object - { :key => :value, :nested => { :a => :b } })
17
+
18
+ assert_equal(JSO.new({ :key => :value, :nested => { :a => :b } }), @js_object - JSO.new({}))
19
+ assert_equal(JSO.new({ :nested => { :a => :b } }), @js_object - JSO.new({ :key => :value }))
20
+ assert_equal(JSO.new({ :key => :value }), @js_object - JSO.new({ :nested => { :a => :b } }))
21
+ assert_equal(JSO.new({}), @js_object - JSO.new({ :key => :value, :nested => { :a => :b } }))
22
+ end
23
+
24
+ def test__squares
25
+ assert_nil @js_object[:some_random]
26
+ assert_equal :value, @js_object[:key]
27
+ assert_equal :value, @js_object['key']
28
+ end
29
+
30
+ def test_regular_access
31
+ assert_equal :value, @js_object.key
32
+ assert_equal :b, @js_object.nested.a
33
+ assert_nil @js_object.nested.other
34
+ end
35
+
36
+ def test_assignment
37
+ assert_nil @js_object.hoopla
38
+ @js_object.hoopla = :hullabaloo
39
+ assert_equal :hullabaloo, @js_object.hoopla
40
+ end
41
+
42
+ def test_to_hash
43
+ assert_equal({ :key => :value, :nested => { :a => :b } }, @js_object.to_hash)
44
+ end
45
+ end
@@ -0,0 +1,19 @@
1
+ require_relative 'js_object_test'
2
+
3
+ require 'staticpress/metadata'
4
+
5
+ class MetadataTest < JSObjectTest
6
+ def setup
7
+ super
8
+ @meta = Staticpress::Metadata.new
9
+ @another_meta = Staticpress::Metadata.new :layout => 'post_index', :categories => %w[programming], :tags => %w[code tutorial]
10
+ end
11
+
12
+ def test__chevron
13
+ end
14
+
15
+ def test_inspect
16
+ assert_equal '#<Staticpress::Metadata>', @meta.inspect
17
+ assert_equal '#<Staticpress::Metadata categories=["programming"], layout="post_index", tags=["code", "tutorial"]>', @another_meta.inspect
18
+ end
19
+ end
@@ -0,0 +1,4 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class PluginTest < TestHelper
4
+ end
@@ -0,0 +1,210 @@
1
+ require_relative '../../test_helper'
2
+
3
+ require 'staticpress/route'
4
+
5
+ class RouteTest < TestHelper
6
+ def setup
7
+ Staticpress.blog_path = TEST_BLOG
8
+
9
+ @route_category_0 = Staticpress::Route.new :content_type => Staticpress::Content::Category, :name => 'programming', :number => nil
10
+ @route_category_1 = Staticpress::Route.new :content_type => Staticpress::Content::Category, :name => 'programming', :number => '1'
11
+ @route_category_2 = Staticpress::Route.new :content_type => Staticpress::Content::Category, :name => 'programming', :number => '2'
12
+ @route_page = Staticpress::Route.new :content_type => Staticpress::Content::Page, :slug => 'about'
13
+ @route_post = Staticpress::Route.new :content_type => Staticpress::Content::Post, :year => '2011', :month => '07', :day => '20', :title => 'hello'
14
+ end
15
+
16
+ def test__equalsequals
17
+ assert_operator @route_category_0, :==, @route_category_1
18
+ refute_operator @route_category_0, :==, @route_category_2
19
+ assert_operator @route_page, :==, Staticpress::Route.new(:content_type => Staticpress::Content::Page, :slug => 'about')
20
+ refute_operator @route_page, :==, @route_post
21
+ refute_operator @route_page, :==, nil
22
+ end
23
+
24
+ def test_content
25
+ assert_equal Staticpress::Content::Page.new(@route_page, :markdown), @route_page.content
26
+ assert_equal Staticpress::Content::Post.new(@route_post, :markdown), @route_post.content
27
+ end
28
+
29
+ def test_inspect
30
+ assert_equal '#<Staticpress::Route url_path=/about, content_type=Staticpress::Content::Page, params={:slug=>"about"}>', @route_page.inspect
31
+ assert_equal '#<Staticpress::Route url_path=/2011/07/20/hello, content_type=Staticpress::Content::Post, params={:day=>"20", :month=>"07", :title=>"hello", :year=>"2011"}>', @route_post.inspect
32
+ end
33
+
34
+ def test_params
35
+ assert_equal({ :content_type => Staticpress::Content::Category, :name => 'programming', :number => '1' }, @route_category_0.params)
36
+ assert_equal({ :content_type => Staticpress::Content::Category, :name => 'programming', :number => '1' }, @route_category_1.params)
37
+ assert_equal({ :content_type => Staticpress::Content::Page, :slug => 'about' }, @route_page.params)
38
+ assert_equal({ :content_type => Staticpress::Content::Post, :year => '2011', :month => '07', :day => '20', :title => 'hello' }, @route_post.params)
39
+ end
40
+
41
+ def test_url_path
42
+ assert_equal '/category/programming', @route_category_0.url_path
43
+ assert_equal '/category/programming', @route_category_1.url_path
44
+ assert_equal '/category/programming/page/2', @route_category_2.url_path
45
+ assert_equal '/about', @route_page.url_path
46
+ assert_equal '/2011/07/20/hello', @route_post.url_path
47
+ end
48
+
49
+ def test_from_url_path
50
+ assert_equal Staticpress::Route.from_url_path('/about'), @route_page
51
+ assert_equal Staticpress::Route.from_url_path('/2011/07/20/hello'), @route_post
52
+ assert_nil Staticpress::Route.from_url_path('/i/dont/exist')
53
+ end
54
+
55
+ def test_regex_for_pattern_index
56
+ pattern = '/(page/:number)?'
57
+
58
+ assert_match Staticpress::Route.regex_for_pattern(pattern), '/'
59
+ assert_match Staticpress::Route.regex_for_pattern(pattern), '/page/1'
60
+ assert_match Staticpress::Route.regex_for_pattern(pattern), '/page/2'
61
+ assert_match Staticpress::Route.regex_for_pattern(pattern), '/page/17'
62
+
63
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/about'
64
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/about/us'
65
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/contact/page/27'
66
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/static_text/about'
67
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/plain.txt'
68
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/files/profile.jpg'
69
+ end
70
+
71
+ def test_regex_for_pattern_page_1
72
+ pattern = '/:slug'
73
+
74
+ assert_match Staticpress::Route.regex_for_pattern(pattern), '/page/1'
75
+ assert_match Staticpress::Route.regex_for_pattern(pattern), '/about'
76
+ assert_match Staticpress::Route.regex_for_pattern(pattern), '/about/us'
77
+ assert_match Staticpress::Route.regex_for_pattern(pattern), '/static_text/about'
78
+ assert_match Staticpress::Route.regex_for_pattern(pattern), '/static_text/about/us'
79
+ assert_match Staticpress::Route.regex_for_pattern(pattern), '/2011/07/20/hello-world'
80
+ assert_match Staticpress::Route.regex_for_pattern(pattern), '/blog/2011/07/20/hello-world'
81
+ assert_match Staticpress::Route.regex_for_pattern(pattern), '/plain.txt'
82
+ assert_match Staticpress::Route.regex_for_pattern(pattern), '/files/profile.jpg'
83
+
84
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/'
85
+ end
86
+
87
+ def test_regex_for_pattern_page_2
88
+ pattern = '/static_text/:slug'
89
+
90
+ assert_match Staticpress::Route.regex_for_pattern(pattern), '/static_text/page/123'
91
+ assert_match Staticpress::Route.regex_for_pattern(pattern), '/static_text/page/xyz'
92
+ assert_match Staticpress::Route.regex_for_pattern(pattern), '/static_text/about'
93
+ assert_match Staticpress::Route.regex_for_pattern(pattern), '/static_text/about/us'
94
+ assert_match Staticpress::Route.regex_for_pattern(pattern), '/static_text/plain.txt'
95
+ assert_match Staticpress::Route.regex_for_pattern(pattern), '/static_text/files/profile.jpg'
96
+
97
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/'
98
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/about'
99
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/blog/2011/07/20/hello-world'
100
+ end
101
+
102
+ def test_regex_for_pattern_post_1
103
+ pattern = '/:year/:month/:day/:title'
104
+
105
+ assert_match Staticpress::Route.regex_for_pattern(pattern), '/2011/07/20/hello-world'
106
+
107
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/about'
108
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/static_text/about/us'
109
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/blog/2011/07/20/hello-world'
110
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/plain.txt'
111
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/files/profile.jpg'
112
+ end
113
+
114
+ def test_regex_for_pattern_post_2
115
+ pattern = '/blog/:year/:month/:day/:title'
116
+
117
+ assert_match Staticpress::Route.regex_for_pattern(pattern), '/blog/2011/07/20/hello-world'
118
+
119
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/'
120
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/about/us'
121
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/blog/about'
122
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/2011/07/20/hello-world'
123
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/plain.txt'
124
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/files/profile.jpg'
125
+ end
126
+
127
+ def test_regex_for_pattern_post_3
128
+ pattern = '/:year/:title'
129
+
130
+ assert_match Staticpress::Route.regex_for_pattern(pattern), '/2011/hello-world'
131
+
132
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/'
133
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/about/us'
134
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/blog/2011/hello-world'
135
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/2011/07/20/hello-world'
136
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/plain.txt'
137
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/files/profile.jpg'
138
+ end
139
+
140
+ def test_regex_for_pattern_post_4
141
+ pattern = '/blog/:year/:title'
142
+
143
+ assert_match Staticpress::Route.regex_for_pattern(pattern), '/blog/2011/hello-world'
144
+
145
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/'
146
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/about/us'
147
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/2011/hello-world'
148
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/2011/07/20/hello-world'
149
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/blog/2011/07/20/hello-world'
150
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/plain.txt'
151
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/files/profile.jpg'
152
+ end
153
+
154
+ def test_regex_for_pattern_tag_1
155
+ pattern = '/tag/:name(/page/:number)?'
156
+
157
+ assert_match Staticpress::Route.regex_for_pattern(pattern), '/tag/programming'
158
+ assert_match Staticpress::Route.regex_for_pattern(pattern), '/tag/programming/page/0'
159
+
160
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/'
161
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/about/us'
162
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/static_text/about'
163
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/2011/07/20/hello-world'
164
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/something/tag/programming'
165
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/plain.txt'
166
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/files/profile.jpg'
167
+ end
168
+
169
+ def test_regex_for_pattern_tag_2
170
+ pattern = '/something/tag/:name(/page/:number)?'
171
+
172
+ assert_match Staticpress::Route.regex_for_pattern(pattern), '/something/tag/programming'
173
+ assert_match Staticpress::Route.regex_for_pattern(pattern), '/something/tag/programming/page/123456'
174
+
175
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/about/us'
176
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/static_text/about/us'
177
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/2011/07/20/hello-world'
178
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/tag/programming'
179
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/plain.txt'
180
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/files/profile.jpg'
181
+ end
182
+
183
+ def test_regex_for_pattern_category_1
184
+ pattern = '/category/:name(/page/:number)?'
185
+
186
+ assert_match Staticpress::Route.regex_for_pattern(pattern), '/category/programming'
187
+ assert_match Staticpress::Route.regex_for_pattern(pattern), '/category/programming/page/5'
188
+
189
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/about'
190
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/static_text/about/us'
191
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/2011/07/20/hello-world'
192
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/blog/2011/07/20/hello-world'
193
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/plain.txt'
194
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/files/profile.jpg'
195
+ end
196
+
197
+ def test_regex_for_pattern_category_2
198
+ pattern = '/blog/category/:name(/page/:number)?'
199
+
200
+ assert_match Staticpress::Route.regex_for_pattern(pattern), '/blog/category/programming'
201
+ assert_match Staticpress::Route.regex_for_pattern(pattern), '/blog/category/programming/page/20'
202
+
203
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/about/us'
204
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/static_text/about'
205
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/blog/2011/07/20/hello-world'
206
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/category/programming'
207
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/plain.txt'
208
+ refute_match Staticpress::Route.regex_for_pattern(pattern), '/files/profile.jpg'
209
+ end
210
+ end
@@ -0,0 +1,4 @@
1
+ require_relative '../../test_helper'
2
+
3
+ class ServerTest < TestHelper
4
+ end
@@ -0,0 +1,25 @@
1
+ require_relative '../../test_helper'
2
+
3
+ require 'staticpress/content/page'
4
+ require 'staticpress/content/post'
5
+ require 'staticpress/route'
6
+ require 'staticpress/site'
7
+
8
+ class SiteTest < TestHelper
9
+ def setup
10
+ Staticpress.blog_path = TEST_BLOG
11
+ @site = Staticpress::Site.new
12
+
13
+ @page_route = Staticpress::Route.from_url_path '/about'
14
+ @page = Staticpress::Content::Page.new @page_route, :markdown
15
+
16
+ @post_route = Staticpress::Route.from_url_path '/2011/07/20/hello'
17
+ @post = Staticpress::Content::Post.new @post_route, :markdown
18
+ end
19
+
20
+ def test_find_content_by_url_path
21
+ assert_equal @page, @site.find_content_by_url_path('/about')
22
+ assert_equal @post, @site.find_content_by_url_path('/2011/07/20/hello')
23
+ assert_nil @site.find_content_by_url_path('/i/dont/exist')
24
+ end
25
+ end
@@ -0,0 +1,68 @@
1
+ require_relative '../../test_helper'
2
+
3
+ require 'staticpress/theme'
4
+
5
+ class ThemeTest < TestHelper
6
+ def setup
7
+ @theme = Staticpress::Theme.new :classic
8
+ end
9
+
10
+
11
+ def test_default_include
12
+ refute_respond_to @theme, :default_include
13
+ end
14
+
15
+ def test_keyed_includes
16
+ assert_equal((@theme.root + 'includes' + 'list_posts.haml'), @theme.keyed_includes['list_posts'])
17
+ assert_nil @theme.keyed_includes['fake']
18
+ end
19
+
20
+ def test_include_for
21
+ assert_equal (@theme.root + 'includes' + 'list_posts.haml'), @theme.include_for(:list_posts)
22
+ assert_nil @theme.include_for(:fake)
23
+ end
24
+
25
+ def test_includes
26
+ assert_equal 1, @theme.includes.count
27
+ end
28
+
29
+
30
+ def test_default_layout
31
+ assert_equal (@theme.root + 'layouts' + 'default.haml'), @theme.default_layout
32
+ end
33
+
34
+ def test_keyed_layouts
35
+ assert_equal((@theme.root + 'layouts' + 'default.haml'), @theme.keyed_layouts['default'])
36
+ assert_equal((@theme.root + 'layouts' + 'post_index.haml'), @theme.keyed_layouts['post_index'])
37
+ assert_nil @theme.keyed_layouts['fake']
38
+ end
39
+
40
+ def test_layout_for
41
+ assert_equal (@theme.root + 'layouts' + 'default.haml'), @theme.layout_for(:default)
42
+ assert_equal (@theme.root + 'layouts' + 'post_index.haml'), @theme.layout_for(:post_index)
43
+ assert_nil @theme.layout_for(:fake)
44
+ end
45
+
46
+ def test_layouts
47
+ assert_equal 5, @theme.layouts.count
48
+ end
49
+
50
+
51
+ def test_default_view
52
+ assert_equal (@theme.root + 'views' + 'default.haml'), @theme.default_view
53
+ end
54
+
55
+ def test_keyed_views
56
+ assert_equal((@theme.root + 'views' + 'default.haml'), @theme.keyed_views['default'])
57
+ assert_nil @theme.keyed_views['fake']
58
+ end
59
+
60
+ def test_view_for
61
+ assert_equal (@theme.root + 'views' + 'default.haml'), @theme.view_for(:default)
62
+ assert_nil @theme.view_for(:fake)
63
+ end
64
+
65
+ def test_views
66
+ assert_equal 1, @theme.views.count
67
+ end
68
+ end
@@ -0,0 +1,32 @@
1
+ require_relative '../../test_helper'
2
+
3
+ require 'staticpress/helpers'
4
+ require 'staticpress/view_helpers'
5
+
6
+ class ViewHelpersTest < TestHelper
7
+ include Staticpress::Helpers
8
+
9
+ def setup
10
+ Staticpress.blog_path = TEST_BLOG
11
+ @post_route = Staticpress::Route.from_url_path '/2011/07/20/hello'
12
+ @post = Staticpress::Content::Post.new @post_route, Staticpress.blog_path + config.posts_source + '2011-07-20-hello.markdown'
13
+ @view_helpers = Staticpress::ViewHelpers.new @post
14
+ end
15
+
16
+ def test_partial_with_one_post
17
+ expected = <<-HTML
18
+ <section>
19
+ <article>#{@post.render_partial.strip}</article>
20
+ </section>
21
+ HTML
22
+ assert_equal expected, @view_helpers.partial(:list_posts, :posts => [ @post ])
23
+ end
24
+
25
+ def test_partial_with_no_posts
26
+ expected = <<-HTML
27
+ <section>
28
+ </section>
29
+ HTML
30
+ assert_equal expected, @view_helpers.partial(:list_posts, :posts => [ ])
31
+ end
32
+ end
@@ -0,0 +1,15 @@
1
+ require_relative '../test_helper'
2
+
3
+ require 'pathname'
4
+
5
+ class StaticpressTest < TestHelper
6
+ def test_blog_path
7
+ assert_equal Pathname.new('.').expand_path, Staticpress.blog_path
8
+ Staticpress.blog_path = 'tests/test_blog'
9
+ assert_equal Pathname.new('tests/test_blog').expand_path, Staticpress.blog_path
10
+ end
11
+
12
+ def test_root
13
+ assert_equal Pathname.new('lib/').expand_path, Staticpress.root
14
+ end
15
+ end
@@ -0,0 +1,10 @@
1
+ source :rubygems
2
+
3
+ gem 'staticpress'
4
+
5
+ gem 'compass'
6
+ gem 'haml'
7
+ gem 'rdiscount'
8
+ gem 'rubypants'
9
+ gem 'RedCloth'
10
+ gem 'sass'
@@ -0,0 +1,21 @@
1
+ * copies lib/skeletons/new to <path-to-blog>
2
+ * this should edit the blog's config.yml to include [name-of-blog] (prompt for [name-of-blog] if blank)
3
+ $ staticpress new <path-to-blog> [name-of-blog]
4
+ $ cd <path-to-blog>
5
+
6
+ * copies <plugin-name> into <path-to-blog>/plugins/
7
+ $ staticpress fork_plugin <plugin-name>
8
+
9
+ * setting the theme is done in the main config file, this command is optional and
10
+ * just copies the theme's file into <path-to-blog>/themes/[theme-name] for customizations
11
+ * if [theme-name] is blank, default to the currently configured theme
12
+ $ staticpress fork_theme [theme-name]
13
+
14
+ * turn on local server for development
15
+ $ staticpress serve
16
+
17
+ * prepare blog for deployment
18
+ $ staticpress package
19
+
20
+ * deploy blog
21
+ $ staticpress deploy
@@ -0,0 +1,14 @@
1
+ # Require any additional compass plugins here.
2
+ project_type = :stand_alone
3
+
4
+ # Set this to the root of your project when deployed:
5
+ http_path = '/'
6
+ css_dir = 'public/stylesheets'
7
+ sass_dir = 'sass'
8
+ images_dir = 'source/images'
9
+ http_images_dir = 'images'
10
+ fonts_dir = 'source/fonts'
11
+ http_fonts_dir = 'fonts'
12
+
13
+ line_comments = false
14
+ output_style = :compressed
@@ -0,0 +1,8 @@
1
+ require 'staticpress/booter'
2
+ require 'staticpress/server'
3
+
4
+ use Rack::ShowStatus
5
+ use Rack::ShowExceptions
6
+
7
+ # TODO run on configured port
8
+ run Staticpress::Server.new
@@ -0,0 +1,4 @@
1
+ ---
2
+ :plugins:
3
+ - blockquote
4
+ :title: Test Blog
@@ -0,0 +1,5 @@
1
+ ---
2
+ created_at: 2011-07-20 13:09:52 UTC
3
+ ---
4
+
5
+ in post
@@ -0,0 +1,7 @@
1
+ ---
2
+ created_at: 2011-08-01 23:02:47 UTC
3
+ categories:
4
+ - programming
5
+ ---
6
+
7
+ Staticpress is a blog-centric static site builder. It was inspired by Octopress and aims to re-imagine Octopress with a more standard Ruby approach.
@@ -0,0 +1,7 @@
1
+ ---
2
+ created_at: 2011-08-02 23:07:40 UTC
3
+ categories:
4
+ - programming
5
+ ---
6
+
7
+ in post
@@ -0,0 +1,7 @@
1
+ ---
2
+ created_at: 2011-08-06 23:07:56 UTC
3
+ categories:
4
+ - programming
5
+ ---
6
+
7
+ in post
@@ -0,0 +1,5 @@
1
+ ---
2
+ created_at: 2011-08-06 23:02:05 UTC
3
+ ---
4
+
5
+ in post
@@ -0,0 +1,9 @@
1
+ ---
2
+ created_at: 2011-08-06 23:01:33 UTC
3
+ categories:
4
+ - travel
5
+ tags:
6
+ - charlotte
7
+ ---
8
+
9
+ in post
@@ -0,0 +1,3 @@
1
+ in page
2
+
3
+ in page
@@ -0,0 +1 @@
1
+ this file intentionally left blank
@@ -0,0 +1,3 @@
1
+ body {
2
+ color: red;
3
+ }
@@ -0,0 +1,2 @@
1
+ body
2
+ color: green
@@ -0,0 +1,2 @@
1
+ body
2
+ color: blue
@@ -0,0 +1,17 @@
1
+ $:.unshift File.expand_path('../../lib', __FILE__)
2
+
3
+ require 'minitest/autorun'
4
+ require 'ruby-debug'
5
+
6
+ require 'staticpress'
7
+
8
+ class TestHelper < MiniTest::Unit::TestCase
9
+ SAMPLE_SITES = (Staticpress.root + '..' + 'tests' + 'sample_sites').expand_path
10
+ TEST_BLOG = SAMPLE_SITES + 'test_blog'
11
+
12
+ def teardown
13
+ Staticpress.blog_path = '.'
14
+ test_blog_public = TEST_BLOG + 'public'
15
+ FileUtils.rm_rf test_blog_public if test_blog_public.directory?
16
+ end
17
+ end
data.tar.gz.sig ADDED
Binary file