runeblog 0.0.62 → 0.0.63
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 +4 -4
- data/bin/blog +1 -1
- data/data/VERSION +1 -1
- data/lib/helpers-repl.rb +0 -13
- data/lib/repl.rb +51 -54
- data/lib/runeblog.rb +68 -22
- data/test/repl.rb +17 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: be9dde18efd8f52b1115c2c07337c594207c64c3
|
4
|
+
data.tar.gz: 1c36e3cdf18c43de3dbb0867f60b9abdc0de8a09
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 97b396fc32bb61ce2d7e174cf9a65194d8222ecae94bb98a4fd7d15ca3a3c43ece1babe7e71d2f0cfc4451a33d3ad4b885bfe76ebbb2c79cee3d69773b718674
|
7
|
+
data.tar.gz: 2b34bbd321ca613ae0cf1100ceed94998a284c553fd1128c73ea0a96451840f709a91d48fdcf22875680b1ab27dc4b95b2f73a9f3e2cd718917c8406e425a822
|
data/bin/blog
CHANGED
data/data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
RuneBlog v 0.0.
|
1
|
+
RuneBlog v 0.0.63 2018-09-20
|
data/lib/helpers-repl.rb
CHANGED
@@ -173,23 +173,10 @@ module RuneBlog::REPL
|
|
173
173
|
"\e[1m#{str}\e[22m"
|
174
174
|
end
|
175
175
|
|
176
|
-
def interpolate(str)
|
177
|
-
wrap = "<<-EOS\n#{str}\nEOS"
|
178
|
-
eval wrap
|
179
|
-
end
|
180
|
-
|
181
176
|
def colored_slug(slug)
|
182
177
|
red(slug[0..3])+blue(slug[4..-1])
|
183
178
|
end
|
184
179
|
|
185
|
-
### create_dir
|
186
|
-
|
187
|
-
def create_dir(dir)
|
188
|
-
cmd = "mkdir -p #{dir} >/dev/null 2>&1"
|
189
|
-
result = system(cmd)
|
190
|
-
raise "Can't create #{dir}" unless result
|
191
|
-
end
|
192
|
-
|
193
180
|
def import(arg = nil)
|
194
181
|
# open_blog unless @blog
|
195
182
|
|
data/lib/repl.rb
CHANGED
@@ -35,7 +35,7 @@ module RuneBlog::REPL
|
|
35
35
|
|
36
36
|
def cmd_open_local
|
37
37
|
reset_output
|
38
|
-
local = @blog.viewdir(@view) + "/index.html"
|
38
|
+
local = @blog.viewdir(@blog.view) + "/index.html"
|
39
39
|
result = system("open #{local}")
|
40
40
|
raise CantOpen, local unless result
|
41
41
|
rescue => err
|
@@ -46,8 +46,8 @@ module RuneBlog::REPL
|
|
46
46
|
# TBD clunky FIXME
|
47
47
|
reset_output
|
48
48
|
check_empty(arg)
|
49
|
-
user, server, sroot, spath = *@deploy[@view]
|
50
|
-
if files.empty?
|
49
|
+
user, server, sroot, spath = *@deploy[@blog.view]
|
50
|
+
if files.empty? # FIXME baloney
|
51
51
|
output! "No files to deploy"
|
52
52
|
return @out
|
53
53
|
end
|
@@ -76,10 +76,7 @@ module RuneBlog::REPL
|
|
76
76
|
reset_output
|
77
77
|
check_empty(arg)
|
78
78
|
puts
|
79
|
-
|
80
|
-
files = Dir.entries("#@root/src/").grep /\d\d\d\d.*.lt3$/
|
81
|
-
files.map! {|f| File.basename(f) }
|
82
|
-
files = files.sort.reverse
|
79
|
+
files = @blog.find_src_slugs
|
83
80
|
files.each {|file| rebuild_post(file) }
|
84
81
|
nil
|
85
82
|
rescue => err
|
@@ -89,7 +86,7 @@ module RuneBlog::REPL
|
|
89
86
|
def cmd_relink(arg)
|
90
87
|
reset_output
|
91
88
|
check_empty(arg)
|
92
|
-
@blog.
|
89
|
+
@blog.relink
|
93
90
|
nil
|
94
91
|
rescue => err
|
95
92
|
error(err)
|
@@ -98,7 +95,6 @@ module RuneBlog::REPL
|
|
98
95
|
def cmd_list_views(arg)
|
99
96
|
reset_output("\n")
|
100
97
|
check_empty(arg)
|
101
|
-
abort "Config file not read" unless @blog
|
102
98
|
@blog.views.each do |v|
|
103
99
|
v = bold(v) if v == @blog.view
|
104
100
|
outstr " #{v}\n"
|
@@ -110,15 +106,15 @@ module RuneBlog::REPL
|
|
110
106
|
|
111
107
|
def cmd_change_view(arg)
|
112
108
|
reset_output
|
113
|
-
#
|
109
|
+
# Simplify this
|
114
110
|
if arg.nil?
|
115
111
|
output "#{@blog.view}"
|
116
112
|
return @out
|
117
113
|
else
|
118
114
|
list = @blog.views.grep /^#{arg}/
|
119
115
|
if list.size == 1
|
120
|
-
@
|
121
|
-
output! "View: #{@view}\n" if arg != @view
|
116
|
+
@blog.view = list.first
|
117
|
+
output! "View: #{@blog.view}\n" if arg != @blog.view
|
122
118
|
else
|
123
119
|
output! "view #{arg.inspect} does not exist\n"
|
124
120
|
end
|
@@ -130,9 +126,8 @@ module RuneBlog::REPL
|
|
130
126
|
|
131
127
|
def cmd_new_view(arg)
|
132
128
|
reset_output
|
133
|
-
arg ||= ask("New view: ") # check validity later
|
134
129
|
@blog.create_view(arg)
|
135
|
-
|
130
|
+
nil
|
136
131
|
rescue => err
|
137
132
|
error(err)
|
138
133
|
end
|
@@ -140,9 +135,9 @@ module RuneBlog::REPL
|
|
140
135
|
def cmd_new_post(arg)
|
141
136
|
reset_output
|
142
137
|
check_empty(arg)
|
143
|
-
|
144
|
-
@blog.create_new_post(
|
145
|
-
|
138
|
+
title = ask("Title: ")
|
139
|
+
@blog.create_new_post(title)
|
140
|
+
nil
|
146
141
|
rescue => err
|
147
142
|
error(err)
|
148
143
|
end
|
@@ -150,10 +145,11 @@ module RuneBlog::REPL
|
|
150
145
|
def cmd_kill(arg)
|
151
146
|
reset_output
|
152
147
|
args = arg.split
|
153
|
-
args.each {|x| cmd_remove_post(
|
154
|
-
|
148
|
+
args.each {|x| cmd_remove_post(x, false) }
|
149
|
+
nil
|
155
150
|
rescue => err
|
156
151
|
error(err)
|
152
|
+
puts err.backtrace
|
157
153
|
end
|
158
154
|
|
159
155
|
#-- FIXME affects linking, building, deployment...
|
@@ -161,8 +157,8 @@ module RuneBlog::REPL
|
|
161
157
|
def cmd_remove_post(arg, safe=true)
|
162
158
|
reset_output
|
163
159
|
id = get_integer(arg)
|
164
|
-
files = @blog.
|
165
|
-
if files.
|
160
|
+
files = @blog.post_exists?(id)
|
161
|
+
if files.nil?
|
166
162
|
output! "No such post found (#{id})"
|
167
163
|
return @out
|
168
164
|
end
|
@@ -175,25 +171,26 @@ module RuneBlog::REPL
|
|
175
171
|
ques.sub!(/\?/, " all these?") if files.size > 1
|
176
172
|
yes = yesno red(ques)
|
177
173
|
if yes
|
178
|
-
|
179
|
-
error_cant_delete(files) unless result
|
174
|
+
@blog.remove_post(id)
|
180
175
|
output! "Deleted\n"
|
181
176
|
else
|
182
177
|
output! "No action taken\n"
|
183
178
|
end
|
184
179
|
else
|
185
|
-
|
186
|
-
error_cant_delete(files) unless result
|
180
|
+
@blog.remove_post(id)
|
187
181
|
output! "Deleted:\n"
|
188
182
|
files.each {|f| output " #{f}\n" }
|
189
183
|
end
|
190
184
|
@out
|
191
185
|
rescue ArgumentError => err
|
192
186
|
puts err
|
187
|
+
puts err.backtrace
|
193
188
|
rescue CantDelete => err
|
194
189
|
puts err
|
190
|
+
puts err.backtrace
|
195
191
|
rescue => err
|
196
192
|
error(err)
|
193
|
+
puts err.backtrace
|
197
194
|
end
|
198
195
|
|
199
196
|
#-- FIXME affects linking, building, deployment...
|
@@ -201,16 +198,16 @@ module RuneBlog::REPL
|
|
201
198
|
def cmd_edit_post(arg)
|
202
199
|
reset_output
|
203
200
|
id = get_integer(arg)
|
204
|
-
#
|
201
|
+
# Simplify this
|
205
202
|
tag = "#{'%04d' % id}"
|
206
|
-
files = Find.find(@root+"/src").to_a
|
203
|
+
files = Find.find(@blog.root+"/src").to_a
|
207
204
|
files = files.grep(/#{tag}-/)
|
208
205
|
files = files.map {|f| File.basename(f) }
|
209
206
|
return red("Multiple files: #{files}") if files.size > 1
|
210
207
|
return red("\n No such post found (#{id})") if files.empty?
|
211
208
|
|
212
209
|
file = files.first
|
213
|
-
result = system("vi
|
210
|
+
result = system("vi #{@blog.root}/src/#{file}")
|
214
211
|
raise "Problem editing #{file}" unless result
|
215
212
|
|
216
213
|
rebuild_post(file)
|
@@ -223,7 +220,7 @@ module RuneBlog::REPL
|
|
223
220
|
check_empty(arg)
|
224
221
|
reset_output
|
225
222
|
posts = @blog.posts # current view
|
226
|
-
output @view + ":\n"
|
223
|
+
output @blog.view + ":\n"
|
227
224
|
if posts.empty?
|
228
225
|
output! "No posts\n"
|
229
226
|
else
|
@@ -297,30 +294,30 @@ module RuneBlog::REPL
|
|
297
294
|
|
298
295
|
## Funky stuff -- needs to move?
|
299
296
|
|
300
|
-
def new_blog!(arg) # FIXME weird?
|
301
|
-
check_empty(arg)
|
302
|
-
return if RuneBlog.exist?
|
303
|
-
yes = yesno(red(" No .blog found. Create new blog? "))
|
304
|
-
RuneBlog.create_new_blog if yes
|
305
|
-
rescue => err
|
306
|
-
error(err)
|
307
|
-
end
|
308
|
-
|
309
|
-
def open_blog # Crude - FIXME later
|
310
|
-
@blog = RuneBlog.new
|
311
|
-
@view = @blog.view # current view
|
312
|
-
@sequence = @blog.sequence
|
313
|
-
@root = @blog.root
|
314
|
-
@deploy ||= {}
|
315
|
-
@blog.views.each do |view|
|
316
|
-
deployment = @blog.viewdir(@view) + "deploy"
|
317
|
-
check_file_exists(deployment)
|
318
|
-
lines = File.readlines(deployment).map {|x| x.chomp }
|
319
|
-
@deploy[@view] = lines
|
320
|
-
end
|
321
|
-
@blog
|
322
|
-
rescue => err
|
323
|
-
error(err)
|
324
|
-
end
|
297
|
+
# def new_blog!(arg) # FIXME weird?
|
298
|
+
# check_empty(arg)
|
299
|
+
# return if RuneBlog.exist?
|
300
|
+
# yes = yesno(red(" No .blog found. Create new blog? "))
|
301
|
+
# RuneBlog.create_new_blog if yes
|
302
|
+
# rescue => err
|
303
|
+
# error(err)
|
304
|
+
# end
|
305
|
+
|
306
|
+
# def open_blog # Crude - FIXME later
|
307
|
+
# @blog = RuneBlog.new
|
308
|
+
# @view = @blog.view # current view
|
309
|
+
# @sequence = @blog.sequence
|
310
|
+
# @root = @blog.root
|
311
|
+
# @deploy ||= {}
|
312
|
+
# @blog.views.each do |view|
|
313
|
+
# deployment = @blog.viewdir(@view) + "deploy"
|
314
|
+
# check_file_exists(deployment)
|
315
|
+
# lines = File.readlines(deployment).map {|x| x.chomp }
|
316
|
+
# @deploy[@view] = lines
|
317
|
+
# end
|
318
|
+
# @blog
|
319
|
+
# rescue => err
|
320
|
+
# error(err)
|
321
|
+
# end
|
325
322
|
|
326
323
|
end
|
data/lib/runeblog.rb
CHANGED
@@ -3,7 +3,7 @@ require 'yaml'
|
|
3
3
|
require 'livetext'
|
4
4
|
|
5
5
|
class RuneBlog
|
6
|
-
VERSION = "0.0.
|
6
|
+
VERSION = "0.0.63"
|
7
7
|
|
8
8
|
Path = File.expand_path(File.join(File.dirname(__FILE__)))
|
9
9
|
DefaultData = Path + "/../data"
|
@@ -16,8 +16,8 @@ class RuneBlog
|
|
16
16
|
BlogTrailer = File.read(BlogTrailerPath) rescue "not found"
|
17
17
|
BlogTemplate = File.read(BlogTemplatePath) rescue "not found"
|
18
18
|
|
19
|
-
attr_reader :root, :views, :
|
20
|
-
|
19
|
+
attr_reader :root, :views, :sequence
|
20
|
+
attr_accessor :view # FIXME
|
21
21
|
|
22
22
|
def self.create_new_blog
|
23
23
|
#-- what if data already exists?
|
@@ -73,6 +73,13 @@ class RuneBlog
|
|
73
73
|
self.views << arg
|
74
74
|
end
|
75
75
|
|
76
|
+
def delete_view(name, force = false)
|
77
|
+
if force
|
78
|
+
system("rm -rf #@root/views/#{name}")
|
79
|
+
@views -= [name]
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
76
83
|
def deployment_url
|
77
84
|
return nil unless @deploy[@view]
|
78
85
|
lines = @deploy[@view]
|
@@ -89,13 +96,14 @@ class RuneBlog
|
|
89
96
|
end
|
90
97
|
|
91
98
|
def files_by_id(id)
|
92
|
-
files = Find.find(
|
99
|
+
files = Find.find(self.root).to_a
|
93
100
|
tag = "#{'%04d' % id}"
|
94
|
-
files.grep(/#{tag}-/)
|
101
|
+
result = files.grep(/#{tag}-/)
|
102
|
+
result
|
95
103
|
end
|
96
104
|
|
97
|
-
def create_new_post(title,
|
98
|
-
view
|
105
|
+
def create_new_post(title, testing = false)
|
106
|
+
view = @view
|
99
107
|
date = Time.now.strftime("%Y-%m-%d")
|
100
108
|
@template = <<-EOS
|
101
109
|
.mixin liveblog
|
@@ -110,14 +118,15 @@ Teaser goes here.
|
|
110
118
|
Remainder of post goes here.
|
111
119
|
EOS
|
112
120
|
|
113
|
-
@slug = make_slug(title)
|
121
|
+
num, @slug = make_slug(title)
|
114
122
|
@fname = @slug + ".lt3"
|
115
123
|
File.open("#@root/src/#@fname", "w") {|f| f.puts @template }
|
116
|
-
edit_initial_post(@fname)
|
117
|
-
process_post(@fname)
|
124
|
+
edit_initial_post(@fname) unless testing
|
125
|
+
process_post(@fname) #- FIXME handle each view
|
118
126
|
publish_post(@meta)
|
127
|
+
num
|
119
128
|
rescue => err
|
120
|
-
error(err)
|
129
|
+
puts err # error(err)
|
121
130
|
end
|
122
131
|
|
123
132
|
def edit_initial_post(file)
|
@@ -149,7 +158,7 @@ EOS
|
|
149
158
|
@meta = @main.process_file(path, binding)
|
150
159
|
raise "process_file returned nil" if @meta.nil?
|
151
160
|
|
152
|
-
slug = self.make_slug(@meta.title, self.sequence)
|
161
|
+
num, slug = self.make_slug(@meta.title, self.sequence)
|
153
162
|
slug = file.sub(/.lt3$/, "")
|
154
163
|
@meta.slug = slug
|
155
164
|
@meta
|
@@ -158,16 +167,12 @@ EOS
|
|
158
167
|
end
|
159
168
|
|
160
169
|
def publish_post(meta)
|
161
|
-
puts " #{colored_slug(meta.slug)}"
|
170
|
+
puts " #{colored_slug(meta.slug)}" rescue nil # puts(meta.slug) # FIXME
|
162
171
|
# First gather the views
|
163
172
|
views = meta.views
|
164
|
-
|
165
|
-
views.each do |view|
|
166
|
-
print "#{view} "
|
167
|
-
link_post_view(view)
|
168
|
-
end
|
173
|
+
views.each {|view| link_post_view(view) }
|
169
174
|
# assets = find_all_assets(@meta.assets, views)
|
170
|
-
|
175
|
+
nil
|
171
176
|
rescue => err
|
172
177
|
error(err)
|
173
178
|
end
|
@@ -209,6 +214,10 @@ EOS
|
|
209
214
|
error(err)
|
210
215
|
end
|
211
216
|
|
217
|
+
def relink
|
218
|
+
self.views.each {|view| generate_index(view) }
|
219
|
+
end
|
220
|
+
|
212
221
|
def reload_post(file)
|
213
222
|
@main ||= Livetext.new
|
214
223
|
@main.main.output = File.new("/tmp/WHOA","w") # FIXME srsly?
|
@@ -241,10 +250,22 @@ EOS
|
|
241
250
|
error(err)
|
242
251
|
end
|
243
252
|
|
244
|
-
def
|
245
|
-
|
253
|
+
def remove_post(num)
|
254
|
+
list = files_by_id(num)
|
255
|
+
result = system("rm -rf #{list.join(' ')}")
|
256
|
+
error_cant_delete(files) unless result
|
257
|
+
end
|
258
|
+
|
259
|
+
def post_exists?(num)
|
260
|
+
list = files_by_id(num)
|
261
|
+
list.empty? ? nil : list
|
262
|
+
end
|
263
|
+
|
264
|
+
def make_slug(title, postnum = nil)
|
265
|
+
postnum ||= self.next_sequence
|
266
|
+
num = '%04d' % postnum # FIXME can do better
|
246
267
|
slug = title.downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '')
|
247
|
-
"#{num}-#{slug}"
|
268
|
+
[postnum, "#{num}-#{slug}"]
|
248
269
|
end
|
249
270
|
|
250
271
|
def subdirs(dir)
|
@@ -252,4 +273,29 @@ EOS
|
|
252
273
|
dirs.reject! {|x| ! File.directory?("#@root/views/#{x}") }
|
253
274
|
dirs
|
254
275
|
end
|
276
|
+
|
277
|
+
def create_dir(dir)
|
278
|
+
cmd = "mkdir -p #{dir} >/dev/null 2>&1"
|
279
|
+
result = system(cmd)
|
280
|
+
raise "Can't create #{dir}" unless result
|
281
|
+
end
|
282
|
+
|
283
|
+
def error(err) # FIXME - this is duplicated
|
284
|
+
str = "\n Error: #{err}"
|
285
|
+
puts str
|
286
|
+
puts err.backtrace # [0]
|
287
|
+
end
|
288
|
+
|
289
|
+
def interpolate(str)
|
290
|
+
wrap = "<<-EOS\n#{str}\nEOS"
|
291
|
+
eval wrap
|
292
|
+
end
|
293
|
+
|
294
|
+
def find_src_slugs
|
295
|
+
files = Dir.entries("#@root/src/").grep /\d\d\d\d.*.lt3$/
|
296
|
+
files.map! {|f| File.basename(f) }
|
297
|
+
files = files.sort.reverse
|
298
|
+
files
|
299
|
+
end
|
300
|
+
|
255
301
|
end
|
data/test/repl.rb
CHANGED
@@ -8,7 +8,7 @@ class TestREPL < Minitest::Test
|
|
8
8
|
include RuneBlog::REPL
|
9
9
|
|
10
10
|
def setup
|
11
|
-
@blog =
|
11
|
+
@blog = RuneBlog.new
|
12
12
|
end
|
13
13
|
|
14
14
|
def test_001_cmd_help
|
@@ -112,5 +112,21 @@ class TestREPL < Minitest::Test
|
|
112
112
|
assert @blog.views.sort == ["view1", "view2"]
|
113
113
|
end
|
114
114
|
|
115
|
+
def test_011_create_delete_view
|
116
|
+
@blog.create_view("anotherview")
|
117
|
+
assert @blog.views.sort == ["anotherview", "view1", "view2"], "After create: #{@blog.views.sort.inspect}"
|
118
|
+
@blog.delete_view("anotherview", true)
|
119
|
+
assert @blog.views.sort == ["view1", "view2"], "After delete: #{@blog.views.sort.inspect}"
|
120
|
+
end
|
121
|
+
|
122
|
+
def test_012_create_remove_post # FIXME - several problems here
|
123
|
+
@blog.change_view("view2")
|
124
|
+
assert @blog.view == "view2"
|
125
|
+
before = @blog.posts.size
|
126
|
+
num = @blog.create_new_post("Uninteresting title", true)
|
127
|
+
assert @blog.posts.size == before + 1, "Don't see new post"
|
128
|
+
@blog.remove_post(num)
|
129
|
+
assert @blog.posts.size == before, "Failed to delete post"
|
130
|
+
end
|
115
131
|
end
|
116
132
|
|
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.0.
|
4
|
+
version: 0.0.63
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hal Fulton
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-09-
|
11
|
+
date: 2018-09-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: livetext
|