runeblog 0.2.2 → 0.2.8
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.
- checksums.yaml +4 -4
- data/empty_view.tgz +0 -0
- data/lib/BAD.liveblog.rb +724 -0
- data/lib/KEEP.liveblog +646 -0
- data/lib/NEW-liveblog.rb +757 -0
- data/lib/OLD-liveblog.rb +661 -0
- data/lib/default.rb +1 -0
- data/lib/global.rb +5 -0
- data/lib/helpers-blog.rb +40 -14
- data/lib/liveblog.rb +60 -71
- data/lib/logging.rb +58 -0
- data/lib/post.rb +9 -0
- data/lib/publish.rb +7 -0
- data/lib/runeblog.rb +83 -62
- data/lib/runeblog_version.rb +1 -1
- data/lib/view.rb +8 -0
- data/runeblog.gemspec +3 -1
- data/test/make_blog.rb +11 -4
- data/themes/standard/blog/index.lt3 +3 -4
- data/themes/standard/blog/recent.lt3 +2 -0
- data/themes/standard/post/generate.lt3 +0 -2
- data/themes/standard/widgets/news/news.lt3 +1 -2
- data/themes/standard/widgets/pages/disclaim.html +6 -0
- data/themes/standard/widgets/pages/disclaim.lt3 +2 -3
- data/themes/standard/widgets/pages/faq.html +7 -0
- data/themes/standard/widgets/pages/faq.lt3 +1 -1
- data/themes/standard/widgets/pages/lifestory.html +7 -0
- data/themes/standard/widgets/pages/lifestory.lt3 +1 -1
- data/themes/standard/widgets/pages/like-dislike.html +7 -0
- data/themes/standard/widgets/pages/like-dislike.lt3 +1 -1
- data/themes/standard/widgets/pages/list.data +4 -4
- data/themes/standard/widgets/pages/pages.lt3 +2 -0
- metadata +14 -3
- data/themes/standard/widgets/pages/main.lt3 +0 -18
data/lib/publish.rb
CHANGED
@@ -9,6 +9,7 @@ class RuneBlog::Publishing
|
|
9
9
|
BadRemotePerms = Exception.new("Bad remote permissions")
|
10
10
|
|
11
11
|
def initialize(*params)
|
12
|
+
log!(enter: __method__, args: [*params])
|
12
13
|
@blog = RuneBlog.blog
|
13
14
|
# Clunky...
|
14
15
|
if params.size == 1 && params[0].is_a?(OpenStruct)
|
@@ -22,21 +23,25 @@ class RuneBlog::Publishing
|
|
22
23
|
end
|
23
24
|
|
24
25
|
def to_h
|
26
|
+
log!(enter: __method__)
|
25
27
|
{user: @user, server: @server, docroot: @docroot,
|
26
28
|
path: @path, proto: @proto}
|
27
29
|
end
|
28
30
|
|
29
31
|
def url
|
32
|
+
log!(enter: __method__)
|
30
33
|
vname = @blog.view.name # .gsub(/_/, "\\_")
|
31
34
|
url = "#@proto://#@server/#@path/#{vname}"
|
32
35
|
end
|
33
36
|
|
34
37
|
def system!(str)
|
38
|
+
log!(enter: __method__, args: [str])
|
35
39
|
rc = system(str)
|
36
40
|
rc
|
37
41
|
end
|
38
42
|
|
39
43
|
def publish(files, assets=[])
|
44
|
+
log!(enter: __method__, args: [files, assets])
|
40
45
|
dir = "#@docroot/#@path"
|
41
46
|
view_name = @blog.view.name
|
42
47
|
viewpath = "#{dir}/#{view_name}"
|
@@ -60,6 +65,7 @@ class RuneBlog::Publishing
|
|
60
65
|
end
|
61
66
|
|
62
67
|
def remote_login?
|
68
|
+
log!(enter: __method__)
|
63
69
|
cmd = "ssh -o BatchMode=yes #@user@#@server -x date >/dev/null 2>&1"
|
64
70
|
result = system(cmd)
|
65
71
|
return nil unless result
|
@@ -67,6 +73,7 @@ class RuneBlog::Publishing
|
|
67
73
|
end
|
68
74
|
|
69
75
|
def remote_permissions?
|
76
|
+
log!(enter: __method__)
|
70
77
|
dir = "#@docroot/#@path"
|
71
78
|
temp = "#@path/__only_testing"
|
72
79
|
try1 = system("ssh -o BatchMode=yes -o ConnectTimeout=1 #@user@#@server -x mkdir -p #{temp} >/dev/null 2>&1")
|
data/lib/runeblog.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
require 'date'
|
2
2
|
|
3
|
+
require 'logging'
|
4
|
+
|
3
5
|
require 'runeblog_version'
|
4
6
|
require 'global'
|
5
7
|
require 'helpers-blog'
|
@@ -26,7 +28,6 @@ class RuneBlog
|
|
26
28
|
make_exception(:NoSuchView, "No such view: $1")
|
27
29
|
make_exception(:NoBlogAccessor, "Runeblog.blog is not set")
|
28
30
|
|
29
|
-
|
30
31
|
class << self
|
31
32
|
attr_accessor :blog
|
32
33
|
include Helpers
|
@@ -40,6 +41,7 @@ class RuneBlog
|
|
40
41
|
include Helpers
|
41
42
|
|
42
43
|
def self.create_new_blog_repo(dir = ".blogs")
|
44
|
+
log!(enter: __method__, args: [dir])
|
43
45
|
raise ArgumentError unless dir.is_a?(String) && ! dir.empty?
|
44
46
|
root_dir = Dir.pwd + "/" + dir
|
45
47
|
self.create(dir)
|
@@ -49,6 +51,7 @@ class RuneBlog
|
|
49
51
|
end
|
50
52
|
|
51
53
|
def self.create(root = ".blogs")
|
54
|
+
log!(enter: __method__, args: [root])
|
52
55
|
# Crude - FIXME later - # What views are there? Publishing, etc.
|
53
56
|
self.blog = self # Weird. Like a singleton - dumbass circular dependency?
|
54
57
|
$_blog = self # Dumber still?
|
@@ -56,6 +59,7 @@ class RuneBlog
|
|
56
59
|
raise BlogRepoAlreadyExists if Dir.exist?(root)
|
57
60
|
create_dirs(root)
|
58
61
|
Dir.chdir(root) do
|
62
|
+
system("cp #{RuneBlog::Path}/../empty_view.tgz .")
|
59
63
|
create_dirs(:drafts, :views)
|
60
64
|
new_sequence
|
61
65
|
end
|
@@ -66,6 +70,7 @@ class RuneBlog
|
|
66
70
|
end
|
67
71
|
|
68
72
|
def self.open(root = ".blogs")
|
73
|
+
log!(enter: __method__, args: [root])
|
69
74
|
# Crude - FIXME later - # What views are there? Publishing, etc.
|
70
75
|
self.blog = self # Weird. Like a singleton - dumbass circular dependency?
|
71
76
|
$_blog = self # Dumber still?
|
@@ -74,6 +79,7 @@ class RuneBlog
|
|
74
79
|
end
|
75
80
|
|
76
81
|
def initialize(root_dir = ".blogs") # always assumes existing blog
|
82
|
+
log!(enter: "initialize", args: [root_dir])
|
77
83
|
# Crude - FIXME later - # What views are there? Publishing, etc.
|
78
84
|
self.class.blog = self # Weird. Like a singleton - dumbass circular dependency?
|
79
85
|
$_blog = self # Dumber still?
|
@@ -94,32 +100,36 @@ class RuneBlog
|
|
94
100
|
end
|
95
101
|
|
96
102
|
def inspect
|
97
|
-
|
103
|
+
log!(enter: __method__)
|
104
|
+
str = "blog: "
|
98
105
|
ivars = ["@root", "@sequence"] # self.instance_variables
|
99
106
|
ivars.each do |iv|
|
100
107
|
val = self.instance_variable_get(iv)
|
101
|
-
str << "#{iv}
|
108
|
+
str << "#{iv}: #{val} "
|
102
109
|
end
|
103
|
-
str << "]]"
|
104
110
|
str
|
105
111
|
end
|
106
112
|
|
107
113
|
def view?(name)
|
114
|
+
log!(enter: __method__, args: [name])
|
108
115
|
raise ArgumentError unless name.is_a?(String) && ! name.empty?
|
109
116
|
views.any? {|x| x.name == name }
|
110
117
|
end
|
111
118
|
|
112
119
|
def view(name = nil)
|
120
|
+
log!(enter: __method__, args: [name])
|
113
121
|
raise ArgumentError unless name.nil? || (name.is_a?(String) && ! name.empty?)
|
114
122
|
name.nil? ? @view : str2view(name)
|
115
123
|
end
|
116
124
|
|
117
125
|
def str2view(str)
|
126
|
+
log!(enter: __method__, args: [str])
|
118
127
|
raise ArgumentError unless str.is_a?(String) && ! str.empty?
|
119
128
|
@views.find {|x| x.name == str }
|
120
129
|
end
|
121
130
|
|
122
131
|
def _set_publisher
|
132
|
+
log!(enter: __method__)
|
123
133
|
file = @view.dir + "/publish"
|
124
134
|
@view.publisher = nil
|
125
135
|
return unless File.exist?(file)
|
@@ -127,6 +137,7 @@ class RuneBlog
|
|
127
137
|
end
|
128
138
|
|
129
139
|
def view=(arg)
|
140
|
+
log!(enter: __method__, args: [arg])
|
130
141
|
case arg
|
131
142
|
when RuneBlog::View
|
132
143
|
@view = arg
|
@@ -142,16 +153,19 @@ class RuneBlog
|
|
142
153
|
end
|
143
154
|
|
144
155
|
def get_sequence
|
156
|
+
log!(enter: __method__)
|
145
157
|
File.read(root + "/sequence").to_i
|
146
158
|
end
|
147
159
|
|
148
160
|
def next_sequence
|
161
|
+
log!(enter: __method__)
|
149
162
|
@sequence += 1
|
150
163
|
dump(@sequence, "#@root/sequence")
|
151
164
|
@sequence
|
152
165
|
end
|
153
166
|
|
154
167
|
def viewdir(v = nil) # delete?
|
168
|
+
log!(enter: __method__, args: [v])
|
155
169
|
v = str2view(v) if v.is_a?(String)
|
156
170
|
raise ArgumentError unless v.nil? || v.is_a?(RuneBlog::View)
|
157
171
|
v ||= @view
|
@@ -159,38 +173,45 @@ class RuneBlog
|
|
159
173
|
end
|
160
174
|
|
161
175
|
def self.exist?
|
176
|
+
log!(enter: __method__)
|
162
177
|
Dir.exist?(DotDir) && File.exist?(DotDir + "/" + ConfigFile)
|
163
178
|
end
|
164
179
|
|
180
|
+
def _copy_to_staging
|
181
|
+
copy!("themes/standard/", "staging/")
|
182
|
+
copy!("themes/standard/widgets/", "staging/")
|
183
|
+
end
|
184
|
+
|
185
|
+
def _copy_to_remote
|
186
|
+
copy!("themes/standard/etc", "remote/")
|
187
|
+
copy!("themes/standard/assets", "remote/")
|
188
|
+
copy!("themes/standard/widgets", "remote/")
|
189
|
+
end
|
190
|
+
|
165
191
|
def create_view(arg)
|
192
|
+
log!(enter: __method__, args: [arg])
|
166
193
|
raise ArgumentError unless arg.is_a?(String) && ! arg.empty?
|
167
194
|
|
168
195
|
names = self.views.map(&:to_s)
|
169
196
|
raise ViewAlreadyExists(arg) if names.include?(arg)
|
170
197
|
|
171
|
-
vdir =
|
198
|
+
vdir = arg.dup
|
172
199
|
raise DirAlreadyExists(vdir) if Dir.exist?(vdir)
|
173
|
-
create_dirs(vdir)
|
174
|
-
up = Dir.pwd
|
175
|
-
|
176
|
-
Dir.chdir(vdir) do
|
177
|
-
x = RuneBlog::Default
|
178
|
-
copy!("#{Themes}", "themes")
|
179
|
-
create_dirs(:assets, :posts)
|
180
|
-
create_dirs(:staging, "remote/permalink", "remote/navbar")
|
181
|
-
livetext "themes/standard/etc/blog.css.lt3" # strip ext
|
182
|
-
copy!("themes/standard/*", "staging/")
|
183
200
|
|
184
|
-
|
185
|
-
|
186
|
-
|
201
|
+
Dir.chdir(@root) do
|
202
|
+
cmd1 = "tar zxvf empty_view.tgz >/dev/null 2>&1"
|
203
|
+
cmd2 = "cp -r empty_view views/#{arg}"
|
204
|
+
system(cmd1)
|
205
|
+
system(cmd2)
|
206
|
+
end
|
187
207
|
|
208
|
+
Dir.chdir("#@root/views/#{vdir}") do
|
209
|
+
livetext "themes/standard/blog/generate", "remote/index"
|
188
210
|
pub = "user: xxx\nserver: xxx\ndocroot: xxx\npath: xxx\nproto: xxx\n"
|
189
211
|
dump(pub, "publish")
|
190
212
|
|
191
213
|
view = RuneBlog::View.new(arg)
|
192
214
|
self.view = view
|
193
|
-
vdir = self.view.dir
|
194
215
|
dump("Initial creation", "last_published")
|
195
216
|
end
|
196
217
|
@views << view
|
@@ -198,6 +219,7 @@ class RuneBlog
|
|
198
219
|
end
|
199
220
|
|
200
221
|
def delete_view(name, force = false)
|
222
|
+
log!(enter: __method__, args: [name, force])
|
201
223
|
raise ArgumentError unless name.is_a?(String) && ! name.empty?
|
202
224
|
if force
|
203
225
|
system("rm -rf #@root/views/#{name}")
|
@@ -206,6 +228,7 @@ class RuneBlog
|
|
206
228
|
end
|
207
229
|
|
208
230
|
def view_files
|
231
|
+
log!(enter: __method__)
|
209
232
|
vdir = self.view.dir
|
210
233
|
files = ["#{vdir}/index.html"]
|
211
234
|
files += posts.map {|x| "#{vdir}/#{x}" }
|
@@ -214,7 +237,7 @@ class RuneBlog
|
|
214
237
|
end
|
215
238
|
|
216
239
|
def post_lookup(postid) # side-effect?
|
217
|
-
|
240
|
+
log!(enter: __method__, args: [postid])
|
218
241
|
slug = title = date = teaser_text = nil
|
219
242
|
|
220
243
|
dir_posts = @vdir + "/posts"
|
@@ -229,6 +252,7 @@ class RuneBlog
|
|
229
252
|
end
|
230
253
|
|
231
254
|
def teaser(slug)
|
255
|
+
log!(enter: __method__, args: [slug])
|
232
256
|
id = slug.to_i
|
233
257
|
text = nil
|
234
258
|
post_entry_name = @theme + "/blog/post_entry.lt3"
|
@@ -237,7 +261,6 @@ class RuneBlog
|
|
237
261
|
nslug, aslug, title, date, teaser_text =
|
238
262
|
vp.nslug, vp.aslug, vp.title, vp.date, vp.teaser_text
|
239
263
|
path = vp.path
|
240
|
-
# url = "#{path}/#{aslug}.html" # Should be relative to .blogs!! FIXME
|
241
264
|
url = "#{aslug}.html" # Should be relative to .blogs!! FIXME
|
242
265
|
date = ::Date.parse(date)
|
243
266
|
date = date.strftime("%B %e<br>%Y")
|
@@ -246,7 +269,7 @@ class RuneBlog
|
|
246
269
|
end
|
247
270
|
|
248
271
|
def collect_recent_posts(file)
|
249
|
-
|
272
|
+
log!(enter: __method__, args: [file])
|
250
273
|
posts = nil
|
251
274
|
dir_posts = @vdir + "/posts"
|
252
275
|
entries = Dir.entries(dir_posts)
|
@@ -269,15 +292,17 @@ class RuneBlog
|
|
269
292
|
text << teaser(postid) # side effect! calls _out
|
270
293
|
end
|
271
294
|
text << "</body></html>"
|
272
|
-
File.write(file, text) # FIXME ???
|
295
|
+
File.write("#@vdir/remote/"+file, text) # FIXME ???
|
273
296
|
iframe_text = <<-HTML
|
274
297
|
<iframe name="main" style="width: 100vw;height: 100vh;position: relative;"
|
275
298
|
src='recent.html' width=100% frameborder="0" allowfullscreen>
|
276
299
|
</iframe>
|
277
300
|
HTML
|
301
|
+
# FIXME ^ serves no purpose??
|
278
302
|
end
|
279
303
|
|
280
304
|
def create_new_post(title, testing = false, teaser: nil, body: nil, other_views: [])
|
305
|
+
log!(enter: __method__, args: [title, testing, teaser, body, other_views])
|
281
306
|
meta = nil
|
282
307
|
Dir.chdir(self.view.dir) do
|
283
308
|
post = Post.create(title: title, teaser: teaser, body: body, other_views: other_views)
|
@@ -292,6 +317,7 @@ class RuneBlog
|
|
292
317
|
end
|
293
318
|
|
294
319
|
def edit_initial_post(file, testing = false)
|
320
|
+
log!(enter: __method__, args: [file, testing])
|
295
321
|
debug "=== edit_initial_post #{file.inspect} => #{sourcefile}"
|
296
322
|
sourcefile = "#@root/drafts/#{file}"
|
297
323
|
result = system("#@editor #{sourcefile} +8") unless testing
|
@@ -302,17 +328,20 @@ class RuneBlog
|
|
302
328
|
end
|
303
329
|
|
304
330
|
def posts
|
331
|
+
log!(enter: __method__)
|
305
332
|
dir = self.view.dir + "/posts"
|
306
333
|
posts = Dir.entries(dir).grep(/^\d{4}/)
|
307
334
|
posts
|
308
335
|
end
|
309
336
|
|
310
337
|
def drafts
|
338
|
+
log!(enter: __method__)
|
311
339
|
dir = "#@root/drafts"
|
312
340
|
drafts = Dir.entries(dir).grep(/^\d{4}.*/)
|
313
341
|
end
|
314
342
|
|
315
343
|
def change_view(view)
|
344
|
+
log!(enter: __method__, args: [view])
|
316
345
|
raise ArgumentError unless view.is_a?(String) || view.is_a?(RuneBlog::View)
|
317
346
|
x = OpenStruct.new
|
318
347
|
x.root, x.current_view, x.editor = @root, view.to_s, @editor # dumb - FIXME later
|
@@ -321,20 +350,22 @@ class RuneBlog
|
|
321
350
|
end
|
322
351
|
|
323
352
|
def generate_index(view) # FIXME delete?
|
324
|
-
|
353
|
+
log!(enter: __method__, args: [view], pwd: true, dir: true)
|
325
354
|
raise ArgumentError unless view.is_a?(String) || view.is_a?(RuneBlog::View)
|
326
|
-
|
327
|
-
|
328
|
-
dir0 = "#{vdir}/themes/standard/blog"
|
329
|
-
rescue => err
|
330
|
-
error(err)
|
331
|
-
exit
|
355
|
+
@vdir = @root + "/views/#{view}"
|
356
|
+
collect_recent_posts("recent.html")
|
332
357
|
end
|
333
358
|
|
334
359
|
def generate_view(view) # huh?
|
360
|
+
log!(enter: __method__, args: [view])
|
361
|
+
generate_index(view) # recent posts (recent.html)
|
362
|
+
Dir.chdir(@root + "/views/#{view}/themes/standard") do
|
363
|
+
livetext "blog/generate.lt3", "../../remote/index.html"
|
364
|
+
end
|
335
365
|
end
|
336
366
|
|
337
367
|
def _get_views(draft)
|
368
|
+
log!(enter: __method__, args: [draft])
|
338
369
|
# FIXME dumb code
|
339
370
|
view_line = File.readlines(draft).grep(/^.views /)
|
340
371
|
raise "More than one .views call!" if view_line.size > 1
|
@@ -344,23 +375,8 @@ class RuneBlog
|
|
344
375
|
views
|
345
376
|
end
|
346
377
|
|
347
|
-
# Remember: A post in multiple views will trigger multiple
|
348
|
-
# views needing to be rebuilt (and published)
|
349
|
-
|
350
|
-
# generate a post:
|
351
|
-
# given draft 9999-title.lt3
|
352
|
-
# create VIEW/posts/9999-title/index.lt3
|
353
|
-
# LATER: metadata!! or is it in head?
|
354
|
-
# Generate VIEW/posts/9999-title/head.lt3?
|
355
|
-
# livetext draft_wrapper_plain.lt3 >generated/posts/plain-title.html # unframed
|
356
|
-
# livetext draft_generate.lt3 >generated/posts/real-title.html # framed
|
357
|
-
# livetext draft_wrapper_perma.lt3 >generated/posts/perma-title.html # permaframed
|
358
|
-
#
|
359
|
-
# Generate associated views:
|
360
|
-
# livetext ??/recent.lt3 >VIEW/working/recent.html
|
361
|
-
# livetext VIEW/blog/generate.lt3 ??
|
362
|
-
|
363
378
|
def _copy_get_dirs(draft, view)
|
379
|
+
log!(enter: __method__, args: [draft, view])
|
364
380
|
fname = File.basename(draft)
|
365
381
|
noext = fname.sub(/.lt3$/, "")
|
366
382
|
vdir = "#@root/views/#{view}"
|
@@ -373,45 +389,45 @@ class RuneBlog
|
|
373
389
|
end
|
374
390
|
|
375
391
|
def generate_post(draft)
|
392
|
+
log!(enter: __method__, args: [draft])
|
376
393
|
views = _get_views(draft)
|
377
394
|
views.each do |view|
|
378
395
|
noext, viewdir, slugdir, aslug, @theme = _copy_get_dirs(draft, view)
|
379
|
-
|
396
|
+
remote = viewdir + "/remote"
|
380
397
|
Dir.chdir(slugdir) do
|
381
398
|
copy(draft, ".")
|
382
399
|
lt3 = draft.split("/")[-1]
|
383
400
|
# Remember: Some posts may be in more than one view -- careful with links back
|
384
|
-
|
385
|
-
copy!("#{@theme}/*", "#{staging}")
|
386
|
-
copy(lt3, staging)
|
401
|
+
copy(lt3, remote)
|
387
402
|
html = noext[5..-1]
|
388
|
-
livetext draft, html
|
389
|
-
copy(
|
403
|
+
livetext draft, html # livetext "foobar.lt3", "foobar.html"
|
404
|
+
copy(html, "../../remote/post/index.html")
|
390
405
|
title_line = File.readlines(draft).grep(/^.title /).first
|
391
406
|
title = title_line.split(" ", 2)[1]
|
392
407
|
excerpt = File.read("teaser.txt")
|
393
408
|
vars = %[.set title="#{title.chomp}"\n] +
|
394
409
|
%[.set teaser="#{excerpt.chomp}"]
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
livetext "blog/generate", "../remote/index"
|
410
|
+
theme = "../../theme/standard"
|
411
|
+
File.open("vars.lt3", "w") {|f| f.puts vars }
|
412
|
+
livetext "#{theme}/post/generate.lt3", "#{remote}/#{html}"
|
413
|
+
livetext "#{theme}/post/permalink.lt3", "#{remote}/permalink/#{html}"
|
414
|
+
log!(str: "About to enter remote/", pwd: true, dir: true)
|
415
|
+
Dir.chdir(remote) do
|
416
|
+
log!(str: "Now in remote/", pwd: true, dir: true)
|
417
|
+
system("cp -r ../themes/standard/widgets .")
|
418
|
+
log!(str: "finished with remote/", pwd: true, dir: true)
|
405
419
|
end
|
406
420
|
end
|
407
421
|
end
|
408
422
|
end
|
409
423
|
|
410
424
|
def relink
|
425
|
+
log!(enter: __method__)
|
411
426
|
self.views.each {|view| generate_index(view) }
|
412
427
|
end
|
413
428
|
|
414
429
|
def index_entry(view, meta)
|
430
|
+
log!(enter: __method__, args: [view, meta])
|
415
431
|
debug "=== index_entry #{view.to_s.inspect} #{meta.num} #{meta.title.inspect}"
|
416
432
|
check_meta(meta, "index_entry1")
|
417
433
|
raise ArgumentError unless view.is_a?(String) || view.is_a?(RuneBlog::View)
|
@@ -432,6 +448,7 @@ class RuneBlog
|
|
432
448
|
end
|
433
449
|
|
434
450
|
def rebuild_post(file)
|
451
|
+
log!(enter: __method__, args: [file])
|
435
452
|
raise "Doesn't currently work"
|
436
453
|
debug "Called rebuild_post(#{file.inspect})"
|
437
454
|
raise ArgumentError unless file.is_a?(String)
|
@@ -446,6 +463,7 @@ class RuneBlog
|
|
446
463
|
end
|
447
464
|
|
448
465
|
def remove_post(num)
|
466
|
+
log!(enter: __method__, args: [num])
|
449
467
|
raise ArgumentError unless num.is_a?(Integer)
|
450
468
|
tag = prefix(num)
|
451
469
|
files = Find.find(self.view.dir).to_a
|
@@ -461,6 +479,7 @@ class RuneBlog
|
|
461
479
|
end
|
462
480
|
|
463
481
|
def undelete_post(num)
|
482
|
+
log!(enter: __method__, args: [num])
|
464
483
|
raise ArgumentError unless num.is_a?(Integer)
|
465
484
|
files = Find.find("#@root/views/").to_a
|
466
485
|
tag = prefix(num)
|
@@ -476,12 +495,14 @@ class RuneBlog
|
|
476
495
|
end
|
477
496
|
|
478
497
|
def delete_draft(num)
|
498
|
+
log!(enter: __method__, args: [num])
|
479
499
|
raise ArgumentError unless num.is_a?(Integer)
|
480
500
|
tag = prefix(num)
|
481
501
|
system("rm -rf #@root/drafts/#{tag}-*")
|
482
502
|
end
|
483
503
|
|
484
504
|
def make_slug(meta)
|
505
|
+
log!(enter: __method__, args: [meta])
|
485
506
|
raise ArgumentError unless meta.title.is_a?(String)
|
486
507
|
label = '%04d' % meta.num # FIXME can do better
|
487
508
|
slug0 = meta.title.downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '')
|