henshin 0.3.0 → 0.4.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 (56) hide show
  1. data/.gitignore +5 -1
  2. data/README.markdown +9 -46
  3. data/Rakefile +2 -1
  4. data/VERSION +1 -1
  5. data/bin/henshin +11 -12
  6. data/henshin.gemspec +20 -27
  7. data/lib/henshin.rb +21 -98
  8. data/lib/henshin/archive.rb +87 -115
  9. data/{bin → lib/henshin/exec}/files.rb +0 -0
  10. data/lib/henshin/ext.rb +35 -58
  11. data/lib/henshin/gen.rb +83 -68
  12. data/lib/henshin/labels.rb +144 -0
  13. data/lib/henshin/plugin.rb +70 -33
  14. data/lib/henshin/plugins/highlight.rb +19 -26
  15. data/lib/henshin/plugins/liquid.rb +50 -52
  16. data/lib/henshin/plugins/maruku.rb +14 -16
  17. data/lib/henshin/plugins/sass.rb +19 -23
  18. data/lib/henshin/plugins/textile.rb +14 -16
  19. data/lib/henshin/post.rb +67 -120
  20. data/lib/henshin/site.rb +154 -131
  21. data/lib/henshin/static.rb +10 -8
  22. data/test/helper.rb +20 -8
  23. data/test/site/css/{includes/reset.sass → _reset.sass} +0 -0
  24. data/test/site/css/screen.sass +1 -1
  25. data/test/site/index.html +2 -3
  26. data/test/site/layouts/archive_date.html +5 -4
  27. data/test/site/layouts/archive_month.html +10 -5
  28. data/test/site/layouts/archive_year.html +13 -6
  29. data/test/site/layouts/category_page.html +7 -7
  30. data/test/site/layouts/main.html +3 -4
  31. data/test/site/layouts/post.html +1 -1
  32. data/test/site/layouts/tag_index.html +3 -2
  33. data/test/site/layouts/tag_page.html +6 -6
  34. data/test/site/options.yaml +2 -2
  35. data/test/site/plugins/test.rb +1 -3
  36. data/test/site/posts/Testing-Stuff.markdown +1 -1
  37. data/test/site/posts/Textile-Test.textile +1 -1
  38. data/test/site/posts/lorem-ipsum.markdown +1 -1
  39. data/test/site/posts/same-date.markdown +1 -1
  40. data/test/{test_henshin.rb → suite.rb} +0 -1
  41. data/test/test_gen.rb +98 -0
  42. data/test/test_options.rb +34 -19
  43. data/test/test_post.rb +67 -0
  44. data/test/test_site.rb +159 -46
  45. data/test/test_static.rb +13 -0
  46. metadata +53 -32
  47. data/lib/henshin/categories.rb +0 -29
  48. data/lib/henshin/tags.rb +0 -28
  49. data/test/test_archives.rb +0 -27
  50. data/test/test_categories.rb +0 -0
  51. data/test/test_gens.rb +0 -54
  52. data/test/test_layouts.rb +0 -14
  53. data/test/test_posts.rb +0 -75
  54. data/test/test_statics.rb +0 -0
  55. data/test/test_tags.rb +0 -0
  56. data/test/text_exts.rb +0 -0
@@ -1,84 +1,197 @@
1
1
  require File.join(File.dirname(__FILE__) ,'helper')
2
2
 
3
3
  class TestSite < Test::Unit::TestCase
4
- context "Building sites" do
5
-
6
- setup do
7
- @site = new_site
4
+ context "A new site" do
5
+
6
+ should "reset data" do
7
+ site = new_site
8
+ site.reset
9
+ assert_equal [], site.posts
10
+ assert_equal [], site.gens
11
+ assert_equal [], site.statics
12
+ assert_equal Hash.new, site.layouts
13
+ assert site.archive.size.zero?
14
+ assert site.tags.size.zero?
15
+ assert site.categories.size.zero?
8
16
  end
9
17
 
10
- should "reset all data before anything else" do
11
- remove_site
12
- @site.reset
18
+ should "load and sort plugins" do
19
+ site = new_site
13
20
 
14
- assert_equal 0, @site.posts.length
15
- assert_equal 0, @site.gens.length
16
- assert_equal 0, @site.statics.length
17
- assert_equal 0, @site.tags.length
18
- assert_equal 0, @site.categories.length
19
- assert_equal 0, @site.layouts.length
21
+ site.plugins[:generators].each_value do |i|
22
+ assert_is_a Henshin::Generator, i
23
+ end
24
+
25
+ site.plugins[:layoutors].each do |i|
26
+ assert_is_a Henshin::Layoutor, i
27
+ end
28
+ end
29
+
30
+ end
31
+
32
+
33
+ context "Reading site" do
34
+
35
+ should "read layouts" do
36
+ site = new_site
37
+ site.read_layouts
38
+ l = Dir.glob( File.join(root_dir, 'layouts', '*.*') )
39
+ assert_equal l.size, site.layouts.size
40
+ end
41
+
42
+ should "read layouts first" do
43
+ site = new_site
44
+ site.read
45
+ if mock.instance_of(Henshin::Site).read_posts
46
+ assert site.layouts.size > 0
47
+ end
48
+ if mock.instance_of(Henshin::Site).read_gens
49
+ assert site.layouts.size > 0
50
+ end
51
+ if mock.instance_of(Henshin::Site).read_statics
52
+ assert site.layouts.size > 0
53
+ end
20
54
  end
21
55
 
22
56
  should "read posts" do
23
- @site.read_posts
57
+ site = new_site
58
+ site.read_posts
24
59
  p = Dir.glob( File.join(root_dir, 'posts', '**', '*.*') )
25
- assert_equal p.size, @site.posts.size
60
+ assert_equal p.size, site.posts.size
26
61
  end
27
62
 
28
- should "read layouts" do
29
- @site.read_layouts
30
- l = Dir.glob( File.join(root_dir, 'layouts', '*.*') )
31
- assert_equal l.size, @site.layouts.size
63
+ should "read gens" do
64
+ site = new_site
65
+ site.read_gens
66
+ # For reference these are the gens
67
+ # /css/print.sass
68
+ # /index.html
69
+ assert_equal 2, site.gens.size
32
70
  end
33
71
 
34
- should "read static files" do
35
- @site.read_statics
72
+ should "read statics" do
73
+ site = new_site
74
+ site.read_statics
36
75
  # For reference these are the static files:
37
76
  # /css/screen.css
38
77
  # /static.html
39
- assert_equal 2, @site.statics.size
78
+ assert_equal 2, site.statics.size
40
79
  end
41
80
 
42
- should "read gens" do
43
- @site.read_gens
44
- # For reference these are the gens
45
- # /css/print.sass
46
- # /css/includes/reset.sass
47
- # /index.html
48
- assert_equal 3, @site.gens.size
81
+ end
82
+
83
+ context "Processing site" do
84
+
85
+ should "process posts" do
86
+ site = new_site
87
+ site.read
88
+ site2 = new_site
89
+ site2.read.process
90
+ assert_not_equal site.posts, site2.posts
91
+ end
92
+
93
+ should "process gens" do
94
+ site = new_site
95
+ site.read
96
+ site2 = new_site
97
+ site2.read.process
98
+ assert_not_equal site.gens, site2.gens
49
99
  end
50
100
 
51
- should "have a payload" do
52
- assert @site.payload['site'].is_a? Hash
101
+ should "sort posts" do
102
+ site = new_site
103
+ site.read.process
104
+ assert_equal site.posts, site.posts.sort
53
105
  end
54
106
 
55
- should "create tags" do
56
- @site.read
57
- @site.process
107
+ should "sort gens" do
108
+ site = new_site
109
+ site.read.process
110
+ assert_equal site.gens, site.gens.sort
111
+ end
112
+
113
+ should "build tags array" do
114
+ site = new_site
115
+ site.read.process
58
116
  # For reference these are the tags:
59
117
  # test: lorem-ipsum.markdown, same-date.markdown, Testing-Stuff.markdown, Textile-Test.textile
60
118
  # markdown: Testing-Stuff.markdown
61
119
  # lorem: lorem-ipsum.markdown, same-date.markdown
62
120
  # plugin: Textile-Test.textile
63
- assert_equal 4, @site.tags.size
64
- assert_equal 4, @site.tags['test'].posts.size
121
+ assert_equal 4, site.tags.size
122
+ assert site.tags[0].is_a? Henshin::Label
123
+ assert_equal 'tag', site.tags.base
65
124
  end
66
125
 
67
- should "create categories" do
68
- @site.read
69
- @site.process
126
+ should "build categories array" do
127
+ site = new_site
128
+ site.read.process
70
129
  # For reference these are the categories:
71
130
  # cat: cat/test.markdown
72
131
  # test: Testing-Stuff.markdown
73
- assert_equal 2, @site.categories.size
74
- assert_equal 1, @site.categories['cat'].posts.size
132
+ assert_equal 2, site.categories.size
133
+ assert site.categories[0].is_a? Henshin::Label
134
+ assert_equal 'category', site.categories.base
75
135
  end
76
136
 
77
- should "create archives" do
78
- @site.read
79
- @site.process
80
- assert @site.archive.is_a? Henshin::Archive
137
+ should "build archives" do
138
+ site = new_site
139
+ site.read.process
140
+ assert site.archive.size > 0
81
141
  end
82
-
142
+
83
143
  end
144
+
145
+ context "Rendering site" do
146
+
147
+ should "render posts" do
148
+ site = new_site.read.process
149
+ site2 = new_site.read.process.render
150
+ assert_not_equal site.posts, site2.posts
151
+ end
152
+
153
+ should "render gens" do
154
+ site = new_site.read.process
155
+ site2 = new_site.read.process.render
156
+ assert_not_equal site.gens, site2.gens
157
+ end
158
+
159
+ should "not render statics" do
160
+ site = new_site
161
+ site.read.process
162
+ site2 = new_site
163
+ site2.read.process.render
164
+ assert_equal site.statics[0].content, site2.statics[0].content
165
+ end
166
+
167
+ end
168
+
169
+ context "Writing site" do
170
+
171
+ should "write posts" do
172
+
173
+ end
174
+
175
+ should "write gens" do
176
+
177
+ end
178
+
179
+ should "write statics" do
180
+
181
+ end
182
+
183
+ should "write tags" do
184
+
185
+ end
186
+
187
+ should "write categories" do
188
+
189
+ end
190
+
191
+ should "write archive" do
192
+
193
+ end
194
+
195
+ end
196
+
84
197
  end
@@ -0,0 +1,13 @@
1
+ require File.join(File.dirname(__FILE__) ,'helper')
2
+
3
+ class TestStatic < Test::Unit::TestCase
4
+ context "A static" do
5
+
6
+ should "be written to the same relative path" do
7
+ site = new_site
8
+ stat = Henshin::Static.new(site.root + "static.html", site)
9
+ assert_equal Pathname.new("#{target_dir}/static.html"), stat.write_path
10
+ end
11
+
12
+ end
13
+ end
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: henshin
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 15
4
5
  prerelease: false
5
6
  segments:
6
7
  - 0
7
- - 3
8
+ - 4
8
9
  - 0
9
- version: 0.3.0
10
+ version: 0.4.0
10
11
  platform: ruby
11
12
  authors:
12
13
  - hawx
@@ -14,16 +15,18 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2010-06-22 00:00:00 +01:00
18
- default_executable:
18
+ date: 2010-07-17 00:00:00 +01:00
19
+ default_executable: henshin
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
21
22
  name: titlecase
22
23
  prerelease: false
23
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
24
26
  requirements:
25
27
  - - ">="
26
28
  - !ruby/object:Gem::Version
29
+ hash: 27
27
30
  segments:
28
31
  - 0
29
32
  - 1
@@ -35,9 +38,11 @@ dependencies:
35
38
  name: directory_watcher
36
39
  prerelease: false
37
40
  requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
38
42
  requirements:
39
43
  - - ">="
40
44
  - !ruby/object:Gem::Version
45
+ hash: 25
41
46
  segments:
42
47
  - 1
43
48
  - 3
@@ -49,9 +54,11 @@ dependencies:
49
54
  name: maruku
50
55
  prerelease: false
51
56
  requirement: &id003 !ruby/object:Gem::Requirement
57
+ none: false
52
58
  requirements:
53
59
  - - ">="
54
60
  - !ruby/object:Gem::Version
61
+ hash: 7
55
62
  segments:
56
63
  - 0
57
64
  - 6
@@ -63,9 +70,11 @@ dependencies:
63
70
  name: liquid
64
71
  prerelease: false
65
72
  requirement: &id004 !ruby/object:Gem::Requirement
73
+ none: false
66
74
  requirements:
67
75
  - - ">="
68
76
  - !ruby/object:Gem::Version
77
+ hash: 15
69
78
  segments:
70
79
  - 2
71
80
  - 0
@@ -74,33 +83,52 @@ dependencies:
74
83
  type: :runtime
75
84
  version_requirements: *id004
76
85
  - !ruby/object:Gem::Dependency
77
- name: thoughtbot-shoulda
86
+ name: parsey
78
87
  prerelease: false
79
88
  requirement: &id005 !ruby/object:Gem::Requirement
89
+ none: false
80
90
  requirements:
81
91
  - - ">="
82
92
  - !ruby/object:Gem::Version
93
+ hash: 29
83
94
  segments:
84
95
  - 0
85
- version: "0"
86
- type: :development
96
+ - 1
97
+ - 3
98
+ version: 0.1.3
99
+ type: :runtime
87
100
  version_requirements: *id005
88
101
  - !ruby/object:Gem::Dependency
89
- name: yard
102
+ name: thoughtbot-shoulda
90
103
  prerelease: false
91
104
  requirement: &id006 !ruby/object:Gem::Requirement
105
+ none: false
92
106
  requirements:
93
107
  - - ">="
94
108
  - !ruby/object:Gem::Version
109
+ hash: 3
95
110
  segments:
96
111
  - 0
97
112
  version: "0"
98
113
  type: :development
99
114
  version_requirements: *id006
115
+ - !ruby/object:Gem::Dependency
116
+ name: yard
117
+ prerelease: false
118
+ requirement: &id007 !ruby/object:Gem::Requirement
119
+ none: false
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ hash: 3
124
+ segments:
125
+ - 0
126
+ version: "0"
127
+ type: :development
128
+ version_requirements: *id007
100
129
  description: Henshin is a static site generator, with a plugin system and more
101
130
  email: m@hawx.me
102
131
  executables:
103
- - files.rb
104
132
  - henshin
105
133
  extensions: []
106
134
 
@@ -113,14 +141,14 @@ files:
113
141
  - README.markdown
114
142
  - Rakefile
115
143
  - VERSION
116
- - bin/files.rb
117
144
  - bin/henshin
118
145
  - henshin.gemspec
119
146
  - lib/henshin.rb
120
147
  - lib/henshin/archive.rb
121
- - lib/henshin/categories.rb
148
+ - lib/henshin/exec/files.rb
122
149
  - lib/henshin/ext.rb
123
150
  - lib/henshin/gen.rb
151
+ - lib/henshin/labels.rb
124
152
  - lib/henshin/plugin.rb
125
153
  - lib/henshin/plugins/highlight.rb
126
154
  - lib/henshin/plugins/liquid.rb
@@ -130,9 +158,8 @@ files:
130
158
  - lib/henshin/post.rb
131
159
  - lib/henshin/site.rb
132
160
  - lib/henshin/static.rb
133
- - lib/henshin/tags.rb
134
161
  - test/helper.rb
135
- - test/site/css/includes/reset.sass
162
+ - test/site/css/_reset.sass
136
163
  - test/site/css/print.css
137
164
  - test/site/css/screen.sass
138
165
  - test/site/includes/head.html
@@ -154,17 +181,12 @@ files:
154
181
  - test/site/posts/lorem-ipsum.markdown
155
182
  - test/site/posts/same-date.markdown
156
183
  - test/site/static.html
157
- - test/test_archives.rb
158
- - test/test_categories.rb
159
- - test/test_gens.rb
160
- - test/test_henshin.rb
161
- - test/test_layouts.rb
184
+ - test/suite.rb
185
+ - test/test_gen.rb
162
186
  - test/test_options.rb
163
- - test/test_posts.rb
187
+ - test/test_post.rb
164
188
  - test/test_site.rb
165
- - test/test_statics.rb
166
- - test/test_tags.rb
167
- - test/text_exts.rb
189
+ - test/test_static.rb
168
190
  has_rdoc: true
169
191
  homepage: http://github.com/hawx/henshin
170
192
  licenses: []
@@ -175,37 +197,36 @@ rdoc_options:
175
197
  require_paths:
176
198
  - lib
177
199
  required_ruby_version: !ruby/object:Gem::Requirement
200
+ none: false
178
201
  requirements:
179
202
  - - ">="
180
203
  - !ruby/object:Gem::Version
204
+ hash: 3
181
205
  segments:
182
206
  - 0
183
207
  version: "0"
184
208
  required_rubygems_version: !ruby/object:Gem::Requirement
209
+ none: false
185
210
  requirements:
186
211
  - - ">="
187
212
  - !ruby/object:Gem::Version
213
+ hash: 3
188
214
  segments:
189
215
  - 0
190
216
  version: "0"
191
217
  requirements: []
192
218
 
193
219
  rubyforge_project:
194
- rubygems_version: 1.3.6
220
+ rubygems_version: 1.3.7
195
221
  signing_key:
196
222
  specification_version: 3
197
223
  summary: Henshin is a static site generator
198
224
  test_files:
199
225
  - test/helper.rb
200
226
  - test/site/plugins/test.rb
201
- - test/test_archives.rb
202
- - test/test_categories.rb
203
- - test/test_gens.rb
204
- - test/test_henshin.rb
205
- - test/test_layouts.rb
227
+ - test/suite.rb
228
+ - test/test_gen.rb
206
229
  - test/test_options.rb
207
- - test/test_posts.rb
230
+ - test/test_post.rb
208
231
  - test/test_site.rb
209
- - test/test_statics.rb
210
- - test/test_tags.rb
211
- - test/text_exts.rb
232
+ - test/test_static.rb