runeblog 0.1.81 → 0.1.82
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/data/standard.tgz +0 -0
- data/lib/default.rb +3 -0
- data/lib/helpers-blog.rb +16 -2
- data/lib/liveblog.rb +6 -3
- data/lib/post.rb +13 -0
- data/lib/runeblog.rb +92 -19
- data/lib/runeblog_version.rb +1 -1
- data/lib/view.rb +2 -2
- data/test/make_blog.rb +37 -31
- 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: d1767dd929fb222d5107da06ce3cafb3b0916fe6ff13fda0bf23e649c59fa678
|
|
4
|
+
data.tar.gz: 572f0934dcf02a10cc922b5910d5c4602a64078eb46b9304613000e7bd426868
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1d0f9babd073538726699c6c41ee4022be7d998ede5af13d10ac36034908f83f6090ffec1de555e754bf64103bb220761d7cd7f25e06533385e384b1348f0e16
|
|
7
|
+
data.tar.gz: 414278f412434ab9acbaf4be6675c3228844f62d7c4ab62d41953aed5901ee19cac81756ef0271442826a705afdca32e9ba2b515fa564b9830c619a2f9707085
|
data/data/standard.tgz
CHANGED
|
Binary file
|
data/lib/default.rb
CHANGED
data/lib/helpers-blog.rb
CHANGED
|
@@ -4,6 +4,20 @@ require 'runeblog_version'
|
|
|
4
4
|
|
|
5
5
|
module RuneBlog::Helpers
|
|
6
6
|
|
|
7
|
+
def copy(src, dst)
|
|
8
|
+
system("cp #{src} #{dst}")
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def copy!(src, dst)
|
|
12
|
+
system("cp -r #{src} #{dst}")
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def livetext(src, dst)
|
|
16
|
+
src << ".lt3" unless src.end_with?(".lt3")
|
|
17
|
+
dst << ".html" unless src.end_with?(".html")
|
|
18
|
+
system("livetext #{src} >#{dst}")
|
|
19
|
+
end
|
|
20
|
+
|
|
7
21
|
def get_root
|
|
8
22
|
if $_blog
|
|
9
23
|
if $_blog.root
|
|
@@ -114,9 +128,9 @@ module RuneBlog::Helpers
|
|
|
114
128
|
raise CantCreateDir(dir) unless result
|
|
115
129
|
end
|
|
116
130
|
|
|
117
|
-
def interpolate(str)
|
|
131
|
+
def interpolate(str, binding)
|
|
118
132
|
wrap = "<<-EOS\n#{str}\nEOS"
|
|
119
|
-
eval wrap
|
|
133
|
+
eval wrap, binding
|
|
120
134
|
end
|
|
121
135
|
|
|
122
136
|
def error(err) # Hmm, this is duplicated
|
data/lib/liveblog.rb
CHANGED
|
@@ -32,6 +32,7 @@ end
|
|
|
32
32
|
def post
|
|
33
33
|
@meta = OpenStruct.new
|
|
34
34
|
@meta.num = _args[0]
|
|
35
|
+
_out " <!-- Post number #{@meta.num} -->\n "
|
|
35
36
|
end
|
|
36
37
|
|
|
37
38
|
def _view_from_cwd
|
|
@@ -300,7 +301,7 @@ def head
|
|
|
300
301
|
"linkc" => %[<link rel="canonical" href="#{_var(:host)}">],
|
|
301
302
|
"og:url" => %[<meta property="og:url" content="#{_var(:host)}">],
|
|
302
303
|
"og:site_name" => %[<meta property="og:site_name" content="#{_var(:title)}">],
|
|
303
|
-
"style" => %[<link rel="stylesheet" href="blog
|
|
304
|
+
"style" => %[<link rel="stylesheet" href="assets/blog.css">],
|
|
304
305
|
"feed" => %[<link type="application/atom+xml" rel="alternate" href="#{_var(:host)}/feed.xml" title="#{_var(:title)}">],
|
|
305
306
|
"favicon" => %[<link rel="shortcut icon" type="image/x-icon" href="../assets/favicon.ico">\n <link rel="apple-touch-icon" href="../assets/favicon.ico">]
|
|
306
307
|
}
|
|
@@ -325,7 +326,7 @@ def head
|
|
|
325
326
|
end
|
|
326
327
|
end
|
|
327
328
|
hash = defaults.dup.update(result) # FIXME collisions?
|
|
328
|
-
_out "<html lang=en_US>"
|
|
329
|
+
# _out "<html lang=en_US>"
|
|
329
330
|
_out "<head>"
|
|
330
331
|
hash.each_value {|x| _out " " + x }
|
|
331
332
|
_out "</head>"
|
|
@@ -402,6 +403,7 @@ def script
|
|
|
402
403
|
_out %[<script src="#{url}" integrity="#{integ}" crossorigin="#{cross}"></script>]
|
|
403
404
|
end
|
|
404
405
|
|
|
406
|
+
|
|
405
407
|
### How this next bit works:
|
|
406
408
|
###
|
|
407
409
|
### all_teasers will call _find_recent_posts
|
|
@@ -439,7 +441,7 @@ def all_teasers
|
|
|
439
441
|
|
|
440
442
|
text = <<-HTML
|
|
441
443
|
<html>
|
|
442
|
-
<head><link rel="stylesheet" href="blog
|
|
444
|
+
<head><link rel="stylesheet" href="assets/blog.css"></head>
|
|
443
445
|
<body>
|
|
444
446
|
HTML
|
|
445
447
|
posts = _find_recent_posts
|
|
@@ -491,6 +493,7 @@ def _teaser(slug)
|
|
|
491
493
|
text
|
|
492
494
|
end
|
|
493
495
|
|
|
496
|
+
|
|
494
497
|
def card_iframe
|
|
495
498
|
title = _data
|
|
496
499
|
lines = _body
|
data/lib/post.rb
CHANGED
|
@@ -153,5 +153,18 @@ class RuneBlog::ViewPost
|
|
|
153
153
|
@title = lines.grep(/title:/).first[7..-1].chomp
|
|
154
154
|
@date = lines.grep(/pubdate:/).first[9..-1].chomp
|
|
155
155
|
end
|
|
156
|
+
|
|
157
|
+
def get_dirs
|
|
158
|
+
fname = File.basename(draft)
|
|
159
|
+
noext = fname.sub(/.lt3$/, "")
|
|
160
|
+
vdir = "#@root/views/#{view}"
|
|
161
|
+
dir = "#{vdir}/posts/#{noext}/"
|
|
162
|
+
Dir.mkdir(dir) unless Dir.exist?(dir)
|
|
163
|
+
system("cp #{draft} #{dir}")
|
|
164
|
+
viewdir, slugdir, aslug = vdir, dir, noext[5..-1]
|
|
165
|
+
theme = viewdir + "/themes/standard"
|
|
166
|
+
[noext, viewdir, slugdir, aslug, theme]
|
|
167
|
+
end
|
|
168
|
+
|
|
156
169
|
end
|
|
157
170
|
|
data/lib/runeblog.rb
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
require '
|
|
1
|
+
require 'date'
|
|
2
|
+
# require 'livetext'
|
|
2
3
|
|
|
3
4
|
require 'runeblog_version'
|
|
4
5
|
require 'global'
|
|
@@ -24,7 +25,7 @@ class RuneBlog
|
|
|
24
25
|
make_exception(:CantCreateDir, "Can't create directory $1")
|
|
25
26
|
make_exception(:EditorProblem, "Could not edit $1")
|
|
26
27
|
make_exception(:NoSuchView, "No such view: $1")
|
|
27
|
-
|
|
28
|
+
# make_exception(:LivetextError, "Livetext#process_file returned nil for $1")
|
|
28
29
|
make_exception(:NoBlogAccessor, "Runeblog.blog is not set")
|
|
29
30
|
|
|
30
31
|
|
|
@@ -169,8 +170,14 @@ class RuneBlog
|
|
|
169
170
|
create_dir('assets')
|
|
170
171
|
create_dir('posts')
|
|
171
172
|
|
|
173
|
+
create_dir('staging')
|
|
174
|
+
create_dir('staging/assets')
|
|
175
|
+
create_dir('remote')
|
|
176
|
+
create_dir('remote/assets')
|
|
177
|
+
|
|
172
178
|
Dir.chdir("themes") { system("tar zxvf #{GemData}/standard.tgz >/dev/null 2>&1") }
|
|
173
|
-
|
|
179
|
+
copy!("themes/standard/*", "staging/")
|
|
180
|
+
copy("themes/standard/assets/*", "remote/assets/")
|
|
174
181
|
|
|
175
182
|
pub = "user: xxx\nserver: xxx\ndocroot: xxx\npath: xxx\nproto: xxx\n"
|
|
176
183
|
dump(pub, "publish")
|
|
@@ -210,6 +217,71 @@ class RuneBlog
|
|
|
210
217
|
result
|
|
211
218
|
end
|
|
212
219
|
|
|
220
|
+
def post_lookup(postid) # side-effect?
|
|
221
|
+
# .. = templates, ../.. = views/thisview
|
|
222
|
+
slug = title = date = teaser_text = nil
|
|
223
|
+
|
|
224
|
+
dir_posts = @vdir + "/posts"
|
|
225
|
+
posts = Dir.entries(dir_posts).grep(/^\d\d\d\d/).map {|x| dir_posts + "/" + x }
|
|
226
|
+
posts.select! {|x| File.directory?(x) }
|
|
227
|
+
|
|
228
|
+
post = posts.select {|x| File.basename(x).to_i == postid }
|
|
229
|
+
raise "Error: More than one post #{postid}" if post.size > 1
|
|
230
|
+
postdir = post.first
|
|
231
|
+
vp = RuneBlog::ViewPost.new(self.view, postdir)
|
|
232
|
+
vp
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
def teaser(slug)
|
|
236
|
+
id = slug.to_i
|
|
237
|
+
text = nil
|
|
238
|
+
post_entry_name = @theme + "/blog-_postentry.lt3"
|
|
239
|
+
@_post_entry ||= File.read(post_entry_name)
|
|
240
|
+
vp = post_lookup(id)
|
|
241
|
+
nslug, aslug, title, date, teaser_text =
|
|
242
|
+
vp.nslug, vp.aslug, vp.title, vp.date, vp.teaser_text
|
|
243
|
+
path = vp.path
|
|
244
|
+
# url = "#{path}/#{aslug}.html" # Should be relative to .blogs!! FIXME
|
|
245
|
+
url = "#{aslug}.html" # Should be relative to .blogs!! FIXME
|
|
246
|
+
date = ::Date.parse(date)
|
|
247
|
+
date = date.strftime("%B %e<br>%Y")
|
|
248
|
+
text = interpolate(@_post_entry, binding)
|
|
249
|
+
text
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
def collect_recent_posts(file)
|
|
253
|
+
@vdir = ".."
|
|
254
|
+
posts = nil
|
|
255
|
+
dir_posts = @vdir + "/posts"
|
|
256
|
+
entries = Dir.entries(dir_posts)
|
|
257
|
+
posts = entries.grep(/^\d\d\d\d/).map {|x| dir_posts + "/" + x }
|
|
258
|
+
posts.select! {|x| File.directory?(x) }
|
|
259
|
+
# directories that start with four digits
|
|
260
|
+
posts = posts.sort {|a, b| b.to_i <=> a.to_i } # sort descending
|
|
261
|
+
posts = posts[0..19] # return 20 at most
|
|
262
|
+
text = <<-HTML
|
|
263
|
+
<html>
|
|
264
|
+
<head><link rel="stylesheet" href="assets/blog.css"></head>
|
|
265
|
+
<body>
|
|
266
|
+
HTML
|
|
267
|
+
# posts = _find_recent_posts
|
|
268
|
+
wanted = [5, posts.size].min # estimate how many we want?
|
|
269
|
+
enum = posts.each
|
|
270
|
+
wanted.times do
|
|
271
|
+
postid = File.basename(enum.next)
|
|
272
|
+
postid = postid.to_i
|
|
273
|
+
text << teaser(postid) # side effect! calls _out
|
|
274
|
+
end
|
|
275
|
+
text << "</body></html>"
|
|
276
|
+
File.write(file, text) # FIXME ???
|
|
277
|
+
iframe_text = <<-HTML
|
|
278
|
+
<iframe style="width: 100vw;height: 100vh;position: relative;"
|
|
279
|
+
src='recent.html' width=100% frameborder="0" allowfullscreen>
|
|
280
|
+
</iframe>
|
|
281
|
+
HTML
|
|
282
|
+
# _out iframe_text # FIXME ??
|
|
283
|
+
end
|
|
284
|
+
|
|
213
285
|
def create_new_post(title, testing = false, teaser: nil, body: nil, other_views: [])
|
|
214
286
|
save = Dir.pwd
|
|
215
287
|
Dir.chdir(self.view.dir)
|
|
@@ -309,25 +381,26 @@ class RuneBlog
|
|
|
309
381
|
def generate_post(draft)
|
|
310
382
|
views = _get_views(draft)
|
|
311
383
|
views.each do |view|
|
|
312
|
-
noext, viewdir, slugdir, aslug, theme = _copy_get_dirs(draft, view)
|
|
384
|
+
noext, viewdir, slugdir, aslug, @theme = _copy_get_dirs(draft, view)
|
|
385
|
+
staging = viewdir + "/staging"
|
|
313
386
|
Dir.chdir(slugdir) do
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
387
|
+
copy(draft, ".")
|
|
388
|
+
lt3 = draft.split("/")[-1]
|
|
389
|
+
# Remember: Some posts may be in more than one view -- careful with links back
|
|
390
|
+
# system("livetext #{draft} >staging/#{name}/index.html") # permalink?
|
|
391
|
+
# Structure is borked?
|
|
392
|
+
copy!("#{@theme}/*", "#{staging}")
|
|
393
|
+
copy(lt3, staging)
|
|
394
|
+
html = noext[5..-1]
|
|
395
|
+
Dir.chdir(staging) do
|
|
396
|
+
livetext draft, html
|
|
397
|
+
# link to POST??
|
|
398
|
+
copy html, "../remote"
|
|
399
|
+
collect_recent_posts("recent.html")
|
|
400
|
+
copy("recent.html", "../remote")
|
|
401
|
+
livetext "blog-generate", "../remote/index"
|
|
324
402
|
end
|
|
325
|
-
|
|
326
|
-
# system("livetext blog-generate.lt3 >bgen.html")
|
|
327
|
-
# files.each {|fname| system("rm ./#{fname}") }
|
|
328
|
-
# system("rm -rf ./sidebar/")
|
|
329
403
|
end
|
|
330
|
-
# create framed pure slug (where?)
|
|
331
404
|
end
|
|
332
405
|
end
|
|
333
406
|
|
data/lib/runeblog_version.rb
CHANGED
data/lib/view.rb
CHANGED
|
@@ -25,7 +25,7 @@ class RuneBlog::View
|
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
def local_index
|
|
28
|
-
dir + "/
|
|
28
|
+
dir + "/remote/index.html"
|
|
29
29
|
end
|
|
30
30
|
|
|
31
31
|
def index
|
|
@@ -39,7 +39,7 @@ class RuneBlog::View
|
|
|
39
39
|
def publishable_files
|
|
40
40
|
vdir = dir()
|
|
41
41
|
files = [local_index()]
|
|
42
|
-
others = Dir.entries(vdir + "/
|
|
42
|
+
others = Dir.entries(vdir + "/remote").grep(/^\d\d\d\d/).map {|x| "#{vdir}/remote/#{x}" }
|
|
43
43
|
abort "FIXME... publishable_files"
|
|
44
44
|
deep_assets = Dir["#{vdir}/themes/standard/assets/*"]
|
|
45
45
|
deep_assets.each do |file| # Do this at view creation
|
data/test/make_blog.rb
CHANGED
|
@@ -19,7 +19,8 @@ def debug(str)
|
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
def make_post(x, title, teaser, body, views=[])
|
|
22
|
-
STDERR.puts "\n========= make_post '#{title}'"
|
|
22
|
+
# STDERR.puts "\n========= make_post '#{title}'"
|
|
23
|
+
print "."
|
|
23
24
|
meta = OpenStruct.new
|
|
24
25
|
num = x.create_new_post(title, true, teaser: teaser, body: body, other_views: views)
|
|
25
26
|
num
|
|
@@ -32,6 +33,10 @@ def show_lines(text)
|
|
|
32
33
|
str
|
|
33
34
|
end
|
|
34
35
|
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
puts
|
|
39
|
+
|
|
35
40
|
system("rm -rf .blogs")
|
|
36
41
|
RuneBlog.create_new_blog_repo('test_view', ".blogs/data")
|
|
37
42
|
x = RuneBlog.new
|
|
@@ -61,36 +66,36 @@ EXCERPT
|
|
|
61
66
|
Now, depending on what you consider "major," blah blah blah...
|
|
62
67
|
BODY
|
|
63
68
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
69
|
+
x.change_view("computing") # 3 5 6
|
|
70
|
+
|
|
71
|
+
make_post(x, "Elixir Conf coming up...", <<-EXCERPT, <<-BODY)
|
|
72
|
+
The next Elixir Conf is always coming up.
|
|
73
|
+
EXCERPT
|
|
74
|
+
I mean, unless the previous one was the last one ever, which I don't expect to
|
|
75
|
+
happen for a couple of decades.
|
|
76
|
+
BODY
|
|
77
|
+
|
|
78
|
+
x.change_view("music") # 4 10
|
|
79
|
+
|
|
80
|
+
make_post(x, "Does indie still matter?", <<-EXCERPT, <<-BODY)
|
|
81
|
+
Indie msic blah blah blah blah....
|
|
82
|
+
EXCERPT
|
|
83
|
+
And more about indie music.
|
|
84
|
+
BODY
|
|
85
|
+
|
|
86
|
+
x.change_view("computing")
|
|
87
|
+
|
|
88
|
+
make_post(x, "The genius of Scenic", <<-EXCERPT, <<-BODY)
|
|
89
|
+
Boyd Multerer is a genius.
|
|
90
|
+
EXCERPT
|
|
91
|
+
And so is Scenic.
|
|
92
|
+
BODY
|
|
93
|
+
|
|
94
|
+
make_post(x, "The future of coding", <<-EXCERPT, <<-BODY)
|
|
95
|
+
Someday you can forget your text editor entirely.
|
|
96
|
+
EXCERPT
|
|
97
|
+
But that day hasn't come yet.
|
|
98
|
+
BODY
|
|
94
99
|
|
|
95
100
|
x.change_view("around_austin")
|
|
96
101
|
|
|
@@ -124,3 +129,4 @@ BODY
|
|
|
124
129
|
|
|
125
130
|
x.change_view("around_austin")
|
|
126
131
|
|
|
132
|
+
puts
|
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.1.
|
|
4
|
+
version: 0.1.82
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Hal Fulton
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2019-
|
|
11
|
+
date: 2019-09-07 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: livetext
|