runeblog 0.3.02 → 0.3.07
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/bin/blog +17 -16
- data/data/features.txt +1 -1
- data/empty_view/settings/features.txt +1 -1
- data/empty_view/settings/recent.txt +5 -0
- data/lib/helpers-blog.rb +13 -58
- data/lib/helpers-repl.rb +3 -41
- data/lib/liveblog.rb +7 -8
- data/lib/lowlevel.rb +42 -8
- data/lib/post.rb +16 -38
- data/lib/repl.rb +111 -217
- data/lib/runeblog.rb +30 -73
- data/lib/runeblog_version.rb +1 -2
- data/lib/view.rb +4 -0
- data/test/austin.rb +6 -7
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c9c40711649cc90ed5892d256311a01c9841655a1945cc2dcfcc9bd8dd0e77e5
|
4
|
+
data.tar.gz: ff3b53cdf4d0f6d7136e31cef2aca74a4843d836d45518909baa082f134ec089
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 667ae25acb4c5230f9674fc067bbfca36b18562f8bf9f740f066e39621ae3eff9a952309eb28b3ed754c8f4c4acc0cc7a25054db1f7999844c8f49ac6621cb9c
|
7
|
+
data.tar.gz: cda360ef27a9733285d4aa0c50f402cd00c385f30f49f40d0fd1d61fc1046aec84dc2b0d8f6bb9e4db018c8f4266eb7381c1e9171ff5096166a7054fda98e8ea
|
data/bin/blog
CHANGED
@@ -25,14 +25,13 @@ 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!("
|
29
|
-
site = ask!("
|
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)
|
33
33
|
str = str.gsub(/SITE_DOMAIN/, site)
|
34
34
|
File.write(univ, str)
|
35
|
-
# STDERR.puts "------ universal ------\n#{`cat #{univ}`}\n------------------------"
|
36
35
|
else
|
37
36
|
vim_params = '-c ":set hlsearch" -c ":hi Search ctermfg=2 ctermbg=6" +/"\(AUTHOR.*\|SITE.*\)"'
|
38
37
|
edit_file(univ, vim: vim_params)
|
@@ -41,11 +40,11 @@ end
|
|
41
40
|
|
42
41
|
def get_global
|
43
42
|
if yesno("Faster view setup? (no: edit global.lt3)")
|
44
|
-
view_name = ask!("
|
43
|
+
view_name = ask!(" Filename: ")
|
45
44
|
@blog.create_view(view_name) # call change_view??
|
46
|
-
title = ask!("
|
47
|
-
subtitle = ask!("
|
48
|
-
domain = ask!("
|
45
|
+
title = ask!(" View title: ")
|
46
|
+
subtitle = ask!(" Subtitle : ")
|
47
|
+
domain = ask!(" Domain : ")
|
49
48
|
|
50
49
|
vfile = "#{@blog.root}/views/#{view_name}/settings/view.txt"
|
51
50
|
hash = {/VIEW_NAME/ => view_name,
|
@@ -54,7 +53,7 @@ def get_global
|
|
54
53
|
/VIEW_DOMAIN/ => domain}
|
55
54
|
@blog.complete_file(vfile, nil, hash)
|
56
55
|
else
|
57
|
-
view_name = ask!("
|
56
|
+
view_name = ask!(" Filename: ")
|
58
57
|
@blog.create_view(view_name) # call change_view??
|
59
58
|
vim_params = '-c ":set hlsearch" -c ":hi Search ctermfg=2 ctermbg=6" +/"\(VIEW_.*\|SITE.*\)"'
|
60
59
|
edit_file(@blog.view.dir/"themes/standard/global.lt3", vim: vim_params)
|
@@ -66,6 +65,8 @@ def get_started
|
|
66
65
|
puts " First choose your editor."
|
67
66
|
@blog.editor = pick_editor
|
68
67
|
File.write("#{@blog.root}/data/EDITOR", @blog.editor)
|
68
|
+
print " Default editor is "
|
69
|
+
puts fx(@blog.editor, :bold)
|
69
70
|
|
70
71
|
get_universal
|
71
72
|
# Now create a custom global.lt3
|
@@ -73,11 +74,10 @@ def get_started
|
|
73
74
|
puts fx("\n Quick setup complete!", :bold)
|
74
75
|
if yesno("Create your first view now?")
|
75
76
|
get_global
|
76
|
-
puts "\n
|
77
|
+
puts fx("\n View #{@blog.view} created!\n ", :bold)
|
77
78
|
end
|
78
79
|
end
|
79
80
|
|
80
|
-
puts
|
81
81
|
print fx(" For help", :bold)
|
82
82
|
puts " type h or help."
|
83
83
|
print fx(" Create a view", :bold)
|
@@ -90,11 +90,11 @@ def mainloop
|
|
90
90
|
info = @blog.view || "no view"
|
91
91
|
print fx("[#{info}] ", Red, :bold)
|
92
92
|
cmd = STDSCR.gets(history: @cmdhist, tab: @tabcom)
|
93
|
-
cmd_quit
|
93
|
+
cmd_quit if cmd.nil? # ^D
|
94
94
|
cmd.chomp!
|
95
95
|
return if cmd.empty? # CR does nothing
|
96
|
-
|
97
|
-
ret
|
96
|
+
invoking = RuneBlog::REPL.choose_method(cmd)
|
97
|
+
ret = send(*invoking)
|
98
98
|
rescue => err
|
99
99
|
puts err
|
100
100
|
end
|
@@ -106,7 +106,7 @@ def cmdline_preview
|
|
106
106
|
end
|
107
107
|
|
108
108
|
def cmdline_publish
|
109
|
-
abort "
|
109
|
+
abort "Not implemented yet"
|
110
110
|
_need_view
|
111
111
|
end
|
112
112
|
|
@@ -152,7 +152,8 @@ major, minor = RUBY_VERSION.split(".").values_at(0,1)
|
|
152
152
|
ver = major.to_i*10 + minor.to_i
|
153
153
|
unless ver >= 24
|
154
154
|
RubyText.stop
|
155
|
-
|
155
|
+
sleep 0.2
|
156
|
+
abort "Needs Ruby 2.4 or greater"
|
156
157
|
end
|
157
158
|
|
158
159
|
include RuneBlog::Helpers # for try_read_config
|
@@ -194,7 +195,7 @@ puts fx("\n RuneBlog", :bold), fx(" v #{RuneBlog::VERSION}\n", Red)
|
|
194
195
|
|
195
196
|
loop { mainloop }
|
196
197
|
|
197
|
-
system("tput clear")
|
198
|
+
# system("tput clear")
|
198
199
|
sleep 0.2
|
199
200
|
puts
|
200
201
|
|
data/data/features.txt
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
# 1 = enabled (implies installed)
|
3
3
|
# x = excluded (not installed; does it even exist?)
|
4
4
|
|
5
|
-
reddit
|
5
|
+
reddit 0 # autopost, embed thread after blog post
|
6
6
|
facebook 0 # reader-like, reader post, autopost?
|
7
7
|
twitter 0 # reader-tweet, reader-follow, autotweet?
|
8
8
|
|
@@ -2,7 +2,7 @@
|
|
2
2
|
# 1 = enabled (implies installed)
|
3
3
|
# x = excluded (not installed; does it even exist?)
|
4
4
|
|
5
|
-
reddit
|
5
|
+
reddit 0 # autopost, embed thread after blog post
|
6
6
|
facebook 0 # reader-like, reader post, autopost?
|
7
7
|
twitter 0 # reader-tweet, reader-follow, autotweet?
|
8
8
|
|
data/lib/helpers-blog.rb
CHANGED
@@ -14,16 +14,18 @@ module RuneBlog::Helpers
|
|
14
14
|
exit
|
15
15
|
end
|
16
16
|
|
17
|
-
def read_features
|
17
|
+
def read_features(view = nil)
|
18
18
|
hash = {}
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
name = line.strip
|
24
|
-
hash[name] = (char != "-")
|
19
|
+
if view.nil? # toplevel default
|
20
|
+
dir = @root/"data"
|
21
|
+
else
|
22
|
+
dir = @root/:views/self.view/:settings
|
25
23
|
end
|
26
|
-
|
24
|
+
file = dir/"features.txt"
|
25
|
+
pairs = read_pairs(file)
|
26
|
+
enabled = {}
|
27
|
+
pairs.each {|k,v| enabled[k] = (v == "1") }
|
28
|
+
@features = enabled
|
27
29
|
end
|
28
30
|
|
29
31
|
def get_repo_config
|
@@ -39,15 +41,9 @@ module RuneBlog::Helpers
|
|
39
41
|
|
40
42
|
def copy_data(tag, dest)
|
41
43
|
data = RuneBlog::Path + "/../data" # files kept inside gem
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
when :config
|
46
|
-
files = %w[ROOT VIEW EDITOR universal.lt3 global.lt3]
|
47
|
-
files.each {|file| copy(data + "/" + file, dest) }
|
48
|
-
when :extra # FIXME remove later
|
49
|
-
# copy!(extra, dest)
|
50
|
-
end
|
44
|
+
# FIXME tag no longer used
|
45
|
+
files = %w[ROOT VIEW EDITOR universal.lt3 global.lt3 features.txt]
|
46
|
+
files.each {|file| copy(data + "/" + file, dest) unless File.exist?(dest/file) }
|
51
47
|
end
|
52
48
|
|
53
49
|
def read_vars(file)
|
@@ -70,47 +66,6 @@ module RuneBlog::Helpers
|
|
70
66
|
stop_RubyText rescue nil
|
71
67
|
end
|
72
68
|
|
73
|
-
def read_config(file, *syms)
|
74
|
-
log!(enter: __method__, args: [file, *syms], level: 3)
|
75
|
-
lines = File.readlines(file).map(&:chomp)
|
76
|
-
obj = ::OpenStruct.new
|
77
|
-
skip = ["\n", "#", "."]
|
78
|
-
lines.each do |line|
|
79
|
-
next if skip.include?(line[0])
|
80
|
-
key, val = line.split(/: +/, 2)
|
81
|
-
obj.send(key+"=", val)
|
82
|
-
end
|
83
|
-
return obj if syms.empty?
|
84
|
-
|
85
|
-
vals = []
|
86
|
-
if syms.empty?
|
87
|
-
vals = obj.to_hash.values
|
88
|
-
else
|
89
|
-
syms.each {|sym| vals << obj.send(sym) }
|
90
|
-
end
|
91
|
-
return vals
|
92
|
-
rescue => err
|
93
|
-
puts "Can't read config file '#{file}': #{err}"
|
94
|
-
puts err.backtrace.join("\n")
|
95
|
-
puts "dir = #{Dir.pwd}"
|
96
|
-
stop_RubyText
|
97
|
-
end
|
98
|
-
|
99
|
-
def try_read_config(file, hash)
|
100
|
-
log!(enter: __method__, args: [file, hash], level: 3)
|
101
|
-
return hash.values unless File.exist?(file)
|
102
|
-
vals = read_config(file, *hash.keys)
|
103
|
-
vals
|
104
|
-
end
|
105
|
-
|
106
|
-
def write_config(obj, file)
|
107
|
-
log!(enter: __method__, args: [obj, file], level: 2)
|
108
|
-
hash = obj.to_h
|
109
|
-
File.open(file, "w") do |out|
|
110
|
-
hash.each_pair {|key, val| out.puts "#{key}: #{val}" }
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
69
|
def retrieve_views # read from filesystem
|
115
70
|
log!(enter: __method__, level: 3)
|
116
71
|
dirs = subdirs("#@root/views/").sort
|
data/lib/helpers-repl.rb
CHANGED
@@ -109,7 +109,9 @@ module RuneBlog::REPL
|
|
109
109
|
end
|
110
110
|
meth = found || :cmd_INVALID
|
111
111
|
params = cmd if meth == :cmd_INVALID
|
112
|
-
[meth
|
112
|
+
result = [meth]
|
113
|
+
result << params unless params.nil?
|
114
|
+
result
|
113
115
|
end
|
114
116
|
|
115
117
|
def ask(prompt, meth = :to_s)
|
@@ -121,42 +123,6 @@ module RuneBlog::REPL
|
|
121
123
|
ask(fx(prompt, :bold), meth)
|
122
124
|
end
|
123
125
|
|
124
|
-
def reset_output(initial = "")
|
125
|
-
@out ||= ""
|
126
|
-
@out.replace initial
|
127
|
-
end
|
128
|
-
|
129
|
-
def flush_output(initial = "")
|
130
|
-
CantOpen
|
131
|
-
@out ||= ""
|
132
|
-
puts @out
|
133
|
-
reset_output
|
134
|
-
end
|
135
|
-
|
136
|
-
def output(str) # \n and indent
|
137
|
-
@out ||= ""
|
138
|
-
@out << " " + str.to_s
|
139
|
-
end
|
140
|
-
|
141
|
-
def outstr(str) # indent
|
142
|
-
@out ||= ""
|
143
|
-
@out << str
|
144
|
-
end
|
145
|
-
|
146
|
-
def output!(str) # \n and indent
|
147
|
-
@out ||= ""
|
148
|
-
@out << " " + str
|
149
|
-
end
|
150
|
-
|
151
|
-
def output_newline(n = 1)
|
152
|
-
@out ||= ""
|
153
|
-
n.times { @out << "\n" }
|
154
|
-
end
|
155
|
-
|
156
|
-
def check_empty(arg)
|
157
|
-
raise InternalError(caller[0], arg.inspect) unless arg.nil?
|
158
|
-
end
|
159
|
-
|
160
126
|
def get_integer(arg)
|
161
127
|
Integer(arg)
|
162
128
|
rescue
|
@@ -176,10 +142,6 @@ module RuneBlog::REPL
|
|
176
142
|
end
|
177
143
|
end
|
178
144
|
|
179
|
-
def colored_slug(slug)
|
180
|
-
slug[0..3] + slug[4..-1]
|
181
|
-
end
|
182
|
-
|
183
145
|
def tags_for_view(vname = @blog.view)
|
184
146
|
Dir.chdir(vname) do
|
185
147
|
fname = "tagpool"
|
data/lib/liveblog.rb
CHANGED
@@ -72,7 +72,7 @@ def post_trailer
|
|
72
72
|
tags = _var("post.tags")
|
73
73
|
taglist = tags.empty? ? "" : "Tags: #{tags}"
|
74
74
|
|
75
|
-
reddit_enabled = @blog.features["reddit"]
|
75
|
+
reddit_enabled = @blog.features["reddit"]
|
76
76
|
reddit_txt = ""
|
77
77
|
if reddit_enabled
|
78
78
|
vdir = @blog.root/:views/@blog.view
|
@@ -110,7 +110,7 @@ def faq
|
|
110
110
|
_out %[ <a data-toggle="collapse" href="##{id}" role="button" aria-expanded="false" aria-controls="collapseExample"><font size=+3>⌄</font></a>]
|
111
111
|
_out %[ <b>#{ques}</b>]
|
112
112
|
_out %[<div class="collapse" id="#{id}"><br><font size=+1> #{ans}</font></div>\n]
|
113
|
-
_out "<br>" unless @faq_count == 1
|
113
|
+
_out "<br>" # unless @faq_count == 1
|
114
114
|
_optional_blank_line
|
115
115
|
end
|
116
116
|
|
@@ -775,9 +775,9 @@ end
|
|
775
775
|
def _write_metadata
|
776
776
|
File.write("teaser.txt", @meta.teaser)
|
777
777
|
fields = [:num, :title, :date, :pubdate, :views, :tags, :pinned]
|
778
|
-
|
779
|
-
|
780
|
-
fields.each {|fld|
|
778
|
+
fname = "metadata.txt"
|
779
|
+
File.open(fname, "w") do |f|
|
780
|
+
fields.each {|fld| f.puts "#{'%8s' % fld} #{@meta.send(fld)}" }
|
781
781
|
end
|
782
782
|
end
|
783
783
|
|
@@ -789,9 +789,8 @@ def _post_lookup(postid) # side-effect
|
|
789
789
|
posts = Dir.entries(dir_posts).grep(/^\d\d\d\d/).map {|x| dir_posts/x }
|
790
790
|
posts.select! {|x| File.directory?(x) }
|
791
791
|
|
792
|
-
|
793
|
-
|
794
|
-
postdir = post.first
|
792
|
+
posts = posts.select {|x| File.basename(x).to_i == postid }
|
793
|
+
postdir = exactly_one(posts)
|
795
794
|
vp = RuneBlog::ViewPost.new(@blog.view, postdir)
|
796
795
|
vp
|
797
796
|
end
|
data/lib/lowlevel.rb
CHANGED
@@ -1,4 +1,13 @@
|
|
1
1
|
|
2
|
+
def _tmp_error(err)
|
3
|
+
out = "/tmp/blog#{rand(100)}.txt"
|
4
|
+
File.open(out, "w") do |f|
|
5
|
+
f.puts err.to_s + "\n--------"
|
6
|
+
f.puts err.backtrace.join("\n")
|
7
|
+
end
|
8
|
+
puts "Error: See #{out}"
|
9
|
+
end
|
10
|
+
|
2
11
|
def dump(obj, name)
|
3
12
|
File.write(name, obj)
|
4
13
|
end
|
@@ -19,22 +28,41 @@
|
|
19
28
|
end
|
20
29
|
|
21
30
|
def _get_data?(file) # File need not exist
|
22
|
-
|
23
|
-
_get_data(file)
|
24
|
-
else
|
25
|
-
[]
|
26
|
-
end
|
31
|
+
File.exist?(file) ? _get_data(file) : []
|
27
32
|
end
|
28
33
|
|
29
34
|
def _get_data(file)
|
30
35
|
lines = File.readlines(file)
|
31
|
-
lines.reject! {|line| line[0] == "-" } # allow rejection of lines
|
32
36
|
lines = lines.map do |line|
|
33
|
-
line
|
37
|
+
line = line.chomp.strip
|
38
|
+
line.sub(/ *# .*$/, "") # allow leading/trailing comments
|
34
39
|
end
|
40
|
+
lines.reject! {|x| x.empty? }
|
35
41
|
lines
|
36
42
|
end
|
37
43
|
|
44
|
+
def read_pairs(file) # returns a hash
|
45
|
+
lines = _get_data(file)
|
46
|
+
hash = {}
|
47
|
+
lines.each do |line|
|
48
|
+
key, val = line.split(" ", 2)
|
49
|
+
val ||= ""
|
50
|
+
hash[key] = val
|
51
|
+
end
|
52
|
+
hash
|
53
|
+
end
|
54
|
+
|
55
|
+
def read_pairs!(file) # returns an openstruct
|
56
|
+
lines = _get_data(file)
|
57
|
+
obj = OpenStruct.new
|
58
|
+
lines.each do |line|
|
59
|
+
key, val = line.split(" ", 2)
|
60
|
+
val ||= ""
|
61
|
+
obj.send("#{key}=", val)
|
62
|
+
end
|
63
|
+
obj
|
64
|
+
end
|
65
|
+
|
38
66
|
def copy(src, dst)
|
39
67
|
log!(enter: __method__, args: [src, dst], level: 2)
|
40
68
|
cmd = "cp #{src} #{dst} 2>/dev/null"
|
@@ -65,9 +93,15 @@
|
|
65
93
|
end
|
66
94
|
|
67
95
|
def error(err)
|
68
|
-
log!(str: err, enter: __method__, args: [err], level: 2)
|
96
|
+
# log!(str: err, enter: __method__, args: [err], level: 2)
|
69
97
|
str = "\n Error: #{err}"
|
70
98
|
puts str
|
71
99
|
puts err.backtrace.join("\n")
|
72
100
|
end
|
73
101
|
|
102
|
+
def exactly_one(list)
|
103
|
+
raise "List: Zero instances" if list.empty?
|
104
|
+
raise "List: More than one instance" if list.size > 1
|
105
|
+
list.first
|
106
|
+
end
|
107
|
+
|
data/lib/post.rb
CHANGED
@@ -13,41 +13,20 @@ class RuneBlog::Post
|
|
13
13
|
log!(enter: __method__, args: [post], level: 3)
|
14
14
|
raise "Doesn't work right now"
|
15
15
|
raise NoBlogAccessor if RuneBlog.blog.nil?
|
16
|
-
# "post" is a slug
|
16
|
+
# "post" is a slug?
|
17
17
|
pdir = RuneBlog.blog.root/:drafts/post
|
18
18
|
meta = nil
|
19
19
|
Dir.chdir(pdir) do
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
20
|
+
# meta = read_config("metadata.txt")
|
21
|
+
# meta.date = Date.parse(meta.date)
|
22
|
+
# meta.views = meta.views.split
|
23
|
+
# meta.tags = meta.tags.split
|
24
|
+
# meta.teaser = File.read("teaser.txt")
|
25
25
|
# meta.body = File.read("body.txt")
|
26
26
|
end
|
27
27
|
meta
|
28
28
|
end
|
29
29
|
|
30
|
-
def write_metadata(meta) # FIXME ???
|
31
|
-
log!(enter: __method__, args: [meta], level: 3)
|
32
|
-
debug "=== write_metadata:"
|
33
|
-
debug "-----\n#{meta.inspect}\n-----"
|
34
|
-
fname2 = "metadata.txt"
|
35
|
-
hash = meta.to_h
|
36
|
-
|
37
|
-
File.write("teaser.txt", hash[:teaser])
|
38
|
-
hash.delete(:teaser)
|
39
|
-
hash.delete(:body)
|
40
|
-
|
41
|
-
hash[:views] = hash[:views].join(" ")
|
42
|
-
hash[:tags] = hash[:tags].join(" ")
|
43
|
-
|
44
|
-
fields = [:num, :title, :date, :pubdate, :views, :tags]
|
45
|
-
|
46
|
-
f2 = File.new(fname2, "w")
|
47
|
-
fields.each {|fld| f2.puts "#{fld}: #{hash[fld]}" }
|
48
|
-
f2.close
|
49
|
-
end
|
50
|
-
|
51
30
|
def initialize
|
52
31
|
log!(enter: __method__, level: 3)
|
53
32
|
@blog = RuneBlog.blog || raise(NoBlogAccessor)
|
@@ -87,10 +66,9 @@ class RuneBlog::Post
|
|
87
66
|
end
|
88
67
|
|
89
68
|
def edit
|
90
|
-
log!(enter: __method__)
|
91
|
-
|
92
|
-
|
93
|
-
nil
|
69
|
+
# log!(enter: __method__)
|
70
|
+
edit_file(@draft, vim: "+8")
|
71
|
+
build
|
94
72
|
rescue => err
|
95
73
|
error(err)
|
96
74
|
end
|
@@ -99,8 +77,8 @@ class RuneBlog::Post
|
|
99
77
|
log!(enter: __method__)
|
100
78
|
post = self
|
101
79
|
views = post.meta.views
|
102
|
-
text = File.read(@draft)
|
103
80
|
@blog.generate_post(@draft)
|
81
|
+
@blog.generate_index(@blog.view)
|
104
82
|
end
|
105
83
|
end
|
106
84
|
|
@@ -184,12 +162,12 @@ class RuneBlog::ViewPost
|
|
184
162
|
@aslug = @nslug[5..-1]
|
185
163
|
fname = "#{postdir}/teaser.txt" # ???
|
186
164
|
@teaser_text = File.read(fname).chomp
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
165
|
+
|
166
|
+
Dir.chdir(postdir) do
|
167
|
+
meta = @blog.read_metadata
|
168
|
+
@title = meta.title
|
169
|
+
@date = meta.pubdate
|
170
|
+
end
|
193
171
|
rescue => err
|
194
172
|
STDERR.puts "--- #{err}\n #{err.backtrace.join("\n ")}"
|
195
173
|
end
|