retter 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
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