runeblog 0.2.71 → 0.2.76

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: a760647775e3857ec07a63defdbb5a32a9d9ff2120b3f53b3c13d46ad37defb2
4
- data.tar.gz: 27114990eebf8a5221beef06396f86e0e744e2f1df8323b803a874157fdf4da1
3
+ metadata.gz: b0c80c77d6bdb17bf32c8a90ed26aa3e98b43493c7b38f7341a359e53bda7cff
4
+ data.tar.gz: 89d0a30d6f2ac56b932c8fd65d966ddcebed9320627ec032ae2d2ac68971a2e6
5
5
  SHA512:
6
- metadata.gz: 209520abd4238593d2e21e3d5ac253b4074836ed96c88cc4b994d4fc8010ddb5f0dd29f86c4a53586f06da68a0cb75d3091610c81c311482326507072a7754dc
7
- data.tar.gz: a93b099787b73569dcfa1fe8b2dd9d55cada404333586238ed9c749007d2ced9898740e2c3f5ff6cc810a3290d68d40df88a0989902752bf8666b097d1e544ae
6
+ metadata.gz: 6bc7626f7e00f7e656982c3bb6f5fea92da173ae430a1b4cdb888dfb170a6af84c33dcd99b6541f57e67c716e23ed484e947ba616f43156dacc7242a97871af2
7
+ data.tar.gz: dd235b09c2f2f592f5a16afa574c62949731cbd634945b79e6969cfdfedbd9eb1132dad5bbd976416354972b4b9bf9d585e75bcd7aec264ec1d40c8f57e92a34
File without changes
@@ -1,4 +1,5 @@
1
1
  <!-- Miscellaneous local JS pieces are defined here -->
2
+ .nopara
2
3
 
3
4
  <script>
4
5
  function open_main(url) {
@@ -39,6 +39,7 @@ def system!(str, show: false)
39
39
  else
40
40
  STDERR.puts "FAILED: #{str.inspect}"
41
41
  STDERR.puts "\ncaller = \n#{caller.join("\n ")}\n"
42
+ exit
42
43
  return rc
43
44
  end
44
45
  rc
@@ -1,7 +1,6 @@
1
1
  require 'runeblog_version'
2
2
  require 'fileutils'
3
3
 
4
- #require 'pathmagic'
5
4
  require 'xlate'
6
5
 
7
6
  module RuneBlog::Helpers
@@ -20,38 +19,84 @@ module RuneBlog::Helpers
20
19
  puts " Failed: #{cmd} - from #{caller[0]}" unless rc
21
20
  end
22
21
 
22
+ def get_repo_config
23
+ log!(enter: __method__, level: 3)
24
+ @editor = File.read(".blogs/data/EDITOR").chomp
25
+ @current_view = File.read(".blogs/data/VIEW").chomp
26
+ @root = File.read(".blogs/data/ROOT").chomp
27
+ rescue => err
28
+ puts "Can't read config: #{err}"
29
+ puts err.backtrace.join("\n")
30
+ puts "dir = #{Dir.pwd}"
31
+ end
32
+
23
33
  def copy_data(tag, dest)
24
- data = RuneBlog::Path/"../data" # files kept inside gem
34
+ data = RuneBlog::Path + "/../data" # files kept inside gem
25
35
  case tag
26
36
  when :config; files = %w[ROOT VIEW EDITOR]
27
37
  end
28
- files.each {|file| copy(data/file, dest) }
38
+ files.each {|file| copy(data + "/" + file, dest) }
29
39
  end
30
40
 
31
- def read_config
32
- log!(enter: __method__, level: 3)
33
- @editor = File.read("data/EDITOR").chomp
34
- @current_view = File.read("data/VIEW").chomp
35
- @root = File.read(".blogs/data/ROOT").chomp
41
+ def read_config(file, *syms)
42
+ log!(enter: __method__, args: [file, *syms], level: 3)
43
+ lines = File.readlines(file).map(&:chomp)
44
+ obj = ::OpenStruct.new
45
+ lines.each do |line|
46
+ next if line == "\n" || line[0] == "#"
47
+ key, val = line.split(/: +/, 2)
48
+ obj.send(key+"=", val)
49
+ end
50
+ return obj if syms.empty?
51
+
52
+ vals = []
53
+ if syms.empty?
54
+ vals = obj.to_hash.values
55
+ else
56
+ syms.each {|sym| vals << obj.send(sym) }
57
+ end
58
+ return vals
36
59
  rescue => err
37
- puts "Can't read config: #{err}"
60
+ puts "Can't read config file '#{file}': #{err}"
38
61
  puts err.backtrace.join("\n")
39
62
  puts "dir = #{Dir.pwd}"
40
63
  exit
41
64
  end
42
65
 
66
+ def try_read_config(file, hash)
67
+ log!(enter: __method__, args: [file, hash], level: 3)
68
+ return hash.values unless File.exist?(file)
69
+ vals = read_config(file, *hash.keys)
70
+ vals
71
+ end
72
+
73
+ def write_config(obj, file)
74
+ log!(enter: __method__, args: [obj, file], level: 2)
75
+ hash = obj.to_h
76
+ File.open(file, "w") do |out|
77
+ hash.each_pair {|key, val| out.puts "#{key}: #{val}" }
78
+ end
79
+ end
80
+
43
81
  def get_views # read from filesystem
44
82
  log!(enter: __method__, level: 3)
45
83
  dirs = subdirs("#@root/views/").sort
46
84
  dirs.map {|name| RuneBlog::View.new(name) }
47
85
  end
48
86
 
87
+ def write_repo_config(root: "#{Dir.pwd}/.blogs", view: "#{root}/data/VIEW", editor: "#{root}/data/EDITOR")
88
+ File.write(root + "/data/ROOT", root + "\n")
89
+ File.write(root + "/data/VIEW", view.to_s + "\n")
90
+ File.write(root + "/data/EDITOR", editor + "\n")
91
+ end
92
+
49
93
  def new_dotfile(root: ".blogs", current_view: "test_view", editor: "vi")
50
94
  log!(enter: __method__, args: [root, current_view, editor], level: 3)
51
- root = Dir.pwd/root
95
+ root = Dir.pwd + "/" + root
52
96
  x = OpenStruct.new
53
97
  x.root, x.current_view, x.editor = root, current_view, editor
54
- write_config(x, root/RuneBlog::ConfigFile)
98
+ write_config(x, root + "/" + RuneBlog::ConfigFile)
99
+ write_repo_config
55
100
  end
56
101
 
57
102
  def new_sequence
@@ -63,6 +108,7 @@ module RuneBlog::Helpers
63
108
 
64
109
  def subdirs(dir)
65
110
  log!(enter: __method__, args: [dir], level: 3)
111
+ STDERR.puts dir
66
112
  dirs = Dir.entries(dir) - %w[. ..]
67
113
  dirs.reject! {|x| ! File.directory?("#@root/views/#{x}") }
68
114
  dirs
@@ -4,16 +4,14 @@ require 'date'
4
4
  require 'find'
5
5
 
6
6
  require 'runeblog'
7
- # require 'pathmagic'
7
+ require 'pathmagic'
8
8
  require 'xlate'
9
9
 
10
10
 
11
11
  def init_liveblog # FIXME - a lot of this logic sucks
12
- here = Dir.pwd
13
- dir = here
14
- # loop { dir = Dir.pwd; break if File.exist?("data/ROOT"); Dir.chdir("..") }
15
- Dir.chdir(here) # here??? or dir??
16
- @blog = RuneBlog.new(dir)
12
+ dir = Dir.pwd.sub(/\.blogs.*/, "")
13
+ @blog = nil
14
+ Dir.chdir(dir) { @blog = RuneBlog.new }
17
15
  @root = @blog.root
18
16
  @view = @blog.view
19
17
  @view_name = @blog.view.name unless @view.nil?
@@ -118,7 +116,6 @@ def banner
118
116
  str2 << " <td colspan=#{span}><img src=#{image} #{width} height=#{high}></img></td>" + "\n"
119
117
  when "svg_title"
120
118
  stuff, hash = _svg_title(*data)
121
- STDERR.puts hash.inspect
122
119
  wide = hash["width"]
123
120
  str2 << " <td colspan=#{span} width=#{wide}>#{stuff}</td>" + "\n"
124
121
  when "text"
@@ -443,14 +440,10 @@ rescue => err
443
440
  end
444
441
 
445
442
  def write_post
446
- STDERR.puts :wp1
447
443
  raise "'post' was not called" unless @meta
448
- STDERR.puts :wp2
449
444
  @meta.views = @meta.views.join(" ") if @meta.views.is_a? Array
450
445
  @meta.tags = @meta.tags.join(" ") if @meta.tags.is_a? Array
451
- STDERR.puts :wp3
452
446
  _write_metadata
453
- STDERR.puts :wp4
454
447
  rescue => err
455
448
  puts "err = #{err}"
456
449
  puts err.backtrace.join("\n")
@@ -471,19 +464,13 @@ def teaser
471
464
  end
472
465
 
473
466
  def finalize
474
- STDERR.puts :final1
475
467
  return unless @meta
476
- STDERR.puts :final2
477
468
  return @meta if @blog.nil?
478
- STDERR.puts :final3
479
469
 
480
470
  @slug = @blog.make_slug(@meta)
481
- STDERR.puts :final4
482
471
  slug_dir = @slug
483
472
  @postdir = @blog.view.dir/:posts/slug_dir
484
- STDERR.puts :final5
485
473
  write_post
486
- STDERR.puts :final6
487
474
  @meta
488
475
  end
489
476
 
@@ -758,7 +745,7 @@ def navbar
758
745
  end
759
746
 
760
747
  def _make_navbar(orient = :horiz)
761
- vdir = @blog.view.dir
748
+ vdir = @root/:views/@blog.view
762
749
  title = _var(:blog)
763
750
 
764
751
  extra = ""
@@ -1,6 +1,6 @@
1
1
  require 'runeblog'
2
2
  require 'global'
3
- # require 'pathmagic'
3
+ require 'pathmagic'
4
4
 
5
5
  class RuneBlog::Post
6
6
 
@@ -42,9 +42,7 @@ puts "-- load: opening #{pdir}"
42
42
  fname2 = "metadata.txt"
43
43
  hash = meta.to_h
44
44
 
45
- p :wmd1
46
45
  File.write("teaser.txt", hash[:teaser])
47
- p :wmd2
48
46
  hash.delete(:teaser)
49
47
  hash.delete(:body)
50
48
 
@@ -108,14 +106,9 @@ p :wmd2
108
106
  def build
109
107
  log!(enter: __method__)
110
108
  post = self
111
- p :bld1
112
109
  views = post.meta.views
113
- p :bld2
114
110
  text = File.read(@draft)
115
- p :bld3
116
- p @draft
117
111
  @blog.generate_post(@draft)
118
- p :bld4
119
112
  end
120
113
  end
121
114
 
@@ -12,13 +12,14 @@ require 'view'
12
12
  require 'publish'
13
13
  require 'post'
14
14
 
15
- # require 'pathmagic'
15
+ require 'pathmagic'
16
16
 
17
17
  ###
18
18
 
19
19
  class RuneBlog
20
20
 
21
21
  DotDir = ".blogs"
22
+ ConfigFile = "config"
22
23
  Themes = RuneBlog::Path/"../themes"
23
24
 
24
25
  make_exception(:FileNotFound, "File $1 was not found")
@@ -52,49 +53,46 @@ class RuneBlog
52
53
  puts "Error: See #{out}"
53
54
  end
54
55
 
55
- def self.create_new_blog_repo(root = ".blogs")
56
- log!(enter: __method__, args: [root])
57
- raise ArgumentError unless root.is_a?(String) && ! root.empty?
58
- root_dir = Dir.pwd/root
59
- # Crude - FIXME later - # What views are there? Publishing, etc.
56
+ def self.create_new_blog_repo(root_rel = ".blogs")
57
+ log!(enter: __method__, args: [root_rel])
58
+ raise ArgumentError unless root_rel.is_a?(String) && ! root_rel.empty?
60
59
  self.blog = self # Weird. Like a singleton - dumbass circular dependency?
61
- root = Dir.pwd/root
62
- raise BlogRepoAlreadyExists if Dir.exist?(root)
63
- create_dirs(root)
64
- Dir.chdir(root) do
60
+ repo_root = Dir.pwd/root_rel
61
+ raise BlogRepoAlreadyExists if Dir.exist?(repo_root)
62
+ create_dirs(repo_root)
63
+ Dir.chdir(repo_root) do
65
64
  create_dirs(:data, :drafts, :views, :posts)
66
- copy_data(:config, "./data/")
67
- File.write("data/ROOT", Dir.pwd + "\n")
68
65
  new_sequence
69
66
  end
70
- @blog = self.new(root)
67
+ copy_data(:config, repo_root/:data)
68
+ write_repo_config(root: repo_root)
69
+ @blog = self.new
71
70
  @blog
72
71
  rescue => err
73
- puts "Can't create blog repo: '#{root}' - #{err}"
72
+ puts "Can't create blog repo: '#{repo_root}' - #{err}"
74
73
  puts err.backtrace.join("\n")
75
74
  end
76
75
 
77
- def self.open(root = ".blogs")
78
- log!(enter: __method__, args: [root])
79
- # Crude - FIXME later - # What views are there? Publishing, etc.
76
+ def self.open(root_rel = ".blogs")
77
+ log!(enter: __method__, args: [root_rel])
80
78
  self.blog = self # Weird. Like a singleton - dumbass circular dependency?
81
- root = Dir.pwd/root
82
- blog = self.new(root)
79
+ blog = self.new(root_rel)
83
80
  rescue => err
84
81
  _tmp_error(err)
85
82
  end
86
83
 
87
- def initialize(root_dir = ".blogs") # always assumes existing blog
88
- log!(enter: "initialize", args: [root_dir])
89
- # Crude - FIXME later - # What views are there? Publishing, etc.
84
+ def initialize(root_rel = ".blogs") # always assumes existing blog
85
+ log!(enter: "initialize", args: [root_rel])
90
86
  self.class.blog = self # Weird. Like a singleton - dumbass circular dependency?
91
87
 
92
- @root = root_dir
93
- read_config
88
+ @root = Dir.pwd/root_rel
89
+ copy_data(:config, @root/:data)
90
+ write_repo_config(root: @root)
91
+ get_repo_config
94
92
  @views = get_views
95
93
  md = Dir.pwd.match(%r[.*/views/(.*?)/])
96
94
  if md
97
- @view_name = md[1]
95
+ @view_name = md[1]
98
96
  @view = str2view(@view_name)
99
97
  end
100
98
  @sequence = get_sequence
@@ -193,7 +191,6 @@ class RuneBlog
193
191
 
194
192
  def view=(arg)
195
193
  log!(enter: __method__, args: [arg], level: 2)
196
- # FIXME should write VIEW file?
197
194
  case arg
198
195
  when RuneBlog::View
199
196
  @view = arg
@@ -224,15 +221,15 @@ class RuneBlog
224
221
 
225
222
  def viewdir(v = nil) # delete?
226
223
  log!(enter: __method__, args: [v], level: 3)
224
+ v ||= @view
227
225
  v = str2view(v) if v.is_a?(String)
228
226
  raise ArgumentError unless v.nil? || v.is_a?(RuneBlog::View)
229
- v ||= @view
230
227
  return @root/:views/v
231
228
  end
232
229
 
233
230
  def self.exist?
234
231
  log!(enter: __method__, level: 3)
235
- Dir.exist?(DotDir) && File.exist?(DotDir/ConfigFile)
232
+ Dir.exist?(DotDir)
236
233
  end
237
234
 
238
235
  def mark_last_published(str)
@@ -243,7 +240,8 @@ class RuneBlog
243
240
  def add_view(view_name)
244
241
  log!(enter: __method__, args: [view_name], level: 2)
245
242
  view = RuneBlog::View.new(view_name)
246
- @view = view # current view
243
+ self.view = view # current view
244
+ File.write(@root/"data/VIEW", view_name)
247
245
  @views << view # all views
248
246
  view
249
247
  end
@@ -272,7 +270,6 @@ class RuneBlog
272
270
 
273
271
  def create_view(view_name)
274
272
  log!(enter: __method__, args: [view_name], level: 2)
275
- check_valid_new_view(view_name)
276
273
  make_empty_view_tree(view_name)
277
274
  add_view(view_name)
278
275
  mark_last_published("Initial creation")
@@ -321,11 +318,8 @@ class RuneBlog
321
318
  text = nil
322
319
  @theme = @view.dir/"themes/standard"
323
320
  post_entry_name = @theme/"blog/post_entry.lt3"
324
- # STDERR.puts "-- @pename = #{post_entry_name}"
325
- # STDERR.puts "-- @pe = #{@_post_entry.inspect}"
326
321
  depend = [post_entry_name]
327
322
  xlate src: post_entry_name, dst: "/tmp/post_entry.html" # , deps: depend # , debug: true
328
- # STDERR.puts "-- xlate result: #{`ls -l /tmp/post_entry.html`}"
329
323
  @_post_entry ||= File.read("/tmp/post_entry.html")
330
324
  vp = post_lookup(id)
331
325
  nslug, aslug, title, date, teaser_text =
@@ -376,7 +370,7 @@ class RuneBlog
376
370
  text << entry
377
371
  end
378
372
  text << "</body></html>"
379
- File.write(@vdir/:remote/file, text + "\n")
373
+ File.write(@vdir/:remote/file, text)
380
374
  return posts.size
381
375
  rescue => err
382
376
  _tmp_error(err)
@@ -388,15 +382,10 @@ class RuneBlog
388
382
  meta = nil
389
383
  views = views + [self.view.to_s]
390
384
  views.uniq!
391
- p :cnp1
392
385
  Dir.chdir(@root/"posts") do
393
- p :cnp2
394
386
  post = Post.create(title: title, teaser: teaser, body: body, pubdate: pubdate, views: views)
395
- p :cnp3
396
387
  post.edit unless testing
397
- p :cnp4
398
388
  post.build
399
- p :cnp5
400
389
  meta = post.meta
401
390
  end
402
391
  return meta.num
@@ -423,8 +412,8 @@ p :cnp5
423
412
  def change_view(view)
424
413
  log!(enter: __method__, args: [view], level: 3)
425
414
  raise ArgumentError unless view.is_a?(String) || view.is_a?(RuneBlog::View)
426
- x = OpenStruct.new
427
- File.write(@root/"data/VIEW", view.to_s + "\n")
415
+ File.write(@root/"data/VIEW", view)
416
+ # write_repo_config
428
417
  self.view = view # error checking?
429
418
  end
430
419
 
@@ -447,13 +436,15 @@ p :cnp5
447
436
  # @theme/"navbar/navbar.lt3",
448
437
  @theme/"blog/index.lt3"] # FIXME what about assets?
449
438
  xlate cwd: vdir/"themes/standard/etc", deps: depend,
450
- src: "blog.css.lt3", copy: vdir/"remote/etc/blog.css" # , debug: true
439
+ src: "blog.css.lt3", copy: vdir/"remote/etc/" # , debug: true
451
440
  xlate cwd: vdir/"themes/standard", deps: depend, force: true,
452
441
  src: "blog/generate.lt3", dst: vdir/:remote/"index.html"
453
442
  copy("#{vdir}/assets/*", "#{vdir}/remote/assets/")
454
443
  copy_widget_html(view)
455
444
  rescue => err
456
- _tmp_error(err)
445
+ STDERR.puts err
446
+ STDERR.puts err.backtrace.join("\n")
447
+ # _tmp_error(err)
457
448
  end
458
449
 
459
450
  def _get_views(draft)
@@ -487,24 +478,16 @@ p :cnp5
487
478
  def _post_metadata(draft, pdraft)
488
479
  log!(enter: __method__, args: [draft, pdraft], level: 2)
489
480
  # FIXME store this somewhere
490
- p :pm1
491
481
  fname = File.basename(draft) # 0001-this-is-a-post.lt3
492
482
  nslug = fname.sub(/.lt3$/, "") # 0001-this-is-a-post
493
483
  aslug = nslug.sub(/\d\d\d\d-/, "") # this-is-a-post
494
484
  pnum = nslug[0..3] # 0001
495
- p :pm2
496
485
  Dir.chdir(pdraft) do
497
- p :pm3
498
486
  excerpt = File.read("teaser.txt")
499
- p :pm4
500
487
  date = _retrieve_metadata(:date)
501
- p :pm5
502
488
  longdate = ::Date.parse(date).strftime("%B %e, %Y")
503
- p :pm6
504
489
  title = _retrieve_metadata(:title)
505
- p :pm7
506
490
  tags = _retrieve_metadata(:tags)
507
- p :pm8
508
491
  # FIXME simplify
509
492
  vars = <<~LIVE
510
493
  .set post.num = #{pnum}
@@ -524,9 +507,7 @@ p :pm8
524
507
  #{longdate}
525
508
  .end
526
509
  LIVE
527
- p :pm9
528
510
  File.open(pdraft/"vars.lt3", "w") {|f| f.puts vars }
529
- p :pma
530
511
  end
531
512
  rescue => err
532
513
  _tmp_error(err)
@@ -562,54 +543,39 @@ p :pma
562
543
  pdraft = @root/:posts/nslug
563
544
  remote = @root/:views/view_name/:remote
564
545
  @theme = @root/:views/view_name/:themes/:standard
565
- p :hp1
566
546
  # Step 1...
567
547
  create_dirs(pdraft)
568
- p :hp2
569
548
  # FIXME dependencies?
570
549
  xlate cwd: pdraft, src: draft, dst: "guts.html" # , debug: true
571
- p :hp3
572
550
  _post_metadata(draft, pdraft)
573
- p :hp4
574
551
  # Step 2...
575
552
  vposts = @root/:views/view_name/:posts
576
553
  copy!(pdraft, vposts) # ??
577
- p :hp5
578
554
  # Step 3..
579
555
  copy(pdraft/"guts.html", @theme/:post)
580
556
  copy(pdraft/"vars.lt3", @theme/:post)
581
- p :hp5
582
557
  # Step 4...
583
558
  # FIXME dependencies?
584
559
  xlate cwd: @theme/:post, src: "generate.lt3", force: true,
585
560
  dst: remote/ahtml, copy: @theme/:post # , debug: true
586
- p :hp7
587
561
  # FIXME dependencies?
588
562
  xlate cwd: @theme/:post, src: "permalink.lt3",
589
563
  dst: remote/:permalink/ahtml # , debug: true
590
- p :hp8
591
564
  copy_widget_html(view_name)
592
- p :hp9
593
565
  rescue => err
594
566
  _tmp_error(err)
595
567
  end
596
568
 
597
569
  def generate_post(draft)
598
570
  log!(enter: __method__, args: [draft], level: 1)
599
- p :gp1
600
571
  views = _get_views(draft)
601
- p :gp2
602
572
  views.each do |view|
603
- p :gp3
604
573
  unless self.view?(view)
605
574
  puts "Warning: '#{view}' is not a view"
606
575
  next
607
576
  end
608
- p :gp4
609
577
  _handle_post(draft, view)
610
- p :gp5
611
578
  end
612
- p :gp6
613
579
  rescue => err
614
580
  _tmp_error(err)
615
581
  end
@@ -1,10 +1,8 @@
1
1
 
2
- require 'pathmagic'
3
-
4
2
  if ! (Object.constants.include?(:RuneBlog) && RuneBlog.constants.include?(:Path))
5
3
 
6
4
  class RuneBlog
7
- VERSION = "0.2.71"
5
+ VERSION = "0.2.76"
8
6
 
9
7
  path = Gem.find_files("runeblog").grep(/runeblog-/).first
10
8
  Path = File.dirname(path)
@@ -14,6 +14,7 @@ class RuneBlog::View
14
14
  @name = name
15
15
  @publisher = RuneBlog::Publishing.new(name)
16
16
  @can_publish = true # FIXME
17
+ @blog.view = self
17
18
  end
18
19
 
19
20
  def dir
@@ -1,4 +1,6 @@
1
+ require 'livetext'
1
2
 
3
+ LIVE = Livetext.new
2
4
  LEXT = ".lt3"
3
5
 
4
6
  def newer?(f1, f2)
@@ -16,26 +18,28 @@ def stale?(src, dst, deps, force = false)
16
18
  return false
17
19
  end
18
20
 
19
- def prerprocess(cwd: Dir.pwd, src:,
21
+ def preprocess(cwd: Dir.pwd, src:,
20
22
  dst: (strip = true; File.basename(src).sub(/.lt3$/,"")),
21
23
  deps: [], copy: nil, debug: false, force: false)
22
24
  src += LEXT unless src.end_with?(LEXT)
23
25
  dst += ".html" unless (dst.end_with?(".html")) # || strip)
24
- indent = " "*12
26
+ sp = " "*12
25
27
  Dir.chdir(cwd) do
26
28
  if debug
27
- puts "#{indent} -- xlate #{src} >#{dst}"
28
- puts "#{indent} in: #{Dir.pwd}"
29
- puts "#{indent} from: #{caller[0]}"
30
- puts "#{indent} copy: #{copy}" if copy
29
+ puts "#{sp} -- preprocess
30
+ puts "#{sp} src: #{src}"
31
+ puts "#{sp} dst: #{dst}"
32
+ puts "#{sp} in: #{Dir.pwd}"
33
+ puts "#{sp} from: #{caller[0]}"
34
+ puts "#{sp} copy: #{copy}" if copy
31
35
  end
32
36
  stale = stale?(src, dst, deps, force)
33
37
  if stale
34
- rc = system("livetext #{src} >#{dst}")
35
- puts "...completed (shell returned #{rc})" if debug
38
+ out = LIVE.xform_file(src)
39
+ File.write(dst, out)
36
40
  system!("cp #{dst} #{copy}") if copy
37
41
  else
38
- puts "#{indent} -- ^ Already up to date!" if debug
42
+ puts "#{sp} -- ^ Already up to date!" if debug
39
43
  return
40
44
  end
41
45
  end
@@ -45,7 +49,7 @@ def xlate(cwd: Dir.pwd, src:,
45
49
  dst: (strip = true; File.basename(src).sub(/.lt3$/,"")),
46
50
  deps: [], copy: nil, debug: false, force: false)
47
51
  src += LEXT unless src.end_with?(LEXT)
48
- dst += ".html" unless (dst.end_with?(".html")) # || strip)
52
+ dst += ".html" unless (dst.end_with?(".html") || strip)
49
53
  indent = " "*12
50
54
  Dir.chdir(cwd) do
51
55
  if debug
@@ -23,7 +23,7 @@ spec = Gem::Specification.new do |s|
23
23
  s.add_runtime_dependency 'livetext', '~> 0.8', '>= 0.8.95'
24
24
  s.add_runtime_dependency 'rubytext', '~> 0.1', '>= 0.1.16'
25
25
 
26
- s.add_development_dependency 'minitest', '>= 5.10.0'
26
+ s.add_development_dependency 'minitest', '~> 5.10', '>= 5.10.0'
27
27
 
28
28
  # Files...
29
29
  main = Find.find("bin").to_a +
@@ -85,66 +85,66 @@ EXCERPT
85
85
  That's a good thing. But their music isn't always the greatest.
86
86
  BODY
87
87
 
88
- # make_post(x, "The new amphitheatre is overrated", <<-EXCERPT, <<-BODY)
89
- # It used to be that all major concerts played the Erwin Center.
90
- # EXCERPT
91
- # .pin around_austin
92
- # Now, depending on what you consider "major," blah blah blah...
93
- # BODY
94
- #
95
- # make_post(x, "The graffiti wall", <<-EXCERPT, <<-BODY)
96
- # RIP, Hope Gallery
97
- # EXCERPT
98
- #
99
- # .dropcap It's been a while since I was there. They say it was torn down
100
- # while I wasn't looking. Never tagged anything there, of course, nor
101
- # anywhere else. Spraypainting public places isn't my thing, but in this
102
- # case I condoned it because it was sort of there for that purpose.
103
- #
104
- # This fake entry is a long one so as to demonstrate both drop-caps
105
- # (above) and an inset quote. Blah blah blah. Lorem ipsum dolor and
106
- # a partridge in a pear tree.
107
- #
108
- # .inset left 20
109
- # Wherever you go, there you are. Last night I saw upon the stair
110
- # a little man who was not there. He wasn't there again today; I
111
- # wish, I wish he'd go away. As far as we know, our computer has
112
- # never had an undetected error.
113
- # |On a clean disk, you can seek forever.
114
- # And never let it be denied that
115
- # pobbles are happier without their toes. And may your snark never
116
- # be a boojum. How do you know you aren't dreaming right now? When
117
- # you see a butterfly, think of Chuang Tzu.
118
- # .end
119
- #
120
- # Contact light. Houston, this is Tranquility Base. The Eagle has
121
- # landed. That's one small step for (a) man, one giant leap for
122
- # mankind.
123
- #
124
- # Here's the PDF of $$link["Ruby for the Old-Time C Programmer"|http://rubyhacker.com/blog2/rubydino.pdf]
125
- #
126
- # Pity this busy monster, manunkind, not. Pity rather... Listen:
127
- # There's a hell of a universe next door; let's go.
128
- # BODY
129
- #
130
- # make_post(x, "The Waller Creek project", <<-EXCERPT, <<-BODY)
131
- # Will it ever be finished?
132
- # EXCERPT
133
- # Blah blah Waller Creek blah blah...
134
- # BODY
135
- #
136
- # make_post(x, "Life on Sabine Street", <<-EXCERPT, <<-BODY)
137
- # It's like Pooh Corner, except not.
138
- # EXCERPT
139
- # This is about Sabine St, blah blah lorem ipsum dolor...
140
- # BODY
141
- #
142
- # make_post(x, "Remember Modest Mouse?", <<-EXCERPT, <<-BODY)
143
- # They date to the 90s or before.
144
- # EXCERPT
145
- # But I first heard of them
146
- # in 2005.
147
- # BODY
88
+ make_post(x, "The new amphitheatre is overrated", <<-EXCERPT, <<-BODY)
89
+ It used to be that all major concerts played the Erwin Center.
90
+ EXCERPT
91
+ .pin around_austin
92
+ Now, depending on what you consider "major," blah blah blah...
93
+ BODY
94
+
95
+ make_post(x, "The graffiti wall", <<-EXCERPT, <<-BODY)
96
+ RIP, Hope Gallery
97
+ EXCERPT
98
+
99
+ .dropcap It's been a while since I was there. They say it was torn down
100
+ while I wasn't looking. Never tagged anything there, of course, nor
101
+ anywhere else. Spraypainting public places isn't my thing, but in this
102
+ case I condoned it because it was sort of there for that purpose.
103
+
104
+ This fake entry is a long one so as to demonstrate both drop-caps
105
+ (above) and an inset quote. Blah blah blah. Lorem ipsum dolor and
106
+ a partridge in a pear tree.
107
+
108
+ .inset left 20
109
+ Wherever you go, there you are. Last night I saw upon the stair
110
+ a little man who was not there. He wasn't there again today; I
111
+ wish, I wish he'd go away. As far as we know, our computer has
112
+ never had an undetected error.
113
+ |On a clean disk, you can seek forever.
114
+ And never let it be denied that
115
+ pobbles are happier without their toes. And may your snark never
116
+ be a boojum. How do you know you aren't dreaming right now? When
117
+ you see a butterfly, think of Chuang Tzu.
118
+ .end
119
+
120
+ Contact light. Houston, this is Tranquility Base. The Eagle has
121
+ landed. That's one small step for (a) man, one giant leap for
122
+ mankind.
123
+
124
+ Here's the PDF of $$link["Ruby for the Old-Time C Programmer"|http://rubyhacker.com/blog2/rubydino.pdf]
125
+
126
+ Pity this busy monster, manunkind, not. Pity rather... Listen:
127
+ There's a hell of a universe next door; let's go.
128
+ BODY
129
+
130
+ make_post(x, "The Waller Creek project", <<-EXCERPT, <<-BODY)
131
+ Will it ever be finished?
132
+ EXCERPT
133
+ Blah blah Waller Creek blah blah...
134
+ BODY
135
+
136
+ make_post(x, "Life on Sabine Street", <<-EXCERPT, <<-BODY)
137
+ It's like Pooh Corner, except not.
138
+ EXCERPT
139
+ This is about Sabine St, blah blah lorem ipsum dolor...
140
+ BODY
141
+
142
+ make_post(x, "Remember Modest Mouse?", <<-EXCERPT, <<-BODY)
143
+ They date to the 90s or before.
144
+ EXCERPT
145
+ But I first heard of them
146
+ in 2005.
147
+ BODY
148
148
 
149
149
  debug
150
150
  debug "** generate_index #{bold("around_austin")}"
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.71
4
+ version: 0.2.76
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-12-04 00:00:00.000000000 Z
11
+ date: 2019-12-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: livetext
@@ -57,6 +57,9 @@ dependencies:
57
57
  - - ">="
58
58
  - !ruby/object:Gem::Version
59
59
  version: 5.10.0
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '5.10'
60
63
  type: :development
61
64
  prerelease: false
62
65
  version_requirements: !ruby/object:Gem::Requirement
@@ -64,6 +67,9 @@ dependencies:
64
67
  - - ">="
65
68
  - !ruby/object:Gem::Version
66
69
  version: 5.10.0
70
+ - - "~>"
71
+ - !ruby/object:Gem::Version
72
+ version: '5.10'
67
73
  description: A blog system based on Ruby and Livetext
68
74
  email: rubyhacker@gmail.com
69
75
  executables:
@@ -77,7 +83,7 @@ files:
77
83
  - bin/blog
78
84
  - bin/mkwidget
79
85
  - data/EDITOR
80
- - data/ROOT.txt
86
+ - data/ROOT
81
87
  - data/VIEW
82
88
  - empty_view/assets/austin-pano.jpg
83
89
  - empty_view/assets/sky2.jpg