runeblog 0.2.93 → 0.2.94
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/blog +5 -5
- data/lib/helpers-blog.rb +19 -74
- data/lib/helpers-repl.rb +3 -13
- data/lib/liveblog.rb +0 -21
- data/lib/lowlevel.rb +73 -0
- data/lib/publish.rb +2 -8
- data/lib/repl.rb +1 -1
- data/lib/runeblog.rb +35 -5
- data/lib/runeblog_version.rb +1 -17
- metadata +2 -2
- data/lib/default.rb +0 -31
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7ed9580d074b2ce228aff385bbe22e907a9ae0c330f625aa2d42ee58464a1d3b
|
4
|
+
data.tar.gz: 0ce0642e8b2f0026cca4133916ff0dd3f992bb1ae8cb89e3304d90221d8195a8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 84d30bada582bd3393e075a1cba653ec11e719941c675d1a9753d6dbf921643137e6096205b5120c91f385e6d9cb4a1e823440607b1db5ee23232c87885128bc
|
7
|
+
data.tar.gz: 0b0207066da6493400d66e9473c00659bef4b4169fb26cdbe554d220a59778579bd06207643516a409df39247fa8b263ae77229c16344912e81a8befb0237c6b
|
data/bin/blog
CHANGED
@@ -25,8 +25,8 @@ end
|
|
25
25
|
def get_universal
|
26
26
|
univ = "#{@blog.root}/data/universal.lt3"
|
27
27
|
if yesno("Faster initial setup? (no: edit universal.lt3)")
|
28
|
-
author = ask("Author name: ")
|
29
|
-
site = ask("Site/domain: ")
|
28
|
+
author = ask!("Author name: ")
|
29
|
+
site = ask!("Site/domain: ")
|
30
30
|
# Now stash it...
|
31
31
|
str = File.read(univ)
|
32
32
|
str = str.gsub(/AUTHOR/, author)
|
@@ -41,8 +41,8 @@ def get_global
|
|
41
41
|
if yesno("Faster view setup? (no: edit global.lt3)")
|
42
42
|
view_name = ask("\nFilename: ")
|
43
43
|
@blog.create_view(view_name) # call change_view??
|
44
|
-
title = ask("View title: ")
|
45
|
-
subtitle = ask("Subtitle : ")
|
44
|
+
title = ask!("View title: ")
|
45
|
+
subtitle = ask!("Subtitle : ")
|
46
46
|
gname = "#{@blog.root}/views/#{view_name}/themes/standard/global.lt3"
|
47
47
|
text = File.read(gname)
|
48
48
|
text = text.gsub(/VIEW_NAME/, view_name)
|
@@ -50,7 +50,7 @@ def get_global
|
|
50
50
|
text = text.gsub(/VIEW_SUBTITLE/, subtitle)
|
51
51
|
File.write(gname, text)
|
52
52
|
else
|
53
|
-
view_name = ask("\nFilename: ")
|
53
|
+
view_name = ask!("\nFilename: ")
|
54
54
|
@blog.create_view(view_name) # call change_view??
|
55
55
|
vim_params = '-c ":set hlsearch" -c ":hi Search ctermfg=2 ctermbg=6" +/"\(VIEW_.*\|SITE.*\)"'
|
56
56
|
edit_file(@blog.view.dir/"themes/standard/global.lt3", vim: vim_params)
|
data/lib/helpers-blog.rb
CHANGED
@@ -3,37 +3,15 @@ require 'fileutils'
|
|
3
3
|
|
4
4
|
require 'processing'
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
def _get_data?(file) # File need not exist
|
9
|
-
if File.exist?(file)
|
10
|
-
_get_data(file)
|
11
|
-
else
|
12
|
-
[]
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
def _get_data(file)
|
17
|
-
lines = File.readlines(file)
|
18
|
-
lines.reject! {|line| line[0] == "-" } # allow rejection of lines
|
19
|
-
lines = lines.map do |line|
|
20
|
-
line.sub(/ *# .*$/, "") # allow trailing comments
|
21
|
-
end
|
22
|
-
lines
|
23
|
-
end
|
6
|
+
require 'lowlevel'
|
24
7
|
|
25
|
-
|
26
|
-
log!(enter: __method__, args: [src, dst], level: 2)
|
27
|
-
cmd = "cp #{src} #{dst} 2>/dev/null"
|
28
|
-
rc = system!(cmd)
|
29
|
-
puts " Failed: #{cmd} - from #{caller[0]}" unless rc
|
30
|
-
end
|
8
|
+
module RuneBlog::Helpers
|
31
9
|
|
32
|
-
def
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
10
|
+
def quit_RubyText
|
11
|
+
return unless defined? RubyText
|
12
|
+
sleep 6
|
13
|
+
RubyText.stop
|
14
|
+
exit
|
37
15
|
end
|
38
16
|
|
39
17
|
def get_repo_config
|
@@ -71,8 +49,7 @@ module RuneBlog::Helpers
|
|
71
49
|
puts "Can't read vars file '#{file}': #{err}"
|
72
50
|
puts err.backtrace.join("\n")
|
73
51
|
puts "dir = #{Dir.pwd}"
|
74
|
-
|
75
|
-
exit
|
52
|
+
stop_RubyText
|
76
53
|
end
|
77
54
|
|
78
55
|
def read_config(file, *syms)
|
@@ -98,8 +75,7 @@ module RuneBlog::Helpers
|
|
98
75
|
puts "Can't read config file '#{file}': #{err}"
|
99
76
|
puts err.backtrace.join("\n")
|
100
77
|
puts "dir = #{Dir.pwd}"
|
101
|
-
|
102
|
-
exit
|
78
|
+
stop_RubyText
|
103
79
|
end
|
104
80
|
|
105
81
|
def try_read_config(file, hash)
|
@@ -123,20 +99,21 @@ module RuneBlog::Helpers
|
|
123
99
|
dirs.map {|name| RuneBlog::View.new(name) }
|
124
100
|
end
|
125
101
|
|
126
|
-
def write_repo_config(root: "#{Dir.pwd}/.blogs", view:
|
102
|
+
def write_repo_config(root: "#{Dir.pwd}/.blogs", view: nil, editor: "/usr/local/bin/vim")
|
103
|
+
view ||= File.read("#{root}/data/VIEW").chomp rescue "[no view]"
|
127
104
|
File.write(root + "/data/ROOT", root + "\n")
|
128
105
|
File.write(root + "/data/VIEW", view.to_s + "\n")
|
129
106
|
File.write(root + "/data/EDITOR", editor + "\n")
|
130
107
|
end
|
131
108
|
|
132
|
-
def new_dotfile(root: ".blogs", current_view: "test_view", editor: "vi")
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
end
|
109
|
+
# def new_dotfile(root: ".blogs", current_view: "test_view", editor: "vi")
|
110
|
+
# log!(enter: __method__, args: [root, current_view, editor], level: 3)
|
111
|
+
# root = Dir.pwd + "/" + root
|
112
|
+
# x = OpenStruct.new
|
113
|
+
# x.root, x.current_view, x.editor = root, current_view, editor
|
114
|
+
# write_config(x, root + "/" + RuneBlog::ConfigFile)
|
115
|
+
# write_repo_config
|
116
|
+
# end
|
140
117
|
|
141
118
|
def new_sequence
|
142
119
|
log!(enter: __method__, level: 3)
|
@@ -164,38 +141,6 @@ module RuneBlog::Helpers
|
|
164
141
|
files
|
165
142
|
end
|
166
143
|
|
167
|
-
def create_dirs(*dirs)
|
168
|
-
log!(enter: __method__, args: [*dirs], level: 3)
|
169
|
-
dirs.each do |dir|
|
170
|
-
dir = dir.to_s # symbols allowed
|
171
|
-
next if Dir.exist?(dir)
|
172
|
-
cmd = "mkdir -p #{dir} >/dev/null"
|
173
|
-
result = system!(cmd)
|
174
|
-
raise CantCreateDir(dir) unless result
|
175
|
-
end
|
176
|
-
end
|
177
|
-
|
178
|
-
def interpolate(str, bind)
|
179
|
-
log!(enter: __method__, args: [str, bind], level: 3)
|
180
|
-
wrap = "<<-EOS\n#{str}\nEOS"
|
181
|
-
eval wrap, bind
|
182
|
-
end
|
183
|
-
|
184
|
-
def error(err) # Hmm, this is duplicated
|
185
|
-
log!(str: "duplicated method", enter: __method__, args: [err], level: 2)
|
186
|
-
str = "\n Error: #{err}"
|
187
|
-
puts str
|
188
|
-
puts err.backtrace.join("\n")
|
189
|
-
end
|
190
|
-
|
191
|
-
def dump(obj, name)
|
192
|
-
log!(enter: __method__, args: [obj, name], level: 3)
|
193
|
-
File.write(name, obj)
|
194
|
-
end
|
195
144
|
end
|
196
145
|
|
197
|
-
def dump(obj, name) # FIXME scope
|
198
|
-
log!(str: "scope problem", enter: __method__, args: [obj, name], level: 3)
|
199
|
-
File.write(name, obj)
|
200
|
-
end
|
201
146
|
|
data/lib/helpers-repl.rb
CHANGED
@@ -109,26 +109,16 @@ module RuneBlog::REPL
|
|
109
109
|
end
|
110
110
|
meth = found || :cmd_INVALID
|
111
111
|
params = cmd if meth == :cmd_INVALID
|
112
|
-
# puts "choose: #{[meth, params].inspect}"
|
113
112
|
[meth, params]
|
114
113
|
end
|
115
114
|
|
116
|
-
def error(err) # Hmm, this is duplicated
|
117
|
-
str = "\n Error: #{err}"
|
118
|
-
puts str
|
119
|
-
puts err.backtrace.join("\n")
|
120
|
-
end
|
121
|
-
|
122
115
|
def ask(prompt, meth = :to_s)
|
123
116
|
print prompt
|
124
|
-
|
125
|
-
str.chomp!
|
126
|
-
str.send(meth)
|
117
|
+
gets.chomp.send(meth)
|
127
118
|
end
|
128
119
|
|
129
|
-
def
|
130
|
-
|
131
|
-
gets.chomp.upcase[0] == "Y"
|
120
|
+
def ask!(prompt, meth = :to_s)
|
121
|
+
ask(fx(prompt, :bold), meth)
|
132
122
|
end
|
133
123
|
|
134
124
|
def reset_output(initial = "")
|
data/lib/liveblog.rb
CHANGED
@@ -501,22 +501,6 @@ rescue => err
|
|
501
501
|
exit
|
502
502
|
end
|
503
503
|
|
504
|
-
# def pinned_rebuild
|
505
|
-
# view = @blog.view
|
506
|
-
# view = _args[0] unless _args.empty?
|
507
|
-
# Dir.chdir(@blog.root/:views/view/"themes/standard/") do
|
508
|
-
# wtag = "widgets/pinned"
|
509
|
-
# code = _load_local("pinned")
|
510
|
-
# if code
|
511
|
-
# Dir.chdir(wtag) do
|
512
|
-
# widget = code.new(@blog)
|
513
|
-
# widget.build
|
514
|
-
# end
|
515
|
-
# # _include_file wtag/"pinned-card.html"
|
516
|
-
# end
|
517
|
-
# end
|
518
|
-
# end
|
519
|
-
|
520
504
|
def _handle_standard_widget(tag)
|
521
505
|
wtag = :widgets/tag
|
522
506
|
code = _load_local(tag)
|
@@ -769,11 +753,6 @@ def _post_lookup(postid) # side-effect
|
|
769
753
|
vp
|
770
754
|
end
|
771
755
|
|
772
|
-
def _interpolate(str, context) # FIXME move this later
|
773
|
-
wrapped = "%[" + str.dup + "]" # could fail...
|
774
|
-
eval(wrapped, context)
|
775
|
-
end
|
776
|
-
|
777
756
|
def _card_generic(card_title:, middle:, extra: "")
|
778
757
|
front = <<-HTML
|
779
758
|
<div class="card #{extra} mb-3">
|
data/lib/lowlevel.rb
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
|
2
|
+
def dump(obj, name)
|
3
|
+
File.write(name, obj)
|
4
|
+
end
|
5
|
+
|
6
|
+
def system!(str, show: false)
|
7
|
+
log!(enter: __method__, args: [str], level: 2)
|
8
|
+
STDERR.puts str if show
|
9
|
+
rc = system(str)
|
10
|
+
return rc if rc
|
11
|
+
STDERR.puts "FAILED: #{str.inspect}"
|
12
|
+
STDERR.puts "\ncaller = \n#{caller.join("\n ")}\n"
|
13
|
+
if defined?(RubyText)
|
14
|
+
sleep 6
|
15
|
+
RubyText.stop
|
16
|
+
exit
|
17
|
+
end
|
18
|
+
return rc
|
19
|
+
end
|
20
|
+
|
21
|
+
def _get_data?(file) # File need not exist
|
22
|
+
if File.exist?(file)
|
23
|
+
_get_data(file)
|
24
|
+
else
|
25
|
+
[]
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def _get_data(file)
|
30
|
+
lines = File.readlines(file)
|
31
|
+
lines.reject! {|line| line[0] == "-" } # allow rejection of lines
|
32
|
+
lines = lines.map do |line|
|
33
|
+
line.sub(/ *# .*$/, "") # allow trailing comments
|
34
|
+
end
|
35
|
+
lines
|
36
|
+
end
|
37
|
+
|
38
|
+
def copy(src, dst)
|
39
|
+
log!(enter: __method__, args: [src, dst], level: 2)
|
40
|
+
cmd = "cp #{src} #{dst} 2>/dev/null"
|
41
|
+
system!(cmd)
|
42
|
+
end
|
43
|
+
|
44
|
+
def copy!(src, dst)
|
45
|
+
log!(enter: __method__, args: [src, dst], level: 2)
|
46
|
+
cmd = "cp -r #{src} #{dst} 2>/dev/null"
|
47
|
+
system!(cmd)
|
48
|
+
end
|
49
|
+
|
50
|
+
def create_dirs(*dirs)
|
51
|
+
log!(enter: __method__, args: [*dirs], level: 3)
|
52
|
+
dirs.each do |dir|
|
53
|
+
dir = dir.to_s # symbols allowed
|
54
|
+
next if Dir.exist?(dir)
|
55
|
+
cmd = "mkdir -p #{dir} >/dev/null"
|
56
|
+
result = system!(cmd)
|
57
|
+
raise CantCreateDir(dir) unless result
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def interpolate(str, bind)
|
62
|
+
log!(enter: __method__, args: [str, bind], level: 3)
|
63
|
+
wrap = "<<-EOS\n#{str}\nEOS"
|
64
|
+
eval wrap, bind
|
65
|
+
end
|
66
|
+
|
67
|
+
def error(err)
|
68
|
+
log!(str: err, enter: __method__, args: [err], level: 2)
|
69
|
+
str = "\n Error: #{err}"
|
70
|
+
puts str
|
71
|
+
puts err.backtrace.join("\n")
|
72
|
+
end
|
73
|
+
|
data/lib/publish.rb
CHANGED
@@ -37,21 +37,15 @@ class RuneBlog::Publishing
|
|
37
37
|
url = "#@proto://#@server/#@path" # /#{vname}"
|
38
38
|
end
|
39
39
|
|
40
|
-
def system!(str)
|
41
|
-
log!(enter: __method__, args: [str], level: 1)
|
42
|
-
rc = system(str)
|
43
|
-
rc
|
44
|
-
end
|
45
|
-
|
46
40
|
def publish
|
47
41
|
log!(enter: __method__, level: 1)
|
48
42
|
dir = @docroot/@path
|
49
43
|
view_name = @blog.view.name
|
50
44
|
viewpath = dir # /view_name
|
51
45
|
# FIXME rsync doesn't work
|
52
|
-
cmd = "rsync -
|
46
|
+
cmd = "rsync -r -z #{@blog.root}/views/#{@blog.view}/remote/ #@user@#@server:#{viewpath}/"
|
53
47
|
system!(cmd)
|
54
|
-
dump(
|
48
|
+
dump("#{@blog.view} at #{Time.now}", "#{@blog.view.dir}/last_published")
|
55
49
|
true
|
56
50
|
end
|
57
51
|
|
data/lib/repl.rb
CHANGED
data/lib/runeblog.rb
CHANGED
@@ -10,7 +10,6 @@ require 'logging'
|
|
10
10
|
|
11
11
|
require 'runeblog_version'
|
12
12
|
require 'helpers-blog'
|
13
|
-
require 'default'
|
14
13
|
require 'view'
|
15
14
|
require 'publish'
|
16
15
|
require 'post'
|
@@ -48,6 +47,34 @@ class RuneBlog
|
|
48
47
|
|
49
48
|
include Helpers
|
50
49
|
|
50
|
+
class Default
|
51
|
+
|
52
|
+
# This will all become much more generic later.
|
53
|
+
|
54
|
+
def RuneBlog.post_template(num: 0, title: "No title", date: nil, view: "test_view",
|
55
|
+
teaser: "No teaser", body: "No body", tags: ["untagged"],
|
56
|
+
views: [], back: "javascript:history.go(-1)", home: "no url")
|
57
|
+
log!(enter: __method__, args: [num, title, date, view, teaser, body, tags, views, back, home], level: 3)
|
58
|
+
viewlist = (views + [view.to_s]).join(" ")
|
59
|
+
taglist = ".tags " + tags.join(" ")
|
60
|
+
|
61
|
+
<<~TEXT
|
62
|
+
.post #{num}
|
63
|
+
|
64
|
+
.title #{title}
|
65
|
+
.pubdate #{date}
|
66
|
+
.views #{viewlist}
|
67
|
+
#{taglist}
|
68
|
+
|
69
|
+
.teaser
|
70
|
+
#{teaser}
|
71
|
+
.end
|
72
|
+
#{body}
|
73
|
+
TEXT
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
|
51
78
|
def _tmp_error(err) # FIXME move to helpers
|
52
79
|
out = "/tmp/blog#{rand(100)}.txt"
|
53
80
|
File.open(out, "w") do |f|
|
@@ -68,7 +95,7 @@ class RuneBlog
|
|
68
95
|
create_dirs(:data, :drafts, :views, :posts)
|
69
96
|
new_sequence
|
70
97
|
end
|
71
|
-
copy_data(:config, repo_root/:data)
|
98
|
+
copy_data(:config, repo_root/:data) unless File.exist?(repo_root/"data/VIEW")
|
72
99
|
write_repo_config(root: repo_root)
|
73
100
|
@blog = self.new
|
74
101
|
@blog
|
@@ -90,7 +117,7 @@ class RuneBlog
|
|
90
117
|
self.class.blog = self # Weird. Like a singleton - dumbass circular dependency?
|
91
118
|
|
92
119
|
@root = Dir.pwd/root_rel
|
93
|
-
|
120
|
+
# copy_data(:config, @root/:data) unless File.exist?(@root/"data/VIEW")
|
94
121
|
write_repo_config(root: @root)
|
95
122
|
get_repo_config
|
96
123
|
@views = retrieve_views
|
@@ -210,6 +237,9 @@ class RuneBlog
|
|
210
237
|
def view=(arg)
|
211
238
|
log!(enter: __method__, args: [arg], level: 2)
|
212
239
|
case arg
|
240
|
+
when "[no view]"
|
241
|
+
# puts "Warning: No current view set"
|
242
|
+
@view = nil
|
213
243
|
when RuneBlog::View
|
214
244
|
@view = arg
|
215
245
|
_set_publisher
|
@@ -487,8 +517,8 @@ class RuneBlog
|
|
487
517
|
log!(enter: __method__, args: [draft], level: 2)
|
488
518
|
# FIXME dumb code
|
489
519
|
view_line = File.readlines(draft).grep(/^.views /)
|
490
|
-
raise "More than one .views call
|
491
|
-
raise "No .views call
|
520
|
+
raise "More than one .views call in #{draft}" if view_line.size > 1
|
521
|
+
raise "No .views call in #{draft}" if view_line.size < 1
|
492
522
|
view_line = view_line.first
|
493
523
|
views = view_line[7..-1].split
|
494
524
|
views.uniq
|
data/lib/runeblog_version.rb
CHANGED
@@ -3,7 +3,7 @@ if !defined?(RuneBlog::Path)
|
|
3
3
|
# if ! (Object.constants.include?(:RuneBlog) && RuneBlog.constants.include?(:Path))
|
4
4
|
|
5
5
|
class RuneBlog
|
6
|
-
VERSION = "0.2.
|
6
|
+
VERSION = "0.2.94"
|
7
7
|
|
8
8
|
path = Gem.find_files("runeblog").grep(/runeblog-/).first
|
9
9
|
Path = File.dirname(path)
|
@@ -41,22 +41,6 @@ def make_exception(sym, str)
|
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
|
-
def system!(str, show: false)
|
45
|
-
log!(enter: __method__, args: [str], level: 2)
|
46
|
-
STDERR.puts str if show
|
47
|
-
rc = system(str)
|
48
|
-
if rc
|
49
|
-
return rc
|
50
|
-
else
|
51
|
-
STDERR.puts "FAILED: #{str.inspect}"
|
52
|
-
STDERR.puts "\ncaller = \n#{caller.join("\n ")}\n"
|
53
|
-
sleep 6; RubyText.stop
|
54
|
-
exit
|
55
|
-
return rc
|
56
|
-
end
|
57
|
-
rc
|
58
|
-
end
|
59
|
-
|
60
44
|
def prefix(num)
|
61
45
|
log!(enter: __method__, args: [num], level: 3)
|
62
46
|
"#{'%04d' % num.to_i}"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: runeblog
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.94
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hal Fulton
|
@@ -175,7 +175,6 @@ files:
|
|
175
175
|
- empty_view/themes/standard/widgets/tag-cloud/tag-cloud.lt3
|
176
176
|
- empty_view/themes/standard/widgets/tag-cloud/tag-cloud.rb
|
177
177
|
- lib/Javascript.stuff
|
178
|
-
- lib/default.rb
|
179
178
|
- lib/exper/2svg.lt3
|
180
179
|
- lib/exper/callout.js
|
181
180
|
- lib/exper/fbtw-js
|
@@ -187,6 +186,7 @@ files:
|
|
187
186
|
- lib/helpers-repl.rb
|
188
187
|
- lib/liveblog.rb
|
189
188
|
- lib/logging.rb
|
189
|
+
- lib/lowlevel.rb
|
190
190
|
- lib/pathmagic.rb
|
191
191
|
- lib/post.rb
|
192
192
|
- lib/processing.rb
|
data/lib/default.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
class RuneBlog::Default
|
2
|
-
|
3
|
-
# This will all become much more generic later.
|
4
|
-
|
5
|
-
def RuneBlog.post_template(num: 0, title: "No title", date: nil, view: "test_view",
|
6
|
-
teaser: "No teaser", body: "No body", tags: ["untagged"],
|
7
|
-
views: [], back: "javascript:history.go(-1)", home: "no url")
|
8
|
-
log!(enter: __method__, args: [num, title, date, view, teaser, body, tags, views, back, home], level: 3)
|
9
|
-
viewlist = (views + [view.to_s]).join(" ")
|
10
|
-
taglist = ".tags " + tags.join(" ")
|
11
|
-
|
12
|
-
# .mixin liveblog
|
13
|
-
# . ^ get rid of this later
|
14
|
-
|
15
|
-
<<-TEXT
|
16
|
-
.post #{num}
|
17
|
-
|
18
|
-
.title #{title}
|
19
|
-
.pubdate #{date}
|
20
|
-
.views #{viewlist}
|
21
|
-
#{taglist}
|
22
|
-
|
23
|
-
.teaser
|
24
|
-
#{teaser}
|
25
|
-
.end
|
26
|
-
#{body}
|
27
|
-
TEXT
|
28
|
-
|
29
|
-
end
|
30
|
-
|
31
|
-
end
|