runeblog 0.3.02 → 0.3.07

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.
@@ -75,15 +75,6 @@ class RuneBlog
75
75
 
76
76
  end
77
77
 
78
- def _tmp_error(err) # FIXME move to helpers
79
- out = "/tmp/blog#{rand(100)}.txt"
80
- File.open(out, "w") do |f|
81
- f.puts err
82
- f.puts err.backtrace.join("\n")
83
- end
84
- puts "Error: See #{out}"
85
- end
86
-
87
78
  def self.create_new_blog_repo(root_rel = ".blogs")
88
79
  log!(enter: __method__, args: [root_rel])
89
80
  raise ArgumentError unless root_rel.is_a?(String) && ! root_rel.empty?
@@ -122,6 +113,7 @@ class RuneBlog
122
113
  @root = Dir.pwd/root_rel
123
114
  write_repo_config(root: @root) # ?? FIXME
124
115
  get_repo_config
116
+ read_features # top level
125
117
  @views = retrieve_views
126
118
  self.view = File.read(@root/"data/VIEW").chomp
127
119
  md = Dir.pwd.match(%r[.*/views/(.*?)/])
@@ -197,11 +189,20 @@ class RuneBlog
197
189
  _generate_settings
198
190
  end
199
191
 
192
+ # FIXME reconcile with _get_draft data
193
+
194
+ def read_metadata
195
+ meta = read_pairs!("metadata.txt")
196
+ meta.views = meta.views.split
197
+ meta.tags = meta.tags.split
198
+ meta
199
+ end
200
+
200
201
  def _deploy_local(dir)
201
202
  log!(enter: __method__, args: [dir], level: 1)
202
203
  Dir.chdir(dir) do
203
- views = _retrieve_metadata(:views)
204
- views.each do |v|
204
+ meta = read_metadata
205
+ meta.views.each do |v|
205
206
  next unless _check_view?(v)
206
207
  system!("cp *html #@root/views/#{v}/remote", show: true)
207
208
  end
@@ -210,33 +211,6 @@ class RuneBlog
210
211
  _tmp_error(err)
211
212
  end
212
213
 
213
- # FIXME reconcile with _get_draft data
214
-
215
- def _retrieve_metadata(key)
216
- key = key.to_s
217
- lines = File.readlines("metadata.txt")
218
- lines = lines.grep(/^#{key}: /)
219
- case lines.size
220
- when 0
221
- result = nil # not found
222
- when 1
223
- front = "#{key}: "
224
- n = front.size
225
- str = lines.first.chomp[n..-1]
226
- case key
227
- when "views", "tags" # plurals
228
- result = str.split
229
- else
230
- result = str
231
- end
232
- else
233
- raise "Too many #{key} instances in metadata.txt!"
234
- end
235
- return result
236
- rescue => err
237
- _tmp_error(err)
238
- end
239
-
240
214
  def process_post(sourcefile)
241
215
  log!(enter: __method__, args: [sourcefile], level: 2)
242
216
  nslug = sourcefile.sub(/.lt3/, "")
@@ -294,11 +268,15 @@ class RuneBlog
294
268
  @view = nil
295
269
  when RuneBlog::View
296
270
  @view = arg
271
+ read_features(@view)
272
+ @view.get_globals
297
273
  _set_publisher
298
274
  when String
299
275
  new_view = str2view(arg)
300
276
  raise NoSuchView(arg) if new_view.nil?
301
277
  @view = new_view
278
+ read_features(@view)
279
+ @view.get_globals
302
280
  _set_publisher
303
281
  else
304
282
  raise CantAssignView(arg.class.to_s)
@@ -374,6 +352,7 @@ class RuneBlog
374
352
  add_view(view_name)
375
353
  mark_last_published("Initial creation")
376
354
  system("cp #@root/data/global.lt3 #@root/views/#{view_name}/themes/standard/global.lt3")
355
+ @view.get_globals
377
356
  rescue => err
378
357
  _tmp_error(err)
379
358
  end
@@ -404,9 +383,8 @@ class RuneBlog
404
383
  posts = Dir.entries(dir_posts).grep(/^\d\d\d\d/).map {|x| dir_posts/x }
405
384
  posts.select! {|x| File.directory?(x) }
406
385
 
407
- post = posts.select {|x| File.basename(x).to_i == postid }
408
- raise "Error: More than one post #{postid}" if post.size > 1
409
- postdir = post.first
386
+ posts = posts.select {|x| File.basename(x).to_i == postid }
387
+ postdir = exactly_one(posts)
410
388
  vp = RuneBlog::ViewPost.new(self.view, postdir)
411
389
  vp
412
390
  rescue => err
@@ -454,16 +432,18 @@ class RuneBlog
454
432
  return posts[0..19] # return 20 at most
455
433
  end
456
434
 
457
- def collect_recent_posts(file)
435
+ def collect_recent_posts(file = "recent.html")
458
436
  log!(enter: __method__, args: [file], level: 3)
437
+ vars = self.view.globals
459
438
  text = <<-HTML
460
439
  <html>
461
440
  <head><link rel="stylesheet" href="etc/blog.css"></head>
462
- <body>
441
+ <body style="background-color: #{vars["recent.bgcolor"]}">
463
442
  HTML
464
443
  posts = _sorted_posts
465
444
  if posts.size > 0
466
- wanted = [8, posts.size].min # estimate how many we want?
445
+ # estimate how many we want
446
+ wanted = [vars["recent.count"].to_i, posts.size].min
467
447
  enum = posts.each
468
448
  entries = []
469
449
  wanted.times do
@@ -535,7 +515,7 @@ class RuneBlog
535
515
  log!(enter: __method__, args: [view], pwd: true, dir: true)
536
516
  raise ArgumentError unless view.is_a?(String) || view.is_a?(RuneBlog::View)
537
517
  @vdir = @root/:views/view
538
- num = collect_recent_posts("recent.html")
518
+ num = collect_recent_posts
539
519
  return num
540
520
  rescue => err
541
521
  _tmp_error(err)
@@ -564,34 +544,10 @@ class RuneBlog
564
544
  # _tmp_error(err)
565
545
  end
566
546
 
567
- def _get_draft_data(num, sym)
568
- tag = prefix(num)
569
- front = @blog.root/:drafts/tag
570
- files = Dir[front + "*"]
571
- raise "No draft #{num} found" if files.empty?
572
- raise "Too many files found for #{num}!" if files.size > 1
573
- file = files.first
574
- lines = File.readlines(file)
575
- case sym
576
- when :views
577
- view_line = lines.grep(/^.views /)
578
- raise "More than one .views call in #{draft}" if view_line.size > 1
579
- raise "No .views call in #{draft}" if view_line.size < 1
580
- view_line = view_line.first
581
- views = view_line[7..-1].split
582
- return views.uniq
583
- else
584
- raise "Unknown symbol #{sym.inspect}"
585
- end
586
- end
587
-
588
547
  def _get_views(draft)
589
548
  log!(enter: __method__, args: [draft], level: 2)
590
549
  # FIXME dumb code
591
- view_line = File.readlines(draft).grep(/^.views /)
592
- raise "More than one .views call in #{draft}" if view_line.size > 1
593
- raise "No .views call in #{draft}" if view_line.size < 1
594
- view_line = view_line.first
550
+ view_line = exactly_one(File.readlines(draft).grep(/^.views /))
595
551
  views = view_line[7..-1].split
596
552
  views.uniq
597
553
  rescue => err
@@ -622,10 +578,11 @@ class RuneBlog
622
578
  pnum = nslug[0..3] # 0001
623
579
  Dir.chdir(pdraft) do
624
580
  excerpt = File.read("teaser.txt")
625
- date = _retrieve_metadata(:date)
581
+ meta = read_metadata
582
+ date = meta.date
626
583
  longdate = ::Date.parse(date).strftime("%B %e, %Y")
627
- title = _retrieve_metadata(:title)
628
- tags = _retrieve_metadata(:tags)
584
+ title = meta.title
585
+ tags = meta.tags
629
586
  # FIXME simplify
630
587
  vars = <<~LIVE
631
588
  .set post.num = #{pnum}
@@ -3,7 +3,7 @@ if !defined?(RuneBlog::Path)
3
3
  # if ! (Object.constants.include?(:RuneBlog) && RuneBlog.constants.include?(:Path))
4
4
 
5
5
  class RuneBlog
6
- VERSION = "0.3.02"
6
+ VERSION = "0.3.07"
7
7
 
8
8
  path = Gem.find_files("runeblog").grep(/runeblog-/).first
9
9
  Path = File.dirname(path)
@@ -46,5 +46,4 @@ def prefix(num)
46
46
  "#{'%04d' % num.to_i}"
47
47
  end
48
48
 
49
-
50
49
  end
@@ -14,6 +14,10 @@ class RuneBlog::View
14
14
  @publisher = RuneBlog::Publishing.new(name)
15
15
  @can_publish = true # FIXME
16
16
  @blog.view = self
17
+ get_globals
18
+ end
19
+
20
+ def get_globals
17
21
  gfile = @blog.root/"views/#{name}/themes/standard/global.lt3"
18
22
  return unless File.exist?(gfile) # Hackish!! how is View.new called from create_view??
19
23
 
@@ -31,7 +31,7 @@ end
31
31
  @fake_date = Date.today - 20
32
32
 
33
33
  def make_post(x, title, teaser, body, views=[])
34
- debug " make_post #{bold(title)}"
34
+ debug " make_post #{bold(title)}"
35
35
  pubdate = @fake_date.strftime("%Y-%m-%d")
36
36
  @fake_date += (rand(2) + 1)
37
37
  x.create_new_post(title, true, teaser: teaser, body: body, views: views,
@@ -53,8 +53,8 @@ puts
53
53
  debug bold("Generating test blog...")
54
54
 
55
55
  system("rm -rf .blogs")
56
- RuneBlog.create_new_blog_repo(".blogs")
57
- x = RuneBlog.new(".blogs")
56
+ RuneBlog.create_new_blog_repo # (".blogs")
57
+ x = RuneBlog.new # (".blogs")
58
58
 
59
59
  debug("create_view: #{bold('around_austin')}")
60
60
  x.create_view("around_austin") # FIXME remember view title!
@@ -72,7 +72,7 @@ File.open(vfile, "w") {|f| f.puts vars }
72
72
 
73
73
  ####
74
74
 
75
- debug("-- change_view: #{bold('around_austin')}")
75
+ debug("change_view: #{bold('around_austin')}")
76
76
  x.change_view("around_austin") # 1 2 7 8 9
77
77
 
78
78
  make_post(x, "What's at Stubbs...", <<-EXCERPT, <<-BODY)
@@ -142,11 +142,10 @@ But I first heard of them
142
142
  in 2005.
143
143
  BODY
144
144
 
145
- debug
146
- debug "** generate_index #{bold("around_austin")}"
145
+ debug "generate_index #{bold("around_austin")}"
147
146
  x.generate_index("around_austin")
148
147
 
149
- debug("** generate_view: #{bold('around_austin')}")
148
+ debug("generate_view: #{bold('around_austin')}")
150
149
  x.generate_view("around_austin")
151
150
 
152
151
  debug bold("...finished.\n")
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.02
4
+ version: 0.3.07
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-31 00:00:00.000000000 Z
11
+ date: 2020-01-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: livetext