retter 0.1.0 → 0.1.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.
Files changed (45) hide show
  1. data/.gitignore +1 -0
  2. data/.travis.yml +1 -0
  3. data/README.md +54 -4
  4. data/bin/retter +2 -0
  5. data/lib/retter/command.rb +37 -41
  6. data/lib/retter/config.rb +94 -84
  7. data/lib/retter/entries.rb +93 -0
  8. data/lib/retter/entry.rb +46 -9
  9. data/lib/retter/generator/skel/images/orange/ic_li01.gif +0 -0
  10. data/lib/retter/generator/skel/layouts/article.html.haml +16 -3
  11. data/lib/retter/generator/skel/layouts/entries.html.haml +2 -2
  12. data/lib/retter/generator/skel/layouts/entry.html.haml +17 -3
  13. data/lib/retter/generator/skel/layouts/index.html.haml +14 -4
  14. data/lib/retter/generator/skel/stylesheets/base.css +1 -1
  15. data/lib/retter/generator/skel/stylesheets/orange.css +17 -2
  16. data/lib/retter/page/view_helper.rb +33 -0
  17. data/lib/retter/page.rb +86 -0
  18. data/lib/retter/pages/archive.rb +13 -0
  19. data/lib/retter/pages/article.rb +35 -0
  20. data/lib/retter/pages/entry.rb +28 -0
  21. data/lib/retter/pages/feed.rb +46 -0
  22. data/lib/retter/pages/index.rb +13 -0
  23. data/lib/retter/pages/profile.rb +13 -0
  24. data/lib/retter/pages.rb +40 -0
  25. data/lib/retter/preprint.rb +21 -0
  26. data/lib/retter/{stationery/renderer.rb → renderer.rb} +1 -1
  27. data/lib/retter/repository.rb +21 -0
  28. data/lib/retter/version.rb +1 -1
  29. data/lib/retter.rb +36 -3
  30. data/retter.gemspec +31 -0
  31. data/spec/command/callback_spec.rb +1 -1
  32. data/spec/command/commit_spec.rb +1 -1
  33. data/spec/command/edit_spec.rb +1 -1
  34. data/spec/command/invoke_after_spec.rb +2 -2
  35. data/spec/command/list_spec.rb +47 -0
  36. data/spec/command/open_spec.rb +1 -1
  37. data/spec/command/preview_spec.rb +1 -1
  38. data/spec/command/rebind_spec.rb +8 -8
  39. data/spec/spec_helper.rb +2 -0
  40. data/spec/support/stream_capture.rb +16 -0
  41. metadata +84 -39
  42. data/lib/retter/stationery/binder.rb +0 -150
  43. data/lib/retter/stationery/previewer.rb +0 -64
  44. data/lib/retter/stationery/view.rb +0 -68
  45. data/lib/retter/stationery.rb +0 -47
@@ -9,7 +9,7 @@ describe 'Retter::Command#rebind', clean: :all do
9
9
  let(:date_html) { retter_config.entry_file(Date.parse(date_str)) }
10
10
 
11
11
  before do
12
- command.stub!(:config) { retter_config }
12
+ Retter.stub!(:config) { retter_config }
13
13
  end
14
14
 
15
15
  context 'first post' do
@@ -41,14 +41,14 @@ describe 'Retter::Command#rebind', clean: :all do
41
41
  let(:index_html) { retter_config.index_file.read }
42
42
 
43
43
  it { texts_of(index_html, 'article p').should include('おはようございます') }
44
- it { texts_of(index_html, 'article h1.date').should == %w(2011/01/01) }
45
- it { texts_of(index_html, 'article h1').should == %w(2011/01/01 朝11時 夜1時) }
44
+ it { texts_of(index_html, 'article h1.date').should == %w(2011-01-01) }
45
+ it { texts_of(index_html, 'article h1').should == %w(2011-01-01 朝11時 夜1時) }
46
46
  end
47
47
 
48
48
  describe 'entries.html' do
49
49
  let(:entries_html) { retter_config.entries_file.read }
50
50
 
51
- it { texts_of(entries_html, 'a.entry').first.should == '2011/01/01' }
51
+ it { texts_of(entries_html, 'a.entry').first.should == '2011-01-01' }
52
52
  it { texts_of(entries_html, 'a.title').should == %w(朝11時 夜1時) }
53
53
  end
54
54
 
@@ -56,8 +56,8 @@ describe 'Retter::Command#rebind', clean: :all do
56
56
  let(:entry_html) { retter_config.entry_file(Date.parse(date_str)).read }
57
57
 
58
58
  it { texts_of(entry_html, 'article p').should == %w(おはようございます おやすみなさい) }
59
- it { texts_of(entry_html, 'article h1.date').should == %w(2011/01/01) }
60
- it { texts_of(entry_html, 'article h1').should == %w(2011/01/01 朝11時 夜1時) }
59
+ it { texts_of(entry_html, 'article h1.date').should == %w(2011-01-01) }
60
+ it { texts_of(entry_html, 'article h1').should == %w(2011-01-01 朝11時 夜1時) }
61
61
  end
62
62
 
63
63
  describe 'entry part(first)' do
@@ -71,7 +71,7 @@ describe 'Retter::Command#rebind', clean: :all do
71
71
 
72
72
  describe 'date' do
73
73
  subject { texts_of(part_html, 'article h1.date') }
74
- it { should == %w(2011/01/01) }
74
+ it { should == %w(2011-01-01) }
75
75
  end
76
76
 
77
77
  describe 'headings' do
@@ -92,7 +92,7 @@ describe 'Retter::Command#rebind', clean: :all do
92
92
 
93
93
  describe 'date' do
94
94
  subject { texts_of(part_html, 'article h1.date') }
95
- it { should == %w(2011/01/01) }
95
+ it { should == %w(2011-01-01) }
96
96
  end
97
97
 
98
98
  describe 'headings' do
data/spec/spec_helper.rb CHANGED
@@ -23,8 +23,10 @@ RSpec.configure do |config|
23
23
 
24
24
  config.after(:each, clean: :all) do
25
25
  FileUtils.rm_rf retter_home
26
+ Retter.reset_entries!
26
27
  end
27
28
 
28
29
  config.include Retter::ConfigSupport
29
30
  config.include Retter::HTMLSupport
31
+ config.include Retter::StreamSupport
30
32
  end
@@ -0,0 +1,16 @@
1
+ # coding: utf-8
2
+
3
+ module Retter::StreamSupport
4
+ def capture(stream)
5
+ begin
6
+ stream = stream.to_s
7
+ eval "$#{stream} = StringIO.new"
8
+ yield
9
+ result = eval("$#{stream}").string
10
+ ensure
11
+ eval("$#{stream} = #{stream.upcase}")
12
+ end
13
+
14
+ result
15
+ end
16
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: retter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2011-10-11 00:00:00.000000000Z
13
+ date: 2011-10-22 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: thor
17
- requirement: &70099608665480 !ruby/object:Gem::Requirement
17
+ requirement: &70200204506680 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: 0.14.6
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *70099608665480
25
+ version_requirements: *70200204506680
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: builder
28
- requirement: &70099608664900 !ruby/object:Gem::Requirement
28
+ requirement: &70200204506160 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: 3.0.0
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *70099608664900
36
+ version_requirements: *70200204506160
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: redcarpet
39
- requirement: &70099608664340 !ruby/object:Gem::Requirement
39
+ requirement: &70200204505680 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ! '>='
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: 2.0.0b3
45
45
  type: :runtime
46
46
  prerelease: false
47
- version_requirements: *70099608664340
47
+ version_requirements: *70200204505680
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: coderay
50
- requirement: &70099608663780 !ruby/object:Gem::Requirement
50
+ requirement: &70200204505200 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ! '>='
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: 0.9.8
56
56
  type: :runtime
57
57
  prerelease: false
58
- version_requirements: *70099608663780
58
+ version_requirements: *70200204505200
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: nokogiri
61
- requirement: &70099608663200 !ruby/object:Gem::Requirement
61
+ requirement: &70200204504720 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ! '>='
@@ -66,10 +66,10 @@ dependencies:
66
66
  version: 1.5.0
67
67
  type: :runtime
68
68
  prerelease: false
69
- version_requirements: *70099608663200
69
+ version_requirements: *70200204504720
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: launchy
72
- requirement: &70099608662620 !ruby/object:Gem::Requirement
72
+ requirement: &70200204504240 !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
75
  - - ! '>='
@@ -77,10 +77,10 @@ dependencies:
77
77
  version: 2.0.5
78
78
  type: :runtime
79
79
  prerelease: false
80
- version_requirements: *70099608662620
80
+ version_requirements: *70200204504240
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: haml
83
- requirement: &70099608662020 !ruby/object:Gem::Requirement
83
+ requirement: &70200204503760 !ruby/object:Gem::Requirement
84
84
  none: false
85
85
  requirements:
86
86
  - - ! '>='
@@ -88,10 +88,10 @@ dependencies:
88
88
  version: 3.1.3
89
89
  type: :runtime
90
90
  prerelease: false
91
- version_requirements: *70099608662020
91
+ version_requirements: *70200204503760
92
92
  - !ruby/object:Gem::Dependency
93
93
  name: bundler
94
- requirement: &70099608661500 !ruby/object:Gem::Requirement
94
+ requirement: &70200204503280 !ruby/object:Gem::Requirement
95
95
  none: false
96
96
  requirements:
97
97
  - - ! '>='
@@ -99,10 +99,10 @@ dependencies:
99
99
  version: '1.0'
100
100
  type: :runtime
101
101
  prerelease: false
102
- version_requirements: *70099608661500
102
+ version_requirements: *70200204503280
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: grit
105
- requirement: &70099608660900 !ruby/object:Gem::Requirement
105
+ requirement: &70200204502800 !ruby/object:Gem::Requirement
106
106
  none: false
107
107
  requirements:
108
108
  - - ! '>='
@@ -110,10 +110,32 @@ dependencies:
110
110
  version: 2.4.1
111
111
  type: :runtime
112
112
  prerelease: false
113
- version_requirements: *70099608660900
113
+ version_requirements: *70200204502800
114
+ - !ruby/object:Gem::Dependency
115
+ name: activesupport
116
+ requirement: &70200204502320 !ruby/object:Gem::Requirement
117
+ none: false
118
+ requirements:
119
+ - - ! '>='
120
+ - !ruby/object:Gem::Version
121
+ version: 3.1.0
122
+ type: :runtime
123
+ prerelease: false
124
+ version_requirements: *70200204502320
125
+ - !ruby/object:Gem::Dependency
126
+ name: i18n
127
+ requirement: &70200204501840 !ruby/object:Gem::Requirement
128
+ none: false
129
+ requirements:
130
+ - - ! '>='
131
+ - !ruby/object:Gem::Version
132
+ version: 0.6.0
133
+ type: :runtime
134
+ prerelease: false
135
+ version_requirements: *70200204501840
114
136
  - !ruby/object:Gem::Dependency
115
137
  name: rake
116
- requirement: &70099608660380 !ruby/object:Gem::Requirement
138
+ requirement: &70200204501360 !ruby/object:Gem::Requirement
117
139
  none: false
118
140
  requirements:
119
141
  - - ! '>='
@@ -121,10 +143,10 @@ dependencies:
121
143
  version: 0.9.2
122
144
  type: :development
123
145
  prerelease: false
124
- version_requirements: *70099608660380
146
+ version_requirements: *70200204501360
125
147
  - !ruby/object:Gem::Dependency
126
148
  name: ir_b
127
- requirement: &70099608659820 !ruby/object:Gem::Requirement
149
+ requirement: &70200204500880 !ruby/object:Gem::Requirement
128
150
  none: false
129
151
  requirements:
130
152
  - - ! '>='
@@ -132,10 +154,10 @@ dependencies:
132
154
  version: 1.4.0
133
155
  type: :development
134
156
  prerelease: false
135
- version_requirements: *70099608659820
157
+ version_requirements: *70200204500880
136
158
  - !ruby/object:Gem::Dependency
137
159
  name: tapp
138
- requirement: &70099608659240 !ruby/object:Gem::Requirement
160
+ requirement: &70200204500400 !ruby/object:Gem::Requirement
139
161
  none: false
140
162
  requirements:
141
163
  - - ! '>='
@@ -143,10 +165,10 @@ dependencies:
143
165
  version: 1.1.0
144
166
  type: :development
145
167
  prerelease: false
146
- version_requirements: *70099608659240
168
+ version_requirements: *70200204500400
147
169
  - !ruby/object:Gem::Dependency
148
170
  name: rspec
149
- requirement: &70099608658740 !ruby/object:Gem::Requirement
171
+ requirement: &70200204499920 !ruby/object:Gem::Requirement
150
172
  none: false
151
173
  requirements:
152
174
  - - ! '>='
@@ -154,10 +176,10 @@ dependencies:
154
176
  version: 2.6.0
155
177
  type: :development
156
178
  prerelease: false
157
- version_requirements: *70099608658740
179
+ version_requirements: *70200204499920
158
180
  - !ruby/object:Gem::Dependency
159
181
  name: fuubar
160
- requirement: &70099608658160 !ruby/object:Gem::Requirement
182
+ requirement: &70200204499440 !ruby/object:Gem::Requirement
161
183
  none: false
162
184
  requirements:
163
185
  - - ! '>='
@@ -165,10 +187,10 @@ dependencies:
165
187
  version: 0.0.6
166
188
  type: :development
167
189
  prerelease: false
168
- version_requirements: *70099608658160
190
+ version_requirements: *70200204499440
169
191
  - !ruby/object:Gem::Dependency
170
192
  name: simplecov
171
- requirement: &70099608657600 !ruby/object:Gem::Requirement
193
+ requirement: &70200204498960 !ruby/object:Gem::Requirement
172
194
  none: false
173
195
  requirements:
174
196
  - - ! '>='
@@ -176,7 +198,7 @@ dependencies:
176
198
  version: 0.5.3
177
199
  type: :development
178
200
  prerelease: false
179
- version_requirements: *70099608657600
201
+ version_requirements: *70200204498960
180
202
  description: Flyweight diary workflow. ruby-1.9.2 or later is required.
181
203
  email:
182
204
  - celluloid.key@gmail.com
@@ -195,6 +217,7 @@ files:
195
217
  - lib/retter.rb
196
218
  - lib/retter/command.rb
197
219
  - lib/retter/config.rb
220
+ - lib/retter/entries.rb
198
221
  - lib/retter/entry.rb
199
222
  - lib/retter/generator.rb
200
223
  - lib/retter/generator/base.rb
@@ -208,6 +231,7 @@ files:
208
231
  - lib/retter/generator/skel/images/orange/bg_body.jpg
209
232
  - lib/retter/generator/skel/images/orange/bg_entry.jpg
210
233
  - lib/retter/generator/skel/images/orange/bg_header.png
234
+ - lib/retter/generator/skel/images/orange/ic_li01.gif
211
235
  - lib/retter/generator/skel/index.html
212
236
  - lib/retter/generator/skel/javascripts/.gitkeep
213
237
  - lib/retter/generator/skel/layouts/article.html.haml
@@ -221,17 +245,25 @@ files:
221
245
  - lib/retter/generator/skel/stylesheets/orange.css
222
246
  - lib/retter/generator/skel/stylesheets/retter.css
223
247
  - lib/retter/generator/updator.rb
224
- - lib/retter/stationery.rb
225
- - lib/retter/stationery/binder.rb
226
- - lib/retter/stationery/previewer.rb
227
- - lib/retter/stationery/renderer.rb
228
- - lib/retter/stationery/view.rb
248
+ - lib/retter/page.rb
249
+ - lib/retter/page/view_helper.rb
250
+ - lib/retter/pages.rb
251
+ - lib/retter/pages/archive.rb
252
+ - lib/retter/pages/article.rb
253
+ - lib/retter/pages/entry.rb
254
+ - lib/retter/pages/feed.rb
255
+ - lib/retter/pages/index.rb
256
+ - lib/retter/pages/profile.rb
257
+ - lib/retter/preprint.rb
258
+ - lib/retter/renderer.rb
259
+ - lib/retter/repository.rb
229
260
  - lib/retter/version.rb
230
261
  - retter.gemspec
231
262
  - spec/command/callback_spec.rb
232
263
  - spec/command/commit_spec.rb
233
264
  - spec/command/edit_spec.rb
234
265
  - spec/command/invoke_after_spec.rb
266
+ - spec/command/list_spec.rb
235
267
  - spec/command/open_spec.rb
236
268
  - spec/command/preview_spec.rb
237
269
  - spec/command/rebind_spec.rb
@@ -239,10 +271,21 @@ files:
239
271
  - spec/support/config_support.rb
240
272
  - spec/support/html_support.rb
241
273
  - spec/support/matchers.rb
274
+ - spec/support/stream_capture.rb
242
275
  - tmp/.gitkeep
243
276
  homepage: https://github.com/hibariya/retter
244
277
  licenses: []
245
- post_install_message:
278
+ post_install_message: ! " **Important** Some features were added or updated.\n\n
279
+ \ * Article has Permlink in retter-0.1.0 or later.\n If error occured, try
280
+ overwrite templates by `retter gen $RETTER_HOME`. (overwrite layouts/*.html.haml)\n\n
281
+ \ * Relative date is now available in `--date` option.\n Examples:\n $
282
+ retter edit yesterday\n $ retter edit today\n $ retter edit tomorrow\n
283
+ \ $ retter preview 2.days.ago\n\n * `--key` option is now available in
284
+ edit (and preview).\n Examples:\n $ retter list\n [e0] 2011-10-12
285
+ \ article3, article4\n [e1] 2011-10-10 article1, article2\n $ retter
286
+ edit --key e0\n ... or ...\n $ retter edit e0\n\n * Default date
287
+ format has changed.\n 2011/01/01 -> 2011-01-01\n\n -- Thanks for flying
288
+ Retter :-> --\n"
246
289
  rdoc_options: []
247
290
  require_paths:
248
291
  - lib
@@ -260,7 +303,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
260
303
  version: '0'
261
304
  requirements: []
262
305
  rubyforge_project:
263
- rubygems_version: 1.8.6
306
+ rubygems_version: 1.8.10
264
307
  signing_key:
265
308
  specification_version: 3
266
309
  summary: Flyweight diary workflow
@@ -269,6 +312,7 @@ test_files:
269
312
  - spec/command/commit_spec.rb
270
313
  - spec/command/edit_spec.rb
271
314
  - spec/command/invoke_after_spec.rb
315
+ - spec/command/list_spec.rb
272
316
  - spec/command/open_spec.rb
273
317
  - spec/command/preview_spec.rb
274
318
  - spec/command/rebind_spec.rb
@@ -276,3 +320,4 @@ test_files:
276
320
  - spec/support/config_support.rb
277
321
  - spec/support/html_support.rb
278
322
  - spec/support/matchers.rb
323
+ - spec/support/stream_capture.rb
@@ -1,150 +0,0 @@
1
- # coding: utf-8
2
-
3
- module Retter::Stationery
4
- class Binder
5
- attr_reader :config, :entries
6
-
7
- extend Forwardable
8
-
9
- def_delegators :@config, *Retter::Config.delegatables
10
-
11
- def initialize(config)
12
- @config = config
13
- end
14
-
15
- def rebind!
16
- commit_wip_file
17
-
18
- @entries = Retter::Stationery.scan(retters_dir)
19
-
20
- bind_entries
21
- print_index
22
- print_profile
23
- print_rss
24
- end
25
-
26
- def commit_wip_file
27
- if wip_file.exist?
28
- html = wip_file.read
29
- retter_file(Date.today).open('a') {|f| f.puts html }
30
- wip_file.unlink
31
- end
32
- end
33
-
34
- def bind_entries
35
- @entries.each do |entry|
36
- print_entry entry
37
- print_articles entry
38
- end
39
-
40
- print_toc
41
- end
42
-
43
- def print_entry(entry)
44
- title = "#{entry.date.strftime('%Y/%m/%d')} - #{config.title}"
45
- part = entry_renderer.render(view_scope, entry: entry)
46
- html = layout_renderer.render(view_scope, content: part, title: title)
47
-
48
- entry_file(entry.date).open('w') do |f|
49
- f.puts View::Helper.fix_path(html, '../')
50
- end
51
- end
52
-
53
- def print_articles(entry)
54
- return if entry.articles.empty?
55
-
56
- entry_dir = config.entry_dir(entry.date)
57
- entry_dir.mkdir unless entry_dir.directory?
58
-
59
- entry.articles.each do |article|
60
- title = "#{article.title} - #{config.title}"
61
- part = article_renderer.render(view_scope, entry: entry, article: article)
62
- html = layout_renderer.render(view_scope, content: part, title: title)
63
-
64
- entry_dir.join("#{article.id}.html").open('w') do |f|
65
- f.puts View::Helper.fix_path(html, '../../')
66
- end
67
- end
68
- end
69
-
70
- def print_index
71
- part = Haml::Engine.new(index_layout_file.read, ugly: true).render(view_scope)
72
- html = layout_renderer.render(view_scope, content: part, title: config.title)
73
-
74
- index_file.open('w') do |f|
75
- f.puts View::Helper.fix_path(html, './')
76
- end
77
- end
78
-
79
- def print_profile
80
- part = Haml::Engine.new(profile_layout_file.read, ugly: true).render(view_scope)
81
- html = layout_renderer.render(view_scope, content: part, title: config.title)
82
-
83
- profile_file.open('w') do |f|
84
- f.puts View::Helper.fix_path(html, './')
85
- end
86
- end
87
-
88
- def print_toc
89
- part = Haml::Engine.new(entries_layout_file.read, ugly: true).render(view_scope)
90
- html = layout_renderer.render(view_scope, content: part, title: config.title)
91
-
92
- entries_file.open('w') do |f|
93
- f.puts View::Helper.fix_path(html, './')
94
- end
95
- end
96
-
97
- def print_rss
98
- feed_file.open('w') {|f| f.puts rss }
99
- end
100
-
101
- def rss
102
- xml = Builder::XmlMarkup.new
103
- xml.instruct!
104
- xml.rdf:RDF, :xmlns => 'http://purl.org/rss/1.0/',
105
- :'xmlns:rdf' => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',
106
- :'xmlns:dc' => 'http://purl.org/dc/elements/1.1/',
107
- :'xml:lang' => 'ja' do
108
- xml.channel :'rdf:about' => url do
109
- xml.title title
110
- xml.link url
111
- xml.dc:date, entries.first.date
112
- xml.description description
113
- xml.items { xml.rdf(:Seq) { entries.each {|e| xml.rdf:li, :'rdf:resource' => entry_url(e.date) } } }
114
- end
115
-
116
- entries.each do |entry|
117
- xml.item about: entry_url(entry.date) do
118
- xml.title entry.date.strftime('%Y/%m/%d')
119
- xml.description { xml.cdata! entry.body }
120
- xml.dc:date, entry.date
121
- xml.link entry_url(entry.date)
122
- xml.author author
123
- end
124
- end
125
- end
126
- end
127
-
128
- def entry_url(date, id = nil)
129
- (URI.parse(url) + date.strftime('/entries/%Y%m%d.html')).to_s
130
- end
131
-
132
- private
133
-
134
- def view_scope
135
- @view_scope ||= View::Scope.new(config, entries: entries)
136
- end
137
-
138
- def layout_renderer
139
- @layout_renderer ||= Haml::Engine.new(layout_file.read, ugly: true)
140
- end
141
-
142
- def entry_renderer
143
- @entry_renderer ||= Haml::Engine.new(entry_layout_file.read, ugly: true)
144
- end
145
-
146
- def article_renderer
147
- @article_renderer ||= Haml::Engine.new(article_layout_file.read, ugly: true)
148
- end
149
- end
150
- end
@@ -1,64 +0,0 @@
1
- # coding: utf-8
2
-
3
- module Retter::Stationery
4
- class Previewer
5
- attr_reader :config
6
-
7
- extend Forwardable
8
-
9
- def_delegators :@config, *Retter::Config.delegatables
10
-
11
- def initialize(config, date)
12
- @config, @date = config, date
13
- @body, @entry = *nil
14
-
15
- load_retter_file
16
- load_wip_entry_if_needed
17
- end
18
-
19
- def print
20
- build_entry
21
- print_html
22
- end
23
-
24
- def file_path
25
- config.retter_home.join '.preview.html'
26
- end
27
-
28
- private
29
-
30
- def load_retter_file
31
- retter_file = retter_file(@date)
32
- @body = retter_file.exist? ? retter_file.read : ''
33
- end
34
-
35
- def load_wip_entry_if_needed
36
- if @date == Date.today && wip_file.exist?
37
- @body = [@body, wip_file.read].join("\n")
38
- end
39
- end
40
-
41
- def build_entry
42
- body_html = Retter::Stationery.markupper.render(@body)
43
- @entry = Retter::Entry.new(date: @date, body: body_html)
44
- end
45
-
46
- def print_html
47
- scope = View::Scope.new(config)
48
- part = entry_renderer.render(scope, entry: @entry)
49
- html = renderer.render(scope, content: part, title: config.title, entries: [@entry])
50
-
51
- file_path.open('w') do |file|
52
- file.puts View::Helper.fix_path(html, './')
53
- end
54
- end
55
-
56
- def renderer
57
- Haml::Engine.new(layout_file.read, ugly: true)
58
- end
59
-
60
- def entry_renderer
61
- Haml::Engine.new(entry_layout_file.read, ugly: true)
62
- end
63
- end
64
- end
@@ -1,68 +0,0 @@
1
- # coding: utf-8
2
-
3
- module Retter::Stationery::View
4
- module Helper
5
- extend self
6
-
7
- def fix_path(html, prefix='./')
8
- elements = Nokogiri::HTML(html)
9
-
10
- fix_href_path(fix_src_path(elements, prefix), prefix).to_s
11
- end
12
-
13
- def entry_path(date, id = nil)
14
- date.strftime('/entries/%Y%m%d.html') + (id ? "##{id}" : '')
15
- end
16
-
17
- def article_path(date, id)
18
- date.strftime("/entries/%Y%m%d/#{id}.html")
19
- end
20
-
21
- private
22
-
23
- def fix_src_path(elements, prefix = './')
24
- elements.search("[src!=''][src!='']").each do |el|
25
- src = el.attr('src').scan(/[^\.\/]{3}.*/).first
26
- next if src =~ /^(?:http|https):\/\//
27
-
28
- el.set_attribute 'src', [prefix, src].join
29
- end
30
-
31
- elements
32
- end
33
-
34
- def fix_href_path(elements, prefix = './')
35
- elements.search("[href][href!='#']").each do |el|
36
- href = el.attr('href')
37
- next if href =~ /^(?:http|https):\/\//
38
-
39
- if href == '/'
40
- el.set_attribute 'href', [prefix, 'index.html'].join
41
- else
42
- el.set_attribute 'href', [prefix, href.scan(/[^\.\/]{3}.*/).first].join
43
- end
44
- end
45
-
46
- elements
47
- end
48
-
49
- end
50
-
51
- class Scope
52
- attr_reader :config
53
- attr_accessor :assigns
54
-
55
- include Helper
56
- extend Forwardable
57
-
58
- def_delegators :@config, *Retter::Config.delegatables
59
-
60
- [:entries].each do |meth|
61
- define_method(meth) { @assigns[meth] }
62
- end
63
-
64
- def initialize(config, assigns = {})
65
- @config, @assigns = config, assigns
66
- end
67
- end
68
- end