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