runeblog 0.2.7 → 0.2.12

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bdab9850e7d3b37635a64ae5467b5e228f6cce4c60f26e6a74453ac9b14a861e
4
- data.tar.gz: d858b5a90eb834d2cb9d057c5aaaf920d75867f869b2de0b632fb3c98e2e6e7b
3
+ metadata.gz: '08da4eebd5d24bcb8586ed0c4a977d79651fde7953df71fd94e7e6e74a09484f'
4
+ data.tar.gz: ec0907dc80d37026393c70327f81a572c418a5a3553a4eb2d256cecb2deae035
5
5
  SHA512:
6
- metadata.gz: a4bd722b8643c614047ccbdaa4d2e1ba63a4a5c9c6f4169f50e311fa340601b8c1c0f937f21a3caa6afa251aa8fc1c3b8b3d456e63adadb336177941bd0ea42a
7
- data.tar.gz: c69da06c60cf1da59dedd4fb94cfc99ae159a9c259b52b87785693d606f6d4e7b2e7dfaddcaf12b4fdbaad9e2ea258654b5dee3c57c01e6eb3bb568014b55c33
6
+ metadata.gz: 1645347a827726674875a324cd16ad9c21993c741a9b5d79f83c04459cc23b0d0a17bf1ad6c9b91d64ae57f71d180dd7bbfea850d28e1e46dc66e825cb641b53
7
+ data.tar.gz: 6bd64ef0e17ed76612b5d914de41fbcd4e916865a418acc6ae44755ad2d83fa852cce555c18a2d4c2c4b0a7569395ad4b84beca7ad070b5def25aa0209af8518
Binary file
@@ -3,6 +3,8 @@ require 'fileutils'
3
3
 
4
4
  # Home = Dir.pwd # unless Home
5
5
 
6
+ LEXT = ".lt3"
7
+
6
8
  module RuneBlog::Helpers
7
9
 
8
10
  def copy(src, dst)
@@ -31,23 +33,57 @@ exit unless rc
31
33
  # end
32
34
  end
33
35
 
34
- def stale?(src, dst)
36
+ def stale?(src, dst, force = false)
35
37
  log!(enter: __method__, args: [src, dst])
38
+ raise "Source #{src} not found in #{Dir.pwd}" unless File.exist?(src)
39
+ return true if force
36
40
  return true unless File.exist?(dst)
37
41
  return true if File.mtime(src) > File.mtime(dst)
38
42
  return false
39
43
  end
40
44
 
41
- def livetext(src, dst=nil)
42
- log!(enter: __method__, args: [src, dst])
43
- src << ".lt3" unless src.end_with?(".lt3")
44
- if dst
45
- dst << ".html" unless dst.end_with?(".html")
46
- else
47
- dst = src.sub(/.lt3$/, "")
45
+ # def livetext(src, dst=nil, dir=".")
46
+ # log!(enter: __method__, args: [src, dst])
47
+ # src << ".lt3" unless src.end_with?(".lt3")
48
+ # if dst
49
+ # dst << ".html" unless dst.end_with?(".html")
50
+ # else
51
+ # dst = src.sub(/.lt3$/, "")
52
+ # end
53
+ ## return unless stale?(src, dst)
54
+ # Dir.chdir(dir) { system("livetext #{src} >#{dst}") }
55
+ # end
56
+ #
57
+ # def livetext!(src, dst=nil, dir=".")
58
+ # log!(enter: __method__, args: [src, dst])
59
+ # src << ".lt3" unless src.end_with?(".lt3")
60
+ # if dst
61
+ # dst << ".html" unless dst.end_with?(".html")
62
+ # else
63
+ # dst = src.sub(/.lt3$/, "")
64
+ # end
65
+ ## return unless stale?(src, dst)
66
+ #STDERR.puts "-- livetext #{src} >#{dst} \n in: #{Dir.pwd}\n from: #{caller[0]}"
67
+ # Dir.chdir(dir) { system("livetext #{src} >#{dst}") }
68
+ #STDERR.puts "... completed"
69
+ # end
70
+
71
+ def xlate(cwd: Dir.pwd, src:,
72
+ dst: (strip = true; src.sub(/.lt3$/,"")),
73
+ copy: nil, debug: false, force: false)
74
+ src += LEXT unless src.end_with?(LEXT)
75
+ dst += ".html" unless dst.end_with?(".html") || strip
76
+ Dir.chdir(cwd) do
77
+ return unless stale?(src, dst, force)
78
+ if debug
79
+ STDERR.puts "-- xlate #{src} >#{dst}"
80
+ STDERR.puts " in: #{Dir.pwd}"
81
+ STDERR.puts " from: #{caller[0]}"
82
+ STDERR.puts " copy: #{copy}" if copy
83
+ end
84
+ rc = system("livetext #{src} >#{dst}")
48
85
  end
49
- # return unless stale?(src, dst)
50
- system("livetext #{src} >#{dst}")
86
+ STDERR.puts "...completed (shell returned #{rc})" if debug
51
87
  end
52
88
 
53
89
  def get_root
@@ -96,50 +96,72 @@ def list!
96
96
  _optional_blank_line
97
97
  end
98
98
 
99
- def html_body(file)
99
+ def _html_body(file)
100
100
  file.puts "<html>\n <body>"
101
101
  yield
102
102
  file.puts " </body>\n</html>"
103
103
  end
104
104
 
105
- def make_news_links
106
- # FIXME remember strings may not be safe
107
- line = _data.chomp
108
- input, cardfile, mainfile, card_title = *line.split(" ", 4)
109
- pairs = File.readlines(input).map {|line| line.chomp.split(",", 2) }
110
- # HTML for main area (iframe)
111
- File.open("#{mainfile}.html", "w") do |f|
112
- html_body(f) do
113
- f.puts "<h1>#{card_title}</h1>"
114
- pairs.each do |file, title|
115
- f.puts %[<a style="text-decoration: none; font-size: 24px" href="#{file}">#{title}</a> <br>]
116
- end
117
- end
118
- end
105
+ def _write_card(cardfile, mainfile, pairs, card_title, tag, relative: true)
119
106
  # HTML for sidebar card
107
+ log!(str: "Creating #{cardfile}.html", pwd: true)
108
+ TTY.puts "Creating #{cardfile}.html - pwd = #{Dir.pwd}"
120
109
  File.open("#{cardfile}.html", "w") do |f|
121
110
  f.puts <<-EOS
122
111
  <div class="card mb-3">
123
112
  <div class="card-body">
124
113
  <h5 class="card-title">
125
114
  <a href="javascript: void(0)"
126
- onclick="javascript:open_main('widgets/news/#{mainfile}.html')"
115
+ onclick="javascript:open_main('widgets/#{tag}/#{mainfile}.html')"
127
116
  style="text-decoration: none; color: black">#{card_title}</a>
128
117
  </h5>
118
+ <!-- <ul class="list-group list-group-flush"> -->
129
119
  EOS
120
+ log!(str: "Writing data pairs to #{cardfile}.html", pwd: true)
121
+ top = relative ? "widgets/#{tag}/" : ""
130
122
  pairs.each do |file, title|
131
123
  f.puts <<-EOS
132
124
  <li class="list-group-item"> <a href="javascript: void(0)"
133
- onclick="javascript:open_main('#{file}')">#{title}</a> </li>
125
+ onclick="javascript:open_main('#{top}#{file}')">#{title}</a> </li>
134
126
  EOS
135
127
  end
136
128
  f.puts <<-EOS
129
+ <!-- </ul> -->
137
130
  </div>
138
131
  </div>
139
132
  EOS
140
133
  end
141
134
  end
142
135
 
136
+ def _write_main(mainfile, pairs, card_title)
137
+ # HTML for main area (iframe)
138
+ log!(str: "Creating #{mainfile}.html", pwd: true)
139
+ TTY.puts "Creating #{mainfile}.html - pwd = #{Dir.pwd}"
140
+ File.open("#{mainfile}.html", "w") do |f|
141
+ _html_body(f) do
142
+ f.puts "<h1>#{card_title}</h1>"
143
+ pairs.each do |file, title|
144
+ f.puts %[<a style="text-decoration: none; font-size: 24px" href="#{file}">#{title}</a> <br>]
145
+ end
146
+ end
147
+ end
148
+ end
149
+
150
+ def make_main_links
151
+ log!(enter: __method__)
152
+ # FIXME remember strings may not be safe
153
+ line = _data.chomp
154
+ tag, card_title = *line.split(" ", 2)
155
+ cardfile, mainfile = "card-#{tag}", "main-#{tag}"
156
+ input = "list.data"
157
+ log!(str: "Reading #{input}", pwd: true)
158
+ pairs = File.readlines(input).map {|line| line.chomp.split(",", 2) }
159
+ _write_main(mainfile, pairs, card_title)
160
+ widget_relative = false # (tag != "news") # FIXME kludge!!!
161
+ _write_card(cardfile, mainfile, pairs, card_title, tag, relative: widget_relative)
162
+ log!(str: "...returning from method", pwd: true)
163
+ end
164
+
143
165
  ### inset
144
166
 
145
167
  def inset
@@ -236,23 +258,20 @@ def pin
236
258
  _optional_blank_line
237
259
  end
238
260
 
239
- def write_post
240
- raise "'post' was not called" unless @meta
241
- save = Dir.pwd
242
- @postdir.gsub!(/\/\//, "/") # FIXME unneeded?
243
- Dir.mkdir(@postdir) unless Dir.exist?(@postdir) # FIXME remember assets!
244
- Dir.chdir(@postdir)
245
- @meta.views = @meta.views.join(" ") if @meta.views.is_a? Array
246
- @meta.tags = @meta.tags.join(" ") if @meta.tags.is_a? Array
261
+ def _write_metadata
247
262
  File.write("teaser.txt", @meta.teaser)
248
-
249
263
  fields = [:num, :title, :date, :pubdate, :views, :tags]
250
-
251
264
  fname2 = "metadata.txt"
252
265
  f2 = File.open(fname2, "w") do |f2|
253
266
  fields.each {|fld| f2.puts "#{fld}: #{@meta.send(fld)}" }
254
267
  end
255
- Dir.chdir(save)
268
+ end
269
+
270
+ def write_post
271
+ raise "'post' was not called" unless @meta
272
+ @meta.views = @meta.views.join(" ") if @meta.views.is_a? Array
273
+ @meta.tags = @meta.tags.join(" ") if @meta.tags.is_a? Array
274
+ _write_metadata
256
275
  rescue => err
257
276
  puts "err = #{err}"
258
277
  puts err.backtrace.join("\n")
@@ -267,19 +286,25 @@ def teaser
267
286
  end
268
287
 
269
288
  def finalize
289
+ STDERR.puts :cp1
270
290
  unless @meta
271
291
  puts @live.body
272
292
  return
273
293
  end
294
+ STDERR.puts :cp4
274
295
  if @blog.nil?
275
296
  return @meta
276
297
  end
277
298
 
299
+ STDERR.puts :cp6
278
300
  @slug = @blog.make_slug(@meta)
301
+ STDERR.puts :cp7
279
302
  slug_dir = @slug
280
303
  @postdir = @blog.view.dir + "/posts/#{slug_dir}"
281
304
  STDERR.puts "--- finalize: pwd = #{Dir.pwd} postdir = #@postdir"
305
+ STDERR.puts :cp8
282
306
  write_post
307
+ STDERR.puts :cp9
283
308
  @meta
284
309
  end
285
310
 
@@ -60,7 +60,7 @@ class RuneBlog
60
60
  create_dirs(root)
61
61
  Dir.chdir(root) do
62
62
  system("cp #{RuneBlog::Path}/../empty_view.tgz .")
63
- create_dirs(:drafts, :views)
63
+ create_dirs(:drafts, :views, :posts)
64
64
  new_sequence
65
65
  end
66
66
  put_config(root: root)
@@ -99,6 +99,23 @@ class RuneBlog
99
99
  @post_tags = []
100
100
  end
101
101
 
102
+ def _deploy_local(dir)
103
+ log!(enter: __method__, args: [dir])
104
+ Dir.chdir(dir) do
105
+ views = File.readlines("metadata.txt").grep(/^.views /).first[7..-1].split
106
+ views.each {|v| system("cp *html #@root/views/#{v}/remote") }
107
+ end
108
+ end
109
+
110
+ def process_post(sourcefile)
111
+ log!(enter: __method__, args: [dir])
112
+ nslug = sourcefile.sub(/.lt3/, "")
113
+ dir = @root + "/posts/#{nslug}"
114
+ create_dir(dir)
115
+ xlate cwd: dir, src: sourcefile, debug: true
116
+ _deploy_local(dir)
117
+ end
118
+
102
119
  def inspect
103
120
  log!(enter: __method__)
104
121
  str = "blog: "
@@ -177,45 +194,59 @@ class RuneBlog
177
194
  Dir.exist?(DotDir) && File.exist?(DotDir + "/" + ConfigFile)
178
195
  end
179
196
 
180
- def _copy_to_staging
181
- copy!("themes/standard/", "staging/")
182
- copy!("themes/standard/widgets/", "staging/")
197
+ def make_dummy_publish_file(view_name)
198
+ log!(enter: __method__, args: [view_name])
199
+ vdir = "#@root/views/#{view_name}"
200
+ pub = [:user, :server, :docroot, :path, :proto]
201
+ pub = pub.map {|x| x.to_s + ": undefined" }
202
+ pub = pub.join("\n") + "\n"
203
+ dump(pub, "#{vdir}/publish")
183
204
  end
184
205
 
185
- def _copy_to_remote
186
- copy!("themes/standard/etc", "remote/")
187
- copy!("themes/standard/assets", "remote/")
188
- copy!("themes/standard/widgets", "remote/")
206
+ def mark_last_published(str)
207
+ log!(enter: __method__, args: [str])
208
+ dump(str, "last_published")
189
209
  end
190
210
 
191
- def create_view(arg)
192
- log!(enter: __method__, args: [arg])
193
- raise ArgumentError unless arg.is_a?(String) && ! arg.empty?
194
-
195
- names = self.views.map(&:to_s)
196
- raise ViewAlreadyExists(arg) if names.include?(arg)
197
-
198
- vdir = arg.dup
199
- raise DirAlreadyExists(vdir) if Dir.exist?(vdir)
211
+ def add_view(view_name)
212
+ log!(enter: __method__, args: [view_name])
213
+ view = RuneBlog::View.new(view_name)
214
+ @view = view # current view
215
+ @views << view # all views
216
+ view
217
+ end
200
218
 
219
+ def make_empty_view_tree(view_name)
220
+ log!(enter: __method__, args: [view_name])
201
221
  Dir.chdir(@root) do
202
222
  cmd1 = "tar zxvf empty_view.tgz >/dev/null 2>&1"
203
- cmd2 = "cp -r empty_view views/#{arg}"
223
+ cmd2 = "cp -r empty_view views/#{view_name}"
204
224
  system(cmd1)
205
225
  system(cmd2)
206
226
  end
227
+ end
207
228
 
208
- Dir.chdir("#@root/views/#{vdir}") do
209
- livetext "themes/standard/blog/generate", "remote/index"
210
- pub = "user: xxx\nserver: xxx\ndocroot: xxx\npath: xxx\nproto: xxx\n"
211
- dump(pub, "publish")
229
+ def check_valid_new_view(view_name)
230
+ log!(enter: __method__, args: [view_name])
231
+ raise ArgumentError unless view_name.is_a?(String)
232
+ raise ArgumentError if view_name.empty?
233
+ names = self.views.map(&:to_s)
234
+ bad = names.include?(view_name)
235
+ raise ViewAlreadyExists(view_name) if bad
236
+ vdir = "@root/views/#{view_name}"
237
+ raise DirAlreadyExists(view_name) if Dir.exist?(vdir)
238
+ return true # hm?
239
+ end
212
240
 
213
- view = RuneBlog::View.new(arg)
214
- self.view = view
215
- dump("Initial creation", "last_published")
216
- end
217
- @views << view
218
- @views
241
+ def create_view(view_name)
242
+ log!(enter: __method__, args: [view_name])
243
+ check_valid_new_view(view_name)
244
+ make_empty_view_tree(view_name)
245
+ # xlate cwd: "#@root/views/#{view_name}/themes/standard/blog",
246
+ # src: "generate", dst: "../../../remote/index"
247
+ make_dummy_publish_file(view_name)
248
+ mark_last_published("Initial creation")
249
+ add_view(view_name)
219
250
  end
220
251
 
221
252
  def delete_view(name, force = false)
@@ -304,7 +335,7 @@ class RuneBlog
304
335
  def create_new_post(title, testing = false, teaser: nil, body: nil, other_views: [])
305
336
  log!(enter: __method__, args: [title, testing, teaser, body, other_views])
306
337
  meta = nil
307
- Dir.chdir(self.view.dir) do
338
+ Dir.chdir("#@root/posts/") do
308
339
  post = Post.create(title: title, teaser: teaser, body: body, other_views: other_views)
309
340
  post.edit unless testing
310
341
  post.build
@@ -322,6 +353,7 @@ class RuneBlog
322
353
  sourcefile = "#@root/drafts/#{file}"
323
354
  result = system("#@editor #{sourcefile} +8") unless testing
324
355
  raise EditorProblem(sourcefile) unless result
356
+ process_post(sourcefile)
325
357
  nil
326
358
  rescue => err
327
359
  error(err)
@@ -359,9 +391,9 @@ class RuneBlog
359
391
  def generate_view(view) # huh?
360
392
  log!(enter: __method__, args: [view])
361
393
  generate_index(view) # recent posts (recent.html)
362
- Dir.chdir(@root + "/views/#{view}/themes/standard") do
363
- livetext "blog/generate.lt3", "../../remote/index.html"
364
- end
394
+ vdir = "#@root/views/#{view}"
395
+ xlate cwd: "#{vdir}/themes/standard",
396
+ src: "blog/generate.lt3", dst: "#{vdir}/remote/index.html"
365
397
  end
366
398
 
367
399
  def _get_views(draft)
@@ -388,36 +420,65 @@ class RuneBlog
388
420
  [noext, viewdir, slugdir, aslug, theme]
389
421
  end
390
422
 
423
+ def _post_metadata(draft, pdraft)
424
+ log!(enter: __method__, args: [draft, pdraft])
425
+ title_line = File.readlines(draft).grep(/^.title /).first
426
+ title = title_line.split(" ", 2)[1]
427
+ # pdir = "
428
+ Dir.chdir(pdraft) do
429
+ excerpt = File.read("teaser.txt")
430
+ vars = %[.set title="#{title.chomp}"\n] +
431
+ %[.set teaser="#{excerpt.chomp}"]
432
+ File.open("#{pdraft}/vars.lt3", "w") {|f| f.puts vars }
433
+ end
434
+ end
435
+
436
+ def copy_widget_html # FIXME make better?
437
+ log!(enter: __method__)
438
+ wdir = "../themes/standard/widgets"
439
+ widgets = Dir["#{wdir}/*"].select {|w| File.directory?(w) }
440
+ widgets.each do |w|
441
+ dir = File.basename(w)
442
+ rem = "#{remote}/#{w}"
443
+ create_dirs(rem)
444
+ system("cp #{w}/*html #{rem}")
445
+ end
446
+ end
447
+
448
+ def _handle_post(draft, view)
449
+ log!(enter: __method__, args: [draft, view])
450
+
451
+ fname = File.basename(draft) # 0001-this-is-a-post.lt3
452
+ nslug = fname.sub(/.lt3$/, "") # 0001-this-is-a-post
453
+ aslug = nslug.sub(/\d\d\d\d-/, "") # this-is-a-post
454
+ ahtml = aslug + ".html" # this-is-a-post.html
455
+ pdraft = "#@root/posts/#{nslug}"
456
+ remote = "#@root/views/#{view}/remote"
457
+ @theme = "#@root/views/#{view}/themes/standard"
458
+ # Step 1...
459
+ create_dirs(pdraft)
460
+ xlate cwd: pdraft, src: draft, dst: "guts.html"
461
+ _post_metadata(draft, pdraft)
462
+ # Step 2...
463
+ vposts = "#@root/views/#{view}/posts/"
464
+ copy!(pdraft, vposts) # ??
465
+ # Step 3..
466
+ copy(pdraft + "/guts.html", "#@theme/post")
467
+ copy(pdraft + "/vars.lt3", "#@theme/post")
468
+ # Step 4...
469
+ xlate cwd: "#{@theme}/post", src: "generate.lt3",
470
+ dst: "#{remote}/#{ahtml}", copy: "#{@theme}/post"
471
+ xlate cwd: "#{@theme}/post", src: "permalink.lt3",
472
+ dst: "#{remote}/permalink/#{ahtml}"
473
+ copy_widget_html
474
+ end
475
+
391
476
  def generate_post(draft)
392
477
  log!(enter: __method__, args: [draft])
393
478
  views = _get_views(draft)
394
- views.each do |view|
395
- noext, viewdir, slugdir, aslug, @theme = _copy_get_dirs(draft, view)
396
- remote = viewdir + "/remote"
397
- Dir.chdir(slugdir) do
398
- copy(draft, ".")
399
- lt3 = draft.split("/")[-1]
400
- # Remember: Some posts may be in more than one view -- careful with links back
401
- copy(lt3, remote)
402
- html = noext[5..-1]
403
- livetext draft, html # livetext "foobar.lt3", "foobar.html"
404
- copy(html, "../../remote/post/index.html")
405
- title_line = File.readlines(draft).grep(/^.title /).first
406
- title = title_line.split(" ", 2)[1]
407
- excerpt = File.read("teaser.txt")
408
- vars = %[.set title="#{title.chomp}"\n] +
409
- %[.set teaser="#{excerpt.chomp}"]
410
- theme = "../../theme/standard"
411
- File.open("vars.lt3", "w") {|f| f.puts vars }
412
- livetext "#{theme}/post/generate.lt3", "#{remote}/#{html}"
413
- livetext "#{theme}/post/permalink.lt3", "#{remote}/permalink/#{html}"
414
- log!(str: "About to enter remote/", pwd: true, dir: true)
415
- Dir.chdir(remote) do
416
- log!(str: "Now in remote/", pwd: true, dir: true)
417
- system("cp -r ../themes/standard/widgets .")
418
- log!(str: "finished with remote/", pwd: true, dir: true)
419
- end
420
- end
479
+ views.each do |view|
480
+ _handle_post(draft, view)
481
+ generate_view(view)
421
482
  end
422
483
  end
423
484
 
@@ -2,7 +2,7 @@
2
2
  if ! (Object.constants.include?(:RuneBlog) && RuneBlog.constants.include?(:Path))
3
3
 
4
4
  class RuneBlog
5
- VERSION = "0.2.7"
5
+ VERSION = "0.2.12"
6
6
 
7
7
  path = Gem.find_files("runeblog").grep(/runeblog-/).first
8
8
  Path = File.dirname(path)
@@ -20,7 +20,7 @@ spec = Gem::Specification.new do |s|
20
20
  s.authors = ["Hal Fulton"]
21
21
  s.email = 'rubyhacker@gmail.com'
22
22
  s.executables << "blog"
23
- s.add_runtime_dependency 'livetext', '~> 0.8', '>= 0.8.92'
23
+ s.add_runtime_dependency 'livetext', '~> 0.8', '>= 0.8.93'
24
24
  s.add_runtime_dependency 'rubytext', '~> 0.1', '>= 0.1.16'
25
25
 
26
26
  # Files...
@@ -30,7 +30,7 @@ spec = Gem::Specification.new do |s|
30
30
  test = Find.find("test").to_a
31
31
  misc = %w[./README.lt3 ./README.md ./runeblog.gemspec]
32
32
 
33
- system("tar zcvf empty_view.tgz empty_view")
33
+ # system("tar zcvf empty_view.tgz empty_view")
34
34
 
35
35
  s.files = main + misc + test + ["empty_view.tgz"]
36
36
  s.homepage = 'https://github.com/Hal9000/runeblog'
@@ -42,10 +42,6 @@ x = RuneBlog.new(".blogs")
42
42
 
43
43
  x.create_view("around_austin") # FIXME remember view title!
44
44
 
45
- # puts "=== about to call: x.generate_view('around_austin')"
46
- x.generate_view("around_austin")
47
- # puts "=== ...returned"
48
-
49
45
  # Hack:
50
46
  if File.exist?("publish")
51
47
  system("cp publish .blogs/views/around_austin/publish")
@@ -116,7 +112,7 @@ Blah blah Waller Creek blah blah...
116
112
  BODY
117
113
 
118
114
  make_post(x, "Life on Sabine Street", <<-EXCERPT, <<-BODY)
119
- It's like Pooh Corner, except not.
115
+ It's like Pooh Corner (except not).
120
116
  EXCERPT
121
117
  This is about Sabine St, blah blah lorem ipsum dolor...
122
118
  BODY
@@ -130,6 +126,8 @@ But I first heard of them
130
126
  in 2005.
131
127
  BODY
132
128
 
129
+ x.generate_view("around_austin")
130
+
133
131
  x.change_view("around_austin")
134
132
 
135
133
  puts
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.2.7
4
+ version: 0.2.12
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-09-26 00:00:00.000000000 Z
11
+ date: 2019-10-02 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.8'
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: 0.8.92
22
+ version: 0.8.93
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.8'
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: 0.8.92
32
+ version: 0.8.93
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: rubytext
35
35
  requirement: !ruby/object:Gem::Requirement