runeblog 0.3.19 → 0.3.24

Sign up to get free protection for your applications and to get access to all the features.
@@ -49,6 +49,7 @@ class RuneBlog
49
49
  ConfigFile = "config"
50
50
  Themes = RuneBlog::Path/"../themes"
51
51
 
52
+ include Helpers
52
53
  include ErrorChecks
53
54
 
54
55
  class << self
@@ -60,10 +61,10 @@ class RuneBlog
60
61
  attr_reader :views, :sequence
61
62
  attr_accessor :root, :editor, :features
62
63
  attr_accessor :view # overridden
64
+ attr_accessor :post
63
65
 
64
66
  attr_accessor :post_views, :post_tags, :dirty_views
65
67
 
66
- include Helpers
67
68
 
68
69
  class Default
69
70
 
@@ -96,7 +97,6 @@ class RuneBlog
96
97
  def self.create_new_blog_repo(root_rel = ".blogs")
97
98
  log!(enter: __method__, args: [root_rel])
98
99
  check_nonempty_string(root_rel)
99
- self.blog = self # Weird. Like a singleton - dumbass circular dependency?
100
100
  repo_root = Dir.pwd/root_rel
101
101
  check_error(BlogRepoAlreadyExists) { Dir.exist?(repo_root) }
102
102
 
@@ -112,16 +112,17 @@ class RuneBlog
112
112
  end
113
113
  # copy_data(:extra, repo_root/:config)
114
114
  write_repo_config(root: repo_root)
115
- @blog = self.new
116
- @blog
115
+ # Weird. Like a singleton - dumbass circular dependency?
116
+ self.blog = blog = self.new
117
+ blog
117
118
  rescue => err
118
119
  puts "Can't create blog repo: '#{repo_root}' - #{err}"
119
120
  puts err.backtrace.join("\n")
120
121
  end
121
122
 
122
123
  def self.open(root_rel = ".blogs")
124
+ raise "Not impl"
123
125
  log!(enter: __method__, args: [root_rel])
124
- self.blog = self # Weird. Like a singleton - dumbass circular dependency?
125
126
  blog = self.new(root_rel)
126
127
  rescue => err
127
128
  _tmp_error(err)
@@ -129,10 +130,11 @@ class RuneBlog
129
130
 
130
131
  def initialize(root_rel = ".blogs") # always assumes existing blog
131
132
  log!(enter: "initialize", args: [root_rel])
132
- self.class.blog = self # Weird. Like a singleton - dumbass circular dependency?
133
+ # Weird. Like a singleton - dumbass circular dependency?
134
+ self.class.blog = self
133
135
 
134
136
  @root = Dir.pwd/root_rel
135
- write_repo_config(root: @root) # ?? FIXME
137
+ # write_repo_config(root: @root) # ?? FIXME
136
138
  get_repo_config
137
139
  read_features # top level
138
140
  @views = retrieve_views
@@ -145,6 +147,11 @@ class RuneBlog
145
147
  @sequence = get_sequence
146
148
  @post_views = []
147
149
  @post_tags = []
150
+ rescue => err
151
+ puts "Error - see stdout.txt"
152
+ STDERR.puts err.inspect
153
+ STDERR.puts err&.backtrace
154
+ sleep 3
148
155
  end
149
156
 
150
157
  def complete_file(name, vars, hash)
@@ -216,6 +223,7 @@ class RuneBlog
216
223
  meta = read_pairs!("metadata.txt")
217
224
  meta.views = meta.views.split
218
225
  meta.tags = meta.tags.split
226
+ RuneBlog.blog.post = meta
219
227
  meta
220
228
  end
221
229
 
@@ -239,7 +247,7 @@ class RuneBlog
239
247
  create_dirs(dir)
240
248
  # FIXME dependencies?
241
249
  preprocess cwd: dir, src: @root/:drafts/sourcefile, dst: @root/:posts/sourcefile.sub(/.lt3/, ".html"), # ZZZ
242
- mix: "liveblog" # , debug: true
250
+ mix: "liveblog", vars: @view.globals # , debug: true
243
251
  _deploy_local(dir)
244
252
  rescue => err
245
253
  _tmp_error(err)
@@ -262,13 +270,13 @@ class RuneBlog
262
270
  views.any? {|x| x.name == name }
263
271
  end
264
272
 
265
- def view(name = nil)
266
- log!(enter: __method__, args: [name], level: 3)
267
- return @view if name.nil?
268
-
269
- check_nonempty_string(name)
270
- return str2view(name)
271
- end
273
+ # def view(name = nil)
274
+ # log!(enter: __method__, args: [name], level: 3)
275
+ # return @view if name.nil?
276
+ #
277
+ # check_nonempty_string(name)
278
+ # return str2view(name)
279
+ # end
272
280
 
273
281
  def str2view(str)
274
282
  log!(enter: __method__, args: [str], level: 3)
@@ -285,25 +293,28 @@ class RuneBlog
285
293
 
286
294
  def view=(arg)
287
295
  log!(enter: __method__, args: [arg], level: 2)
296
+ if arg == "[no view]"
297
+ @view = nil
298
+ return
299
+ end
300
+ # STDERR.puts "view= #{arg.inspect}"
301
+
288
302
  case arg
289
- when "[no view]"
290
- # puts "Warning: No current view set"
291
- @view = nil
292
303
  when RuneBlog::View
293
304
  @view = arg
294
- read_features(@view)
295
- @view.get_globals
296
- _set_publisher
305
+ @view.get_globals(true)
297
306
  when String
298
307
  new_view = str2view(arg)
308
+ # STDERR.puts "view= new view #{new_view.inspect}"
299
309
  check_error(NoSuchView, arg) { new_view.nil? }
300
310
  @view = new_view
301
- read_features(@view)
302
- @view.get_globals
303
- _set_publisher
304
311
  else
305
312
  raise CantAssignView(arg.class.to_s)
306
313
  end
314
+ read_features(@view)
315
+ @view.get_globals(true)
316
+ _set_publisher
317
+ File.write(@root/"data/VIEW", @view.to_s)
307
318
  rescue => err
308
319
  _tmp_error(err)
309
320
  end
@@ -324,7 +335,9 @@ class RuneBlog
324
335
  log!(enter: __method__, args: [v], level: 3)
325
336
  return @view if v.nil?
326
337
  check_nonempty_string(v)
327
- return @root/:views/v
338
+ dir = @root/:views/v
339
+ puts "Dir = #{dir}" # ; sleep 5
340
+ return dir
328
341
  end
329
342
 
330
343
  def self.exist?
@@ -372,8 +385,9 @@ class RuneBlog
372
385
  make_empty_view_tree(view_name)
373
386
  add_view(view_name)
374
387
  mark_last_published("Initial creation")
375
- system("cp #@root/data/global.lt3 #@root/views/#{view_name}/themes/standard/global.lt3")
376
- @view.get_globals
388
+ # system("cp #@root/data/global.lt3 #@root/views/#{view_name}/themes/standard/global.lt3")
389
+ system("cp #@root/data/global.lt3 #@root/views/#{view_name}/data/global.lt3")
390
+ @view.get_globals(true)
377
391
  rescue => err
378
392
  _tmp_error(err)
379
393
  end
@@ -405,7 +419,7 @@ class RuneBlog
405
419
  posts.select! {|x| File.directory?(x) }
406
420
 
407
421
  posts = posts.select {|x| File.basename(x).to_i == postid }
408
- postdir = exactly_one(posts)
422
+ postdir = exactly_one(posts, posts.join("/"))
409
423
  vp = RuneBlog::ViewPost.new(self.view, postdir)
410
424
  vp
411
425
  rescue => err
@@ -421,7 +435,7 @@ class RuneBlog
421
435
  depend = [post_entry_name]
422
436
  html = "/tmp/post_entry.html"
423
437
  preprocess src: post_entry_name, dst: html,
424
- call: ".nopara" # , deps: depend # , debug: true
438
+ call: ".nopara", vars: @view.globals # , deps: depend # , debug: true
425
439
  @_post_entry = File.read(html)
426
440
  vp = post_lookup(id)
427
441
  nslug, aslug, title, date, teaser_text =
@@ -530,7 +544,8 @@ class RuneBlog
530
544
  # puts [draft, meta.views].inspect
531
545
  list << draft if meta.views.include?(self.view.to_s)
532
546
  end
533
- list.sort
547
+ # list.sort
548
+ curr_drafts
534
549
  end
535
550
 
536
551
  def all_drafts
@@ -562,15 +577,16 @@ class RuneBlog
562
577
  log!(enter: __method__, args: [view])
563
578
  vdir = @root/:views/view
564
579
  @theme = @root/:views/view/:themes/:standard
565
- depend = [vdir/"remote/etc/blog.css.lt3", @theme/"global.lt3",
580
+ @data = @root/:views/view/:data
581
+ depend = [vdir/"remote/etc/blog.css.lt3", @data/"global.lt3",
566
582
  @theme/"blog/head.lt3",
567
583
  # @theme/"navbar/navbar.lt3",
568
584
  @theme/"blog/index.lt3"] # FIXME what about assets?
569
585
  preprocess cwd: vdir/"themes/standard/etc", src: "blog.css.lt3",
570
- copy: vdir/"remote/etc/", call: [".nopara"], strip: true
586
+ copy: vdir/"remote/etc/", call: [".nopara"], strip: true , vars: @view.globals
571
587
  preprocess cwd: vdir/"themes/standard", deps: depend, force: true,
572
588
  src: "blog/generate.lt3", dst: vdir/:remote/"index.html",
573
- call: ".nopara"
589
+ call: ".nopara" , vars: @view.globals
574
590
  copy!("#{vdir}/themes/standard/banner/*", "#{vdir}/remote/banner/") # includes navbar/
575
591
  copy("#{vdir}/assets/*", "#{vdir}/remote/assets/")
576
592
  # rebuild widgets?
@@ -584,7 +600,7 @@ class RuneBlog
584
600
  def _get_views(draft)
585
601
  log!(enter: __method__, args: [draft], level: 2)
586
602
  # FIXME dumb code
587
- view_line = exactly_one(File.readlines(draft).grep(/^.views /))
603
+ view_line = exactly_one(File.readlines(draft).grep(/^.views /), ".view line")
588
604
  views = view_line[7..-1].split
589
605
  views.uniq
590
606
  rescue => err
@@ -622,10 +638,14 @@ class RuneBlog
622
638
  title = meta.title
623
639
  tags = meta.tags
624
640
  # FIXME simplify
625
- addvar(hash, "post.num" => pnum, "post.aslug" => aslug,
626
- "post.date" => date, title: title.chomp,
627
- "post.tags" => tags.join(" "), teaser: excerpt.chomp,
628
- longdate: longdate)
641
+ addvar(hash, "post.num" => pnum,
642
+ "post.aslug" => aslug,
643
+ "post.date" => date,
644
+ title: title.chomp,
645
+ teaser: excerpt.chomp,
646
+ longdate: longdate,
647
+ "post.nslug" => pnum + "-" + aslug,
648
+ "post.tags" => tags.join(" "))
629
649
  end
630
650
  hash
631
651
  rescue => err
@@ -634,19 +654,25 @@ class RuneBlog
634
654
 
635
655
  def copy_widget_html(view)
636
656
  log!(enter: __method__, level: 2)
657
+ log! str: "=== cwh cp 1"
637
658
  vdir = @root/:views/view
638
659
  remote = vdir/:remote
639
660
  wdir = vdir/:widgets
640
661
  widgets = Dir[wdir/"*"].select {|w| File.directory?(w) }
662
+ log! str: "=== cwh cp 2"
641
663
  widgets.each do |w|
642
664
  dir = File.basename(w)
643
665
  rem = w.sub(/widgets/, "remote/widgets")
666
+ log! str: "=== cwh cp 3 w = #{w.inspect}"
644
667
  create_dirs(rem)
645
668
  files = Dir[w/"*"]
646
669
  # files = files.select {|x| x =~ /(html|css)$/ }
647
670
  tag = File.basename(w)
648
- files.each {|file| system!("cp #{file} #{rem}", show: (tag == "zzz")) }
671
+ log! str: "=== cwh cp 4 tag = #{tag.inspect}"
672
+ files.each {|file| system!("cp #{file} #{rem}", show: true) }
673
+ log! str: "=== cwh cp 5 tag was #{tag.inspect}"
649
674
  end
675
+ log! str: "=== cwh cp 6"
650
676
  rescue => err
651
677
  _tmp_error(err)
652
678
  end
@@ -662,22 +688,34 @@ class RuneBlog
662
688
  pdraft = @root/:posts/nslug
663
689
  remote = @root/:views/view_name/:remote
664
690
  @theme = @root/:views/view_name/:themes/:standard
691
+ pmeta = @root/:views/view_name/:posts/nslug
692
+
665
693
 
666
694
  create_dirs(pdraft) # Step 1...
695
+ @view.globals ||= {}
696
+ args = {cwd: pdraft, src: draft, debug: true, dst: "guts.html",
697
+ mix: "liveblog", vars: @view.globals}
667
698
  preprocess cwd: pdraft, src: draft, # FIXME dependencies?
668
- dst: "guts.html", mix: "liveblog"
699
+ debug: true,
700
+ dst: "guts.html", mix: "liveblog", vars: @view.globals
669
701
  hash = _post_metadata(draft, pdraft)
702
+ hash[:CurrentPost] = pmeta
670
703
  vposts = @root/:views/view_name/:posts # Step 2...
671
704
  copy!(pdraft, vposts) # ??
672
- copy(pdraft/"guts.html", @theme/:post) # Step 3...
673
- preprocess cwd: @theme/:post, src: "generate.lt3", # Step 4...
674
- force: true, vars: hash,
675
- dst: remote/ahtml, call: ".nopara"
705
+ copy(pdraft/"guts.html", vposts/nslug) # Step 3...
706
+ # Step 4...
707
+ preprocess cwd: pmeta, src: "../../themes/standard/post/generate.lt3",
708
+ force: true, vars: hash, debug: true,
709
+ dst: remote/ahtml, call: ".nopara"
676
710
  FileUtils.rm_f(remote/"published")
677
711
  timelog("Generated", remote/"history")
678
712
  copy_widget_html(view_name)
679
713
  rescue => err
680
- _tmp_error(err)
714
+ puts "Error - see stdout.txt"
715
+ STDERR.puts err.inspect
716
+ STDERR.puts err&.backtrace
717
+ # _tmp_error(err)
718
+ # puts err.backtrace.join("\n")
681
719
  end
682
720
 
683
721
  def _check_view?(view)
@@ -689,7 +727,9 @@ class RuneBlog
689
727
  def generate_post(draft, force = false)
690
728
  log!(enter: __method__, args: [draft], level: 1)
691
729
  views = _get_views(draft)
692
- views.each {|view| _handle_post(draft, view) }
730
+ views.each do |view|
731
+ _handle_post(draft, view)
732
+ end
693
733
  # For current view:
694
734
  slug = File.basename(draft).sub(/.lt3$/, "")
695
735
  postdir = self.view.dir/"remote/post/"/slug
@@ -1,7 +1,7 @@
1
1
  if !defined?(RuneBlog::Path)
2
2
 
3
3
  class RuneBlog
4
- VERSION = "0.3.19"
4
+ VERSION = "0.3.24"
5
5
 
6
6
  path = Gem.find_files("runeblog").grep(/runeblog-/).first
7
7
  Path = File.dirname(path)
@@ -13,17 +13,36 @@ class RuneBlog::View
13
13
  @name = name
14
14
  @publisher = RuneBlog::Publishing.new(name)
15
15
  @can_publish = true # FIXME
16
- @blog.view = self
16
+ # @blog.view = self # NOOOO??
17
17
  get_globals
18
18
  end
19
19
 
20
- def get_globals
21
- gfile = @blog.root/"views/#{name}/themes/standard/global.lt3"
20
+ def dump_globals_stderr
21
+ log!(enter: __method__, args: [list], level: 2)
22
+ list2 = list.select(&block)
23
+ STDERR.puts "-- globals = "
24
+ log!(str: "-- globals = ")
25
+ @globals.each_pair do |k, v|
26
+ msg = sprintf " %-10s %s\n", k, v if k.is_a? Symbol
27
+ STDERR.puts msg
28
+ log!(str: msg)
29
+ end
30
+ STDERR.puts
31
+ log!(str: "")
32
+ end
33
+
34
+ def get_globals(force = false)
35
+ return if @globals && !force
36
+ # gfile = @blog.root/"views/#@name/themes/standard/global.lt3"
37
+ gfile = @blog.root/"views/#@name/data/global.lt3"
22
38
  return unless File.exist?(gfile) # Hackish!! how is View.new called from create_view??
23
39
 
24
40
  live = Livetext.customize(call: ".nopara")
25
41
  live.xform_file(gfile)
42
+ live._setvar("ViewDir", @blog.root/:views/@name)
43
+ live._setvar("View", @name)
26
44
  @globals = live.vars
45
+ # dump_globals_stderr
27
46
  end
28
47
 
29
48
  def dir
@@ -8,6 +8,7 @@ require "runeblog_version"
8
8
  Gem.post_install do |spec|
9
9
  Dir.chdir(RuneBlog::Path)
10
10
  system("livetext -i liveblog.rb")
11
+ system("livetext -i code_rouge.rb")
11
12
  end
12
13
 
13
14
  spec = Gem::Specification.new do |s|
@@ -20,8 +21,9 @@ spec = Gem::Specification.new do |s|
20
21
  s.authors = ["Hal Fulton"]
21
22
  s.email = 'rubyhacker@gmail.com'
22
23
  s.executables << "blog"
23
- s.add_runtime_dependency 'livetext', '~> 0.9', '>= 0.9.04'
24
- s.add_runtime_dependency 'rubytext', '~> 0.1', '>= 0.1.22'
24
+ s.add_runtime_dependency 'livetext', '~> 0.9', '>= 0.9.09'
25
+ s.add_runtime_dependency 'rubytext', '~> 0.1', '>= 0.1.23'
26
+ s.add_runtime_dependency 'rouge', '~> 3.25', '>= 3.25.0'
25
27
 
26
28
  s.add_development_dependency 'minitest', '~> 5.10', '>= 5.10.0'
27
29
 
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.3.19
4
+ version: 0.3.24
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hal Fulton
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-02-14 00:00:00.000000000 Z
11
+ date: 2020-12-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: livetext
@@ -19,7 +19,7 @@ dependencies:
19
19
  version: '0.9'
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: 0.9.04
22
+ version: 0.9.09
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,7 +29,7 @@ dependencies:
29
29
  version: '0.9'
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: 0.9.04
32
+ version: 0.9.09
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: rubytext
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -39,7 +39,7 @@ dependencies:
39
39
  version: '0.1'
40
40
  - - ">="
41
41
  - !ruby/object:Gem::Version
42
- version: 0.1.22
42
+ version: 0.1.23
43
43
  type: :runtime
44
44
  prerelease: false
45
45
  version_requirements: !ruby/object:Gem::Requirement
@@ -49,7 +49,27 @@ dependencies:
49
49
  version: '0.1'
50
50
  - - ">="
51
51
  - !ruby/object:Gem::Version
52
- version: 0.1.22
52
+ version: 0.1.23
53
+ - !ruby/object:Gem::Dependency
54
+ name: rouge
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: 3.25.0
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '3.25'
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: 3.25.0
70
+ - - "~>"
71
+ - !ruby/object:Gem::Version
72
+ version: '3.25'
53
73
  - !ruby/object:Gem::Dependency
54
74
  name: minitest
55
75
  requirement: !ruby/object:Gem::Requirement
@@ -109,6 +129,7 @@ files:
109
129
  - empty_view/config/twitter/tw.html
110
130
  - empty_view/config/twitter/tw.js
111
131
  - empty_view/config/twitter/twitter.rb
132
+ - empty_view/data/GIT_IS_DUMB
112
133
  - empty_view/posts/GIT_IS_DUMB
113
134
  - empty_view/remote/assets/GIT_IS_DUMB
114
135
  - empty_view/remote/banner/navbar/GIT_IS_DUMB
@@ -137,6 +158,7 @@ files:
137
158
  - empty_view/themes/standard/etc/blog.css.lt3
138
159
  - empty_view/themes/standard/etc/externals.lt3
139
160
  - empty_view/themes/standard/etc/favicon.ico
161
+ - empty_view/themes/standard/etc/github.css
140
162
  - empty_view/themes/standard/etc/misc.js
141
163
  - empty_view/themes/standard/post/generate.lt3
142
164
  - empty_view/themes/standard/post/head.lt3
@@ -150,6 +172,7 @@ files:
150
172
  - lib/logging.rb
151
173
  - lib/lowlevel.rb
152
174
  - lib/menus.rb
175
+ - lib/newpost.rb
153
176
  - lib/pathmagic.rb
154
177
  - lib/post.rb
155
178
  - lib/processing.rb
@@ -233,8 +256,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
233
256
  - !ruby/object:Gem::Version
234
257
  version: '0'
235
258
  requirements: []
236
- rubygems_version: 3.0.4
237
- signing_key:
259
+ rubygems_version: 3.0.8
260
+ signing_key:
238
261
  specification_version: 4
239
262
  summary: A command-line blogging system
240
263
  test_files: []