runeblog 0.3.02 → 0.3.07

Sign up to get free protection for your applications and to get access to all the features.
@@ -8,74 +8,57 @@ make_exception(:EditorProblem, "Could not edit $1")
8
8
 
9
9
  module RuneBlog::REPL
10
10
  def edit_file(file, vim: "")
11
- STDSCR.saveback
11
+ # STDSCR.saveback
12
12
  ed = @blog.editor
13
13
  params = vim if ed =~ /vim$/
14
14
  result = system!("#{@blog.editor} #{file} #{params}")
15
15
  raise EditorProblem(file) unless result
16
- STDSCR.restback
17
- # cmd_clear(nil)
16
+ # STDSCR.restback
17
+ cmd_clear
18
18
  end
19
19
 
20
- def cmd_quit(arg, testing = false)
21
- cmd_clear(nil)
22
- RubyText.stop
20
+ def cmd_quit
21
+ STDSCR.rows.times { puts " "*(STDSCR.cols-1) }
22
+ # FIXME please?
23
+ # sleep 0.1
24
+ STDSCR.clear
23
25
  sleep 0.1
24
-
26
+ RubyText.stop
25
27
  sleep 0.1
28
+ system("clear")
29
+ # sleep 0.1
26
30
  exit
27
31
  end
28
32
 
29
- def cmd_clear(arg, testing = false)
30
- # STDSCR.rows.times { puts " "*(STDSCR.cols-1) }
33
+ def cmd_clear
34
+ STDSCR.rows.times { puts " "*(STDSCR.cols-1) }
35
+ # sleep 0.1
31
36
  STDSCR.clear
32
37
  end
33
38
 
34
- def cmd_version(arg, testing = false)
35
- reset_output
36
- output RuneBlog::VERSION
37
- puts fx("\n RuneBlog", :bold), fx(" v #{RuneBlog::VERSION}\n", Red) unless testing
38
- @out
39
+ def cmd_version
40
+ puts fx("\n RuneBlog", :bold), fx(" v #{RuneBlog::VERSION}\n", Red)
39
41
  end
40
42
 
41
- def OLD_cmd_config(arg, testing = false)
42
- hash = {"global.lt3 Global configuration" => "global.lt3",
43
- "banner/top.lt3 Text portion of banner" => "banner/top.lt3",
44
- "blog/generate.lt3 Generator for view (usu not edited)" => "blog/generate.lt3",
45
- ".... head.lt3 HEAD info for view" => "blog/head.lt3",
46
- ".... banner.lt3 banner description" => "blog/banner.lt3",
47
- ".... index.lt3 User-edited detail for view" => "blog/index.lt3",
48
- ".... post_entry.lt3 Generator for post entry in recent-posts" => "blog/post_entry.lt3",
49
- "etc/blog.css.lt3 Global CSS" => "etc/blog.css.lt3",
50
- "... externals.lt3 External JS/CSS (Bootstrap, etc.)" => "/etc/externals.lt3",
51
- "post/generate.lt3 Generator for a post" => "post/generate.lt3",
52
- ".... head.lt3 HEAD info for post" => "post/head.lt3",
53
- ".... index.lt3 Content for post" => "post/index.lt3",
54
- ".... permalink.lt3 Generator for permalink" => "post/permalink.lt3",
55
- }
56
-
57
- dir = @blog.view.dir/"themes/standard/"
58
- num, target = STDSCR.menu(title: "Edit file:", items: hash)
59
- edit_file(dir/target)
60
- end
61
-
62
- def cmd_config(arg, testing = false)
43
+ def cmd_config
63
44
  hash = {"Global configuration" => "global.lt3",
64
45
  " View-specific variables" => "../../settings/view.txt",
65
46
  " Recent posts" => "../../settings/recent.txt",
66
47
  " Publishing vars" => "../../settings/publish.txt",
67
- "Banner description" => "blog/banner.lt3",
68
- " Text portion of banner" => "banner/top.lt3",
69
- "Generator for view (usu not edited)" => "blog/generate.lt3",
48
+ " Config for reddit" => "../../config/reddit/credentials.txt",
49
+ " Config for Facebook" => "../../config/facebook/credentials.txt",
50
+ " Config for Twitter" => "../../config/twitter/credentials.txt",
51
+ "View generator" => "blog/generate.lt3",
52
+ " Banner: Description" => "blog/banner.lt3",
53
+ " Banner: Text portion" => "banner/top.lt3",
70
54
  " HEAD info for view" => "blog/head.lt3",
71
55
  " User-edited detail for view" => "blog/index.lt3",
72
- "Generator for post entry in recent-posts" => "blog/post_entry.lt3",
73
- "Global CSS" => "etc/blog.css.lt3",
74
- "External JS/CSS (Bootstrap, etc.)" => "/etc/externals.lt3",
56
+ " Generator for recent-posts entry" => "blog/post_entry.lt3",
75
57
  "Generator for a post" => "post/generate.lt3",
76
58
  " HEAD info for post" => "post/head.lt3",
77
59
  " Content for post" => "post/index.lt3",
78
- "Generator for permalink" => "post/permalink.lt3",
60
+ "Global CSS" => "etc/blog.css.lt3",
61
+ "External JS/CSS (Bootstrap, etc.)" => "/etc/externals.lt3"
79
62
  }
80
63
 
81
64
  dir = @blog.view.dir/"themes/standard/"
@@ -83,26 +66,24 @@ module RuneBlog::REPL
83
66
  edit_file(dir/target)
84
67
  end
85
68
 
86
-
87
-
88
- def cmd_manage(arg, testing = false)
69
+ def cmd_manage(arg)
89
70
  case arg
90
- when "pages"; _manage_pages(nil, testing = false)
91
- when "links"; _manage_links(nil, testing = false)
92
- when "navbar"; _manage_navbar(nil, testing = false)
93
- # when "pinned"; _manage_pinned(nil, testing = false) # ditch this??
71
+ when "pages"; _manage_pages(nil)
72
+ when "links"; _manage_links(nil)
73
+ when "navbar"; _manage_navbar(nil)
74
+ # when "pinned"; _manage_pinned(nil) # ditch this??
94
75
  else
95
76
  puts "#{arg} is unknown"
96
77
  end
97
78
  end
98
79
 
99
- def _manage_pinned(arg, testing = false) # cloned from manage_links
80
+ def _manage_pinned # cloned from manage_links
100
81
  dir = @blog.view.dir/"themes/standard/widgets/pinned"
101
82
  data = dir/"list.data"
102
83
  edit_file(data)
103
84
  end
104
85
 
105
- def _manage_navbar(arg, testing = false) # cloned from manage_pages
86
+ def _manage_navbar # cloned from manage_pages
106
87
  dir = @blog.view.dir/"themes/standard/banner/navbar"
107
88
  files = Dir.entries(dir) - %w[. .. navbar.lt3]
108
89
  main_file = "[ navbar.lt3 ]"
@@ -131,13 +112,13 @@ module RuneBlog::REPL
131
112
  end
132
113
  end
133
114
 
134
- def _manage_links(arg, testing = false)
115
+ def _manage_links
135
116
  dir = @blog.view.dir/"themes/standard/widgets/links"
136
117
  data = dir/"list.data"
137
118
  edit_file(data)
138
119
  end
139
120
 
140
- def _manage_pages(arg, testing = false)
121
+ def _manage_pages(arg)
141
122
  dir = @blog.view.dir/"themes/standard/widgets/pages"
142
123
  # Assume child files already generated (and list.data??)
143
124
  data = dir/"list.data"
@@ -172,73 +153,53 @@ module RuneBlog::REPL
172
153
  end
173
154
  end
174
155
 
175
- def cmd_import(arg, testing = false)
156
+ def cmd_import
176
157
  files = ask("\n File(s) = ")
177
158
  system!("cp #{files} #{@blog.root}/views/#{@blog.view.name}/assets/")
178
159
  end
179
160
 
180
- def cmd_browse(arg, testing = false)
181
- reset_output
161
+ def cmd_browse
182
162
  url = @blog.view.publisher.url
183
163
  if url.nil?
184
- output! "Publish first."
185
164
  puts "\n Publish first."
186
- return @out
165
+ return
187
166
  end
188
167
  result = system!("open '#{url}'")
189
168
  raise CantOpen(url) unless result
190
- return @out
169
+ return
191
170
  end
192
171
 
193
- def cmd_preview(arg, testing = false)
194
- reset_output
172
+ def cmd_preview
195
173
  local = @blog.view.local_index
196
174
  unless File.exist?(local)
197
175
  puts "\n No index. Rebuilding..."
198
- cmd_rebuild(nil)
176
+ cmd_rebuild
199
177
  end
200
178
  result = system!("open #{local}")
201
179
  raise CantOpen(local) unless result
202
- @out
203
180
  rescue => err
204
- out = "/tmp/blog#{rand(100)}.txt"
205
- File.open(out, "w") do |f|
206
- f.puts err
207
- f.puts err.backtrace.join("\n")
208
- end
209
- puts "Error: See #{out}"
181
+ _tmp_error(err)
210
182
  end
211
183
 
212
- def cmd_publish(arg, testing = false)
184
+ def cmd_publish
213
185
  # Future Hal says please refactor this
214
- puts unless testing
215
- reset_output
186
+ puts
216
187
  unless @blog.view.can_publish?
217
188
  msg = "Can't publish... see global.lt3"
218
- puts msg unless testing
219
- output! msg
220
- return @out
189
+ puts msg
190
+ return
221
191
  end
222
192
 
223
193
  ret = RubyText.spinner(label: " Publishing... ") do
224
194
  @blog.view.publisher.publish
225
195
  end
226
- return @out unless ret
196
+ return unless ret
227
197
 
228
198
  vdir = @blog.view.dir
229
199
  dump("fix this later", "#{vdir}/last_published")
230
- if ! testing || ! ret
231
- puts " ...finished.\n "
232
- output! "...finished.\n"
233
- end
234
- return @out
200
+ puts " ...finished.\n " unless ret
235
201
  rescue => err
236
- out = "/tmp/blog#{rand(100)}.txt"
237
- File.open(out, "w") do |f|
238
- f.puts err
239
- f.puts err.backtrace.join("\n")
240
- end
241
- puts "Error: See #{out}"
202
+ _tmp_error(err)
242
203
  end
243
204
 
244
205
  def fresh?(src, dst)
@@ -259,49 +220,37 @@ module RuneBlog::REPL
259
220
  puts
260
221
  end
261
222
 
262
- def cmd_rebuild(arg, testing = false)
223
+ def cmd_rebuild
263
224
  debug "Starting cmd_rebuild..."
264
- reset_output
265
- puts unless testing
225
+ puts
226
+ regen_posts
266
227
  @blog.generate_view(@blog.view)
267
228
  @blog.generate_index(@blog.view)
268
- regen_posts
269
- @out
270
229
  rescue => err
271
- out = "/tmp/blog#{rand(100)}.txt"
272
- File.open(out, "w") do |f|
273
- f.puts err
274
- f.puts err.backtrace.join("\n")
275
- end
276
- puts "Error: See #{out}"
230
+ _tmp_error(err)
277
231
  end
278
232
 
279
- def cmd_change_view(arg, testing = false)
280
- reset_output
233
+ def cmd_change_view(arg)
281
234
  # Simplify this
282
235
  if arg.nil?
283
236
  viewnames = @blog.views.map {|x| x.name }
284
237
  n = viewnames.find_index(@blog.view.name)
285
238
  name = @blog.view.name
286
239
  # TODO: Add view description
287
- k, name = STDSCR.menu(title: "Views", items: viewnames, curr: n) unless testing
240
+ k, name = STDSCR.menu(title: "Views", items: viewnames, curr: n)
288
241
  return if name.nil?
289
242
  @blog.view = name
290
- output name + "\n"
291
- puts "\n ", fx(name, :bold), "\n" unless testing
292
- return @out
243
+ puts "\n ", fx(name, :bold), "\n"
244
+ return
293
245
  else
294
246
  if @blog.view?(arg)
295
247
  @blog.view = arg
296
- output "View: " + @blog.view.name.to_s
297
- puts "\n ", fx(arg, :bold), "\n" unless testing
248
+ puts "\n ", fx(arg, :bold), "\n"
298
249
  end
299
250
  end
300
- return @out
301
251
  end
302
252
 
303
- def cmd_new_view(arg, testing = false)
304
- reset_output
253
+ def cmd_new_view(arg)
305
254
  if arg.nil?
306
255
  arg = ask(fx("\nFilename: ", :bold))
307
256
  puts
@@ -313,20 +262,13 @@ module RuneBlog::REPL
313
262
  vim_params = '-c ":set hlsearch" -c ":hi Search ctermfg=2 ctermbg=6" +/"\(VIEW_.*\|SITE.*\)"'
314
263
  edit_file(@blog.view.dir/"themes/standard/global.lt3", vim: vim_params)
315
264
  @blog.change_view(arg)
316
- @out
317
265
  rescue ViewAlreadyExists
318
266
  puts 'Blog already exists'
319
267
  rescue => err
320
- out = "/tmp/blog#{rand(100)}.txt"
321
- File.open(out, "w") do |f|
322
- f.puts err
323
- f.puts err.backtrace.join("\n")
324
- end
325
- puts "Error: See #{out}"
268
+ _tmp_error(err)
326
269
  end
327
270
 
328
- def cmd_new_post(arg, testing = false)
329
- reset_output
271
+ def cmd_new_post
330
272
  if @blog.views.empty?
331
273
  puts "\n Create a view before creating the first post!\n "
332
274
  return
@@ -334,15 +276,8 @@ module RuneBlog::REPL
334
276
  title = ask("\nTitle: ")
335
277
  puts
336
278
  @blog.create_new_post(title)
337
- # STDSCR.clear
338
- @out
339
279
  rescue => err
340
- out = "/tmp/blog#{rand(100)}.txt"
341
- File.open(out, "w") do |f|
342
- f.puts err
343
- f.puts err.backtrace.join("\n")
344
- end
345
- puts "Error: See #{out}"
280
+ _tmp_error(err)
346
281
  end
347
282
 
348
283
  def _remove_post(arg, testing=false)
@@ -351,162 +286,125 @@ module RuneBlog::REPL
351
286
  puts "Post #{id} not found" if result.nil?
352
287
  end
353
288
 
354
- def cmd_remove_post(arg, testing = false)
355
- reset_output
289
+ def cmd_remove_post(arg)
356
290
  args = arg.split
357
291
  args.each do |x|
358
292
  # FIXME
359
293
  ret = _remove_post(x.to_i, false)
360
294
  puts ret
361
- output ret
362
295
  end
363
- @out
364
296
  end
365
297
 
366
- def cmd_edit_post(arg, testing = false)
367
- reset_output
298
+ def cmd_edit_post(arg)
368
299
  id = get_integer(arg)
369
300
  # Simplify this
370
301
  tag = "#{'%04d' % id}"
371
302
  files = ::Find.find(@blog.root/:drafts).to_a
372
303
  files = files.grep(/#{tag}-.*lt3/)
373
- files = files.map {|f| File.basename(f) }
374
- if files.size > 1
375
- msg = "Multiple files: #{files}"
376
- output msg
377
- puts msg unless testing
378
- return [false, msg]
379
- end
380
- if files.empty?
381
- msg = "\n Can't edit post #{id}"
382
- output msg
383
- puts msg unless testing
384
- return [false, msg]
385
- end
386
-
387
- file = files.first
388
- draft = @blog.root/:drafts/file
389
- vim_params = '-c G'
390
- result = edit_file(draft)
304
+ draft = exactly_one(files)
305
+ result = edit_file(draft, vim: '-c$')
391
306
  @blog.generate_post(draft)
392
307
  rescue => err
393
- out = "/tmp/blog#{rand(100)}.txt"
394
- File.open(out, "w") do |f|
395
- f.puts err
396
- f.puts err.backtrace.join("\n")
397
- end
398
- puts "Error: See #{out}"
308
+ _tmp_error(err)
399
309
  end
400
310
 
401
- def cmd_list_views(arg, testing = false)
402
- reset_output("\n")
403
- puts unless testing
311
+ def cmd_list_views
312
+ puts
404
313
  @blog.views.each do |v|
405
314
  v = v.to_s
406
315
  v = fx(v, :bold) if v == @blog.view.name
407
- output v + "\n"
408
316
  # FIXME: next 3 lines are crufty as hell
409
- lines = File.readlines(@blog.root/"views/#{v}/themes/standard/global.lt3")
410
- lines = lines.select {|x| x =~ /^blog / && x !~ /VIEW_/ }
317
+ lines = File.readlines(@blog.root/"views/#{v}/settings/view.txt")
318
+ lines = lines.select {|x| x =~ /^title / && x !~ /VIEW_/ }
411
319
  title = lines.first.split(" ", 2)[1]
412
- print " ", ('%15s' % v) unless testing
413
- puts " ", fx(title, :black) unless testing
320
+ print " ", ('%15s' % v)
321
+ puts " ", fx(title, :black)
414
322
  end
415
- puts unless testing
416
- # @out
323
+ puts
417
324
  end
418
325
 
419
- def cmd_list_posts(arg, testing = false)
420
- reset_output
326
+ def cmd_list_posts
421
327
  posts = @blog.posts # current view
422
328
  str = @blog.view.name + ":\n"
423
- output str
424
- puts unless testing
425
- puts " ", fx(str, :bold) unless testing
329
+ puts
426
330
  if posts.empty?
427
- output! "No posts"
428
- puts " No posts" unless testing
331
+ puts " No posts"
429
332
  else
430
333
  posts.each do |post|
431
- outstr " #{colored_slug(post)}\n"
432
334
  base = post.sub(/.lt3$/, "")
433
- num, rest = base[0..3], base[4..-1]
434
- puts " ", fx(num, Red), fx(rest, Blue) unless testing
335
+ dir = @blog.root/:posts/base
336
+ meta = nil
337
+ Dir.chdir(dir) { meta = @blog.read_metadata }
338
+ num, title = meta.num, meta.title
339
+ num = '%4d' % num.to_s
340
+ puts " ", fx(num, Red), " ", fx(title, Blue)
435
341
  draft = @blog.root/:drafts/post + ".lt3"
436
- other = @blog._get_views(draft) - [@blog.view.to_s]
342
+ other = meta.views - [@blog.view.to_s]
437
343
  unless other.empty?
438
- print fx(" "*7 + "also in: ", :bold)
344
+ print fx(" "*9 + "also in: ", :bold)
439
345
  puts other.join(", ")
440
346
  end
441
347
  end
442
348
  end
443
- puts unless testing
444
- @out
349
+ puts
445
350
  end
446
351
 
447
- def cmd_list_drafts(arg, testing = false)
448
- reset_output
352
+ def cmd_list_drafts
449
353
  drafts = @blog.drafts # current view
450
354
  if drafts.empty?
451
- output! "No drafts"
452
- puts "\n No drafts\n " unless testing
453
- return @out
355
+ puts "\n No drafts\n "
356
+ return
454
357
  else
455
- puts unless testing
358
+ puts
456
359
  drafts.each do |draft|
457
- outstr " #{colored_slug(draft.sub(/.lt3$/, ""))}\n"
458
360
  base = draft.sub(/.lt3$/, "")
459
- num, rest = base[0..3], base[4..-1]
460
- puts " ", fx(num, Red), fx(rest, Blue) unless testing
361
+ dir = @blog.root/:posts/base
362
+ meta = nil
363
+ Dir.chdir(dir) { meta = @blog.read_metadata }
364
+ num, title = meta.num, meta.title
365
+ num = '%4d' % num.to_s
366
+ puts " ", fx(num, Red), " ", fx(title, Blue)
461
367
  other = @blog._get_views(@blog.root/:drafts/draft) - [@blog.view.to_s]
462
368
  unless other.empty?
463
- print fx(" "*7 + "also in: ", :bold)
369
+ print fx(" "*9 + "also in: ", :bold)
464
370
  puts other.join(", ")
465
371
  end
466
372
  end
467
373
  end
468
- puts unless testing
469
- @out
374
+ puts
470
375
  end
471
376
 
472
- def cmd_list_assets(arg, testing = false)
473
- reset_output
377
+ def cmd_list_assets
474
378
  dir = @blog.view.dir + "/assets"
475
379
  assets = Dir[dir + "/*"]
476
380
  if assets.empty?
477
- output! "No assets"
478
- puts " No assets" unless testing
479
- return @out
381
+ puts " No assets"
382
+ return
480
383
  else
481
- puts unless testing
384
+ puts
482
385
  assets.each do |name|
483
386
  asset = File.basename(name)
484
- outstr asset
485
- puts " ", fx(asset, Blue) unless testing
387
+ puts " ", fx(asset, Blue)
486
388
  end
487
389
  end
488
- puts unless testing
489
- @out
390
+ puts
490
391
  end
491
392
 
492
- def cmd_ssh(arg, testing = false)
393
+ def cmd_ssh
493
394
  pub = @blog.view.publisher
494
395
  puts
495
396
  system!("tputs clear; ssh #{pub.user}@#{pub.server}")
496
397
  sleep 0.1
497
- cmd_clear(nil)
398
+ cmd_clear
498
399
  end
499
400
 
500
- def cmd_INVALID(arg, testing = false)
501
- reset_output "\n Command '#{arg}' was not understood."
401
+ def cmd_INVALID(arg)
502
402
  print fx("\n Command ", :bold)
503
403
  print fx(arg, Red, :bold)
504
404
  puts fx(" was not understood.\n ", :bold)
505
- @out
506
405
  end
507
406
 
508
- def cmd_legacy(arg = nil)
509
- # dir = ask("Dir = ")
407
+ def cmd_legacy
510
408
  dir = "sources/computing"
511
409
  puts "Importing from: #{dir}"
512
410
  files = Dir[dir/"**"]
@@ -555,7 +453,7 @@ module RuneBlog::REPL
555
453
  {Posts:} {Advanced:}
556
454
  ------------------------------------------- -------------------------------------------
557
455
  {p, post} Create a new post {config} Edit various system files
558
- {new post} Same as p, post {customize} (BUGGY) Change set of tags, extra views
456
+ {new post} Same as p, post
559
457
  {lsp, list posts} List posts in current view {preview} Look at current (local) view in browser
560
458
  {lsd, list drafts} List all drafts (all views) {browse} Look at current (published) view in browser
561
459
  {delete ID [ID...]} Remove multiple posts {rebuild} Regenerate all posts and relink
@@ -564,10 +462,8 @@ module RuneBlog::REPL
564
462
  {import ASSETS} Import assets (images, etc.) {manage WIDGET} Manage content/layout of a widget
565
463
  EOS
566
464
 
567
- def cmd_help(arg, testing = false)
568
- reset_output
465
+ def cmd_help
569
466
  msg = Help
570
- output msg
571
467
  msg.each_line do |line|
572
468
  e = line.each_char
573
469
  first = true
@@ -590,8 +486,6 @@ module RuneBlog::REPL
590
486
  print s1
591
487
  end
592
488
  end
593
- puts unless testing
594
- @out
489
+ puts
595
490
  end
596
491
  end
597
-