runeblog 0.2.47 → 0.2.48

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e4cdb2c0546394c622e9a648273dde7865fc8e4dd6839776c175c406ff34dba1
4
- data.tar.gz: b96eb0e7783607b91b3b23d435eff368cea9102caa8a9342901318008d3fd0f1
3
+ metadata.gz: d4bd7b67f736b85651eb0650c5af974cbcf74fce48be345920e9bac4c9dba9dd
4
+ data.tar.gz: 5fda0c05a32e16103e7f7f31b7ffe104c307b63c2e14e96216644dfbc6fdefff
5
5
  SHA512:
6
- metadata.gz: 1945c5f3667d6c25f74e5d7878be2cb22016588551cad9fd66949908640b18d1730cdb0463754df82bcd0ed58a8af4febf5e309fbf3f7afa62ab808f9f0e453d
7
- data.tar.gz: 1a646b8c95822f3ed083e3a58b946efe79eda8babc23985d9e6bcd5fca1efbbe500e4b41f9fce3c54aaa41168616cbc1c2789e7984d13ff0048f2ccc2afc96eb
6
+ metadata.gz: 55b9141f9b2d0d7a06cb5134d1e1da871cd78c2dffa7502310d0ae0caedec7c27eabfa28dc7957754f611122283abc2bc833512e58f9414a541b87d8cf4e146f
7
+ data.tar.gz: 60b1546750066d75a623a3ca7866b5f5307b31e14a806a85f726fe87507ab1c3d24c5ce7737742ffdb3e41fb7cbcb0eac244089c9f96efddc6534299e9ab9ef1
data/bin/blog CHANGED
@@ -23,7 +23,8 @@ TEXT
23
23
  end
24
24
 
25
25
  def mainloop
26
- print fx("#{@blog.view}> ", Red, :bold)
26
+ info = @blog.view || "no view"
27
+ print fx("[#{info}] ", Red, :bold)
27
28
  cmd = STDSCR.gets(history: @cmdhist, tab: @tabcom)
28
29
  cmd_quit(nil) if cmd.nil? # ^D
29
30
  cmd.chomp!
@@ -72,7 +73,7 @@ puts fx("\n RuneBlog", :bold), fx(" v #{RuneBlog::VERSION}\n", Red)
72
73
 
73
74
  loop { mainloop }
74
75
 
75
- # sleep 0.2
76
- # system("tput clear")
76
+ system("tput clear")
77
+ sleep 0.2
77
78
  puts
78
79
 
@@ -2,13 +2,14 @@
2
2
  . This HTML fragment gives the format of a post's
3
3
  . "index" entry (recent posts on blog front page).
4
4
  . --------------------------------------------------
5
+ .nopara
5
6
 
6
7
  <div class="post">
7
8
  <table width=100% cellpadding=7>
8
9
  <tr>
9
10
  <td width=14% valign=top align=right style="margin-top: -1px;">
10
11
  <!-- <span class="post-date mt-1 mb-1" style="margin-top: 3px; text-align: right"> -->
11
- <font size=-1><b>#{date}</b></font>
12
+ <font size=-1>#{date}</font>
12
13
  <!-- </span> -->
13
14
  </td>
14
15
  <td>
@@ -21,3 +22,5 @@
21
22
  </tr>
22
23
  </table>
23
24
  </div>
25
+
26
+ <font size=-4><br></font>
@@ -70,7 +70,7 @@ end
70
70
 
71
71
  def quote
72
72
  _passthru "<blockquote>"
73
- _passthru _body
73
+ _passthru _body.join(" ")
74
74
  _passthru "</blockquote>"
75
75
  _optional_blank_line
76
76
  end
@@ -364,8 +364,8 @@ def _load_local(widget)
364
364
  code
365
365
  end
366
366
  rescue => err
367
- STDOUT.puts err
368
- STDOUT.puts err.backtrace.join("\n")
367
+ STDERR.puts err.to_s
368
+ STDERR.puts err.backtrace.join("\n")
369
369
  exit
370
370
  end
371
371
 
@@ -480,10 +480,16 @@ class Livetext::Functions
480
480
  ::Livetext::Vars[name] || "[:#{name} is undefined]"
481
481
  end
482
482
 
483
- def link
484
- file, cdata = self.class.param.split("||", 2)
485
- %[<link type="application/atom+xml" rel="alternate" href="#{_var(:host)}#{file}" title="#{_var(:title)}">]
486
- end
483
+ # def link(param = nil)
484
+ # puts "--- WTF?? param = #{param.inspect}"; gets
485
+ # file, cdata = param.split("||", 2)
486
+ # %[<a href="assets/#{file}">#{cdata}</a>]
487
+ # end
488
+ #
489
+ # def link(param = nil)
490
+ # file, cdata = param.split("||", 2)
491
+ # %[<link type="application/atom+xml" rel="alternate" href="#{_var(:host)}#{file}" title="#{_var(:title)}">]
492
+ # end
487
493
  end
488
494
 
489
495
  ###
@@ -62,8 +62,8 @@ class RuneBlog::Post
62
62
  end
63
63
 
64
64
  def self.create(title:, teaser:, body:, pubdate: Time.now.strftime("%Y-%m-%d"),
65
- views:[])
66
- log!(enter: __method__, args: [title, teaser, body, pubdate, views])
65
+ views:[], file: nil)
66
+ log!(enter: __method__, args: [title, teaser, body, pubdate, views], stderr: true)
67
67
  post = self.new
68
68
  # NOTE: This is the ONLY place next_sequence is called!
69
69
  num = post.meta.num = post.blog.next_sequence
@@ -78,14 +78,18 @@ class RuneBlog::Post
78
78
  # create_draft
79
79
  viewhome = post.blog.view.publisher.url
80
80
  meta = post.meta
81
- text = RuneBlog.post_template(num: meta.num, title: meta.title, date: meta.pubdate,
82
- view: meta.view, teaser: meta.teaser, body: meta.body,
83
- views: meta.views, tags: meta.tags, home: viewhome)
84
- srcdir = post.blog.root/:drafts + "/"
85
- vpdir = post.blog.root/:drafts + "/"
86
- fname = meta.slug + ".lt3"
87
- post.draft = srcdir + fname
88
- dump(text, post.draft)
81
+ if file.nil?
82
+ text = RuneBlog.post_template(num: meta.num, title: meta.title, date: meta.pubdate,
83
+ view: meta.view, teaser: meta.teaser, body: meta.body,
84
+ views: meta.views, tags: meta.tags, home: viewhome)
85
+ srcdir = post.blog.root/:drafts + "/"
86
+ vpdir = post.blog.root/:drafts + "/"
87
+ fname = meta.slug + ".lt3"
88
+ post.draft = srcdir + fname
89
+ dump(text, post.draft)
90
+ else
91
+ dump(File.read(file), post.draft)
92
+ end
89
93
  return post
90
94
  end
91
95
 
@@ -125,6 +129,9 @@ class RuneBlog::ViewPost
125
129
  lines = File.readlines(mdfile)
126
130
  @title = lines.grep(/title:/).first[7..-1].chomp
127
131
  @date = lines.grep(/pubdate:/).first[9..-1].chomp
132
+ # print "-- date = #{@date.inspect} "; gets
133
+ rescue => err
134
+ STDERR.puts "--- #{err}\n #{err.backtrace.join("\n ")}"
128
135
  end
129
136
 
130
137
  def get_dirs
@@ -11,13 +11,15 @@ module RuneBlog::REPL
11
11
  result = system!("#{@blog.editor} #{file}")
12
12
  raise EditorProblem(file) unless result
13
13
  sleep 0.1
14
- STDSCR.clear
14
+ cmd_clear(nil)
15
15
  end
16
16
 
17
17
  def cmd_quit(arg, testing = false)
18
18
  check_empty(arg)
19
19
  RubyText.stop
20
- system!("tput clear")
20
+ sleep 0.1
21
+ cmd_clear(nil)
22
+ sleep 0.1
21
23
  exit
22
24
  end
23
25
 
@@ -98,6 +100,13 @@ module RuneBlog::REPL
98
100
  result = system!("open #{local}")
99
101
  raise CantOpen(local) unless result
100
102
  @out
103
+ rescue => err
104
+ out = "/tmp/blog#{rand(100)}.txt"
105
+ File.open(out, "w") do |f|
106
+ f.puts err
107
+ f.puts err.backtrace.join("\n")
108
+ end
109
+ puts "Error: See #{out}"
101
110
  end
102
111
 
103
112
  def cmd_publish(arg, testing = false)
@@ -135,6 +144,13 @@ module RuneBlog::REPL
135
144
  output! "...finished.\n"
136
145
  end
137
146
  return @out
147
+ rescue => err
148
+ out = "/tmp/blog#{rand(100)}.txt"
149
+ File.open(out, "w") do |f|
150
+ f.puts err
151
+ f.puts err.backtrace.join("\n")
152
+ end
153
+ puts "Error: See #{out}"
138
154
  end
139
155
 
140
156
  def cmd_rebuild(arg, testing = false)
@@ -145,6 +161,13 @@ module RuneBlog::REPL
145
161
  @blog.generate_view(@blog.view)
146
162
  @blog.generate_index(@blog.view)
147
163
  @out
164
+ rescue => err
165
+ out = "/tmp/blog#{rand(100)}.txt"
166
+ File.open(out, "w") do |f|
167
+ f.puts err
168
+ f.puts err.backtrace.join("\n")
169
+ end
170
+ puts "Error: See #{out}"
148
171
  end
149
172
 
150
173
  def cmd_change_view(arg, testing = false)
@@ -178,18 +201,30 @@ module RuneBlog::REPL
178
201
  @out
179
202
  rescue ViewAlreadyExists
180
203
  puts 'Blog already exists'
204
+ rescue => err
205
+ out = "/tmp/blog#{rand(100)}.txt"
206
+ File.open(out, "w") do |f|
207
+ f.puts err
208
+ f.puts err.backtrace.join("\n")
209
+ end
210
+ puts "Error: See #{out}"
181
211
  end
182
212
 
183
213
  def cmd_new_post(arg, testing = false)
184
214
  reset_output
185
215
  check_empty(arg)
186
216
  title = ask("\nTitle: ")
217
+ puts
187
218
  @blog.create_new_post(title)
188
219
  # STDSCR.clear
189
220
  @out
190
221
  rescue => err
191
- puts err
192
- puts err.backtrace.join("\n")
222
+ out = "/tmp/blog#{rand(100)}.txt"
223
+ File.open(out, "w") do |f|
224
+ f.puts err
225
+ f.puts err.backtrace.join("\n")
226
+ end
227
+ puts "Error: See #{out}"
193
228
  end
194
229
 
195
230
  def _remove_post(arg, testing=false)
@@ -235,6 +270,13 @@ module RuneBlog::REPL
235
270
  draft = "#{@blog.root}/drafts/#{file}"
236
271
  result = edit_file(draft)
237
272
  @blog.generate_post(draft)
273
+ rescue => err
274
+ out = "/tmp/blog#{rand(100)}.txt"
275
+ File.open(out, "w") do |f|
276
+ f.puts err
277
+ f.puts err.backtrace.join("\n")
278
+ end
279
+ puts "Error: See #{out}"
238
280
  end
239
281
 
240
282
  def cmd_list_views(arg, testing = false)
@@ -318,7 +360,10 @@ module RuneBlog::REPL
318
360
 
319
361
  def cmd_ssh(arg, testing = false)
320
362
  pub = @blog.view.publisher
321
- system!("ssh #{pub.user}@#{pub.server}")
363
+ puts
364
+ system!("tputs clear; ssh #{pub.user}@#{pub.server}")
365
+ sleep 0.1
366
+ cmd_clear(nil)
322
367
  end
323
368
 
324
369
  def cmd_INVALID(arg, testing = false)
@@ -43,6 +43,15 @@ class RuneBlog
43
43
 
44
44
  include Helpers
45
45
 
46
+ def _tmp_error(err) # FIXME move to helpers
47
+ out = "/tmp/blog#{rand(100)}.txt"
48
+ File.open(out, "w") do |f|
49
+ f.puts err
50
+ f.puts err.backtrace.join("\n")
51
+ end
52
+ puts "Error: See #{out}"
53
+ end
54
+
46
55
  def self.create_new_blog_repo(dir = ".blogs")
47
56
  log!(enter: __method__, args: [dir])
48
57
  raise ArgumentError unless dir.is_a?(String) && ! dir.empty?
@@ -68,8 +77,9 @@ class RuneBlog
68
77
  x.root, x.current_view, x.editor = root, "test_view", "/usr/bin/vim " # dumb - FIXME later
69
78
  write_config(x, root/ConfigFile)
70
79
  @blog = self.new(root)
71
- @blog.create_view("test_view")
72
80
  @blog
81
+ rescue => err
82
+ _tmp_error(err)
73
83
  end
74
84
 
75
85
  def self.open(root = ".blogs")
@@ -78,6 +88,8 @@ class RuneBlog
78
88
  self.blog = self # Weird. Like a singleton - dumbass circular dependency?
79
89
  root = Dir.pwd/root
80
90
  blog = self.new(root)
91
+ rescue => err
92
+ _tmp_error(err)
81
93
  end
82
94
 
83
95
  def initialize(root_dir = ".blogs") # always assumes existing blog
@@ -106,6 +118,8 @@ class RuneBlog
106
118
  views = _retrieve_metadata(:views)
107
119
  views.each {|v| system!("cp *html #@root/views/#{v}/remote") }
108
120
  end
121
+ rescue => err
122
+ _tmp_error(err)
109
123
  end
110
124
 
111
125
  def _retrieve_metadata(key)
@@ -129,6 +143,8 @@ class RuneBlog
129
143
  raise "Too many #{key} instances in metadata.txt!"
130
144
  end
131
145
  return result
146
+ rescue => err
147
+ _tmp_error(err)
132
148
  end
133
149
 
134
150
  def process_post(sourcefile)
@@ -138,6 +154,8 @@ class RuneBlog
138
154
  create_dir(dir)
139
155
  xlate cwd: dir, src: sourcefile # , debug: true
140
156
  _deploy_local(dir)
157
+ rescue => err
158
+ _tmp_error(err)
141
159
  end
142
160
 
143
161
  def inspect
@@ -172,6 +190,8 @@ class RuneBlog
172
190
  def _set_publisher
173
191
  log!(enter: __method__, level: 3)
174
192
  @view.publisher = RuneBlog::Publishing.new(@view.to_s) # FIXME refactor
193
+ rescue => err
194
+ _tmp_error(err)
175
195
  end
176
196
 
177
197
  def view=(arg)
@@ -188,6 +208,8 @@ class RuneBlog
188
208
  else
189
209
  raise CantAssignView(arg.class.to_s)
190
210
  end
211
+ rescue => err
212
+ _tmp_error(err)
191
213
  end
192
214
 
193
215
  def get_sequence
@@ -234,6 +256,8 @@ class RuneBlog
234
256
  cmd = "cp -r #{RuneBlog::Path}/../empty_view views/#{view_name}"
235
257
  system!(cmd)
236
258
  end
259
+ rescue => err
260
+ _tmp_error(err)
237
261
  end
238
262
 
239
263
  def check_valid_new_view(view_name)
@@ -254,6 +278,8 @@ class RuneBlog
254
278
  make_empty_view_tree(view_name)
255
279
  add_view(view_name)
256
280
  mark_last_published("Initial creation")
281
+ rescue => err
282
+ _tmp_error(err)
257
283
  end
258
284
 
259
285
  def delete_view(name, force = false)
@@ -287,6 +313,8 @@ class RuneBlog
287
313
  postdir = post.first
288
314
  vp = RuneBlog::ViewPost.new(self.view, postdir)
289
315
  vp
316
+ rescue => err
317
+ _tmp_error(err)
290
318
  end
291
319
 
292
320
  def index_entry(slug)
@@ -302,10 +330,13 @@ class RuneBlog
302
330
  vp.nslug, vp.aslug, vp.title, vp.date, vp.teaser_text
303
331
  path = vp.path
304
332
  url = aslug + ".html"
333
+ # puts "--- vp = #{[vp.nslug, vp.aslug, vp.title, vp.date, vp.teaser_text].inspect}"; gets
305
334
  date = ::Date.parse(date)
306
335
  date = date.strftime("%B %e<br><div style='float: right'>%Y</div>")
307
336
  text = interpolate(@_post_entry, binding)
308
337
  text
338
+ rescue => err
339
+ _tmp_error(err)
309
340
  end
310
341
 
311
342
  def collect_recent_posts(file)
@@ -316,14 +347,20 @@ class RuneBlog
316
347
  posts = entries.grep(/^\d\d\d\d/).map {|x| dir_posts/x }
317
348
  posts.select! {|x| File.directory?(x) }
318
349
  # directories that start with four digits
319
- posts = posts.sort {|a, b| b.to_i <=> a.to_i } # sort descending
350
+ posts = posts.sort do |a, b|
351
+ ai = a.index(/\d\d\d\d-/)
352
+ bi = b.index(/\d\d\d\d-/)
353
+ na = a[ai..(ai+3)].to_i
354
+ nb = b[bi..(bi+3)].to_i
355
+ nb <=> na
356
+ end # sort descending
320
357
  posts = posts[0..19] # return 20 at most
321
358
  text = <<-HTML
322
359
  <html>
323
360
  <head><link rel="stylesheet" href="etc/blog.css"></head>
324
361
  <body>
325
362
  HTML
326
- wanted = [5, posts.size].min # estimate how many we want?
363
+ wanted = [8, posts.size].min # estimate how many we want?
327
364
  enum = posts.each
328
365
  wanted.times do
329
366
  postid = File.basename(enum.next)
@@ -332,13 +369,16 @@ class RuneBlog
332
369
  end
333
370
  text << "</body></html>"
334
371
  File.write(@vdir/:remote/file, text)
372
+ rescue => err
373
+ _tmp_error(err)
335
374
  end
336
375
 
337
376
  def create_new_post(title, testing = false, teaser: nil, body: nil,
338
377
  pubdate: Time.now.strftime("%Y-%m-%d"), views: [])
339
- log!(enter: __method__, args: [title, testing, teaser, body, views], level: 1)
378
+ log!(enter: __method__, args: [title, testing, teaser, body, views], level: 1, stderr: true)
340
379
  meta = nil
341
380
  views = views + [self.view.to_s]
381
+ views.uniq!
342
382
  Dir.chdir(@root/:posts) do
343
383
  post = Post.create(title: title, teaser: teaser, body: body, pubdate: pubdate, views: views)
344
384
  post.edit unless testing
@@ -347,14 +387,12 @@ class RuneBlog
347
387
  end
348
388
  return meta.num
349
389
  rescue => err
350
- puts err
351
- puts err.backtrace.join("\n")
390
+ _tmp_error(err)
352
391
  end
353
392
 
354
393
  def edit_initial_post(file, testing = false)
355
394
  log!(enter: __method__, args: [file, testing], level: 3)
356
395
  debug "=== edit_initial_post #{file.inspect} => #{sourcefile}"
357
- sourcefile = @root/:drafts/file
358
396
  result = system!("#@editor #{sourcefile} +8") unless testing
359
397
  raise EditorProblem(sourcefile) unless result
360
398
  process_post(sourcefile)
@@ -390,6 +428,8 @@ class RuneBlog
390
428
  raise ArgumentError unless view.is_a?(String) || view.is_a?(RuneBlog::View)
391
429
  @vdir = @root/:views/view
392
430
  collect_recent_posts("recent.html")
431
+ rescue => err
432
+ _tmp_error(err)
393
433
  end
394
434
 
395
435
  def generate_view(view) # huh?
@@ -402,10 +442,7 @@ class RuneBlog
402
442
  src: "blog/generate.lt3", dst: vdir/:remote/"index.html"
403
443
  copy("#{vdir}/assets/*", "#{vdir}/remote/assets/")
404
444
  rescue => err
405
- puts err
406
- puts err.backtrace.join("\n")
407
- print "Pause... "
408
- gets
445
+ _tmp_error(err)
409
446
  end
410
447
 
411
448
  def _get_views(draft)
@@ -416,7 +453,9 @@ class RuneBlog
416
453
  raise "No .views call!" if view_line.size < 1
417
454
  view_line = view_line.first
418
455
  views = view_line[7..-1].split
419
- views
456
+ views.uniq
457
+ rescue => err
458
+ _tmp_error(err)
420
459
  end
421
460
 
422
461
  def _copy_get_dirs(draft, view)
@@ -430,6 +469,8 @@ class RuneBlog
430
469
  viewdir, slugdir, aslug = vdir, dir, noext[5..-1]
431
470
  theme = viewdir/:themes/:standard
432
471
  [noext, viewdir, slugdir, aslug, theme]
472
+ rescue => err
473
+ _tmp_error(err)
433
474
  end
434
475
 
435
476
  def _post_metadata(draft, pdraft)
@@ -466,6 +507,8 @@ class RuneBlog
466
507
  LIVE
467
508
  File.open(pdraft/"vars.lt3", "w") {|f| f.puts vars }
468
509
  end
510
+ rescue => err
511
+ _tmp_error(err)
469
512
  end
470
513
 
471
514
  def copy_widget_html(view)
@@ -483,10 +526,12 @@ class RuneBlog
483
526
  tag = File.basename(w)
484
527
  files.each {|file| system!("cp #{file} #{rem}", show: (tag == "zzz")) }
485
528
  end
529
+ rescue => err
530
+ _tmp_error(err)
486
531
  end
487
532
 
488
- def _handle_post(draft, view)
489
- log!(enter: __method__, args: [draft, view], level: 2)
533
+ def _handle_post(draft, view_name = self.view.to_s)
534
+ log!(enter: __method__, args: [draft, view_name], level: 2)
490
535
  # break into separate methods?
491
536
 
492
537
  fname = File.basename(draft) # 0001-this-is-a-post.lt3
@@ -494,30 +539,34 @@ class RuneBlog
494
539
  aslug = nslug.sub(/\d\d\d\d-/, "") # this-is-a-post
495
540
  ahtml = aslug + ".html" # this-is-a-post.html
496
541
  pdraft = @root/:posts/nslug
497
- remote = @root/:views/view/:remote
498
- @theme = @root/:views/view/:themes/:standard
542
+ remote = @root/:views/view_name/:remote
543
+ @theme = @root/:views/view_name/:themes/:standard
499
544
  # Step 1...
500
545
  create_dirs(pdraft)
501
- xlate cwd: pdraft, src: draft, dst: "guts.html"
546
+ xlate cwd: pdraft, src: draft, dst: "guts.html", debug: true
502
547
  _post_metadata(draft, pdraft)
503
548
  # Step 2...
504
- vposts = @root/:views/view/:posts
549
+ vposts = @root/:views/view_name/:posts
505
550
  copy!(pdraft, vposts) # ??
506
551
  # Step 3..
507
552
  copy(pdraft/"guts.html", @theme/:post)
508
553
  copy(pdraft/"vars.lt3", @theme/:post)
509
554
  # Step 4...
510
- xlate cwd: @theme/:post, src: "generate.lt3",
511
- dst: remote/ahtml, copy: @theme/:post # , debug: true
555
+ xlate cwd: @theme/:post, src: "generate.lt3", force: true,
556
+ dst: remote/ahtml, copy: @theme/:post, debug: true
512
557
  xlate cwd: @theme/:post, src: "permalink.lt3",
513
558
  dst: remote/:permalink/ahtml # , debug: true
514
- copy_widget_html(view)
559
+ copy_widget_html(view_name)
560
+ rescue => err
561
+ _tmp_error(err)
515
562
  end
516
563
 
517
564
  def generate_post(draft)
518
565
  log!(enter: __method__, args: [draft], level: 1)
519
566
  views = _get_views(draft)
520
567
  views.each {|view| _handle_post(draft, view) }
568
+ rescue => err
569
+ _tmp_error(err)
521
570
  end
522
571
 
523
572
  def rebuild_post(file)
@@ -531,8 +580,7 @@ class RuneBlog
531
580
  @views_dirty.flatten!
532
581
  @views_dirty.uniq!
533
582
  rescue => err
534
- error(err)
535
- getch
583
+ _tmp_error(err)
536
584
  end
537
585
 
538
586
  def remove_post(num)
@@ -2,7 +2,7 @@
2
2
  if ! (Object.constants.include?(:RuneBlog) && RuneBlog.constants.include?(:Path))
3
3
 
4
4
  class RuneBlog
5
- VERSION = "0.2.47"
5
+ VERSION = "0.2.48"
6
6
 
7
7
  path = Gem.find_files("runeblog").grep(/runeblog-/).first
8
8
  Path = File.dirname(path)
@@ -2,6 +2,7 @@
2
2
  LEXT = ".lt3"
3
3
 
4
4
  def stale?(src, dst, force = false)
5
+ meh = File.new("/tmp/dammit-#{src.gsub(/\//, "-")}", "w")
5
6
  log!(enter: __method__, args: [src, dst], level: 3)
6
7
  raise "Source #{src} not found in #{Dir.pwd}" unless File.exist?(src)
7
8
  return true if force
@@ -23,15 +24,15 @@ def xlate(cwd: Dir.pwd, src:,
23
24
  STDERR.puts "#{indent} from: #{caller[0]}"
24
25
  STDERR.puts "#{indent} copy: #{copy}" if copy
25
26
  end
26
- if stale?(src, dst, force)
27
- # do nothing
27
+ stale = stale?(src, dst, force)
28
+ if stale
29
+ rc = system("livetext #{src} >#{dst}")
30
+ STDERR.puts "...completed (shell returned #{rc})" if debug
31
+ system!("cp #{dst} #{copy}") if copy
28
32
  else
29
33
  STDERR.puts "#{indent} -- ^ Already up to date!" if debug
30
34
  return
31
35
  end
32
- rc = system("livetext #{src} >#{dst}")
33
- STDERR.puts "...completed (shell returned #{rc})" if debug
34
- system!("cp #{dst} #{copy}") if copy
35
36
  end
36
37
  end
37
38
 
@@ -119,6 +119,8 @@ Contact light. Houston, this is Tranquility Base. The Eagle has
119
119
  landed. That's one small step for (a) man, one giant leap for
120
120
  mankind.
121
121
 
122
+ Here's the PDF of $$link["Ruby for the Old-Time C Programmer"|http://rubyhacker.com/blog2/rubydino.pdf]
123
+
122
124
  Pity this busy monster, manunkind, not. Pity rather... Listen:
123
125
  There's a hell of a universe next door; let's go.
124
126
  BODY
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.2.47
4
+ version: 0.2.48
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-10-18 00:00:00.000000000 Z
11
+ date: 2019-10-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: livetext