runeblog 0.3.02 → 0.3.07

Sign up to get free protection for your applications and to get access to all the features.
@@ -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