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
data/lib/runeblog.rb
CHANGED
@@ -75,15 +75,6 @@ class RuneBlog
|
|
75
75
|
|
76
76
|
end
|
77
77
|
|
78
|
-
def _tmp_error(err) # FIXME move to helpers
|
79
|
-
out = "/tmp/blog#{rand(100)}.txt"
|
80
|
-
File.open(out, "w") do |f|
|
81
|
-
f.puts err
|
82
|
-
f.puts err.backtrace.join("\n")
|
83
|
-
end
|
84
|
-
puts "Error: See #{out}"
|
85
|
-
end
|
86
|
-
|
87
78
|
def self.create_new_blog_repo(root_rel = ".blogs")
|
88
79
|
log!(enter: __method__, args: [root_rel])
|
89
80
|
raise ArgumentError unless root_rel.is_a?(String) && ! root_rel.empty?
|
@@ -122,6 +113,7 @@ class RuneBlog
|
|
122
113
|
@root = Dir.pwd/root_rel
|
123
114
|
write_repo_config(root: @root) # ?? FIXME
|
124
115
|
get_repo_config
|
116
|
+
read_features # top level
|
125
117
|
@views = retrieve_views
|
126
118
|
self.view = File.read(@root/"data/VIEW").chomp
|
127
119
|
md = Dir.pwd.match(%r[.*/views/(.*?)/])
|
@@ -197,11 +189,20 @@ class RuneBlog
|
|
197
189
|
_generate_settings
|
198
190
|
end
|
199
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
|
+
|
200
201
|
def _deploy_local(dir)
|
201
202
|
log!(enter: __method__, args: [dir], level: 1)
|
202
203
|
Dir.chdir(dir) do
|
203
|
-
|
204
|
-
views.each do |v|
|
204
|
+
meta = read_metadata
|
205
|
+
meta.views.each do |v|
|
205
206
|
next unless _check_view?(v)
|
206
207
|
system!("cp *html #@root/views/#{v}/remote", show: true)
|
207
208
|
end
|
@@ -210,33 +211,6 @@ class RuneBlog
|
|
210
211
|
_tmp_error(err)
|
211
212
|
end
|
212
213
|
|
213
|
-
# FIXME reconcile with _get_draft data
|
214
|
-
|
215
|
-
def _retrieve_metadata(key)
|
216
|
-
key = key.to_s
|
217
|
-
lines = File.readlines("metadata.txt")
|
218
|
-
lines = lines.grep(/^#{key}: /)
|
219
|
-
case lines.size
|
220
|
-
when 0
|
221
|
-
result = nil # not found
|
222
|
-
when 1
|
223
|
-
front = "#{key}: "
|
224
|
-
n = front.size
|
225
|
-
str = lines.first.chomp[n..-1]
|
226
|
-
case key
|
227
|
-
when "views", "tags" # plurals
|
228
|
-
result = str.split
|
229
|
-
else
|
230
|
-
result = str
|
231
|
-
end
|
232
|
-
else
|
233
|
-
raise "Too many #{key} instances in metadata.txt!"
|
234
|
-
end
|
235
|
-
return result
|
236
|
-
rescue => err
|
237
|
-
_tmp_error(err)
|
238
|
-
end
|
239
|
-
|
240
214
|
def process_post(sourcefile)
|
241
215
|
log!(enter: __method__, args: [sourcefile], level: 2)
|
242
216
|
nslug = sourcefile.sub(/.lt3/, "")
|
@@ -294,11 +268,15 @@ class RuneBlog
|
|
294
268
|
@view = nil
|
295
269
|
when RuneBlog::View
|
296
270
|
@view = arg
|
271
|
+
read_features(@view)
|
272
|
+
@view.get_globals
|
297
273
|
_set_publisher
|
298
274
|
when String
|
299
275
|
new_view = str2view(arg)
|
300
276
|
raise NoSuchView(arg) if new_view.nil?
|
301
277
|
@view = new_view
|
278
|
+
read_features(@view)
|
279
|
+
@view.get_globals
|
302
280
|
_set_publisher
|
303
281
|
else
|
304
282
|
raise CantAssignView(arg.class.to_s)
|
@@ -374,6 +352,7 @@ class RuneBlog
|
|
374
352
|
add_view(view_name)
|
375
353
|
mark_last_published("Initial creation")
|
376
354
|
system("cp #@root/data/global.lt3 #@root/views/#{view_name}/themes/standard/global.lt3")
|
355
|
+
@view.get_globals
|
377
356
|
rescue => err
|
378
357
|
_tmp_error(err)
|
379
358
|
end
|
@@ -404,9 +383,8 @@ class RuneBlog
|
|
404
383
|
posts = Dir.entries(dir_posts).grep(/^\d\d\d\d/).map {|x| dir_posts/x }
|
405
384
|
posts.select! {|x| File.directory?(x) }
|
406
385
|
|
407
|
-
|
408
|
-
|
409
|
-
postdir = post.first
|
386
|
+
posts = posts.select {|x| File.basename(x).to_i == postid }
|
387
|
+
postdir = exactly_one(posts)
|
410
388
|
vp = RuneBlog::ViewPost.new(self.view, postdir)
|
411
389
|
vp
|
412
390
|
rescue => err
|
@@ -454,16 +432,18 @@ class RuneBlog
|
|
454
432
|
return posts[0..19] # return 20 at most
|
455
433
|
end
|
456
434
|
|
457
|
-
def collect_recent_posts(file)
|
435
|
+
def collect_recent_posts(file = "recent.html")
|
458
436
|
log!(enter: __method__, args: [file], level: 3)
|
437
|
+
vars = self.view.globals
|
459
438
|
text = <<-HTML
|
460
439
|
<html>
|
461
440
|
<head><link rel="stylesheet" href="etc/blog.css"></head>
|
462
|
-
<body>
|
441
|
+
<body style="background-color: #{vars["recent.bgcolor"]}">
|
463
442
|
HTML
|
464
443
|
posts = _sorted_posts
|
465
444
|
if posts.size > 0
|
466
|
-
|
445
|
+
# estimate how many we want
|
446
|
+
wanted = [vars["recent.count"].to_i, posts.size].min
|
467
447
|
enum = posts.each
|
468
448
|
entries = []
|
469
449
|
wanted.times do
|
@@ -535,7 +515,7 @@ class RuneBlog
|
|
535
515
|
log!(enter: __method__, args: [view], pwd: true, dir: true)
|
536
516
|
raise ArgumentError unless view.is_a?(String) || view.is_a?(RuneBlog::View)
|
537
517
|
@vdir = @root/:views/view
|
538
|
-
num = collect_recent_posts
|
518
|
+
num = collect_recent_posts
|
539
519
|
return num
|
540
520
|
rescue => err
|
541
521
|
_tmp_error(err)
|
@@ -564,34 +544,10 @@ class RuneBlog
|
|
564
544
|
# _tmp_error(err)
|
565
545
|
end
|
566
546
|
|
567
|
-
def _get_draft_data(num, sym)
|
568
|
-
tag = prefix(num)
|
569
|
-
front = @blog.root/:drafts/tag
|
570
|
-
files = Dir[front + "*"]
|
571
|
-
raise "No draft #{num} found" if files.empty?
|
572
|
-
raise "Too many files found for #{num}!" if files.size > 1
|
573
|
-
file = files.first
|
574
|
-
lines = File.readlines(file)
|
575
|
-
case sym
|
576
|
-
when :views
|
577
|
-
view_line = lines.grep(/^.views /)
|
578
|
-
raise "More than one .views call in #{draft}" if view_line.size > 1
|
579
|
-
raise "No .views call in #{draft}" if view_line.size < 1
|
580
|
-
view_line = view_line.first
|
581
|
-
views = view_line[7..-1].split
|
582
|
-
return views.uniq
|
583
|
-
else
|
584
|
-
raise "Unknown symbol #{sym.inspect}"
|
585
|
-
end
|
586
|
-
end
|
587
|
-
|
588
547
|
def _get_views(draft)
|
589
548
|
log!(enter: __method__, args: [draft], level: 2)
|
590
549
|
# FIXME dumb code
|
591
|
-
view_line = File.readlines(draft).grep(/^.views /)
|
592
|
-
raise "More than one .views call in #{draft}" if view_line.size > 1
|
593
|
-
raise "No .views call in #{draft}" if view_line.size < 1
|
594
|
-
view_line = view_line.first
|
550
|
+
view_line = exactly_one(File.readlines(draft).grep(/^.views /))
|
595
551
|
views = view_line[7..-1].split
|
596
552
|
views.uniq
|
597
553
|
rescue => err
|
@@ -622,10 +578,11 @@ class RuneBlog
|
|
622
578
|
pnum = nslug[0..3] # 0001
|
623
579
|
Dir.chdir(pdraft) do
|
624
580
|
excerpt = File.read("teaser.txt")
|
625
|
-
|
581
|
+
meta = read_metadata
|
582
|
+
date = meta.date
|
626
583
|
longdate = ::Date.parse(date).strftime("%B %e, %Y")
|
627
|
-
title =
|
628
|
-
tags =
|
584
|
+
title = meta.title
|
585
|
+
tags = meta.tags
|
629
586
|
# FIXME simplify
|
630
587
|
vars = <<~LIVE
|
631
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.07"
|
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
|
data/lib/view.rb
CHANGED
@@ -14,6 +14,10 @@ class RuneBlog::View
|
|
14
14
|
@publisher = RuneBlog::Publishing.new(name)
|
15
15
|
@can_publish = true # FIXME
|
16
16
|
@blog.view = self
|
17
|
+
get_globals
|
18
|
+
end
|
19
|
+
|
20
|
+
def get_globals
|
17
21
|
gfile = @blog.root/"views/#{name}/themes/standard/global.lt3"
|
18
22
|
return unless File.exist?(gfile) # Hackish!! how is View.new called from create_view??
|
19
23
|
|
data/test/austin.rb
CHANGED
@@ -31,7 +31,7 @@ end
|
|
31
31
|
@fake_date = Date.today - 20
|
32
32
|
|
33
33
|
def make_post(x, title, teaser, body, views=[])
|
34
|
-
debug "
|
34
|
+
debug " make_post #{bold(title)}"
|
35
35
|
pubdate = @fake_date.strftime("%Y-%m-%d")
|
36
36
|
@fake_date += (rand(2) + 1)
|
37
37
|
x.create_new_post(title, true, teaser: teaser, body: body, views: views,
|
@@ -53,8 +53,8 @@ puts
|
|
53
53
|
debug bold("Generating test blog...")
|
54
54
|
|
55
55
|
system("rm -rf .blogs")
|
56
|
-
RuneBlog.create_new_blog_repo(".blogs")
|
57
|
-
x = RuneBlog.new(".blogs")
|
56
|
+
RuneBlog.create_new_blog_repo # (".blogs")
|
57
|
+
x = RuneBlog.new # (".blogs")
|
58
58
|
|
59
59
|
debug("create_view: #{bold('around_austin')}")
|
60
60
|
x.create_view("around_austin") # FIXME remember view title!
|
@@ -72,7 +72,7 @@ File.open(vfile, "w") {|f| f.puts vars }
|
|
72
72
|
|
73
73
|
####
|
74
74
|
|
75
|
-
debug("
|
75
|
+
debug("change_view: #{bold('around_austin')}")
|
76
76
|
x.change_view("around_austin") # 1 2 7 8 9
|
77
77
|
|
78
78
|
make_post(x, "What's at Stubbs...", <<-EXCERPT, <<-BODY)
|
@@ -142,11 +142,10 @@ But I first heard of them
|
|
142
142
|
in 2005.
|
143
143
|
BODY
|
144
144
|
|
145
|
-
debug
|
146
|
-
debug "** generate_index #{bold("around_austin")}"
|
145
|
+
debug "generate_index #{bold("around_austin")}"
|
147
146
|
x.generate_index("around_austin")
|
148
147
|
|
149
|
-
debug("
|
148
|
+
debug("generate_view: #{bold('around_austin')}")
|
150
149
|
x.generate_view("around_austin")
|
151
150
|
|
152
151
|
debug bold("...finished.\n")
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: runeblog
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.07
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hal Fulton
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-01-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: livetext
|