runeblog 0.1.80 → 0.1.85
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/default.rb +3 -0
- data/lib/helpers-blog.rb +33 -5
- data/lib/liveblog.rb +15 -6
- data/lib/post.rb +14 -0
- data/lib/runeblog.rb +129 -39
- data/lib/runeblog_version.rb +1 -1
- data/lib/view.rb +2 -2
- data/runeblog.gemspec +1 -5
- data/test/make_blog.rb +40 -34
- data/themes/standard.tgz +0 -0
- metadata +3 -3
- data/data/standard.tgz +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cb6100ad69994f06dcb9d75dcef71d5f485f56119725efb419607c3ca5521b89
|
4
|
+
data.tar.gz: 025a5cc03d7203cd32db22c2bb283c3db7ad6aa1eb4b110ec5f1613bb5740fe9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b89cca81ab11b4a2b7ea4694cb0f9c6f875f0691629a7eb14daa4ce3dc6b77b167db71eb5be3abc4777da3940ccc62a250d513119cebe775f6af09bea50c781d
|
7
|
+
data.tar.gz: 7b495793aeb39e03d7ca07002c66fcf309d330fe877b712ceaa524cd7e09d8da25dae2d9fcfd64ba014aa291fc177981b254fc0d5063047142b38d65741ad43c
|
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
|
@@ -51,6 +65,17 @@ module RuneBlog::Helpers
|
|
51
65
|
vals
|
52
66
|
end
|
53
67
|
|
68
|
+
def put_config(root:, view:"test_view", editor: "/bin/vim")
|
69
|
+
Dir.mkdir(root) unless Dir.exist?(root)
|
70
|
+
Dir.chdir(root) do
|
71
|
+
File.open("config", "w") do |cfg|
|
72
|
+
cfg.puts "root: #{root}"
|
73
|
+
cfg.puts "current_view: #{view}"
|
74
|
+
cfg.puts "editor: #{editor}"
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
54
79
|
def write_config(obj, file)
|
55
80
|
hash = obj.to_h
|
56
81
|
# Dir.chdir(::Home)
|
@@ -72,9 +97,10 @@ module RuneBlog::Helpers
|
|
72
97
|
# end
|
73
98
|
end
|
74
99
|
|
75
|
-
def new_dotfile(root: "
|
76
|
-
|
77
|
-
|
100
|
+
def new_dotfile(root: ".blogs", current_view: "test_view", editor: "vi")
|
101
|
+
# raise BlogAlreadyExists if Dir.exist?(".blogs")
|
102
|
+
# Dir.mkdir(".blogs")
|
103
|
+
root = Dir.pwd + "/" + root
|
78
104
|
x = OpenStruct.new
|
79
105
|
x.root, x.current_view, x.editor = root, current_view, editor
|
80
106
|
write_config(x, ".blogs/" + RuneBlog::ConfigFile)
|
@@ -87,8 +113,10 @@ module RuneBlog::Helpers
|
|
87
113
|
end
|
88
114
|
|
89
115
|
def subdirs(dir)
|
116
|
+
STDERR.puts "== SUB dir = #{dir}"
|
90
117
|
verify(Dir.exist?(dir) => "Directory #{dir} not found")
|
91
118
|
dirs = Dir.entries(dir) - %w[. ..]
|
119
|
+
STDERR.puts "== SUB dirs = #{dirs.inspect}"
|
92
120
|
dirs.reject! {|x| ! File.directory?("#@root/views/#{x}") }
|
93
121
|
dirs
|
94
122
|
end
|
@@ -114,9 +142,9 @@ module RuneBlog::Helpers
|
|
114
142
|
raise CantCreateDir(dir) unless result
|
115
143
|
end
|
116
144
|
|
117
|
-
def interpolate(str)
|
145
|
+
def interpolate(str, binding)
|
118
146
|
wrap = "<<-EOS\n#{str}\nEOS"
|
119
|
-
eval wrap
|
147
|
+
eval wrap, binding
|
120
148
|
end
|
121
149
|
|
122
150
|
def error(err) # Hmm, this is duplicated
|
data/lib/liveblog.rb
CHANGED
@@ -20,7 +20,11 @@ STDERR.reopen(errfile)
|
|
20
20
|
=end
|
21
21
|
|
22
22
|
def init_liveblog # FIXME - a lot of this logic sucks
|
23
|
-
|
23
|
+
here = Dir.pwd
|
24
|
+
dir = here
|
25
|
+
loop { dir = Dir.pwd; break if File.exist?("config"); Dir.chdir("..") }
|
26
|
+
Dir.chdir(here)
|
27
|
+
@blog = $_blog = RuneBlog.new(dir)
|
24
28
|
@root = @blog.root
|
25
29
|
@view = @blog.view
|
26
30
|
@view_name = @blog.view.name
|
@@ -32,6 +36,7 @@ end
|
|
32
36
|
def post
|
33
37
|
@meta = OpenStruct.new
|
34
38
|
@meta.num = _args[0]
|
39
|
+
_out " <!-- Post number #{@meta.num} -->\n "
|
35
40
|
end
|
36
41
|
|
37
42
|
def _view_from_cwd
|
@@ -235,6 +240,7 @@ def finalize
|
|
235
240
|
@slug = @blog.make_slug(@meta)
|
236
241
|
slug_dir = @slug
|
237
242
|
@postdir = @blog.view.dir + "/posts/#{slug_dir}"
|
243
|
+
STDERR.puts "--- finalize: pwd = #{Dir.pwd} postdir = #@postdir"
|
238
244
|
write_post
|
239
245
|
@meta
|
240
246
|
end
|
@@ -272,17 +278,18 @@ end
|
|
272
278
|
###### experimental...
|
273
279
|
|
274
280
|
class Livetext::Functions
|
275
|
-
|
276
281
|
def _var(name)
|
277
282
|
::Livetext::Vars[name] || "[:#{name} is undefined]"
|
278
283
|
end
|
279
284
|
|
280
|
-
|
281
285
|
def link
|
282
286
|
file, cdata = self.class.param.split("||", 2)
|
283
287
|
%[<link type="application/atom+xml" rel="alternate" href="#{_var(:host)}#{file}" title="#{_var(:title)}">]
|
284
288
|
end
|
289
|
+
end
|
285
290
|
|
291
|
+
def _var(name) # FIXME scope issue!
|
292
|
+
::Livetext::Vars[name] || "[:#{name} is undefined]"
|
286
293
|
end
|
287
294
|
|
288
295
|
def head
|
@@ -299,7 +306,7 @@ def head
|
|
299
306
|
"linkc" => %[<link rel="canonical" href="#{_var(:host)}">],
|
300
307
|
"og:url" => %[<meta property="og:url" content="#{_var(:host)}">],
|
301
308
|
"og:site_name" => %[<meta property="og:site_name" content="#{_var(:title)}">],
|
302
|
-
"style" => %[<link rel="stylesheet" href="blog
|
309
|
+
"style" => %[<link rel="stylesheet" href="assets/blog.css">],
|
303
310
|
"feed" => %[<link type="application/atom+xml" rel="alternate" href="#{_var(:host)}/feed.xml" title="#{_var(:title)}">],
|
304
311
|
"favicon" => %[<link rel="shortcut icon" type="image/x-icon" href="../assets/favicon.ico">\n <link rel="apple-touch-icon" href="../assets/favicon.ico">]
|
305
312
|
}
|
@@ -324,7 +331,7 @@ def head
|
|
324
331
|
end
|
325
332
|
end
|
326
333
|
hash = defaults.dup.update(result) # FIXME collisions?
|
327
|
-
_out "<html lang=en_US>"
|
334
|
+
# _out "<html lang=en_US>"
|
328
335
|
_out "<head>"
|
329
336
|
hash.each_value {|x| _out " " + x }
|
330
337
|
_out "</head>"
|
@@ -401,6 +408,7 @@ def script
|
|
401
408
|
_out %[<script src="#{url}" integrity="#{integ}" crossorigin="#{cross}"></script>]
|
402
409
|
end
|
403
410
|
|
411
|
+
|
404
412
|
### How this next bit works:
|
405
413
|
###
|
406
414
|
### all_teasers will call _find_recent_posts
|
@@ -438,7 +446,7 @@ def all_teasers
|
|
438
446
|
|
439
447
|
text = <<-HTML
|
440
448
|
<html>
|
441
|
-
<head><link rel="stylesheet" href="blog
|
449
|
+
<head><link rel="stylesheet" href="assets/blog.css"></head>
|
442
450
|
<body>
|
443
451
|
HTML
|
444
452
|
posts = _find_recent_posts
|
@@ -490,6 +498,7 @@ def _teaser(slug)
|
|
490
498
|
text
|
491
499
|
end
|
492
500
|
|
501
|
+
|
493
502
|
def card_iframe
|
494
503
|
title = _data
|
495
504
|
lines = _body
|
data/lib/post.rb
CHANGED
@@ -139,6 +139,7 @@ end
|
|
139
139
|
class RuneBlog::ViewPost
|
140
140
|
attr_reader :path, :nslug, :aslug, :title, :date,
|
141
141
|
:teaser_text
|
142
|
+
|
142
143
|
def initialize(view, postdir)
|
143
144
|
# Assumes already parsed/processed
|
144
145
|
@blog = RuneBlog.blog || raise(NoBlogAccessor)
|
@@ -153,5 +154,18 @@ class RuneBlog::ViewPost
|
|
153
154
|
@title = lines.grep(/title:/).first[7..-1].chomp
|
154
155
|
@date = lines.grep(/pubdate:/).first[9..-1].chomp
|
155
156
|
end
|
157
|
+
|
158
|
+
def get_dirs
|
159
|
+
fname = File.basename(draft)
|
160
|
+
noext = fname.sub(/.lt3$/, "")
|
161
|
+
vdir = "#@root/views/#{view}"
|
162
|
+
dir = "#{vdir}/posts/#{noext}/"
|
163
|
+
Dir.mkdir(dir) unless Dir.exist?(dir)
|
164
|
+
system("cp #{draft} #{dir}")
|
165
|
+
viewdir, slugdir, aslug = vdir, dir, noext[5..-1]
|
166
|
+
theme = viewdir + "/themes/standard"
|
167
|
+
[noext, viewdir, slugdir, aslug, theme]
|
168
|
+
end
|
169
|
+
|
156
170
|
end
|
157
171
|
|
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'
|
@@ -14,7 +15,7 @@ class RuneBlog
|
|
14
15
|
|
15
16
|
DotDir = ".blogs"
|
16
17
|
ConfigFile = "config"
|
17
|
-
GemData = RuneBlog::Path + "/../
|
18
|
+
GemData = RuneBlog::Path + "/../themes"
|
18
19
|
|
19
20
|
make_exception(:FileNotFound, "File $1 was not found")
|
20
21
|
make_exception(:BlogRepoAlreadyExists, "Blog repo $1 already exists")
|
@@ -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
|
|
@@ -40,40 +41,54 @@ class RuneBlog
|
|
40
41
|
|
41
42
|
include Helpers
|
42
43
|
|
43
|
-
def self.create_new_blog_repo(
|
44
|
+
def self.create_new_blog_repo(dir = ".blogs")
|
44
45
|
raise ArgumentError unless dir.is_a?(String) && ! dir.empty?
|
45
46
|
root_dir = Dir.pwd + "/" + dir
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
47
|
+
self.create(dir)
|
48
|
+
rescue => err
|
49
|
+
puts "Can't create blog repo: '#{dir}' - #{err}"
|
50
|
+
puts err.backtrace.join("\n")
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.create(root = ".blogs")
|
54
|
+
# Crude - FIXME later - # What views are there? Publishing, etc.
|
55
|
+
self.blog = self # Weird. Like a singleton - dumbass circular dependency?
|
56
|
+
$_blog = self # Dumber still?
|
57
|
+
root = Dir.pwd + "/" + root
|
58
|
+
raise BlogRepoAlreadyExists if Dir.exist?(root)
|
59
|
+
create_dir(root)
|
60
|
+
Dir.chdir(root) do
|
50
61
|
create_dir("drafts")
|
51
62
|
create_dir("views")
|
52
63
|
#? create_dir("assets")
|
53
64
|
new_sequence
|
54
65
|
end
|
55
|
-
|
56
|
-
blog.
|
57
|
-
|
58
|
-
|
59
|
-
puts err.backtrace.join("\n")
|
66
|
+
put_config(root: root)
|
67
|
+
@blog = self.new(root)
|
68
|
+
@blog.create_view("test_view")
|
69
|
+
@blog
|
60
70
|
end
|
61
71
|
|
62
|
-
def
|
72
|
+
def self.open(root = ".blogs")
|
73
|
+
# Crude - FIXME later - # What views are there? Publishing, etc.
|
74
|
+
self.blog = self # Weird. Like a singleton - dumbass circular dependency?
|
75
|
+
$_blog = self # Dumber still?
|
76
|
+
root = Dir.pwd + "/" + root
|
77
|
+
blog = self.new(root)
|
78
|
+
end
|
79
|
+
|
80
|
+
def initialize(root_dir = ".blogs") # always assumes existing blog
|
63
81
|
# Crude - FIXME later - # What views are there? Publishing, etc.
|
64
82
|
self.class.blog = self # Weird. Like a singleton - dumbass circular dependency?
|
65
83
|
$_blog = self # Dumber still?
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
end
|
71
|
-
file = dir.empty? ? ConfigFile : dir + "/" + ConfigFile
|
84
|
+
|
85
|
+
@root = root_dir
|
86
|
+
file = @root + "/" + ConfigFile
|
87
|
+
STDERR.puts "--- init: file = #{file}"
|
72
88
|
errmsg = "No config file! file = #{file.inspect} dir = #{Dir.pwd}"
|
73
89
|
raise errmsg unless File.exist?(file)
|
74
|
-
# Hmm. current_view doesn't belong?
|
75
|
-
@root, @view_name, @editor = read_config(file, :root, :current_view, :editor)
|
76
90
|
|
91
|
+
@root, @view_name, @editor = read_config(file, :root, :current_view, :editor)
|
77
92
|
md = Dir.pwd.match(%r[.*/views/(.*?)/])
|
78
93
|
@view_name = md[1] if md
|
79
94
|
@views = get_views
|
@@ -169,8 +184,14 @@ class RuneBlog
|
|
169
184
|
create_dir('assets')
|
170
185
|
create_dir('posts')
|
171
186
|
|
187
|
+
create_dir('staging')
|
188
|
+
create_dir('staging/assets')
|
189
|
+
create_dir('remote')
|
190
|
+
create_dir('remote/assets')
|
191
|
+
|
172
192
|
Dir.chdir("themes") { system("tar zxvf #{GemData}/standard.tgz >/dev/null 2>&1") }
|
173
|
-
|
193
|
+
copy!("themes/standard/*", "staging/")
|
194
|
+
copy("themes/standard/assets/*", "remote/assets/")
|
174
195
|
|
175
196
|
pub = "user: xxx\nserver: xxx\ndocroot: xxx\npath: xxx\nproto: xxx\n"
|
176
197
|
dump(pub, "publish")
|
@@ -210,6 +231,71 @@ class RuneBlog
|
|
210
231
|
result
|
211
232
|
end
|
212
233
|
|
234
|
+
def post_lookup(postid) # side-effect?
|
235
|
+
# .. = templates, ../.. = views/thisview
|
236
|
+
slug = title = date = teaser_text = nil
|
237
|
+
|
238
|
+
dir_posts = @vdir + "/posts"
|
239
|
+
posts = Dir.entries(dir_posts).grep(/^\d\d\d\d/).map {|x| dir_posts + "/" + x }
|
240
|
+
posts.select! {|x| File.directory?(x) }
|
241
|
+
|
242
|
+
post = posts.select {|x| File.basename(x).to_i == postid }
|
243
|
+
raise "Error: More than one post #{postid}" if post.size > 1
|
244
|
+
postdir = post.first
|
245
|
+
vp = RuneBlog::ViewPost.new(self.view, postdir)
|
246
|
+
vp
|
247
|
+
end
|
248
|
+
|
249
|
+
def teaser(slug)
|
250
|
+
id = slug.to_i
|
251
|
+
text = nil
|
252
|
+
post_entry_name = @theme + "/blog-_postentry.lt3"
|
253
|
+
@_post_entry ||= File.read(post_entry_name)
|
254
|
+
vp = post_lookup(id)
|
255
|
+
nslug, aslug, title, date, teaser_text =
|
256
|
+
vp.nslug, vp.aslug, vp.title, vp.date, vp.teaser_text
|
257
|
+
path = vp.path
|
258
|
+
# url = "#{path}/#{aslug}.html" # Should be relative to .blogs!! FIXME
|
259
|
+
url = "#{aslug}.html" # Should be relative to .blogs!! FIXME
|
260
|
+
date = ::Date.parse(date)
|
261
|
+
date = date.strftime("%B %e<br>%Y")
|
262
|
+
text = interpolate(@_post_entry, binding)
|
263
|
+
text
|
264
|
+
end
|
265
|
+
|
266
|
+
def collect_recent_posts(file)
|
267
|
+
@vdir = ".."
|
268
|
+
posts = nil
|
269
|
+
dir_posts = @vdir + "/posts"
|
270
|
+
entries = Dir.entries(dir_posts)
|
271
|
+
posts = entries.grep(/^\d\d\d\d/).map {|x| dir_posts + "/" + x }
|
272
|
+
posts.select! {|x| File.directory?(x) }
|
273
|
+
# directories that start with four digits
|
274
|
+
posts = posts.sort {|a, b| b.to_i <=> a.to_i } # sort descending
|
275
|
+
posts = posts[0..19] # return 20 at most
|
276
|
+
text = <<-HTML
|
277
|
+
<html>
|
278
|
+
<head><link rel="stylesheet" href="assets/blog.css"></head>
|
279
|
+
<body>
|
280
|
+
HTML
|
281
|
+
# posts = _find_recent_posts
|
282
|
+
wanted = [5, posts.size].min # estimate how many we want?
|
283
|
+
enum = posts.each
|
284
|
+
wanted.times do
|
285
|
+
postid = File.basename(enum.next)
|
286
|
+
postid = postid.to_i
|
287
|
+
text << teaser(postid) # side effect! calls _out
|
288
|
+
end
|
289
|
+
text << "</body></html>"
|
290
|
+
File.write(file, text) # FIXME ???
|
291
|
+
iframe_text = <<-HTML
|
292
|
+
<iframe style="width: 100vw;height: 100vh;position: relative;"
|
293
|
+
src='recent.html' width=100% frameborder="0" allowfullscreen>
|
294
|
+
</iframe>
|
295
|
+
HTML
|
296
|
+
# _out iframe_text # FIXME ??
|
297
|
+
end
|
298
|
+
|
213
299
|
def create_new_post(title, testing = false, teaser: nil, body: nil, other_views: [])
|
214
300
|
save = Dir.pwd
|
215
301
|
Dir.chdir(self.view.dir)
|
@@ -276,6 +362,8 @@ class RuneBlog
|
|
276
362
|
raise "No .views call!" if view_line.size < 1
|
277
363
|
view_line = view_line.first
|
278
364
|
views = view_line[7..-1].split
|
365
|
+
STDERR.puts "--- gv: #{views.inspect}"
|
366
|
+
views
|
279
367
|
end
|
280
368
|
|
281
369
|
# Remember: A post in multiple views will trigger multiple
|
@@ -309,25 +397,27 @@ class RuneBlog
|
|
309
397
|
def generate_post(draft)
|
310
398
|
views = _get_views(draft)
|
311
399
|
views.each do |view|
|
312
|
-
noext, viewdir, slugdir, aslug, theme = _copy_get_dirs(draft, view)
|
400
|
+
noext, viewdir, slugdir, aslug, @theme = _copy_get_dirs(draft, view)
|
401
|
+
staging = viewdir + "/staging"
|
313
402
|
Dir.chdir(slugdir) do
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
403
|
+
copy(draft, ".")
|
404
|
+
lt3 = draft.split("/")[-1]
|
405
|
+
# Remember: Some posts may be in more than one view -- careful with links back
|
406
|
+
# system("livetext #{draft} >staging/#{name}/index.html") # permalink?
|
407
|
+
# Structure is borked?
|
408
|
+
copy!("#{@theme}/*", "#{staging}")
|
409
|
+
copy(lt3, staging)
|
410
|
+
html = noext[5..-1]
|
411
|
+
Dir.chdir(staging) do
|
412
|
+
STDERR.puts "--- gp: pwd = #{Dir.pwd} draft = #{draft} html = #{html}"
|
413
|
+
livetext draft, html
|
414
|
+
# link to POST??
|
415
|
+
copy html, "../remote"
|
416
|
+
collect_recent_posts("recent.html")
|
417
|
+
copy("recent.html", "../remote")
|
418
|
+
livetext "blog-generate", "../remote/index"
|
324
419
|
end
|
325
|
-
|
326
|
-
# system("livetext blog-generate.lt3 >bgen.html")
|
327
|
-
# files.each {|fname| system("rm ./#{fname}") }
|
328
|
-
# system("rm -rf ./sidebar/")
|
329
420
|
end
|
330
|
-
# create framed pure slug (where?)
|
331
421
|
end
|
332
422
|
end
|
333
423
|
|
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/runeblog.gemspec
CHANGED
@@ -27,11 +27,7 @@ spec = Gem::Specification.new do |s|
|
|
27
27
|
main = Find.find("bin").to_a +
|
28
28
|
Find.find("lib").to_a
|
29
29
|
|
30
|
-
|
31
|
-
system("tar zcvf standard.tgz standard/ >/dev/null 2>&1")
|
32
|
-
end
|
33
|
-
|
34
|
-
std_theme = ["data/standard.tgz"]
|
30
|
+
std_theme = ["themes/standard.tgz"]
|
35
31
|
|
36
32
|
misc = %w[./README.lt3 ./README.md ./runeblog.gemspec]
|
37
33
|
test = Find.find("test").to_a
|
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,15 +33,19 @@ def show_lines(text)
|
|
32
33
|
str
|
33
34
|
end
|
34
35
|
|
36
|
+
|
37
|
+
|
38
|
+
puts
|
39
|
+
|
35
40
|
system("rm -rf .blogs")
|
36
|
-
RuneBlog.create_new_blog_repo(
|
37
|
-
x = RuneBlog.new
|
41
|
+
RuneBlog.create_new_blog_repo(".blogs")
|
42
|
+
x = RuneBlog.new(".blogs")
|
38
43
|
|
39
44
|
x.create_view("around_austin") # FIXME remember view title!
|
40
45
|
|
41
46
|
# Hack:
|
42
47
|
if File.exist?("publish")
|
43
|
-
system("cp publish .blogs/
|
48
|
+
system("cp publish .blogs/views/around_austin/publish")
|
44
49
|
end
|
45
50
|
|
46
51
|
x.create_view("computing")
|
@@ -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
|
data/themes/standard.tgz
ADDED
Binary file
|
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.85
|
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-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: livetext
|
@@ -61,7 +61,6 @@ files:
|
|
61
61
|
- "./README.md"
|
62
62
|
- "./runeblog.gemspec"
|
63
63
|
- bin/blog
|
64
|
-
- data/standard.tgz
|
65
64
|
- lib/Javascript.stuff
|
66
65
|
- lib/default.rb
|
67
66
|
- lib/global.rb
|
@@ -78,6 +77,7 @@ files:
|
|
78
77
|
- test/general_test.rb
|
79
78
|
- test/make_blog.rb
|
80
79
|
- test/test
|
80
|
+
- themes/standard.tgz
|
81
81
|
homepage: https://github.com/Hal9000/runeblog
|
82
82
|
licenses:
|
83
83
|
- Ruby
|
data/data/standard.tgz
DELETED
Binary file
|