runeblog 0.0.50 → 0.0.51
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 -2
- data/data/VERSION +1 -1
- data/lib/helpers-repl.rb +301 -0
- data/lib/repl.rb +11 -253
- data/lib/runeblog.rb +1 -1
- metadata +2 -3
- data/lib/blogcmds.rb +0 -76
- data/lib/prettiness.rb +0 -29
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 68148eb4defbbdf649cc895e85c7812d499eb135
|
4
|
+
data.tar.gz: 134d702ca04162a0067d0a123fe3899eafa9547b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8a34474dd674facbb7f3c5d20ac9c0d22da3d71f622a1719ece79e199c9eda11b3b9f56b60e83f3e766ddd774125ea461aefcc45f53780a5c9c4312d42ad786c
|
7
|
+
data.tar.gz: a2b395583a84b4425336831cba39e31218bd49ecc56172193915662694190f291b62037967c76db290d9d9dffc2b880458f65c2f0b05233efd5481f7dc47d351
|
data/bin/blog
CHANGED
@@ -3,7 +3,6 @@
|
|
3
3
|
$: << "./lib"
|
4
4
|
|
5
5
|
require 'repl'
|
6
|
-
require 'blogcmds'
|
7
6
|
|
8
7
|
trap("INT") { }
|
9
8
|
|
@@ -33,7 +32,7 @@ if cmd.nil? # REPL
|
|
33
32
|
cmd = gets
|
34
33
|
cmd_quit([]) if cmd.nil? # ^D
|
35
34
|
cmd.chomp!
|
36
|
-
meth, params = RuneBlog::
|
35
|
+
meth, params = RuneBlog::REPL.choose_method(cmd)
|
37
36
|
send(meth, params)
|
38
37
|
end
|
39
38
|
else # one command
|
data/data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
RuneBlog v 0.0.
|
1
|
+
RuneBlog v 0.0.51 2018-09-01
|
data/lib/helpers-repl.rb
ADDED
@@ -0,0 +1,301 @@
|
|
1
|
+
|
2
|
+
# Reopening...
|
3
|
+
|
4
|
+
module RuneBlog::REPL
|
5
|
+
Patterns =
|
6
|
+
{"help" => :cmd_help,
|
7
|
+
"h" => :cmd_help,
|
8
|
+
|
9
|
+
"version" => :cmd_version,
|
10
|
+
"v" => :cmd_version,
|
11
|
+
|
12
|
+
"list views" => :cmd_list_views,
|
13
|
+
"lsv" => :cmd_list_views,
|
14
|
+
|
15
|
+
"new view $name" => :cmd_new_view,
|
16
|
+
|
17
|
+
"new post" => :cmd_new_post,
|
18
|
+
"p" => :cmd_new_post,
|
19
|
+
"post" => :cmd_new_post,
|
20
|
+
|
21
|
+
"change view $name" => :cmd_change_view,
|
22
|
+
"cv $name" => :cmd_change_view,
|
23
|
+
"cv" => :cmd_change_view, # 0-arity must come second
|
24
|
+
|
25
|
+
"list posts" => :cmd_list_posts,
|
26
|
+
"lsp" => :cmd_list_posts,
|
27
|
+
|
28
|
+
"list drafts" => :cmd_list_drafts,
|
29
|
+
"lsd" => :cmd_list_drafts,
|
30
|
+
|
31
|
+
"rm $postid" => :cmd_remove_post,
|
32
|
+
|
33
|
+
"kill >postid" => :cmd_kill,
|
34
|
+
|
35
|
+
"edit $postid" => :cmd_edit_post,
|
36
|
+
"ed $postid" => :cmd_edit_post,
|
37
|
+
"e $postid" => :cmd_edit_post,
|
38
|
+
|
39
|
+
"preview" => :cmd_preview,
|
40
|
+
|
41
|
+
"pre" => :cmd_preview,
|
42
|
+
|
43
|
+
"browse" => :cmd_browse,
|
44
|
+
|
45
|
+
"relink" => :cmd_relink,
|
46
|
+
|
47
|
+
"rebuild" => :cmd_rebuild,
|
48
|
+
|
49
|
+
"deploy" => :cmd_deploy,
|
50
|
+
|
51
|
+
"q" => :cmd_quit,
|
52
|
+
"quit" => :cmd_quit
|
53
|
+
}
|
54
|
+
|
55
|
+
Regexes = {}
|
56
|
+
Patterns.each_pair do |pat, meth|
|
57
|
+
rx = "^" + pat
|
58
|
+
rx.gsub!(/ /, " +")
|
59
|
+
rx.gsub!(/\$(\w+) */) { " *(?<#{$1}>\\w+)" }
|
60
|
+
# How to handle multiple optional args?
|
61
|
+
rx.sub!(/>(\w+)$/) { "(.+)" }
|
62
|
+
p rx if rx =~ /kill/
|
63
|
+
rx << "$"
|
64
|
+
rx = Regexp.new(rx)
|
65
|
+
Regexes[rx] = meth
|
66
|
+
end
|
67
|
+
|
68
|
+
def self.choose_method(cmd)
|
69
|
+
found = nil
|
70
|
+
params = []
|
71
|
+
Regexes.each_pair do |rx, meth|
|
72
|
+
m = cmd.match(rx)
|
73
|
+
# puts "#{rx} =~ #{cmd.inspect} --> #{m.to_a.inspect}"
|
74
|
+
result = m ? m.to_a : nil
|
75
|
+
next unless result
|
76
|
+
found = meth
|
77
|
+
params = m[1..-1]
|
78
|
+
end
|
79
|
+
meth = found || :cmd_INVALID
|
80
|
+
params = cmd if meth == :cmd_INVALID
|
81
|
+
[meth, params]
|
82
|
+
end
|
83
|
+
def error(err)
|
84
|
+
str = "\n Error: #{red(err)}"
|
85
|
+
puts str
|
86
|
+
puts err.backtrace
|
87
|
+
end
|
88
|
+
|
89
|
+
def ask(prompt, meth = :to_s)
|
90
|
+
print prompt
|
91
|
+
STDOUT.flush
|
92
|
+
STDIN.gets.chomp.send(meth)
|
93
|
+
end
|
94
|
+
|
95
|
+
def yesno(prompt, meth = :to_s)
|
96
|
+
print prompt
|
97
|
+
STDOUT.flush
|
98
|
+
STDIN.gets.chomp.upcase[0] == "Y"
|
99
|
+
end
|
100
|
+
|
101
|
+
def clear
|
102
|
+
puts "\e[H\e[2J" # clear screen
|
103
|
+
end
|
104
|
+
|
105
|
+
def red(text)
|
106
|
+
"\e[31m#{text}\e[0m"
|
107
|
+
end
|
108
|
+
|
109
|
+
def blue(text)
|
110
|
+
"\e[34m#{text}\e[0m"
|
111
|
+
end
|
112
|
+
|
113
|
+
def bold(str)
|
114
|
+
"\e[1m#{str}\e[22m"
|
115
|
+
end
|
116
|
+
|
117
|
+
def interpolate(str)
|
118
|
+
wrap = "<<-EOS\n#{str}\nEOS"
|
119
|
+
eval wrap
|
120
|
+
end
|
121
|
+
|
122
|
+
def colored_slug(slug)
|
123
|
+
red(slug[0..3])+blue(slug[4..-1])
|
124
|
+
end
|
125
|
+
|
126
|
+
### process_post
|
127
|
+
|
128
|
+
def process_post(file)
|
129
|
+
@main ||= Livetext.new
|
130
|
+
@main.main.output = File.new("/tmp/WHOA","w")
|
131
|
+
path = @root + "/src/#{file}"
|
132
|
+
@meta = @main.process_file(path, binding)
|
133
|
+
raise "process_file returned nil" if @meta.nil?
|
134
|
+
|
135
|
+
slug = @blog.make_slug(@meta.title, @blog.sequence)
|
136
|
+
slug = file.sub(/.lt3$/, "")
|
137
|
+
@meta.slug = slug
|
138
|
+
@meta
|
139
|
+
rescue => err
|
140
|
+
error(err)
|
141
|
+
end
|
142
|
+
|
143
|
+
### reload_post
|
144
|
+
|
145
|
+
def reload_post(file)
|
146
|
+
@main ||= Livetext.new
|
147
|
+
@main.main.output = File.new("/tmp/WHOA","w") # FIXME srsly?
|
148
|
+
@meta = process_post(file)
|
149
|
+
@meta.slug = file.sub(/.lt3$/, "")
|
150
|
+
@meta
|
151
|
+
rescue => err
|
152
|
+
error(err)
|
153
|
+
end
|
154
|
+
|
155
|
+
### posting
|
156
|
+
|
157
|
+
def posting(view, meta)
|
158
|
+
# FIXME clean up and generalize
|
159
|
+
ref = "#{view}/#{meta.slug}/index.html"
|
160
|
+
<<-HTML
|
161
|
+
<br>
|
162
|
+
<font size=+1>#{meta.pubdate} </font>
|
163
|
+
<font size=+2 color=blue><a href=../#{ref} style="text-decoration: none">#{meta.title}</font></a>
|
164
|
+
<br>
|
165
|
+
#{meta.teaser}
|
166
|
+
<a href=../#{ref} style="text-decoration: none">Read more...</a>
|
167
|
+
<br><br>
|
168
|
+
<hr>
|
169
|
+
HTML
|
170
|
+
end
|
171
|
+
|
172
|
+
### generate_index
|
173
|
+
|
174
|
+
def generate_index(view)
|
175
|
+
# Gather all posts, create list
|
176
|
+
vdir = "#@root/views/#{view}"
|
177
|
+
posts = Dir.entries(vdir).grep /^\d\d\d\d/
|
178
|
+
posts = posts.sort.reverse
|
179
|
+
|
180
|
+
# Add view header/trailer
|
181
|
+
head = File.read("#{vdir}/custom/blog_header.html") rescue RuneBlog::BlogHeader
|
182
|
+
tail = File.read("#{vdir}/custom/blog_trailer.html") rescue RuneBlog::BlogTrailer
|
183
|
+
@bloghead = interpolate(head)
|
184
|
+
@blogtail = interpolate(tail)
|
185
|
+
|
186
|
+
# Output view
|
187
|
+
posts.map! {|post| YAML.load(File.read("#{vdir}/#{post}/metadata.yaml")) }
|
188
|
+
File.open("#{vdir}/index.html", "w") do |f|
|
189
|
+
f.puts @bloghead
|
190
|
+
posts.each {|post| f.puts posting(view, post) }
|
191
|
+
f.puts @blogtail
|
192
|
+
end
|
193
|
+
rescue => err
|
194
|
+
error(err)
|
195
|
+
end
|
196
|
+
|
197
|
+
### create_dir
|
198
|
+
|
199
|
+
def create_dir(dir)
|
200
|
+
cmd = "mkdir -p #{dir} >/dev/null 2>&1"
|
201
|
+
result = system(cmd)
|
202
|
+
raise "Can't create #{dir}" unless result
|
203
|
+
end
|
204
|
+
|
205
|
+
### link_post_view
|
206
|
+
|
207
|
+
def link_post_view(view)
|
208
|
+
# Create dir using slug (index.html, metadata?)
|
209
|
+
vdir = @blog.viewdir(view)
|
210
|
+
dir = vdir + @meta.slug + "/"
|
211
|
+
create_dir(dir + "assets")
|
212
|
+
File.write("#{dir}/metadata.yaml", @meta.to_yaml)
|
213
|
+
template = File.read(vdir + "custom/post_template.html")
|
214
|
+
post = interpolate(template)
|
215
|
+
File.write(dir + "index.html", post)
|
216
|
+
generate_index(view)
|
217
|
+
rescue => err
|
218
|
+
error(err)
|
219
|
+
end
|
220
|
+
|
221
|
+
### find_asset
|
222
|
+
|
223
|
+
# def find_asset(asset) # , views)
|
224
|
+
# # STDERR.puts "repl find_asset: @meta = #{@meta.inspect}"
|
225
|
+
# views = @meta.views
|
226
|
+
# views.each do |view|
|
227
|
+
# vdir = @config.viewdir(view)
|
228
|
+
# post_dir = "#{vdir}#{@meta.slug}/assets/"
|
229
|
+
# path = post_dir + asset
|
230
|
+
# STDERR.puts " Seeking #{path}"
|
231
|
+
# return path if File.exist?(path)
|
232
|
+
# end
|
233
|
+
# views.each do |view|
|
234
|
+
# dir = @config.viewdir(view) + "/assets/"
|
235
|
+
# path = dir + asset
|
236
|
+
# STDERR.puts " Seeking #{path}"
|
237
|
+
# return path if File.exist?(path)
|
238
|
+
# end
|
239
|
+
# top = @root + "/assets/"
|
240
|
+
# path = top + asset
|
241
|
+
# STDERR.puts " Seeking #{path}"
|
242
|
+
# return path if File.exist?(path)
|
243
|
+
#
|
244
|
+
# return nil
|
245
|
+
# end
|
246
|
+
#
|
247
|
+
# ### find_all_assets
|
248
|
+
#
|
249
|
+
# def find_all_assets(list, views)
|
250
|
+
# # STDERR.puts "\n Called find_all_assets with #{list.inspect}"
|
251
|
+
# list ||= []
|
252
|
+
# list.each {|asset| puts "#{asset} => #{find_asset(asset, views)}" }
|
253
|
+
# end
|
254
|
+
|
255
|
+
### publish_post
|
256
|
+
|
257
|
+
def publish_post(meta)
|
258
|
+
puts " #{colored_slug(meta.slug)}"
|
259
|
+
# First gather the views
|
260
|
+
views = meta.views
|
261
|
+
print " Views: "
|
262
|
+
views.each do |view|
|
263
|
+
print "#{view} "
|
264
|
+
link_post_view(view)
|
265
|
+
end
|
266
|
+
# assets = find_all_assets(@meta.assets, views)
|
267
|
+
puts
|
268
|
+
rescue => err
|
269
|
+
error(err)
|
270
|
+
end
|
271
|
+
|
272
|
+
### rebuild_post
|
273
|
+
|
274
|
+
def rebuild_post(file)
|
275
|
+
reload_post(file)
|
276
|
+
publish_post(@meta) # FIXME ??
|
277
|
+
rescue => err
|
278
|
+
error(err)
|
279
|
+
end
|
280
|
+
|
281
|
+
def import(arg = nil)
|
282
|
+
open_blog unless @blog
|
283
|
+
|
284
|
+
arg = nil if arg == ""
|
285
|
+
arg ||= ask("Filename: ") # check validity later
|
286
|
+
name = arg
|
287
|
+
grep = `grep ^.title #{name}`
|
288
|
+
@title = grep.sub(/^.title /, "")
|
289
|
+
@slug = @blog.make_slug(@title)
|
290
|
+
@fname = @slug + ".lt3"
|
291
|
+
result = system("cp #{name} #@root/src/#@fname")
|
292
|
+
raise "Could not copy #{name} to #@root/src/#@fname" unless result
|
293
|
+
|
294
|
+
edit_initial_post(@fname)
|
295
|
+
process_post(@fname)
|
296
|
+
publish_post(@meta) # if publish?
|
297
|
+
rescue => err
|
298
|
+
error(err)
|
299
|
+
end
|
300
|
+
|
301
|
+
end
|
data/lib/repl.rb
CHANGED
@@ -21,50 +21,22 @@ require 'ostruct'
|
|
21
21
|
@view
|
22
22
|
=end
|
23
23
|
|
24
|
-
require '
|
24
|
+
require 'helpers-repl' # FIXME structure
|
25
25
|
|
26
26
|
module RuneBlog::REPL
|
27
27
|
|
28
|
-
### error
|
29
|
-
|
30
|
-
def error(err)
|
31
|
-
str = "\n Error: #{red(err)}"
|
32
|
-
puts str
|
33
|
-
puts err.backtrace
|
34
|
-
end
|
35
|
-
|
36
|
-
### ask
|
37
|
-
|
38
|
-
def ask(prompt, meth = :to_s)
|
39
|
-
print prompt
|
40
|
-
STDOUT.flush
|
41
|
-
STDIN.gets.chomp.send(meth)
|
42
|
-
end
|
43
|
-
|
44
|
-
def yesno(prompt, meth = :to_s)
|
45
|
-
print prompt
|
46
|
-
STDOUT.flush
|
47
|
-
STDIN.gets.chomp.upcase[0] == "Y"
|
48
|
-
end
|
49
|
-
|
50
|
-
### quit
|
51
|
-
|
52
28
|
def cmd_quit(arg)
|
53
29
|
raise "Glitch: Got an argument" if arg != []
|
54
30
|
puts "\n "
|
55
31
|
exit
|
56
32
|
end
|
57
33
|
|
58
|
-
### version
|
59
|
-
|
60
34
|
def cmd_version(arg)
|
61
35
|
raise "Glitch: Got an argument" if arg != []
|
62
36
|
puts "\n " + RuneBlog::VERSION
|
63
37
|
end
|
64
38
|
|
65
|
-
|
66
|
-
|
67
|
-
def new_blog!(arg)
|
39
|
+
def new_blog!(arg) # FIXME weird?
|
68
40
|
raise "Glitch: Got an argument" if arg != []
|
69
41
|
return if RuneBlog.exist?
|
70
42
|
yn = yesno(red(" No .blog found. Create new blog? "))
|
@@ -73,8 +45,6 @@ module RuneBlog::REPL
|
|
73
45
|
error(err)
|
74
46
|
end
|
75
47
|
|
76
|
-
### open_blog
|
77
|
-
|
78
48
|
def open_blog # Crude - FIXME later
|
79
49
|
# new_blog!([]) unless RuneBlog.exist?
|
80
50
|
@blog = RuneBlog.new
|
@@ -86,8 +56,6 @@ module RuneBlog::REPL
|
|
86
56
|
error(err)
|
87
57
|
end
|
88
58
|
|
89
|
-
### edit_initial_post
|
90
|
-
|
91
59
|
def edit_initial_post(file)
|
92
60
|
result = system("vi #@root/src/#{file} +8 ")
|
93
61
|
raise "Problem editing #@root/src/#{file}" unless result
|
@@ -95,8 +63,6 @@ module RuneBlog::REPL
|
|
95
63
|
error(err)
|
96
64
|
end
|
97
65
|
|
98
|
-
### browse
|
99
|
-
|
100
66
|
def cmd_browse
|
101
67
|
raise "Glitch: Got an argument" if arg != []
|
102
68
|
@deploy ||= {}
|
@@ -110,9 +76,7 @@ module RuneBlog::REPL
|
|
110
76
|
error(err)
|
111
77
|
end
|
112
78
|
|
113
|
-
|
114
|
-
|
115
|
-
def open_local
|
79
|
+
def cmd_open_local
|
116
80
|
result = system("open #{@blog.viewdir(@view)}/index.html")
|
117
81
|
raise "Problem opening #{@blog.viewdir(@view)}/index.html" unless result
|
118
82
|
rescue => err
|
@@ -153,163 +117,6 @@ module RuneBlog::REPL
|
|
153
117
|
error(err)
|
154
118
|
end
|
155
119
|
|
156
|
-
### process_post
|
157
|
-
|
158
|
-
def process_post(file)
|
159
|
-
@main ||= Livetext.new
|
160
|
-
@main.main.output = File.new("/tmp/WHOA","w")
|
161
|
-
path = @root + "/src/#{file}"
|
162
|
-
@meta = @main.process_file(path, binding)
|
163
|
-
raise "process_file returned nil" if @meta.nil?
|
164
|
-
|
165
|
-
slug = @blog.make_slug(@meta.title, @blog.sequence)
|
166
|
-
slug = file.sub(/.lt3$/, "")
|
167
|
-
@meta.slug = slug
|
168
|
-
@meta
|
169
|
-
rescue => err
|
170
|
-
error(err)
|
171
|
-
end
|
172
|
-
|
173
|
-
### reload_post
|
174
|
-
|
175
|
-
def reload_post(file)
|
176
|
-
@main ||= Livetext.new
|
177
|
-
@main.main.output = File.new("/tmp/WHOA","w") # FIXME srsly?
|
178
|
-
@meta = process_post(file)
|
179
|
-
@meta.slug = file.sub(/.lt3$/, "")
|
180
|
-
@meta
|
181
|
-
rescue => err
|
182
|
-
error(err)
|
183
|
-
end
|
184
|
-
|
185
|
-
### posting
|
186
|
-
|
187
|
-
def posting(view, meta)
|
188
|
-
# FIXME clean up and generalize
|
189
|
-
ref = "#{view}/#{meta.slug}/index.html"
|
190
|
-
<<-HTML
|
191
|
-
<br>
|
192
|
-
<font size=+1>#{meta.pubdate} </font>
|
193
|
-
<font size=+2 color=blue><a href=../#{ref} style="text-decoration: none">#{meta.title}</font></a>
|
194
|
-
<br>
|
195
|
-
#{meta.teaser}
|
196
|
-
<a href=../#{ref} style="text-decoration: none">Read more...</a>
|
197
|
-
<br><br>
|
198
|
-
<hr>
|
199
|
-
HTML
|
200
|
-
end
|
201
|
-
|
202
|
-
### generate_index
|
203
|
-
|
204
|
-
def generate_index(view)
|
205
|
-
# Gather all posts, create list
|
206
|
-
vdir = "#@root/views/#{view}"
|
207
|
-
posts = Dir.entries(vdir).grep /^\d\d\d\d/
|
208
|
-
posts = posts.sort.reverse
|
209
|
-
|
210
|
-
# Add view header/trailer
|
211
|
-
head = File.read("#{vdir}/custom/blog_header.html") rescue RuneBlog::BlogHeader
|
212
|
-
tail = File.read("#{vdir}/custom/blog_trailer.html") rescue RuneBlog::BlogTrailer
|
213
|
-
@bloghead = interpolate(head)
|
214
|
-
@blogtail = interpolate(tail)
|
215
|
-
|
216
|
-
# Output view
|
217
|
-
posts.map! {|post| YAML.load(File.read("#{vdir}/#{post}/metadata.yaml")) }
|
218
|
-
File.open("#{vdir}/index.html", "w") do |f|
|
219
|
-
f.puts @bloghead
|
220
|
-
posts.each {|post| f.puts posting(view, post) }
|
221
|
-
f.puts @blogtail
|
222
|
-
end
|
223
|
-
rescue => err
|
224
|
-
error(err)
|
225
|
-
end
|
226
|
-
|
227
|
-
### create_dir
|
228
|
-
|
229
|
-
def create_dir(dir)
|
230
|
-
cmd = "mkdir -p #{dir} >/dev/null 2>&1"
|
231
|
-
result = system(cmd)
|
232
|
-
raise "Can't create #{dir}" unless result
|
233
|
-
end
|
234
|
-
|
235
|
-
### link_post_view
|
236
|
-
|
237
|
-
def link_post_view(view)
|
238
|
-
# Create dir using slug (index.html, metadata?)
|
239
|
-
vdir = @blog.viewdir(view)
|
240
|
-
dir = vdir + @meta.slug + "/"
|
241
|
-
create_dir(dir + "assets")
|
242
|
-
File.write("#{dir}/metadata.yaml", @meta.to_yaml)
|
243
|
-
template = File.read(vdir + "custom/post_template.html")
|
244
|
-
post = interpolate(template)
|
245
|
-
File.write(dir + "index.html", post)
|
246
|
-
generate_index(view)
|
247
|
-
rescue => err
|
248
|
-
error(err)
|
249
|
-
end
|
250
|
-
|
251
|
-
### find_asset
|
252
|
-
|
253
|
-
# def find_asset(asset) # , views)
|
254
|
-
# # STDERR.puts "repl find_asset: @meta = #{@meta.inspect}"
|
255
|
-
# views = @meta.views
|
256
|
-
# views.each do |view|
|
257
|
-
# vdir = @config.viewdir(view)
|
258
|
-
# post_dir = "#{vdir}#{@meta.slug}/assets/"
|
259
|
-
# path = post_dir + asset
|
260
|
-
# STDERR.puts " Seeking #{path}"
|
261
|
-
# return path if File.exist?(path)
|
262
|
-
# end
|
263
|
-
# views.each do |view|
|
264
|
-
# dir = @config.viewdir(view) + "/assets/"
|
265
|
-
# path = dir + asset
|
266
|
-
# STDERR.puts " Seeking #{path}"
|
267
|
-
# return path if File.exist?(path)
|
268
|
-
# end
|
269
|
-
# top = @root + "/assets/"
|
270
|
-
# path = top + asset
|
271
|
-
# STDERR.puts " Seeking #{path}"
|
272
|
-
# return path if File.exist?(path)
|
273
|
-
#
|
274
|
-
# return nil
|
275
|
-
# end
|
276
|
-
#
|
277
|
-
# ### find_all_assets
|
278
|
-
#
|
279
|
-
# def find_all_assets(list, views)
|
280
|
-
# # STDERR.puts "\n Called find_all_assets with #{list.inspect}"
|
281
|
-
# list ||= []
|
282
|
-
# list.each {|asset| puts "#{asset} => #{find_asset(asset, views)}" }
|
283
|
-
# end
|
284
|
-
|
285
|
-
### publish_post
|
286
|
-
|
287
|
-
def publish_post(meta)
|
288
|
-
puts " #{colored_slug(meta.slug)}"
|
289
|
-
# First gather the views
|
290
|
-
views = meta.views
|
291
|
-
print " Views: "
|
292
|
-
views.each do |view|
|
293
|
-
print "#{view} "
|
294
|
-
link_post_view(view)
|
295
|
-
end
|
296
|
-
# assets = find_all_assets(@meta.assets, views)
|
297
|
-
puts
|
298
|
-
rescue => err
|
299
|
-
error(err)
|
300
|
-
end
|
301
|
-
|
302
|
-
### rebuild_post
|
303
|
-
|
304
|
-
def rebuild_post(file)
|
305
|
-
reload_post(file)
|
306
|
-
publish_post(@meta) # FIXME ??
|
307
|
-
rescue => err
|
308
|
-
error(err)
|
309
|
-
end
|
310
|
-
|
311
|
-
### rebuild
|
312
|
-
|
313
120
|
def cmd_rebuild(arg)
|
314
121
|
raise "Glitch: Got an argument" if arg != []
|
315
122
|
puts
|
@@ -321,8 +128,6 @@ module RuneBlog::REPL
|
|
321
128
|
error(err)
|
322
129
|
end
|
323
130
|
|
324
|
-
### relink
|
325
|
-
|
326
131
|
def cmd_relink(arg)
|
327
132
|
raise "Glitch: Got an argument" if arg != []
|
328
133
|
@blog.views.each {|view| generate_index(view) }
|
@@ -330,15 +135,6 @@ module RuneBlog::REPL
|
|
330
135
|
error(err)
|
331
136
|
end
|
332
137
|
|
333
|
-
# ### publish?
|
334
|
-
#
|
335
|
-
# def publish?
|
336
|
-
# yn = ask(red(" Publish? y/n "))
|
337
|
-
# yn.upcase == "Y"
|
338
|
-
# end
|
339
|
-
|
340
|
-
### list_views
|
341
|
-
|
342
138
|
def cmd_list_views(arg)
|
343
139
|
abort "Config file not read" unless @blog
|
344
140
|
raise "Glitch: Got an argument" if arg != []
|
@@ -388,28 +184,6 @@ module RuneBlog::REPL
|
|
388
184
|
error(err)
|
389
185
|
end
|
390
186
|
|
391
|
-
### import
|
392
|
-
|
393
|
-
def import(arg = nil)
|
394
|
-
open_blog unless @blog
|
395
|
-
|
396
|
-
arg = nil if arg == ""
|
397
|
-
arg ||= ask("Filename: ") # check validity later
|
398
|
-
name = arg
|
399
|
-
grep = `grep ^.title #{name}`
|
400
|
-
@title = grep.sub(/^.title /, "")
|
401
|
-
@slug = @blog.make_slug(@title)
|
402
|
-
@fname = @slug + ".lt3"
|
403
|
-
result = system("cp #{name} #@root/src/#@fname")
|
404
|
-
raise "Could not copy #{name} to #@root/src/#@fname" unless result
|
405
|
-
|
406
|
-
edit_initial_post(@fname)
|
407
|
-
process_post(@fname)
|
408
|
-
publish_post(@meta) # if publish?
|
409
|
-
rescue => err
|
410
|
-
error(err)
|
411
|
-
end
|
412
|
-
|
413
187
|
### new_post
|
414
188
|
|
415
189
|
def cmd_new_post(arg)
|
@@ -422,20 +196,16 @@ module RuneBlog::REPL
|
|
422
196
|
file = @blog.create_new_post(@title, @date, @view)
|
423
197
|
edit_initial_post(file)
|
424
198
|
process_post(file) #- FIXME handle each view
|
425
|
-
publish_post(@meta)
|
199
|
+
publish_post(@meta)
|
426
200
|
rescue => err
|
427
201
|
error(err)
|
428
202
|
end
|
429
203
|
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
args = str.split
|
434
|
-
args.each {|arg| remove_post(arg, false) }
|
204
|
+
def cmd_kill(arg)
|
205
|
+
args = arg.first.split
|
206
|
+
args.each {|x| cmd_remove_post([x], false) }
|
435
207
|
end
|
436
208
|
|
437
|
-
### remove_post
|
438
|
-
|
439
209
|
#-- FIXME affects linking, building, deployment...
|
440
210
|
|
441
211
|
def cmd_remove_post(arg, safe=true)
|
@@ -465,13 +235,9 @@ module RuneBlog::REPL
|
|
465
235
|
raise "Problem mass-deleting file(s)" unless result
|
466
236
|
end
|
467
237
|
rescue => err
|
468
|
-
|
469
|
-
puts err.backtrace
|
470
|
-
puts
|
238
|
+
error(err)
|
471
239
|
end
|
472
240
|
|
473
|
-
### edit_post
|
474
|
-
|
475
241
|
#-- FIXME affects linking, building, deployment...
|
476
242
|
|
477
243
|
def cmd_edit_post(arg)
|
@@ -490,13 +256,9 @@ module RuneBlog::REPL
|
|
490
256
|
|
491
257
|
rebuild_post(file)
|
492
258
|
rescue => err
|
493
|
-
|
494
|
-
puts err.backtrace
|
495
|
-
puts
|
259
|
+
error(err)
|
496
260
|
end
|
497
261
|
|
498
|
-
### list_posts
|
499
|
-
|
500
262
|
def cmd_list_posts(arg)
|
501
263
|
raise "Glitch: Got an argument" if arg != []
|
502
264
|
dir = @blog.viewdir(@view)
|
@@ -509,14 +271,10 @@ module RuneBlog::REPL
|
|
509
271
|
posts.each {|post| puts " #{colored_slug(post)}" }
|
510
272
|
end
|
511
273
|
end
|
512
|
-
rescue
|
513
|
-
|
514
|
-
puts err.backtrace
|
515
|
-
exit
|
274
|
+
rescue => err
|
275
|
+
error(err)
|
516
276
|
end
|
517
277
|
|
518
|
-
### list_drafts
|
519
|
-
|
520
278
|
def cmd_list_drafts(arg)
|
521
279
|
raise "Glitch: Got an argument" if arg != []
|
522
280
|
dir = "#@root/src"
|
data/lib/runeblog.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
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.51
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hal Fulton
|
@@ -47,8 +47,7 @@ files:
|
|
47
47
|
- data/views/_default/custom/post_template.html
|
48
48
|
- data/views/_default/deploy
|
49
49
|
- data/views/_default/last_deployed
|
50
|
-
- lib/
|
51
|
-
- lib/prettiness.rb
|
50
|
+
- lib/helpers-repl.rb
|
52
51
|
- lib/repl.rb
|
53
52
|
- lib/runeblog.rb
|
54
53
|
- runeblog.gemspec
|
data/lib/blogcmds.rb
DELETED
@@ -1,76 +0,0 @@
|
|
1
|
-
class RuneBlog::Command
|
2
|
-
Patterns =
|
3
|
-
{"help" => :cmd_help,
|
4
|
-
"h" => :cmd_help,
|
5
|
-
|
6
|
-
"version" => :cmd_version,
|
7
|
-
"v" => :cmd_version,
|
8
|
-
|
9
|
-
"list views" => :cmd_list_views,
|
10
|
-
"lsv" => :cmd_list_views,
|
11
|
-
|
12
|
-
"new view $name" => :cmd_new_view,
|
13
|
-
|
14
|
-
"new post" => :cmd_new_post,
|
15
|
-
"p" => :cmd_new_post,
|
16
|
-
"post" => :cmd_new_post,
|
17
|
-
|
18
|
-
"change view $name" => :cmd_change_view,
|
19
|
-
"cv $name" => :cmd_change_view,
|
20
|
-
"cv" => :cmd_change_view, # 0-arity must come second
|
21
|
-
|
22
|
-
"list posts" => :cmd_list_posts,
|
23
|
-
"lsp" => :cmd_list_posts,
|
24
|
-
|
25
|
-
"list drafts" => :cmd_list_drafts,
|
26
|
-
"lsd" => :cmd_list_drafts,
|
27
|
-
|
28
|
-
"rm $postid" => :cmd_remove_post,
|
29
|
-
|
30
|
-
"edit $postid" => :cmd_edit_post,
|
31
|
-
"ed $postid" => :cmd_edit_post,
|
32
|
-
"e $postid" => :cmd_edit_post,
|
33
|
-
|
34
|
-
"preview" => :cmd_preview,
|
35
|
-
|
36
|
-
"pre" => :cmd_preview,
|
37
|
-
|
38
|
-
"browse" => :cmd_browse,
|
39
|
-
|
40
|
-
"relink" => :cmd_relink,
|
41
|
-
|
42
|
-
"rebuild" => :cmd_rebuild,
|
43
|
-
|
44
|
-
"deploy" => :cmd_deploy,
|
45
|
-
|
46
|
-
"q" => :cmd_quit,
|
47
|
-
"quit" => :cmd_quit
|
48
|
-
}
|
49
|
-
|
50
|
-
Regexes = {}
|
51
|
-
Patterns.each_pair do |pat, meth|
|
52
|
-
rx = "^" + pat
|
53
|
-
rx.gsub!(/ /, " +")
|
54
|
-
rx.gsub!(/\$(\w+) */) { " *(?<#{$1}>\\w+)" }
|
55
|
-
rx << "$"
|
56
|
-
rx = Regexp.new(rx)
|
57
|
-
Regexes[rx] = meth
|
58
|
-
end
|
59
|
-
|
60
|
-
def self.choose_method(cmd)
|
61
|
-
found = nil
|
62
|
-
params = []
|
63
|
-
Regexes.each_pair do |rx, meth|
|
64
|
-
m = cmd.match(rx)
|
65
|
-
# puts "#{rx} =~ #{cmd.inspect} --> #{m.to_a.inspect}"
|
66
|
-
result = m ? m.to_a : nil
|
67
|
-
next unless result
|
68
|
-
found = meth
|
69
|
-
params = m[1..-1]
|
70
|
-
end
|
71
|
-
meth = found || :cmd_INVALID
|
72
|
-
params = cmd if meth == :cmd_INVALID
|
73
|
-
[meth, params]
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
data/lib/prettiness.rb
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
|
2
|
-
# Reopening...
|
3
|
-
|
4
|
-
module RuneBlog::REPL
|
5
|
-
def clear
|
6
|
-
puts "\e[H\e[2J" # clear screen
|
7
|
-
end
|
8
|
-
|
9
|
-
def red(text)
|
10
|
-
"\e[31m#{text}\e[0m"
|
11
|
-
end
|
12
|
-
|
13
|
-
def blue(text)
|
14
|
-
"\e[34m#{text}\e[0m"
|
15
|
-
end
|
16
|
-
|
17
|
-
def bold(str)
|
18
|
-
"\e[1m#{str}\e[22m"
|
19
|
-
end
|
20
|
-
|
21
|
-
def interpolate(str)
|
22
|
-
wrap = "<<-EOS\n#{str}\nEOS"
|
23
|
-
eval wrap
|
24
|
-
end
|
25
|
-
|
26
|
-
def colored_slug(slug)
|
27
|
-
red(slug[0..3])+blue(slug[4..-1])
|
28
|
-
end
|
29
|
-
end
|