runeblog 0.2.72 → 0.2.73
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/lib/helpers-blog.rb +58 -12
- data/lib/liveblog.rb +2 -12
- data/lib/post.rb +1 -8
- data/lib/runeblog.rb +20 -44
- data/lib/runeblog_version.rb +1 -3
- data/test/austin.rb +60 -60
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0afccf0c622078eba670e387c4fec271552c9b2d289c25b1f325a266d94da6c7
|
4
|
+
data.tar.gz: 3cea7d0e10b8e393d2845b10c4d466f54bbfc92f1ea326eec4ee42ad8fba3927
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e69baf6404c61da8028502b554008a663ec405c359707d9a33f103dd47f17b0e9a00482f09a32cb2e52c5457fe9904177db067b2592b7021ef1ddf0a5c15b698
|
7
|
+
data.tar.gz: d6942079ebdcb48d948b938bf06377caa55eabe7ea3b4de6566ed0586b83920e6c51fee272d7e35e38cb7f00e812a20cc3b0a2c66252ca03e66bcf6cc5df9337
|
data/lib/helpers-blog.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'runeblog_version'
|
2
2
|
require 'fileutils'
|
3
3
|
|
4
|
-
#require 'pathmagic'
|
5
4
|
require 'xlate'
|
6
5
|
|
7
6
|
module RuneBlog::Helpers
|
@@ -20,38 +19,85 @@ module RuneBlog::Helpers
|
|
20
19
|
puts " Failed: #{cmd} - from #{caller[0]}" unless rc
|
21
20
|
end
|
22
21
|
|
22
|
+
def get_repo_config
|
23
|
+
log!(enter: __method__, level: 3)
|
24
|
+
@editor = File.read(".blogs/data/EDITOR").chomp
|
25
|
+
@current_view = File.read(".blogs/data/VIEW").chomp
|
26
|
+
@root = File.read(".blogs/data/ROOT").chomp
|
27
|
+
rescue => err
|
28
|
+
puts "Can't read config: #{err}"
|
29
|
+
puts err.backtrace.join("\n")
|
30
|
+
puts "dir = #{Dir.pwd}"
|
31
|
+
end
|
32
|
+
|
23
33
|
def copy_data(tag, dest)
|
24
|
-
data = RuneBlog::Path
|
34
|
+
data = RuneBlog::Path + "/../data" # files kept inside gem
|
25
35
|
case tag
|
26
36
|
when :config; files = %w[ROOT VIEW EDITOR]
|
27
37
|
end
|
28
|
-
files.each {|file| copy(data/file, dest) }
|
38
|
+
files.each {|file| copy(data + "/" + file, dest) }
|
29
39
|
end
|
30
40
|
|
31
|
-
def read_config
|
32
|
-
log!(enter: __method__, level: 3)
|
33
|
-
|
34
|
-
|
35
|
-
|
41
|
+
def read_config(file, *syms)
|
42
|
+
log!(enter: __method__, args: [file, *syms], level: 3)
|
43
|
+
lines = File.readlines(file).map(&:chomp)
|
44
|
+
obj = ::OpenStruct.new
|
45
|
+
lines.each do |line|
|
46
|
+
next if line == "\n" || line[0] == "#"
|
47
|
+
key, val = line.split(/: +/, 2)
|
48
|
+
obj.send(key+"=", val)
|
49
|
+
end
|
50
|
+
return obj if syms.empty?
|
51
|
+
|
52
|
+
vals = []
|
53
|
+
if syms.empty?
|
54
|
+
vals = obj.to_hash.values
|
55
|
+
else
|
56
|
+
syms.each {|sym| vals << obj.send(sym) }
|
57
|
+
end
|
58
|
+
return vals
|
36
59
|
rescue => err
|
37
|
-
puts "Can't read config: #{err}"
|
60
|
+
puts "Can't read config file '#{file}': #{err}"
|
38
61
|
puts err.backtrace.join("\n")
|
39
62
|
puts "dir = #{Dir.pwd}"
|
40
63
|
exit
|
41
64
|
end
|
42
65
|
|
66
|
+
def try_read_config(file, hash)
|
67
|
+
log!(enter: __method__, args: [file, hash], level: 3)
|
68
|
+
return hash.values unless File.exist?(file)
|
69
|
+
vals = read_config(file, *hash.keys)
|
70
|
+
vals
|
71
|
+
end
|
72
|
+
|
73
|
+
def write_config(obj, file)
|
74
|
+
log!(enter: __method__, args: [obj, file], level: 2)
|
75
|
+
hash = obj.to_h
|
76
|
+
File.open(file, "w") do |out|
|
77
|
+
hash.each_pair {|key, val| out.puts "#{key}: #{val}" }
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
43
81
|
def get_views # read from filesystem
|
44
82
|
log!(enter: __method__, level: 3)
|
45
|
-
dirs = subdirs("#@root/views/").sort
|
83
|
+
dirs = subdirs("#@root + "/" + views/").sort
|
46
84
|
dirs.map {|name| RuneBlog::View.new(name) }
|
47
85
|
end
|
48
86
|
|
87
|
+
def write_repo_config(root: "#{Dir.pwd}/.blogs", view: "#{root}/data/VIEW", editor: "#{root}/data/EDITOR")
|
88
|
+
p root
|
89
|
+
File.write(root + "/data/ROOT", root + "\n")
|
90
|
+
File.write(root + "/data/VIEW", view.to_s + "\n")
|
91
|
+
File.write(root + "/data/EDITOR", editor + "\n")
|
92
|
+
end
|
93
|
+
|
49
94
|
def new_dotfile(root: ".blogs", current_view: "test_view", editor: "vi")
|
50
95
|
log!(enter: __method__, args: [root, current_view, editor], level: 3)
|
51
|
-
root = Dir.pwd/root
|
96
|
+
root = Dir.pwd + "/" + root
|
52
97
|
x = OpenStruct.new
|
53
98
|
x.root, x.current_view, x.editor = root, current_view, editor
|
54
|
-
write_config(x, root/RuneBlog::ConfigFile)
|
99
|
+
write_config(x, root + "/" + RuneBlog::ConfigFile)
|
100
|
+
write_repo_config
|
55
101
|
end
|
56
102
|
|
57
103
|
def new_sequence
|
data/lib/liveblog.rb
CHANGED
@@ -4,14 +4,14 @@ require 'date'
|
|
4
4
|
require 'find'
|
5
5
|
|
6
6
|
require 'runeblog'
|
7
|
-
|
7
|
+
require 'pathmagic'
|
8
8
|
require 'xlate'
|
9
9
|
|
10
10
|
|
11
11
|
def init_liveblog # FIXME - a lot of this logic sucks
|
12
12
|
here = Dir.pwd
|
13
13
|
dir = here
|
14
|
-
# loop { dir = Dir.pwd; break if File.exist?("
|
14
|
+
# loop { dir = Dir.pwd; break if File.exist?("config"); Dir.chdir("..") }
|
15
15
|
Dir.chdir(here) # here??? or dir??
|
16
16
|
@blog = RuneBlog.new(dir)
|
17
17
|
@root = @blog.root
|
@@ -443,14 +443,10 @@ rescue => err
|
|
443
443
|
end
|
444
444
|
|
445
445
|
def write_post
|
446
|
-
STDERR.puts :wp1
|
447
446
|
raise "'post' was not called" unless @meta
|
448
|
-
STDERR.puts :wp2
|
449
447
|
@meta.views = @meta.views.join(" ") if @meta.views.is_a? Array
|
450
448
|
@meta.tags = @meta.tags.join(" ") if @meta.tags.is_a? Array
|
451
|
-
STDERR.puts :wp3
|
452
449
|
_write_metadata
|
453
|
-
STDERR.puts :wp4
|
454
450
|
rescue => err
|
455
451
|
puts "err = #{err}"
|
456
452
|
puts err.backtrace.join("\n")
|
@@ -471,19 +467,13 @@ def teaser
|
|
471
467
|
end
|
472
468
|
|
473
469
|
def finalize
|
474
|
-
STDERR.puts :final1
|
475
470
|
return unless @meta
|
476
|
-
STDERR.puts :final2
|
477
471
|
return @meta if @blog.nil?
|
478
|
-
STDERR.puts :final3
|
479
472
|
|
480
473
|
@slug = @blog.make_slug(@meta)
|
481
|
-
STDERR.puts :final4
|
482
474
|
slug_dir = @slug
|
483
475
|
@postdir = @blog.view.dir/:posts/slug_dir
|
484
|
-
STDERR.puts :final5
|
485
476
|
write_post
|
486
|
-
STDERR.puts :final6
|
487
477
|
@meta
|
488
478
|
end
|
489
479
|
|
data/lib/post.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'runeblog'
|
2
2
|
require 'global'
|
3
|
-
|
3
|
+
require 'pathmagic'
|
4
4
|
|
5
5
|
class RuneBlog::Post
|
6
6
|
|
@@ -42,9 +42,7 @@ puts "-- load: opening #{pdir}"
|
|
42
42
|
fname2 = "metadata.txt"
|
43
43
|
hash = meta.to_h
|
44
44
|
|
45
|
-
p :wmd1
|
46
45
|
File.write("teaser.txt", hash[:teaser])
|
47
|
-
p :wmd2
|
48
46
|
hash.delete(:teaser)
|
49
47
|
hash.delete(:body)
|
50
48
|
|
@@ -108,14 +106,9 @@ p :wmd2
|
|
108
106
|
def build
|
109
107
|
log!(enter: __method__)
|
110
108
|
post = self
|
111
|
-
p :bld1
|
112
109
|
views = post.meta.views
|
113
|
-
p :bld2
|
114
110
|
text = File.read(@draft)
|
115
|
-
p :bld3
|
116
|
-
p @draft
|
117
111
|
@blog.generate_post(@draft)
|
118
|
-
p :bld4
|
119
112
|
end
|
120
113
|
end
|
121
114
|
|
data/lib/runeblog.rb
CHANGED
@@ -12,13 +12,14 @@ require 'view'
|
|
12
12
|
require 'publish'
|
13
13
|
require 'post'
|
14
14
|
|
15
|
-
|
15
|
+
require 'pathmagic'
|
16
16
|
|
17
17
|
###
|
18
18
|
|
19
19
|
class RuneBlog
|
20
20
|
|
21
21
|
DotDir = ".blogs"
|
22
|
+
ConfigFile = "config"
|
22
23
|
Themes = RuneBlog::Path/"../themes"
|
23
24
|
|
24
25
|
make_exception(:FileNotFound, "File $1 was not found")
|
@@ -56,17 +57,18 @@ class RuneBlog
|
|
56
57
|
log!(enter: __method__, args: [root])
|
57
58
|
raise ArgumentError unless root.is_a?(String) && ! root.empty?
|
58
59
|
root_dir = Dir.pwd/root
|
59
|
-
# Crude - FIXME later - # What views are there? Publishing, etc.
|
60
60
|
self.blog = self # Weird. Like a singleton - dumbass circular dependency?
|
61
61
|
root = Dir.pwd/root
|
62
62
|
raise BlogRepoAlreadyExists if Dir.exist?(root)
|
63
63
|
create_dirs(root)
|
64
64
|
Dir.chdir(root) do
|
65
|
-
create_dirs(:
|
66
|
-
copy_data(:config, "./data/")
|
67
|
-
File.write("data/ROOT", Dir.pwd + "\n")
|
65
|
+
create_dirs(:drafts, :views, :posts)
|
68
66
|
new_sequence
|
69
67
|
end
|
68
|
+
x = OpenStruct.new
|
69
|
+
x.root, x.current_view, x.editor = root, "test_view", "/usr/bin/vim " # dumb - FIXME later
|
70
|
+
write_config(x, root/ConfigFile)
|
71
|
+
write_repo_config
|
70
72
|
@blog = self.new(root)
|
71
73
|
@blog
|
72
74
|
rescue => err
|
@@ -90,13 +92,16 @@ class RuneBlog
|
|
90
92
|
self.class.blog = self # Weird. Like a singleton - dumbass circular dependency?
|
91
93
|
|
92
94
|
@root = root_dir
|
93
|
-
|
94
|
-
|
95
|
+
file = @root/ConfigFile
|
96
|
+
errmsg = "No config file! file = #{file.inspect} dir = #{Dir.pwd}"
|
97
|
+
raise errmsg unless File.exist?(file)
|
98
|
+
|
99
|
+
get_repo_config
|
100
|
+
@root, @view_name, @editor = read_config(file, :root, :current_view, :editor)
|
95
101
|
md = Dir.pwd.match(%r[.*/views/(.*?)/])
|
96
|
-
if md
|
97
|
-
|
98
|
-
|
99
|
-
end
|
102
|
+
@view_name = md[1] if md
|
103
|
+
@views = get_views
|
104
|
+
@view = str2view(@view_name)
|
100
105
|
@sequence = get_sequence
|
101
106
|
@post_views = []
|
102
107
|
@post_tags = []
|
@@ -193,7 +198,6 @@ class RuneBlog
|
|
193
198
|
|
194
199
|
def view=(arg)
|
195
200
|
log!(enter: __method__, args: [arg], level: 2)
|
196
|
-
# FIXME should write VIEW file?
|
197
201
|
case arg
|
198
202
|
when RuneBlog::View
|
199
203
|
@view = arg
|
@@ -376,7 +380,7 @@ class RuneBlog
|
|
376
380
|
text << entry
|
377
381
|
end
|
378
382
|
text << "</body></html>"
|
379
|
-
File.write(@vdir/:remote/file, text
|
383
|
+
File.write(@vdir/:remote/file, text)
|
380
384
|
return posts.size
|
381
385
|
rescue => err
|
382
386
|
_tmp_error(err)
|
@@ -388,15 +392,10 @@ class RuneBlog
|
|
388
392
|
meta = nil
|
389
393
|
views = views + [self.view.to_s]
|
390
394
|
views.uniq!
|
391
|
-
p :cnp1
|
392
395
|
Dir.chdir(@root/"posts") do
|
393
|
-
p :cnp2
|
394
396
|
post = Post.create(title: title, teaser: teaser, body: body, pubdate: pubdate, views: views)
|
395
|
-
p :cnp3
|
396
397
|
post.edit unless testing
|
397
|
-
p :cnp4
|
398
398
|
post.build
|
399
|
-
p :cnp5
|
400
399
|
meta = post.meta
|
401
400
|
end
|
402
401
|
return meta.num
|
@@ -424,7 +423,9 @@ p :cnp5
|
|
424
423
|
log!(enter: __method__, args: [view], level: 3)
|
425
424
|
raise ArgumentError unless view.is_a?(String) || view.is_a?(RuneBlog::View)
|
426
425
|
x = OpenStruct.new
|
427
|
-
|
426
|
+
x.root, x.current_view, x.editor = @root, view.to_s, @editor # dumb - FIXME later
|
427
|
+
copy_data(:config, @root/:data)
|
428
|
+
write_config(x, @root/ConfigFile)
|
428
429
|
self.view = view # error checking?
|
429
430
|
end
|
430
431
|
|
@@ -487,24 +488,16 @@ p :cnp5
|
|
487
488
|
def _post_metadata(draft, pdraft)
|
488
489
|
log!(enter: __method__, args: [draft, pdraft], level: 2)
|
489
490
|
# FIXME store this somewhere
|
490
|
-
p :pm1
|
491
491
|
fname = File.basename(draft) # 0001-this-is-a-post.lt3
|
492
492
|
nslug = fname.sub(/.lt3$/, "") # 0001-this-is-a-post
|
493
493
|
aslug = nslug.sub(/\d\d\d\d-/, "") # this-is-a-post
|
494
494
|
pnum = nslug[0..3] # 0001
|
495
|
-
p :pm2
|
496
495
|
Dir.chdir(pdraft) do
|
497
|
-
p :pm3
|
498
496
|
excerpt = File.read("teaser.txt")
|
499
|
-
p :pm4
|
500
497
|
date = _retrieve_metadata(:date)
|
501
|
-
p :pm5
|
502
498
|
longdate = ::Date.parse(date).strftime("%B %e, %Y")
|
503
|
-
p :pm6
|
504
499
|
title = _retrieve_metadata(:title)
|
505
|
-
p :pm7
|
506
500
|
tags = _retrieve_metadata(:tags)
|
507
|
-
p :pm8
|
508
501
|
# FIXME simplify
|
509
502
|
vars = <<~LIVE
|
510
503
|
.set post.num = #{pnum}
|
@@ -524,9 +517,7 @@ p :pm8
|
|
524
517
|
#{longdate}
|
525
518
|
.end
|
526
519
|
LIVE
|
527
|
-
p :pm9
|
528
520
|
File.open(pdraft/"vars.lt3", "w") {|f| f.puts vars }
|
529
|
-
p :pma
|
530
521
|
end
|
531
522
|
rescue => err
|
532
523
|
_tmp_error(err)
|
@@ -562,54 +553,39 @@ p :pma
|
|
562
553
|
pdraft = @root/:posts/nslug
|
563
554
|
remote = @root/:views/view_name/:remote
|
564
555
|
@theme = @root/:views/view_name/:themes/:standard
|
565
|
-
p :hp1
|
566
556
|
# Step 1...
|
567
557
|
create_dirs(pdraft)
|
568
|
-
p :hp2
|
569
558
|
# FIXME dependencies?
|
570
559
|
xlate cwd: pdraft, src: draft, dst: "guts.html" # , debug: true
|
571
|
-
p :hp3
|
572
560
|
_post_metadata(draft, pdraft)
|
573
|
-
p :hp4
|
574
561
|
# Step 2...
|
575
562
|
vposts = @root/:views/view_name/:posts
|
576
563
|
copy!(pdraft, vposts) # ??
|
577
|
-
p :hp5
|
578
564
|
# Step 3..
|
579
565
|
copy(pdraft/"guts.html", @theme/:post)
|
580
566
|
copy(pdraft/"vars.lt3", @theme/:post)
|
581
|
-
p :hp5
|
582
567
|
# Step 4...
|
583
568
|
# FIXME dependencies?
|
584
569
|
xlate cwd: @theme/:post, src: "generate.lt3", force: true,
|
585
570
|
dst: remote/ahtml, copy: @theme/:post # , debug: true
|
586
|
-
p :hp7
|
587
571
|
# FIXME dependencies?
|
588
572
|
xlate cwd: @theme/:post, src: "permalink.lt3",
|
589
573
|
dst: remote/:permalink/ahtml # , debug: true
|
590
|
-
p :hp8
|
591
574
|
copy_widget_html(view_name)
|
592
|
-
p :hp9
|
593
575
|
rescue => err
|
594
576
|
_tmp_error(err)
|
595
577
|
end
|
596
578
|
|
597
579
|
def generate_post(draft)
|
598
580
|
log!(enter: __method__, args: [draft], level: 1)
|
599
|
-
p :gp1
|
600
581
|
views = _get_views(draft)
|
601
|
-
p :gp2
|
602
582
|
views.each do |view|
|
603
|
-
p :gp3
|
604
583
|
unless self.view?(view)
|
605
584
|
puts "Warning: '#{view}' is not a view"
|
606
585
|
next
|
607
586
|
end
|
608
|
-
p :gp4
|
609
587
|
_handle_post(draft, view)
|
610
|
-
p :gp5
|
611
588
|
end
|
612
|
-
p :gp6
|
613
589
|
rescue => err
|
614
590
|
_tmp_error(err)
|
615
591
|
end
|
data/lib/runeblog_version.rb
CHANGED
@@ -1,10 +1,8 @@
|
|
1
1
|
|
2
|
-
require 'pathmagic'
|
3
|
-
|
4
2
|
if ! (Object.constants.include?(:RuneBlog) && RuneBlog.constants.include?(:Path))
|
5
3
|
|
6
4
|
class RuneBlog
|
7
|
-
VERSION = "0.2.
|
5
|
+
VERSION = "0.2.73"
|
8
6
|
|
9
7
|
path = Gem.find_files("runeblog").grep(/runeblog-/).first
|
10
8
|
Path = File.dirname(path)
|
data/test/austin.rb
CHANGED
@@ -85,66 +85,66 @@ EXCERPT
|
|
85
85
|
That's a good thing. But their music isn't always the greatest.
|
86
86
|
BODY
|
87
87
|
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
88
|
+
make_post(x, "The new amphitheatre is overrated", <<-EXCERPT, <<-BODY)
|
89
|
+
It used to be that all major concerts played the Erwin Center.
|
90
|
+
EXCERPT
|
91
|
+
.pin around_austin
|
92
|
+
Now, depending on what you consider "major," blah blah blah...
|
93
|
+
BODY
|
94
|
+
|
95
|
+
make_post(x, "The graffiti wall", <<-EXCERPT, <<-BODY)
|
96
|
+
RIP, Hope Gallery
|
97
|
+
EXCERPT
|
98
|
+
|
99
|
+
.dropcap It's been a while since I was there. They say it was torn down
|
100
|
+
while I wasn't looking. Never tagged anything there, of course, nor
|
101
|
+
anywhere else. Spraypainting public places isn't my thing, but in this
|
102
|
+
case I condoned it because it was sort of there for that purpose.
|
103
|
+
|
104
|
+
This fake entry is a long one so as to demonstrate both drop-caps
|
105
|
+
(above) and an inset quote. Blah blah blah. Lorem ipsum dolor and
|
106
|
+
a partridge in a pear tree.
|
107
|
+
|
108
|
+
.inset left 20
|
109
|
+
Wherever you go, there you are. Last night I saw upon the stair
|
110
|
+
a little man who was not there. He wasn't there again today; I
|
111
|
+
wish, I wish he'd go away. As far as we know, our computer has
|
112
|
+
never had an undetected error.
|
113
|
+
|On a clean disk, you can seek forever.
|
114
|
+
And never let it be denied that
|
115
|
+
pobbles are happier without their toes. And may your snark never
|
116
|
+
be a boojum. How do you know you aren't dreaming right now? When
|
117
|
+
you see a butterfly, think of Chuang Tzu.
|
118
|
+
.end
|
119
|
+
|
120
|
+
Contact light. Houston, this is Tranquility Base. The Eagle has
|
121
|
+
landed. That's one small step for (a) man, one giant leap for
|
122
|
+
mankind.
|
123
|
+
|
124
|
+
Here's the PDF of $$link["Ruby for the Old-Time C Programmer"|http://rubyhacker.com/blog2/rubydino.pdf]
|
125
|
+
|
126
|
+
Pity this busy monster, manunkind, not. Pity rather... Listen:
|
127
|
+
There's a hell of a universe next door; let's go.
|
128
|
+
BODY
|
129
|
+
|
130
|
+
make_post(x, "The Waller Creek project", <<-EXCERPT, <<-BODY)
|
131
|
+
Will it ever be finished?
|
132
|
+
EXCERPT
|
133
|
+
Blah blah Waller Creek blah blah...
|
134
|
+
BODY
|
135
|
+
|
136
|
+
make_post(x, "Life on Sabine Street", <<-EXCERPT, <<-BODY)
|
137
|
+
It's like Pooh Corner, except not.
|
138
|
+
EXCERPT
|
139
|
+
This is about Sabine St, blah blah lorem ipsum dolor...
|
140
|
+
BODY
|
141
|
+
|
142
|
+
make_post(x, "Remember Modest Mouse?", <<-EXCERPT, <<-BODY)
|
143
|
+
They date to the 90s or before.
|
144
|
+
EXCERPT
|
145
|
+
But I first heard of them
|
146
|
+
in 2005.
|
147
|
+
BODY
|
148
148
|
|
149
149
|
debug
|
150
150
|
debug "** generate_index #{bold("around_austin")}"
|