runeblog 0.2.23 → 0.2.24

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9cc566d6d2bab06cc0ebae132df00abdca260c85ec765b98e3ad3fe4ec113f1a
4
- data.tar.gz: 1f42d27dae45ad5a49add0c85b075dfb22198b851a897549478d2ce76d7e7ca6
3
+ metadata.gz: 707ca8bf9834f7ed3bf831fa47189203ed2815a069051bd65bde6640a98b9828
4
+ data.tar.gz: 21ad77269fc5fe291cab102a71a252635b8be69b052b655a16820c2515f2e27b
5
5
  SHA512:
6
- metadata.gz: e2133d99e869f9f75d0caaa4f607338dddb4e900dd6a098c3729eb989c9cb398b123cea14ec8aaa572424fdf42acd079b7b8ac845c3bfdad0575c8fe11247a78
7
- data.tar.gz: 6bf7fab834a1b6104c8b36588316810a061c0425ffa6512414a8307bf0f09469f0b6a1c3efca27fc43906f597d3c14c15c3d5979e2f5381960089a01ae164b4c
6
+ metadata.gz: 3e68f4e2d5865b12a6e2e384065e134ed13eb41f1136d4d4fd10f76f26ed695d3764ae7a9478b1b38bd753b44b453b9da2bd2215e02770ef1d5f01811aeb9e40
7
+ data.tar.gz: 8d9cb531a9adbf9607f5d116940817ca6488fc7dfc4eecb18ea98fb945ec2fe129dba1c1111213286d77f367a128d34e318201dfe69cc649756fdc113a26732c
data/empty_view.tgz CHANGED
Binary file
data/lib/liveblog.rb CHANGED
@@ -2,11 +2,8 @@ require 'ostruct'
2
2
  require 'pp'
3
3
  require 'date'
4
4
 
5
- # require 'livetext'
6
5
  require 'runeblog'
7
-
8
6
  require 'pathmagic'
9
-
10
7
  require 'xlate'
11
8
 
12
9
  # errfile = File.new("/tmp/liveblog.out", "w")
@@ -26,20 +23,24 @@ def init_liveblog # FIXME - a lot of this logic sucks
26
23
  @theme = @vdir/:themes/:standard
27
24
  end
28
25
 
29
- # FIXME - stale? and livetext are duplicated from helpers-blog
30
-
31
- def livetext(src, dst=nil, cwd=Dir.pwd)
32
- Dir.chdir(cwd) do
33
- src += ".lt3" unless src.end_with?(".lt3")
34
- if dst
35
- dst += ".html" unless dst.end_with?(".html")
36
- else
37
- dst = src.sub(/.lt3$/, "")
38
- end
39
- return unless stale?(src, dst)
40
- system("livetext #{src} >#{dst}")
41
- end
42
- end
26
+ ## FIXME - livetext is duplicated from helpers-blog
27
+ #
28
+ # def livetext(src, dst=nil, cwd=Dir.pwd)
29
+ # Dir.chdir(cwd) do
30
+ # src += ".lt3" unless src.end_with?(".lt3")
31
+ # if dst
32
+ # dst += ".html" unless dst.end_with?(".html")
33
+ # else
34
+ # dst = src.sub(/.lt3$/, "")
35
+ # end
36
+ # return unless stale?(src, dst)
37
+ # system("livetext #{src} >#{dst}")
38
+ # end
39
+ # end
40
+
41
+ ##################
42
+ # "dot" commands
43
+ ##################
43
44
 
44
45
  def post
45
46
  @meta = OpenStruct.new
@@ -100,98 +101,6 @@ def list!
100
101
  _optional_blank_line
101
102
  end
102
103
 
103
- def _html_body(file)
104
- file.puts "<html>\n <body>"
105
- yield
106
- file.puts " </body>\n</html>"
107
- end
108
-
109
- def _write_card(cardfile, mainfile, pairs, card_title, tag, relative: true)
110
- log!(str: "Creating #{cardfile}.html", pwd: true)
111
- url = mainfile
112
- url = :widgets/tag/mainfile + ".html"
113
- File.open("#{cardfile}.html", "w") do |f|
114
- f.puts <<-EOS
115
- <div class="card mb-3">
116
- <div class="card-body">
117
- <h5 class="card-title">
118
- <a href="javascript: void(0)"
119
- onclick="javascript:open_main('#{url}')"
120
- style="text-decoration: none; color: black">#{card_title}</a>
121
- </h5>
122
- EOS
123
- log!(str: "Writing data pairs to #{cardfile}.html", pwd: true)
124
- local = _local_tag?(tag)
125
- pairs.each do |file, title|
126
- url = file
127
- yesno = "yes"
128
- yesno, title = title.split(/, */) if title =~ /^[yes|no]/ # FIXME please!
129
-
130
- case [yesno, local]
131
- when ["yes", false] # can iframe, remote file
132
- which = 1
133
- url_ref = "href='#{file}'"
134
- when ["yes", true] # can iframe, local file
135
- which = 2
136
- url_ref = _widget_card(file, tag)
137
- when ["no", false] # CAN'T iframe, remote file
138
- which = 3
139
- url_ref = _blank(file)
140
- when ["no", true] # CAN'T iframe, local file (possible?)
141
- which = 4
142
- url_ref = _blank(file)
143
- end
144
-
145
- anchor = %[<a #{url_ref}>#{title}</a>]
146
- wrapper = %[<li class="list-group-item">#{anchor}</li>]
147
- f.puts wrapper
148
- end
149
- f.puts <<-EOS
150
- </div>
151
- </div>
152
- EOS
153
- end
154
- end
155
-
156
- def _local_tag?(tag)
157
- case tag.to_sym
158
- when :pages
159
- true
160
- when :news, :links
161
- false
162
- else
163
- true # Hmmm...
164
- end
165
- end
166
-
167
- def _write_main(mainfile, pairs, card_title, tag)
168
- log!(str: "Creating #{mainfile}.html", pwd: true)
169
- local = _local_tag?(tag)
170
- File.open("#{mainfile}.html", "w") do |f|
171
- _html_body(f) do
172
- f.puts "<h1>#{card_title}</h1>"
173
- pairs.each do |file, title|
174
- yesno = "yes"
175
- yesno, title = title.split(/, */) if title =~ /^[yes|no]/ # FIXME please!
176
- case [yesno, local]
177
- when ["yes", false] # can iframe, remote file
178
- which = 1
179
- url_ref = "href='#{file}'"
180
- when ["yes", true] # can iframe, local file
181
- which = 2
182
- url_ref = _widget_main(file, tag)
183
- when ["no", false] # CAN'T iframe, remote file
184
- which = 3
185
- url_ref = _blank(file)
186
- when ["no", true] # CAN'T iframe, local file (possible?)
187
- which = 4
188
- url_ref = _blank(file)
189
- end
190
- f.puts %[<a style="text-decoration: none; font-size: 24px" #{url_ref}>#{title}</a> <br>]
191
- end
192
- end
193
- end
194
- end
195
104
 
196
105
  def make_main_links
197
106
  log!(enter: __method__)
@@ -235,24 +144,6 @@ def inset
235
144
  _optional_blank_line
236
145
  end
237
146
 
238
- def _errout(*args)
239
- ::STDERR.puts *args
240
- end
241
-
242
- def _passthru(line)
243
- return if line.nil?
244
- line = _format(line)
245
- _out line + "\n"
246
- _out "<p>" if line.empty? && ! @_nopara
247
- end
248
-
249
- def _passthru_noline(line)
250
- return if line.nil?
251
- line = _format(line)
252
- _out line
253
- _out "<p>" if line.empty? && ! @_nopara
254
- end
255
-
256
147
  def title
257
148
  raise "'post' was not called" unless @meta
258
149
  title = @_data.chomp
@@ -304,15 +195,6 @@ def pin
304
195
  _optional_blank_line
305
196
  end
306
197
 
307
- def _write_metadata
308
- File.write("teaser.txt", @meta.teaser)
309
- fields = [:num, :title, :date, :pubdate, :views, :tags]
310
- fname2 = "metadata.txt"
311
- f2 = File.open(fname2, "w") do |f2|
312
- fields.each {|fld| f2.puts "#{fld}: #{@meta.send(fld)}" }
313
- end
314
- end
315
-
316
198
  def write_post
317
199
  raise "'post' was not called" unless @meta
318
200
  @meta.views = @meta.views.join(" ") if @meta.views.is_a? Array
@@ -332,6 +214,7 @@ def teaser
332
214
  end
333
215
 
334
216
  def finalize
217
+ # FIXME simplify this!
335
218
  unless @meta
336
219
  puts @live.body
337
220
  return
@@ -347,55 +230,6 @@ def finalize
347
230
  @meta
348
231
  end
349
232
 
350
- $Dot = self # Clunky! for dot commands called from Functions class
351
-
352
- # Find a better way to do this?
353
-
354
- class Livetext::Functions
355
-
356
- def br(n="1")
357
- # Thought: Maybe make a way for functions to "simply" call the
358
- # dot command of the same name?? Is this trivial??
359
- n = n.empty? ? 1 : n.to_i
360
- "<br>"*n
361
- end
362
-
363
- def h1(param); "<h1>#{param}</h1>"; end
364
- def h2(param); "<h2>#{param}</h2>"; end
365
- def h3(param); "<h3>#{param}</h3>"; end
366
- def h4(param); "<h4>#{param}</h4>"; end
367
- def h5(param); "<h5>#{param}</h5>"; end
368
- def h6(param); "<h6>#{param}</h6>"; end
369
-
370
- def hr(param=nil)
371
- $Dot.hr
372
- end
373
-
374
- def image(param)
375
- "<img src='#{param}'></img>"
376
- end
377
-
378
- end
379
-
380
- ###### experimental...
381
-
382
- class Livetext::Functions
383
- def _var(name)
384
- ::Livetext::Vars[name] || "[:#{name} is undefined]"
385
- end
386
-
387
- def link
388
- file, cdata = self.class.param.split("||", 2)
389
- %[<link type="application/atom+xml" rel="alternate" href="#{_var(:host)}#{file}" title="#{_var(:title)}">]
390
- end
391
- end
392
-
393
- ###
394
-
395
- def _var(name) # FIXME scope issue!
396
- ::Livetext::Vars[name] || "[:#{name} is undefined]"
397
- end
398
-
399
233
  def head # Does NOT output <head> tags
400
234
  args = _args
401
235
  args.each do |inc|
@@ -496,10 +330,10 @@ def sidebar
496
330
  children = Dir[wtag/"*.lt3"] - [wtag/tag+".lt3"]
497
331
  children.each do |child|
498
332
  dest = child.sub(/.lt3$/, ".html")
499
- xlate src: child, dst: dest, debug: true
333
+ xlate src: child, dst: dest # , debug: true
500
334
  end
501
335
  end
502
- xlate cwd: wtag, src: tag, dst: tcard, debug: true
336
+ xlate cwd: wtag, src: tag, dst: tcard # , debug: true
503
337
  _include_file wtag/tcard
504
338
  end
505
339
  _out %[</div>]
@@ -521,41 +355,6 @@ def script
521
355
  _out %[<script src="#{url}" integrity="#{integ}" crossorigin="#{cross}"></script>]
522
356
  end
523
357
 
524
- def _post_lookup(postid) # side-effect
525
- # .. = templates, ../.. = views/thisview
526
- slug = title = date = teaser_text = nil
527
-
528
- dir_posts = @vdir/:posts
529
- posts = Dir.entries(dir_posts).grep(/^\d\d\d\d/).map {|x| dir_posts/x }
530
- posts.select! {|x| File.directory?(x) }
531
-
532
- post = posts.select {|x| File.basename(x).to_i == postid }
533
- raise "Error: More than one post #{postid}" if post.size > 1
534
- postdir = post.first
535
- vp = RuneBlog::ViewPost.new(@blog.view, postdir)
536
- vp
537
- end
538
-
539
- def _interpolate(str, context) # FIXME move this later
540
- wrapped = "%[" + str.dup + "]" # could fail...
541
- eval(wrapped, context)
542
- end
543
-
544
- def _card_generic(card_title:, middle:, extra: "")
545
- front = <<-HTML
546
- <div class="card #{extra} mb-3">
547
- <div class="card-body">
548
- <h5 class="card-title">#{card_title}</h5>
549
- HTML
550
-
551
- tail = <<-HTML
552
- </div>
553
- </div>
554
- HTML
555
- text = front + middle + tail
556
- _out text + "\n "
557
- end
558
-
559
358
  def card_iframe
560
359
  title, lines = _data, _body
561
360
  lines.map!(&:chomp)
@@ -571,23 +370,51 @@ def card_iframe
571
370
  _card_generic(card_title: title, middle: middle, extra: "bg-dark text-white")
572
371
  end
573
372
 
574
- def _main(url)
575
- %[href="javascript: void(0)" onclick="javascript:open_main('#{url}')"]
576
- end
373
+ $Dot = self # Clunky! for dot commands called from Functions class
577
374
 
578
- def _blank(url)
579
- %[href='#{url}' target='blank']
580
- end
375
+ # Find a better way to do this?
376
+
377
+ class Livetext::Functions
378
+
379
+ def br(n="1")
380
+ # Thought: Maybe make a way for functions to "simply" call the
381
+ # dot command of the same name?? Is this trivial??
382
+ n = n.empty? ? 1 : n.to_i
383
+ "<br>"*n
384
+ end
385
+
386
+ def h1(param); "<h1>#{param}</h1>"; end
387
+ def h2(param); "<h2>#{param}</h2>"; end
388
+ def h3(param); "<h3>#{param}</h3>"; end
389
+ def h4(param); "<h4>#{param}</h4>"; end
390
+ def h5(param); "<h5>#{param}</h5>"; end
391
+ def h6(param); "<h6>#{param}</h6>"; end
392
+
393
+ def hr(param=nil)
394
+ $Dot.hr
395
+ end
396
+
397
+ def image(param)
398
+ "<img src='#{param}'></img>"
399
+ end
581
400
 
582
- def _widget_main(url, tag)
583
- %[href="#{url}"]
584
401
  end
585
402
 
586
- def _widget_card(url, tag)
587
- url2 = :widgets/tag/url
588
- %[href="#{url2}"]
403
+ ###### experimental...
404
+
405
+ class Livetext::Functions
406
+ def _var(name)
407
+ ::Livetext::Vars[name] || "[:#{name} is undefined]"
408
+ end
409
+
410
+ def link
411
+ file, cdata = self.class.param.split("||", 2)
412
+ %[<link type="application/atom+xml" rel="alternate" href="#{_var(:host)}#{file}" title="#{_var(:title)}">]
413
+ end
589
414
  end
590
415
 
416
+ ###
417
+
591
418
  def card1
592
419
  title, lines = _data, _body
593
420
  lines.map!(&:chomp)
@@ -633,7 +460,11 @@ def tag_cloud
633
460
  open = <<-HTML
634
461
  <div class="card mb-3">
635
462
  <div class="card-body">
636
- <h5 class="card-title">#{title}</h5>
463
+ <h5 class="card-title">
464
+ <button type="button" class="btn btn-primary" data-toggle="collapse" data-target="#tag-cloud">+</button>
465
+ #{title}
466
+ </h5>
467
+ <div class="collapse" id="tag-cloud">
637
468
  HTML
638
469
  _out open
639
470
  _body do |line|
@@ -642,7 +473,7 @@ def tag_cloud
642
473
  main = _main(url)
643
474
  _out %[<a #{main} class="#{classname}">#{cdata}</a>]
644
475
  end
645
- close = %[ </div>\n </div>]
476
+ close = %[ </div>\n </div>\n </div>]
646
477
  _out close
647
478
  end
648
479
 
@@ -690,3 +521,178 @@ def navbar
690
521
  _out close
691
522
  end
692
523
 
524
+ ##################
525
+ # helper methods
526
+ ##################
527
+
528
+ def _html_body(file)
529
+ file.puts "<html>\n <body>"
530
+ yield
531
+ file.puts " </body>\n</html>"
532
+ end
533
+
534
+ def _write_card(cardfile, mainfile, pairs, card_title, tag, relative: true)
535
+ log!(str: "Creating #{cardfile}.html", pwd: true)
536
+ url = mainfile
537
+ url = :widgets/tag/mainfile + ".html"
538
+ File.open("#{cardfile}.html", "w") do |f|
539
+ f.puts <<-EOS
540
+ <div class="card mb-3">
541
+ <div class="card-body">
542
+ <h5 class="card-title">
543
+ <button type="button" class="btn btn-primary" data-toggle="collapse" data-target="##{tag}">+</button>
544
+ <a href="javascript: void(0)"
545
+ onclick="javascript:open_main('#{url}')"
546
+ style="text-decoration: none; color: black"> #{card_title}</a>
547
+ </h5>
548
+ <div class="collapse" id="#{tag}">
549
+ EOS
550
+ log!(str: "Writing data pairs to #{cardfile}.html", pwd: true)
551
+ local = _local_tag?(tag)
552
+ pairs.each do |file, title|
553
+ url = file
554
+ yesno = "yes"
555
+ yesno, title = title.split(/, */) if title =~ /^[yes|no]/ # FIXME please!
556
+
557
+ case [yesno, local]
558
+ when ["yes", false] # can iframe, remote file
559
+ url_ref = "href='#{file}'"
560
+ when ["yes", true] # can iframe, local file
561
+ url_ref = _widget_card(file, tag)
562
+ when ["no", false] # CAN'T iframe, remote file
563
+ url_ref = _blank(file)
564
+ when ["no", true] # CAN'T iframe, local file (possible?)
565
+ url_ref = _blank(file)
566
+ end
567
+
568
+ anchor = %[<a #{url_ref}>#{title}</a>]
569
+ wrapper = %[<li class="list-group-item">#{anchor}</li>]
570
+ f.puts wrapper
571
+ end
572
+ f.puts <<-EOS
573
+ </div>
574
+ </div>
575
+ </div>
576
+ EOS
577
+ end
578
+ end
579
+
580
+ def _local_tag?(tag)
581
+ case tag.to_sym
582
+ when :pages
583
+ true
584
+ when :news, :links
585
+ false
586
+ else
587
+ true # Hmmm...
588
+ end
589
+ end
590
+
591
+ def _write_main(mainfile, pairs, card_title, tag)
592
+ log!(str: "Creating #{mainfile}.html", pwd: true)
593
+ local = _local_tag?(tag)
594
+ File.open("#{mainfile}.html", "w") do |f|
595
+ _html_body(f) do
596
+ f.puts "<h1>#{card_title}</h1>"
597
+ pairs.each do |file, title|
598
+ yesno = "yes"
599
+ yesno, title = title.split(/, */) if title =~ /^[yes|no]/ # FIXME please!
600
+ case [yesno, local]
601
+ when ["yes", false] # can iframe, remote file
602
+ url_ref = "href='#{file}'"
603
+ when ["yes", true] # can iframe, local file
604
+ url_ref = _widget_main(file, tag)
605
+ when ["no", false] # CAN'T iframe, remote file
606
+ url_ref = _blank(file)
607
+ when ["no", true] # CAN'T iframe, local file (possible?)
608
+ url_ref = _blank(file)
609
+ end
610
+ f.puts %[<a style="text-decoration: none; font-size: 24px" #{url_ref}>#{title}</a> <br>]
611
+ end
612
+ end
613
+ end
614
+ end
615
+
616
+ def _errout(*args)
617
+ ::STDERR.puts *args
618
+ end
619
+
620
+ def _passthru(line)
621
+ return if line.nil?
622
+ line = _format(line)
623
+ _out line + "\n"
624
+ _out "<p>" if line.empty? && ! @_nopara
625
+ end
626
+
627
+ def _passthru_noline(line)
628
+ return if line.nil?
629
+ line = _format(line)
630
+ _out line
631
+ _out "<p>" if line.empty? && ! @_nopara
632
+ end
633
+
634
+ def _write_metadata
635
+ File.write("teaser.txt", @meta.teaser)
636
+ fields = [:num, :title, :date, :pubdate, :views, :tags]
637
+ fname2 = "metadata.txt"
638
+ f2 = File.open(fname2, "w") do |f2|
639
+ fields.each {|fld| f2.puts "#{fld}: #{@meta.send(fld)}" }
640
+ end
641
+ end
642
+
643
+ def _post_lookup(postid) # side-effect
644
+ # .. = templates, ../.. = views/thisview
645
+ slug = title = date = teaser_text = nil
646
+
647
+ dir_posts = @vdir/:posts
648
+ posts = Dir.entries(dir_posts).grep(/^\d\d\d\d/).map {|x| dir_posts/x }
649
+ posts.select! {|x| File.directory?(x) }
650
+
651
+ post = posts.select {|x| File.basename(x).to_i == postid }
652
+ raise "Error: More than one post #{postid}" if post.size > 1
653
+ postdir = post.first
654
+ vp = RuneBlog::ViewPost.new(@blog.view, postdir)
655
+ vp
656
+ end
657
+
658
+ def _interpolate(str, context) # FIXME move this later
659
+ wrapped = "%[" + str.dup + "]" # could fail...
660
+ eval(wrapped, context)
661
+ end
662
+
663
+ def _card_generic(card_title:, middle:, extra: "")
664
+ front = <<-HTML
665
+ <div class="card #{extra} mb-3">
666
+ <div class="card-body">
667
+ <h5 class="card-title">#{card_title}</h5>
668
+ HTML
669
+
670
+ tail = <<-HTML
671
+ </div>
672
+ </div>
673
+ HTML
674
+ text = front + middle + tail
675
+ _out text + "\n "
676
+ end
677
+
678
+ def _var(name) # FIXME scope issue!
679
+ ::Livetext::Vars[name] || "[:#{name} is undefined]"
680
+ end
681
+
682
+ def _main(url)
683
+ %[href="javascript: void(0)" onclick="javascript:open_main('#{url}')"]
684
+ end
685
+
686
+ def _blank(url)
687
+ %[href='#{url}' target='blank']
688
+ end
689
+
690
+ def _widget_main(url, tag)
691
+ %[href="#{url}"]
692
+ end
693
+
694
+ def _widget_card(url, tag)
695
+ url2 = :widgets/tag/url
696
+ %[href="#{url2}"]
697
+ end
698
+
data/lib/runeblog.rb CHANGED
@@ -104,11 +104,37 @@ class RuneBlog
104
104
  def _deploy_local(dir)
105
105
  log!(enter: __method__, args: [dir])
106
106
  Dir.chdir(dir) do
107
- views = File.readlines("metadata.txt").grep(/^.views /).first[7..-1].split
107
+ # views = File.readlines("metadata.txt").grep(/^views: /).first[7..-1].split
108
+ views = _retrieve_metadata(:views)
109
+ STDERR.puts "---- deploy: views = #{views.inspect}"
108
110
  views.each {|v| system("cp *html #@root/views/#{v}/remote") }
109
111
  end
110
112
  end
111
113
 
114
+ def _retrieve_metadata(key)
115
+ key = key.to_s
116
+ STDERR.puts "--- retrieve: key = #{key.inspect}"
117
+ lines = File.readlines("metadata.txt")
118
+ lines = lines.grep(/^#{key}: /)
119
+ case lines.size
120
+ when 0
121
+ result = nil # not found
122
+ when 1
123
+ front = "#{key}: "
124
+ n = front.size + 1
125
+ str = lines.first.chomp[n..-1]
126
+ case key
127
+ when "views", "tags" # plurals
128
+ result = str.split
129
+ else
130
+ result = str
131
+ end
132
+ else
133
+ raise "Too many #{key} instances in metadata.txt!"
134
+ end
135
+ return result
136
+ end
137
+
112
138
  def process_post(sourcefile)
113
139
  log!(enter: __method__, args: [dir])
114
140
  nslug = sourcefile.sub(/.lt3/, "")
@@ -417,10 +443,9 @@ class RuneBlog
417
443
 
418
444
  def _post_metadata(draft, pdraft)
419
445
  log!(enter: __method__, args: [draft, pdraft])
420
- title_line = File.readlines(draft).grep(/^.title /).first
421
- title = title_line.split(" ", 2)[1]
422
446
  Dir.chdir(pdraft) do
423
447
  excerpt = File.read("teaser.txt")
448
+ title = _retrieve_metadata(:title)
424
449
  vars = %[.set title="#{title.chomp}"\n] +
425
450
  %[.set teaser="#{excerpt.chomp}"]
426
451
  File.open(pdraft/"vars.lt3", "w") {|f| f.puts vars }
@@ -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.23"
5
+ VERSION = "0.2.24"
6
6
 
7
7
  path = Gem.find_files("runeblog").grep(/runeblog-/).first
8
8
  Path = File.dirname(path)
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.23
4
+ version: 0.2.24
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-06 00:00:00.000000000 Z
11
+ date: 2019-10-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: livetext