runeblog 0.2.43 → 0.2.48

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.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/bin/blog +8 -10
  3. data/empty_view/assets/austin-pano.jpg +0 -0
  4. data/empty_view/themes/standard/blog/generate.lt3 +5 -3
  5. data/empty_view/themes/standard/blog/post_entry.lt3 +14 -10
  6. data/empty_view/themes/standard/etc/blog.css.lt3 +18 -0
  7. data/empty_view/themes/standard/navbar/faq.lt3 +1 -0
  8. data/empty_view/themes/standard/navbar/navbar.lt3 +1 -0
  9. data/empty_view/themes/standard/widgets/ad/ad.lt3 +8 -1
  10. data/empty_view/themes/standard/widgets/ad/ad1.png +0 -0
  11. data/empty_view/themes/standard/widgets/ad/ad2.png +0 -0
  12. data/empty_view/themes/standard/widgets/ad/ad3.png +0 -0
  13. data/empty_view/themes/standard/widgets/ad/ad4.png +0 -0
  14. data/empty_view/themes/standard/widgets/bydates/bydates.rb +7 -3
  15. data/empty_view/themes/standard/widgets/links/links.rb +28 -3
  16. data/empty_view/themes/standard/widgets/news/news.rb +7 -3
  17. data/empty_view/themes/standard/widgets/pages/pages.rb +10 -3
  18. data/empty_view/themes/standard/widgets/pinned/pinned.rb +7 -3
  19. data/empty_view/themes/standard/widgets/search/search.rb +7 -3
  20. data/empty_view/themes/standard/widgets/sitemap/sitemap.rb +7 -3
  21. data/empty_view/themes/standard/widgets/tag-cloud/tag-cloud.rb +7 -3
  22. data/lib/default.rb +1 -1
  23. data/lib/global.rb +15 -40
  24. data/lib/helpers-blog.rb +15 -44
  25. data/lib/liveblog.rb +86 -62
  26. data/lib/logging.rb +17 -8
  27. data/lib/post.rb +24 -20
  28. data/lib/publish.rb +4 -5
  29. data/lib/repl.rb +52 -11
  30. data/lib/runeblog.rb +115 -93
  31. data/lib/runeblog_version.rb +1 -1
  32. data/lib/view.rb +2 -9
  33. data/lib/xlate.rb +34 -33
  34. data/test/austin.rb +31 -20
  35. metadata +8 -5
  36. data/empty_view/remote/widgets/links/list.data +0 -3
  37. data/empty_view/remote/widgets/news/list.data +0 -4
  38. data/empty_view/remote/widgets/pages/list.data +0 -4
@@ -6,37 +6,21 @@ require 'xlate'
6
6
  module RuneBlog::Helpers
7
7
 
8
8
  def copy(src, dst)
9
- log!(enter: __method__, args: [src, dst])
9
+ log!(enter: __method__, args: [src, dst], level: 2)
10
10
  cmd = "cp #{src} #{dst} 2>/dev/null"
11
11
  rc = system!(cmd)
12
12
  puts " Failed: #{cmd} - from #{caller[0]}" unless rc
13
13
  end
14
14
 
15
15
  def copy!(src, dst)
16
- log!(enter: __method__, args: [src, dst])
16
+ log!(enter: __method__, args: [src, dst], level: 2)
17
17
  cmd = "cp -r #{src} #{dst} 2>/dev/null"
18
18
  rc = system!(cmd)
19
19
  puts " Failed: #{cmd} - from #{caller[0]}" unless rc
20
20
  end
21
21
 
22
- # def get_root
23
- # log!(enter: __method__)
24
- # if $_blog
25
- # if $_blog.root
26
- # puts "0. Returned: #{$_blog.root}/"
27
- # return $_blog.root + "/"
28
- # else
29
- # puts "1. Returned: ./"
30
- # return "./"
31
- # end
32
- # else
33
- # puts "2. Returned: ./"
34
- # return "./"
35
- # end
36
- # end
37
-
38
22
  def read_config(file, *syms)
39
- log!(enter: __method__, args: [file, *syms])
23
+ log!(enter: __method__, args: [file, *syms], level: 3)
40
24
  lines = File.readlines(file).map(&:chomp)
41
25
  obj = ::OpenStruct.new
42
26
  lines.each do |line|
@@ -61,26 +45,14 @@ module RuneBlog::Helpers
61
45
  end
62
46
 
63
47
  def try_read_config(file, hash)
64
- log!(enter: __method__, args: [file, hash])
48
+ log!(enter: __method__, args: [file, hash], level: 3)
65
49
  return hash.values unless File.exist?(file)
66
50
  vals = read_config(file, *hash.keys)
67
51
  vals
68
52
  end
69
53
 
70
- # def put_config(root:, view:"test_view", editor: "/usr/local/bin/vim")
71
- # log!(enter: __method__, args: [root, view, editor])
72
- # Dir.mkdir(root) unless Dir.exist?(root)
73
- # Dir.chdir(root) do
74
- # File.open("config", "w") do |cfg|
75
- # cfg.puts "root: #{root}"
76
- # cfg.puts "current_view: #{view}"
77
- # cfg.puts "editor: #{editor}"
78
- # end
79
- # end
80
- # end
81
-
82
54
  def write_config(obj, file)
83
- log!(enter: __method__, args: [obj, file])
55
+ log!(enter: __method__, args: [obj, file], level: 2)
84
56
  hash = obj.to_h
85
57
  File.open(file, "w") do |out|
86
58
  hash.each_pair {|key, val| out.puts "#{key}: #{val}" }
@@ -88,13 +60,13 @@ module RuneBlog::Helpers
88
60
  end
89
61
 
90
62
  def get_views # read from filesystem
91
- log!(enter: __method__)
63
+ log!(enter: __method__, level: 3)
92
64
  dirs = subdirs("#@root/views/").sort
93
65
  dirs.map {|name| RuneBlog::View.new(name) }
94
66
  end
95
67
 
96
68
  def new_dotfile(root: ".blogs", current_view: "test_view", editor: "vi")
97
- log!(enter: __method__, args: [root, current_view, editor])
69
+ log!(enter: __method__, args: [root, current_view, editor], level: 3)
98
70
  root = Dir.pwd/root
99
71
  x = OpenStruct.new
100
72
  x.root, x.current_view, x.editor = root, current_view, editor
@@ -102,21 +74,21 @@ module RuneBlog::Helpers
102
74
  end
103
75
 
104
76
  def new_sequence
105
- log!(enter: __method__)
77
+ log!(enter: __method__, level: 3)
106
78
  dump(0, "sequence")
107
79
  version_info = "#{RuneBlog::VERSION}\nBlog created: #{Time.now.to_s}"
108
80
  dump(version_info, "VERSION")
109
81
  end
110
82
 
111
83
  def subdirs(dir)
112
- log!(enter: __method__, args: [dir])
84
+ log!(enter: __method__, args: [dir], level: 3)
113
85
  dirs = Dir.entries(dir) - %w[. ..]
114
86
  dirs.reject! {|x| ! File.directory?("#@root/views/#{x}") }
115
87
  dirs
116
88
  end
117
89
 
118
90
  def find_draft_slugs
119
- log!(enter: __method__)
91
+ log!(enter: __method__, level: 3)
120
92
  files = Dir["#@root/drafts/**"].grep /\d{4}.*.lt3$/
121
93
  flagfile = "#@root/drafts/last_rebuild"
122
94
  last = File.exist?(flagfile) ? File.mtime(flagfile) : (Time.now - 86_400)
@@ -128,7 +100,7 @@ module RuneBlog::Helpers
128
100
  end
129
101
 
130
102
  def create_dirs(*dirs)
131
- log!(enter: __method__, args: [*dirs])
103
+ log!(enter: __method__, args: [*dirs], level: 3)
132
104
  dirs.each do |dir|
133
105
  dir = dir.to_s # symbols allowed
134
106
  next if Dir.exist?(dir)
@@ -139,27 +111,26 @@ module RuneBlog::Helpers
139
111
  end
140
112
 
141
113
  def interpolate(str, bind)
142
- log!(enter: __method__, args: [str, bind])
114
+ log!(enter: __method__, args: [str, bind], level: 3)
143
115
  wrap = "<<-EOS\n#{str}\nEOS"
144
116
  eval wrap, bind
145
117
  end
146
118
 
147
119
  def error(err) # Hmm, this is duplicated
148
- log!(str: "duplicated method", enter: __method__, args: [err])
120
+ log!(str: "duplicated method", enter: __method__, args: [err], level: 2)
149
121
  str = "\n Error: #{err}"
150
122
  puts str
151
123
  puts err.backtrace.join("\n")
152
124
  end
153
125
 
154
126
  def dump(obj, name)
155
- log!(enter: __method__, args: [obj, name])
127
+ log!(enter: __method__, args: [obj, name], level: 3)
156
128
  File.write(name, obj)
157
129
  end
158
-
159
130
  end
160
131
 
161
132
  def dump(obj, name) # FIXME scope
162
- log!(str: "scope problem", enter: __method__, args: [obj, name])
133
+ log!(str: "scope problem", enter: __method__, args: [obj, name], level: 3)
163
134
  File.write(name, obj)
164
135
  end
165
136
 
@@ -17,7 +17,7 @@ def init_liveblog # FIXME - a lot of this logic sucks
17
17
  @blog = RuneBlog.new(dir)
18
18
  @root = @blog.root
19
19
  @view = @blog.view
20
- @view_name = @blog.view.name
20
+ @view_name = @blog.view.name unless @view.nil?
21
21
  @vdir = @blog.view.dir
22
22
  @version = RuneBlog::VERSION
23
23
  @theme = @vdir/:themes/:standard
@@ -27,6 +27,18 @@ end
27
27
  # "dot" commands
28
28
  ##################
29
29
 
30
+
31
+
32
+ def dropcap
33
+ # Bad form: adds another HEAD
34
+ text = _data
35
+ _out " "
36
+ letter = text[0]
37
+ remain = text[1..-1]
38
+ _out %[<div class='mydrop'>#{letter}</div>]
39
+ _out %[<div style="padding-top: 1px">#{remain}]
40
+ end
41
+
30
42
  def post
31
43
  @meta = OpenStruct.new
32
44
  @meta.num = _args[0]
@@ -56,30 +68,9 @@ def backlink
56
68
  _out %[<br><a href="javascript:history.go(-1)">[Back]</a>]
57
69
  end
58
70
 
59
- def dropcap
60
- # Bad form: adds another HEAD
61
- _out <<-HTML
62
- <head>
63
- <style>
64
- p:first-child:first-letter {
65
- color: #0000ff;
66
- float: left;
67
- font-family: Verdana;
68
- font-size: 75px;
69
- line-height: 60px;
70
- padding-top: 4px;
71
- padding-right: 8px;
72
- padding-left: 3px;
73
- }
74
- </style>
75
- </head>
76
- HTML
77
- _out " "
78
- end
79
-
80
71
  def quote
81
72
  _passthru "<blockquote>"
82
- _passthru _body
73
+ _passthru _body.join(" ")
83
74
  _passthru "</blockquote>"
84
75
  _optional_blank_line
85
76
  end
@@ -128,17 +119,17 @@ end
128
119
 
129
120
 
130
121
  def make_main_links
131
- log!(enter: __method__)
122
+ log!(enter: __method__, level: 1)
132
123
  # FIXME remember strings may not be safe
133
124
  line = _data.chomp
134
125
  tag, card_title = *line.split(" ", 2)
135
126
  cardfile, mainfile = "#{tag}-card", "#{tag}-main"
136
127
  input = "list.data"
137
- log!(str: "Reading #{input}", pwd: true)
128
+ log!(str: "Reading #{input}", pwd: true, level: 3)
138
129
  pairs = File.readlines(input).map {|line| line.chomp.split(/, */, 2) }
139
130
  _write_main(mainfile, pairs, card_title, tag)
140
131
  _write_card(cardfile, mainfile, pairs, card_title, tag)
141
- log!(str: "...returning from method", pwd: true)
132
+ log!(str: "...returning from method", pwd: true, level: 3)
142
133
  end
143
134
 
144
135
  ### inset
@@ -146,25 +137,36 @@ end
146
137
  def inset
147
138
  lines = _body
148
139
  box = ""
140
+ output = []
149
141
  lines.each do |line|
150
- line = line.dup
151
- if line[0] == "/" # Only into inset
152
- line[0] = ' '
153
- box << line.dup + " "
154
- line.replace(" ")
155
- end
156
- if line[0] == "|" # Into inset and body
157
- line[0] = ' '
158
- box << line.dup + " "
142
+ line = line
143
+ case line[0]
144
+ when "/" # Only into inset
145
+ line[0] = ' '
146
+ box << line
147
+ line.replace(" ")
148
+ when "|" # Into inset and body
149
+ line[0] = ' '
150
+ box << line
151
+ output << line
152
+ else # Only into body
153
+ output << line
159
154
  end
160
- _passthru(line)
155
+ # _passthru(line)
161
156
  end
162
157
  lr = _args.first
163
158
  wide = _args[1] || "25"
164
- _passthru "<div style='float:#{lr}; width: #{wide}%; padding:8px; padding-right:12px'>" # ; font-family:verdana'>"
165
- _passthru '<b><i>'
166
- _passthru box
167
- _passthru_noline '</i></b></div>'
159
+ stuff = "<div style='float:#{lr}; width: #{wide}%; padding:8px; padding-right:12px'>"
160
+ stuff << '<b><i>' + box + '</i></b></div>'
161
+ _out "</p>" # kludge!! nopara
162
+ 0.upto(2) {|i| _passthru output[i] }
163
+ _passthru stuff
164
+ # _passthru "<div style='float:#{lr}; width: #{wide}%; padding:8px; padding-right:12px'>" # ; font-family:verdana'>"
165
+ # _passthru '<b><i>'
166
+ # _passthru box
167
+ # _passthru_noline '</i></b></div>'
168
+ 3.upto(output.length-1) {|i| _passthru output[i] }
169
+ _out "<p>" # kludge!! para
168
170
  _optional_blank_line
169
171
  end
170
172
 
@@ -232,10 +234,16 @@ end
232
234
 
233
235
  def teaser
234
236
  raise "'post' was not called" unless @meta
235
- @meta.teaser = _body_text
237
+ text = _body_text
238
+ @meta.teaser = text
236
239
  setvar :teaser, @meta.teaser
237
- _out @meta.teaser + "\n"
238
- # FIXME
240
+ if _args[0] == "dropcap" # FIXME doesn't work yet!
241
+ letter, remain = text[0], text[1..-1]
242
+ _out %[<div class='mydrop'>#{letter}</div>]
243
+ _out %[<div style="padding-top: 1px">#{remain}] + "\n"
244
+ else
245
+ _out @meta.teaser + "\n"
246
+ end
239
247
  end
240
248
 
241
249
  def finalize
@@ -356,8 +364,8 @@ def _load_local(widget)
356
364
  code
357
365
  end
358
366
  rescue => err
359
- STDOUT.puts err
360
- STDOUT.puts err.backtrace.join("\n")
367
+ STDERR.puts err.to_s
368
+ STDERR.puts err.backtrace.join("\n")
361
369
  exit
362
370
  end
363
371
 
@@ -375,16 +383,26 @@ def sidebar
375
383
  tcard = "#{tag}-card.html"
376
384
 
377
385
  code = _load_local(tag)
378
- code && Dir.chdir(wtag) { code.build }
379
-
380
- # if File.exist?(wtag/"SUBFILES")
381
- # children = Dir[wtag/"*.lt3"] - [wtag/tag+".lt3"]
382
- # children.each do |child|
383
- # dest = child.sub(/.lt3$/, ".html")
384
- # xlate src: child, dst: dest # , debug: true
385
- # end
386
- # end
387
- xlate cwd: wtag, src: tag, dst: tcard # , debug: true
386
+ if code
387
+ if ["pages", "links"].include? tag
388
+ Dir.chdir(wtag) do
389
+ widget = code.new(@blog)
390
+ widget.build
391
+ end
392
+ end
393
+ end
394
+
395
+ if tag == "ad"
396
+ num = rand(1..4)
397
+ img = "widgets/ad/ad#{num}.png"
398
+ src, dst = img, @root/:views/@view_name/"remote/widgets/ad/"
399
+ system!("cp #{src} #{dst}") # , show: true)
400
+ File.open(wtag/"vars.lt3", "w") do |f|
401
+ f.puts ".set ad.image = #{img}"
402
+ end
403
+ end
404
+
405
+ xlate cwd: wtag, src: tag, dst: tcard # , debug: (tag == "ad")
388
406
  _include_file wtag/tcard
389
407
  end
390
408
  _out %[</div>]
@@ -462,10 +480,16 @@ class Livetext::Functions
462
480
  ::Livetext::Vars[name] || "[:#{name} is undefined]"
463
481
  end
464
482
 
465
- def link
466
- file, cdata = self.class.param.split("||", 2)
467
- %[<link type="application/atom+xml" rel="alternate" href="#{_var(:host)}#{file}" title="#{_var(:title)}">]
468
- end
483
+ # def link(param = nil)
484
+ # puts "--- WTF?? param = #{param.inspect}"; gets
485
+ # file, cdata = param.split("||", 2)
486
+ # %[<a href="assets/#{file}">#{cdata}</a>]
487
+ # end
488
+ #
489
+ # def link(param = nil)
490
+ # file, cdata = param.split("||", 2)
491
+ # %[<link type="application/atom+xml" rel="alternate" href="#{_var(:host)}#{file}" title="#{_var(:title)}">]
492
+ # end
469
493
  end
470
494
 
471
495
  ###
@@ -593,7 +617,7 @@ def _html_body(file, css = nil)
593
617
  end
594
618
 
595
619
  def _write_card(cardfile, mainfile, pairs, card_title, tag)
596
- log!(str: "Creating #{cardfile}.html", pwd: true)
620
+ log!(str: "Creating #{cardfile}.html", pwd: true, level: 2)
597
621
  url = mainfile
598
622
  url = :widgets/tag/mainfile + ".html"
599
623
  File.open("#{cardfile}.html", "w") do |f|
@@ -608,7 +632,7 @@ def _write_card(cardfile, mainfile, pairs, card_title, tag)
608
632
  </h5>
609
633
  <div class="collapse" id="#{tag}">
610
634
  EOS
611
- log!(str: "Writing data pairs to #{cardfile}.html", pwd: true)
635
+ log!(str: "Writing data pairs to #{cardfile}.html", pwd: true, level: 2)
612
636
  local = _local_tag?(tag)
613
637
  pairs.each do |file, title|
614
638
  url = file
@@ -681,7 +705,7 @@ def _write_main_pages(mainfile, pairs, card_title, tag)
681
705
  end
682
706
 
683
707
  def _write_main(mainfile, pairs, card_title, tag)
684
- log!(str: "Creating #{mainfile}.html", pwd: true)
708
+ log!(str: "Creating #{mainfile}.html", pwd: true, level: 2)
685
709
 
686
710
  if tag == "pages" # temporary experiment
687
711
  _write_main_pages(mainfile, pairs, card_title, tag)
@@ -2,8 +2,17 @@ unless self.respond_to?("log!")
2
2
  $logging = true
3
3
  $log = File.new("/tmp/runeblog.log","w")
4
4
 
5
- def log!(str: "", enter: nil, args: [], pwd: false, dir: false)
5
+ def outlog(str = "", stderr: false)
6
+ $log.puts str
7
+ STDERR.puts str if stderr
8
+ end
9
+
10
+ def log!(str: "", enter: nil, args: [], pwd: false, dir: false, level: 0, stderr: false)
6
11
  return unless $logging
12
+ @err_level ||= ENV['RUNEBLOG_ERROR_LEVEL']
13
+ @err_level ||= 0
14
+ return if level < @err_level
15
+
7
16
  time = Time.now.strftime("%H:%M:%S")
8
17
 
9
18
  meth = ""
@@ -17,16 +26,16 @@ unless self.respond_to?("log!")
17
26
  str = " ... #{str}" unless str.empty?
18
27
  indent = " "*12
19
28
 
20
- $log.puts "#{time} #{meth}#{para}"
21
- $log.puts "#{indent} #{str} " unless str.empty?
22
- $log.puts "#{indent} #{source}"
23
- $log.puts "#{indent} pwd = #{Dir.pwd} " if pwd
29
+ outlog "#{time} #{meth}#{para}"
30
+ outlog "#{indent} #{str} " unless str.empty?
31
+ outlog "#{indent} #{source}"
32
+ outlog "#{indent} pwd = #{Dir.pwd} " if pwd
24
33
  if dir
25
34
  files = (Dir.entries('.') - %w[. ..]).join(" ")
26
- $log.puts "#{indent} dir/* = #{files}"
35
+ outlog "#{indent} dir/* = #{files}"
27
36
  end
28
- # $log.puts "#{indent} livetext params = #{livedata.inpect} " unless livedata.nil?
29
- $log.puts
37
+ # outlog "#{indent} livetext params = #{livedata.inpect} " unless livedata.nil?
38
+ outlog
30
39
  $log.close
31
40
  $log = File.new("/tmp/runeblog.log","a")
32
41
  end
@@ -10,19 +10,18 @@ class RuneBlog::Post
10
10
  include RuneBlog::Helpers
11
11
 
12
12
  def self.files(num, root)
13
- log!(enter: __method__, args: [num, root])
14
- files = Find.find(root).to_a
13
+ log!(enter: __method__, args: [num, root], level: 3)
14
+ files = ::Find.find(root).to_a
15
15
  result = files.grep(/#{prefix(num)}-/)
16
16
  result
17
17
  end
18
18
 
19
19
  def self.load(post)
20
- log!(enter: __method__, args: [post])
20
+ log!(enter: __method__, args: [post], level: 3)
21
21
  raise "Doesn't work right now"
22
22
  raise NoBlogAccessor if RuneBlog.blog.nil?
23
23
  # "post" is a slug
24
24
  pdir = RuneBlog.blog.view.dir/post
25
- verify(Dir.exist?(pdir) => "Directory #{pdir} not found")
26
25
  meta = nil
27
26
  Dir.chdir(pdir) do
28
27
  meta = read_config("metadata.txt")
@@ -36,7 +35,7 @@ class RuneBlog::Post
36
35
  end
37
36
 
38
37
  def write_metadata(meta) # FIXME ???
39
- log!(enter: __method__, args: [meta])
38
+ log!(enter: __method__, args: [meta], level: 3)
40
39
  debug "=== write_metadata:"
41
40
  debug "-----\n#{meta.inspect}\n-----"
42
41
  fname2 = "metadata.txt"
@@ -57,14 +56,14 @@ class RuneBlog::Post
57
56
  end
58
57
 
59
58
  def initialize
60
- log!(enter: __method__)
59
+ log!(enter: __method__, level: 3)
61
60
  @blog = RuneBlog.blog || raise(NoBlogAccessor)
62
61
  @meta = OpenStruct.new
63
62
  end
64
63
 
65
64
  def self.create(title:, teaser:, body:, pubdate: Time.now.strftime("%Y-%m-%d"),
66
- views:[])
67
- log!(enter: __method__, args: [title, teaser, body, pubdate, views])
65
+ views:[], file: nil)
66
+ log!(enter: __method__, args: [title, teaser, body, pubdate, views], stderr: true)
68
67
  post = self.new
69
68
  # NOTE: This is the ONLY place next_sequence is called!
70
69
  num = post.meta.num = post.blog.next_sequence
@@ -73,27 +72,29 @@ class RuneBlog::Post
73
72
  post.meta.title, post.meta.teaser, post.meta.body, post.meta.pubdate =
74
73
  title, teaser, body, pubdate
75
74
  post.meta.views = [post.blog.view.to_s] + views
76
- # STDERR.puts "Post.create: views = #{views.inspect}"
77
75
  post.meta.tags = []
78
76
  post.blog.make_slug(post.meta) # adds to meta
79
77
 
80
78
  # create_draft
81
79
  viewhome = post.blog.view.publisher.url
82
80
  meta = post.meta
83
- text = RuneBlog.post_template(num: meta.num, title: meta.title, date: meta.pubdate,
84
- view: meta.view, teaser: meta.teaser, body: meta.body,
85
- views: meta.views, tags: meta.tags, home: viewhome)
86
- srcdir = post.blog.root/:drafts + "/"
87
- vpdir = post.blog.root/:drafts + "/"
88
- fname = meta.slug + ".lt3"
89
- post.draft = srcdir + fname
90
- dump(text, post.draft)
81
+ if file.nil?
82
+ text = RuneBlog.post_template(num: meta.num, title: meta.title, date: meta.pubdate,
83
+ view: meta.view, teaser: meta.teaser, body: meta.body,
84
+ views: meta.views, tags: meta.tags, home: viewhome)
85
+ srcdir = post.blog.root/:drafts + "/"
86
+ vpdir = post.blog.root/:drafts + "/"
87
+ fname = meta.slug + ".lt3"
88
+ post.draft = srcdir + fname
89
+ dump(text, post.draft)
90
+ else
91
+ dump(File.read(file), post.draft)
92
+ end
91
93
  return post
92
94
  end
93
95
 
94
96
  def edit
95
97
  log!(enter: __method__)
96
- verify(File.exist?(@draft) => "File #{@draft} not found")
97
98
  result = system!("vi #@draft +8") # TODO improve this
98
99
  raise EditorProblem(draft) unless result
99
100
  nil
@@ -115,7 +116,7 @@ class RuneBlog::ViewPost
115
116
  :teaser_text
116
117
 
117
118
  def initialize(view, postdir)
118
- log!(enter: __method__, args: [view, postdir])
119
+ log!(enter: __method__, args: [view, postdir], level: 3)
119
120
  # Assumes already parsed/processed
120
121
  @blog = RuneBlog.blog || raise(NoBlogAccessor)
121
122
  @path = postdir.dup
@@ -128,10 +129,13 @@ class RuneBlog::ViewPost
128
129
  lines = File.readlines(mdfile)
129
130
  @title = lines.grep(/title:/).first[7..-1].chomp
130
131
  @date = lines.grep(/pubdate:/).first[9..-1].chomp
132
+ # print "-- date = #{@date.inspect} "; gets
133
+ rescue => err
134
+ STDERR.puts "--- #{err}\n #{err.backtrace.join("\n ")}"
131
135
  end
132
136
 
133
137
  def get_dirs
134
- log!(enter: __method__, args: [view, postdir])
138
+ log!(enter: __method__, args: [view, postdir], level: 3)
135
139
  fname = File.basename(draft)
136
140
  noext = fname.sub(/.lt3$/, "")
137
141
  vdir = @root/:views/view