runeblog 0.3.05 → 0.3.06
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 +4 -51
- data/lib/liveblog.rb +5 -6
- data/lib/lowlevel.rb +33 -9
- data/lib/post.rb +16 -38
- data/lib/repl.rb +8 -22
- data/lib/runeblog.rb +18 -60
- data/lib/runeblog_version.rb +1 -2
- 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: 70bd6e1889a61c19c606616bcb0a4ace993b9f7cb7c993a9e4c2c41e7f47a7f9
|
4
|
+
data.tar.gz: c178b2630acfadbeddbbd51dc050bf41cf636372421fdda3b9003991f31c2b26
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6c736c15fe20f800cc6393e5ad008983c0cb15eb2e90b1db60ac02361fb3ff65fc526266009d15f9ab1b99324055388bf52c9d487101e2ce6ce3dab1f3b1ba97
|
7
|
+
data.tar.gz: 7eb2bc828f8969fd15524ec4a010de4ecda475e636dc6fd0b8e4cbc0736def5aaf504db801440059644d1080423807f5abc078e79047d9b19cb8c4b79e336e26
|
data/lib/helpers-blog.rb
CHANGED
@@ -22,16 +22,10 @@ module RuneBlog::Helpers
|
|
22
22
|
dir = @root/:views/self.view/:settings
|
23
23
|
end
|
24
24
|
file = dir/"features.txt"
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
next if line =~ /^ *#/ # leading
|
30
|
-
next if line.empty?
|
31
|
-
name, status = line.split
|
32
|
-
hash[name] = (status == "1") # enabled
|
33
|
-
end
|
34
|
-
@features = hash
|
25
|
+
pairs = read_pairs(file)
|
26
|
+
enabled = {}
|
27
|
+
pairs.each {|k,v| enabled[k] = (v == "1") }
|
28
|
+
@features = enabled
|
35
29
|
end
|
36
30
|
|
37
31
|
def get_repo_config
|
@@ -72,47 +66,6 @@ module RuneBlog::Helpers
|
|
72
66
|
stop_RubyText rescue nil
|
73
67
|
end
|
74
68
|
|
75
|
-
def read_config(file, *syms)
|
76
|
-
log!(enter: __method__, args: [file, *syms], level: 3)
|
77
|
-
lines = File.readlines(file).map(&:chomp)
|
78
|
-
obj = ::OpenStruct.new
|
79
|
-
skip = ["\n", "#", "."]
|
80
|
-
lines.each do |line|
|
81
|
-
next if skip.include?(line[0])
|
82
|
-
key, val = line.split(/: +/, 2)
|
83
|
-
obj.send(key+"=", val)
|
84
|
-
end
|
85
|
-
return obj if syms.empty?
|
86
|
-
|
87
|
-
vals = []
|
88
|
-
if syms.empty?
|
89
|
-
vals = obj.to_hash.values
|
90
|
-
else
|
91
|
-
syms.each {|sym| vals << obj.send(sym) }
|
92
|
-
end
|
93
|
-
return vals
|
94
|
-
rescue => err
|
95
|
-
puts "Can't read config file '#{file}': #{err}"
|
96
|
-
puts err.backtrace.join("\n")
|
97
|
-
puts "dir = #{Dir.pwd}"
|
98
|
-
stop_RubyText
|
99
|
-
end
|
100
|
-
|
101
|
-
def try_read_config(file, hash)
|
102
|
-
log!(enter: __method__, args: [file, hash], level: 3)
|
103
|
-
return hash.values unless File.exist?(file)
|
104
|
-
vals = read_config(file, *hash.keys)
|
105
|
-
vals
|
106
|
-
end
|
107
|
-
|
108
|
-
def write_config(obj, file)
|
109
|
-
log!(enter: __method__, args: [obj, file], level: 2)
|
110
|
-
hash = obj.to_h
|
111
|
-
File.open(file, "w") do |out|
|
112
|
-
hash.each_pair {|key, val| out.puts "#{key}: #{val}" }
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
116
69
|
def retrieve_views # read from filesystem
|
117
70
|
log!(enter: __method__, level: 3)
|
118
71
|
dirs = subdirs("#@root/views/").sort
|
data/lib/liveblog.rb
CHANGED
@@ -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
@@ -2,7 +2,7 @@
|
|
2
2
|
def _tmp_error(err)
|
3
3
|
out = "/tmp/blog#{rand(100)}.txt"
|
4
4
|
File.open(out, "w") do |f|
|
5
|
-
f.puts err + "\n--------"
|
5
|
+
f.puts err.to_s + "\n--------"
|
6
6
|
f.puts err.backtrace.join("\n")
|
7
7
|
end
|
8
8
|
puts "Error: See #{out}"
|
@@ -28,22 +28,40 @@
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def _get_data?(file) # File need not exist
|
31
|
-
|
32
|
-
_get_data(file)
|
33
|
-
else
|
34
|
-
[]
|
35
|
-
end
|
31
|
+
File.exist?(file) ? _get_data(file) : []
|
36
32
|
end
|
37
33
|
|
38
34
|
def _get_data(file)
|
39
35
|
lines = File.readlines(file)
|
40
|
-
lines.reject! {|line| line[0] == "-" } # allow rejection of lines
|
41
36
|
lines = lines.map do |line|
|
42
|
-
line
|
37
|
+
line = line.chomp.strip
|
38
|
+
line.sub(/ *# .*$/, "") # allow leading/trailing comments
|
43
39
|
end
|
40
|
+
lines.reject! {|x| x.empty? }
|
44
41
|
lines
|
45
42
|
end
|
46
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
|
+
hash[key] = val
|
50
|
+
end
|
51
|
+
hash
|
52
|
+
end
|
53
|
+
|
54
|
+
def read_pairs!(file) # returns an openstruct
|
55
|
+
lines = _get_data(file)
|
56
|
+
obj = OpenStruct.new
|
57
|
+
lines.each do |line|
|
58
|
+
key, val = line.split(" ", 2)
|
59
|
+
val ||= ""
|
60
|
+
obj.send("#{key}=", val)
|
61
|
+
end
|
62
|
+
obj
|
63
|
+
end
|
64
|
+
|
47
65
|
def copy(src, dst)
|
48
66
|
log!(enter: __method__, args: [src, dst], level: 2)
|
49
67
|
cmd = "cp #{src} #{dst} 2>/dev/null"
|
@@ -74,9 +92,15 @@
|
|
74
92
|
end
|
75
93
|
|
76
94
|
def error(err)
|
77
|
-
log!(str: err, enter: __method__, args: [err], level: 2)
|
95
|
+
# log!(str: err, enter: __method__, args: [err], level: 2)
|
78
96
|
str = "\n Error: #{err}"
|
79
97
|
puts str
|
80
98
|
puts err.backtrace.join("\n")
|
81
99
|
end
|
82
100
|
|
101
|
+
def exactly_one(list)
|
102
|
+
raise "List: Zero instances" if list.empty?
|
103
|
+
raise "List: More than one instance" if list.size > 1
|
104
|
+
list.first
|
105
|
+
end
|
106
|
+
|
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
|
data/lib/repl.rb
CHANGED
@@ -8,31 +8,31 @@ make_exception(:EditorProblem, "Could not edit $1")
|
|
8
8
|
|
9
9
|
module RuneBlog::REPL
|
10
10
|
def edit_file(file, vim: "")
|
11
|
-
|
11
|
+
# STDSCR.saveback
|
12
12
|
ed = @blog.editor
|
13
13
|
params = vim if ed =~ /vim$/
|
14
14
|
result = system!("#{@blog.editor} #{file} #{params}")
|
15
15
|
raise EditorProblem(file) unless result
|
16
|
-
|
16
|
+
# STDSCR.restback
|
17
17
|
cmd_clear
|
18
18
|
end
|
19
19
|
|
20
20
|
def cmd_quit
|
21
21
|
STDSCR.rows.times { puts " "*(STDSCR.cols-1) }
|
22
22
|
# FIXME please?
|
23
|
-
sleep 0.1
|
23
|
+
# sleep 0.1
|
24
24
|
STDSCR.clear
|
25
25
|
sleep 0.1
|
26
26
|
RubyText.stop
|
27
27
|
sleep 0.1
|
28
28
|
system("clear")
|
29
|
-
sleep 0.1
|
29
|
+
# sleep 0.1
|
30
30
|
exit
|
31
31
|
end
|
32
32
|
|
33
33
|
def cmd_clear
|
34
34
|
STDSCR.rows.times { puts " "*(STDSCR.cols-1) }
|
35
|
-
sleep 0.1
|
35
|
+
# sleep 0.1
|
36
36
|
STDSCR.clear
|
37
37
|
end
|
38
38
|
|
@@ -223,9 +223,9 @@ module RuneBlog::REPL
|
|
223
223
|
def cmd_rebuild
|
224
224
|
debug "Starting cmd_rebuild..."
|
225
225
|
puts
|
226
|
+
regen_posts
|
226
227
|
@blog.generate_view(@blog.view)
|
227
228
|
@blog.generate_index(@blog.view)
|
228
|
-
regen_posts
|
229
229
|
rescue => err
|
230
230
|
_tmp_error(err)
|
231
231
|
end
|
@@ -301,22 +301,8 @@ module RuneBlog::REPL
|
|
301
301
|
tag = "#{'%04d' % id}"
|
302
302
|
files = ::Find.find(@blog.root/:drafts).to_a
|
303
303
|
files = files.grep(/#{tag}-.*lt3/)
|
304
|
-
|
305
|
-
|
306
|
-
msg = "Multiple files: #{files}"
|
307
|
-
puts msg
|
308
|
-
return [false, msg]
|
309
|
-
end
|
310
|
-
if files.empty?
|
311
|
-
msg = "\n Can't edit post #{id}"
|
312
|
-
puts msg
|
313
|
-
return [false, msg]
|
314
|
-
end
|
315
|
-
|
316
|
-
file = files.first
|
317
|
-
draft = @blog.root/:drafts/file
|
318
|
-
vim_params = '-c G'
|
319
|
-
result = edit_file(draft)
|
304
|
+
draft = exactly_one(files)
|
305
|
+
result = edit_file(draft, vim: '-c$')
|
320
306
|
@blog.generate_post(draft)
|
321
307
|
rescue => err
|
322
308
|
_tmp_error(err)
|
data/lib/runeblog.rb
CHANGED
@@ -189,11 +189,20 @@ class RuneBlog
|
|
189
189
|
_generate_settings
|
190
190
|
end
|
191
191
|
|
192
|
+
# FIXME reconcile with _get_draft data
|
193
|
+
|
194
|
+
def read_metadata
|
195
|
+
meta = read_pairs!("metadata.txt")
|
196
|
+
meta.views = meta.views.split
|
197
|
+
meta.tags = meta.tags.split
|
198
|
+
meta
|
199
|
+
end
|
200
|
+
|
192
201
|
def _deploy_local(dir)
|
193
202
|
log!(enter: __method__, args: [dir], level: 1)
|
194
203
|
Dir.chdir(dir) do
|
195
|
-
|
196
|
-
views.each do |v|
|
204
|
+
meta = read_metadata
|
205
|
+
meta.views.each do |v|
|
197
206
|
next unless _check_view?(v)
|
198
207
|
system!("cp *html #@root/views/#{v}/remote", show: true)
|
199
208
|
end
|
@@ -202,33 +211,6 @@ class RuneBlog
|
|
202
211
|
_tmp_error(err)
|
203
212
|
end
|
204
213
|
|
205
|
-
# FIXME reconcile with _get_draft data
|
206
|
-
|
207
|
-
def _retrieve_metadata(key)
|
208
|
-
key = key.to_s
|
209
|
-
lines = File.readlines("metadata.txt")
|
210
|
-
lines = lines.grep(/^#{key}: /)
|
211
|
-
case lines.size
|
212
|
-
when 0
|
213
|
-
result = nil # not found
|
214
|
-
when 1
|
215
|
-
front = "#{key}: "
|
216
|
-
n = front.size
|
217
|
-
str = lines.first.chomp[n..-1]
|
218
|
-
case key
|
219
|
-
when "views", "tags" # plurals
|
220
|
-
result = str.split
|
221
|
-
else
|
222
|
-
result = str
|
223
|
-
end
|
224
|
-
else
|
225
|
-
raise "Too many #{key} instances in metadata.txt!"
|
226
|
-
end
|
227
|
-
return result
|
228
|
-
rescue => err
|
229
|
-
_tmp_error(err)
|
230
|
-
end
|
231
|
-
|
232
214
|
def process_post(sourcefile)
|
233
215
|
log!(enter: __method__, args: [sourcefile], level: 2)
|
234
216
|
nslug = sourcefile.sub(/.lt3/, "")
|
@@ -401,9 +383,8 @@ class RuneBlog
|
|
401
383
|
posts = Dir.entries(dir_posts).grep(/^\d\d\d\d/).map {|x| dir_posts/x }
|
402
384
|
posts.select! {|x| File.directory?(x) }
|
403
385
|
|
404
|
-
|
405
|
-
|
406
|
-
postdir = post.first
|
386
|
+
posts = posts.select {|x| File.basename(x).to_i == postid }
|
387
|
+
postdir = exactly_one(posts)
|
407
388
|
vp = RuneBlog::ViewPost.new(self.view, postdir)
|
408
389
|
vp
|
409
390
|
rescue => err
|
@@ -563,34 +544,10 @@ class RuneBlog
|
|
563
544
|
# _tmp_error(err)
|
564
545
|
end
|
565
546
|
|
566
|
-
def _get_draft_data(num, sym)
|
567
|
-
tag = prefix(num)
|
568
|
-
front = @blog.root/:drafts/tag
|
569
|
-
files = Dir[front + "*"]
|
570
|
-
raise "No draft #{num} found" if files.empty?
|
571
|
-
raise "Too many files found for #{num}!" if files.size > 1
|
572
|
-
file = files.first
|
573
|
-
lines = File.readlines(file)
|
574
|
-
case sym
|
575
|
-
when :views
|
576
|
-
view_line = lines.grep(/^.views /)
|
577
|
-
raise "More than one .views call in #{draft}" if view_line.size > 1
|
578
|
-
raise "No .views call in #{draft}" if view_line.size < 1
|
579
|
-
view_line = view_line.first
|
580
|
-
views = view_line[7..-1].split
|
581
|
-
return views.uniq
|
582
|
-
else
|
583
|
-
raise "Unknown symbol #{sym.inspect}"
|
584
|
-
end
|
585
|
-
end
|
586
|
-
|
587
547
|
def _get_views(draft)
|
588
548
|
log!(enter: __method__, args: [draft], level: 2)
|
589
549
|
# FIXME dumb code
|
590
|
-
view_line = File.readlines(draft).grep(/^.views /)
|
591
|
-
raise "More than one .views call in #{draft}" if view_line.size > 1
|
592
|
-
raise "No .views call in #{draft}" if view_line.size < 1
|
593
|
-
view_line = view_line.first
|
550
|
+
view_line = exactly_one(File.readlines(draft).grep(/^.views /))
|
594
551
|
views = view_line[7..-1].split
|
595
552
|
views.uniq
|
596
553
|
rescue => err
|
@@ -621,10 +578,11 @@ class RuneBlog
|
|
621
578
|
pnum = nslug[0..3] # 0001
|
622
579
|
Dir.chdir(pdraft) do
|
623
580
|
excerpt = File.read("teaser.txt")
|
624
|
-
|
581
|
+
meta = read_metadata
|
582
|
+
date = meta.date
|
625
583
|
longdate = ::Date.parse(date).strftime("%B %e, %Y")
|
626
|
-
title =
|
627
|
-
tags =
|
584
|
+
title = meta.title
|
585
|
+
tags = meta.tags
|
628
586
|
# FIXME simplify
|
629
587
|
vars = <<~LIVE
|
630
588
|
.set post.num = #{pnum}
|
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.3.
|
6
|
+
VERSION = "0.3.06"
|
7
7
|
|
8
8
|
path = Gem.find_files("runeblog").grep(/runeblog-/).first
|
9
9
|
Path = File.dirname(path)
|
@@ -46,5 +46,4 @@ def prefix(num)
|
|
46
46
|
"#{'%04d' % num.to_i}"
|
47
47
|
end
|
48
48
|
|
49
|
-
|
50
49
|
end
|