runeblog 0.1.76 → 0.1.78
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/data/standard.tgz +0 -0
- data/lib/default.rb +3 -5
- data/lib/helpers-blog.rb +28 -8
- data/lib/liveblog.rb +455 -37
- data/lib/post.rb +55 -71
- data/lib/publish.rb +1 -1
- data/lib/repl.rb +24 -3
- data/lib/runeblog.rb +127 -52
- data/lib/runeblog_version.rb +5 -1
- data/lib/view.rb +3 -2
- data/runeblog.gemspec +1 -1
- data/test/make_blog.rb +37 -35
- metadata +5 -6
data/lib/post.rb
CHANGED
@@ -1,11 +1,13 @@
|
|
1
|
-
require 'helpers-blog'
|
2
|
-
|
1
|
+
# require 'helpers-blog'
|
2
|
+
require 'runeblog'
|
3
3
|
require 'global'
|
4
4
|
|
5
5
|
class RuneBlog::Post
|
6
6
|
|
7
7
|
attr_reader :num, :title, :date, :views, :num, :slug
|
8
8
|
|
9
|
+
attr_accessor :meta, :blog, :draft
|
10
|
+
|
9
11
|
include RuneBlog::Helpers
|
10
12
|
|
11
13
|
def self.files(num, root)
|
@@ -15,6 +17,7 @@ class RuneBlog::Post
|
|
15
17
|
end
|
16
18
|
|
17
19
|
def self.load(post)
|
20
|
+
raise "Doesn't work right now"
|
18
21
|
raise NoBlogAccessor if RuneBlog.blog.nil?
|
19
22
|
# "post" is a slug
|
20
23
|
pdir = RuneBlog.blog.view.dir + "/" + post
|
@@ -22,8 +25,8 @@ class RuneBlog::Post
|
|
22
25
|
meta = nil
|
23
26
|
Dir.chdir(pdir) do
|
24
27
|
verify(File.exist?("metadata.txt") => "metadata.txt not found",
|
25
|
-
File.exist?("teaser.txt") => "teaser.txt not found"
|
26
|
-
|
28
|
+
File.exist?("teaser.txt") => "teaser.txt not found")
|
29
|
+
# File.exist?("body.txt") => "body.txt not found")
|
27
30
|
meta = read_config("metadata.txt")
|
28
31
|
verify(meta.date => "meta.date is nil",
|
29
32
|
meta.views => "meta.views is nil",
|
@@ -32,26 +35,20 @@ class RuneBlog::Post
|
|
32
35
|
meta.views = meta.views.split
|
33
36
|
meta.tags = meta.tags.split
|
34
37
|
meta.teaser = File.read("teaser.txt")
|
35
|
-
|
38
|
+
# meta.body = File.read("body.txt")
|
36
39
|
end
|
37
40
|
meta
|
38
41
|
end
|
39
42
|
|
40
|
-
def
|
41
|
-
# FIXME Doesn't really do anything - refactor
|
42
|
-
debug "=== create_post_subtree #{viewname.inspect} pwd = #{Dir.pwd}"
|
43
|
-
# We are INSIDE views/myview/000n-mytitle dir now - FIXME later? how did that happen?
|
44
|
-
create_dir("assets")
|
45
|
-
end
|
46
|
-
|
47
|
-
def write_metadata(meta)
|
43
|
+
def write_metadata(meta) # FIXME ???
|
48
44
|
debug "=== write_metadata:"
|
49
45
|
debug "-----\n#{meta.inspect}\n-----"
|
50
46
|
fname2 = "metadata.txt"
|
51
47
|
hash = meta.to_h
|
52
48
|
|
53
49
|
File.write("teaser.txt", hash[:teaser])
|
54
|
-
|
50
|
+
# STDERR.puts ">>>> #{__method__}: writing #{@live.body.size} bytes to #{Dir.pwd}/body.txt"
|
51
|
+
# File.write("body.txt", hash[:body])
|
55
52
|
hash.delete(:teaser)
|
56
53
|
hash.delete(:body)
|
57
54
|
|
@@ -67,48 +64,36 @@ class RuneBlog::Post
|
|
67
64
|
|
68
65
|
def initialize
|
69
66
|
@blog = RuneBlog.blog || raise(NoBlogAccessor)
|
67
|
+
@meta = OpenStruct.new
|
70
68
|
end
|
71
69
|
|
72
|
-
def self.create(title
|
73
|
-
|
70
|
+
def self.create(title:, teaser:, body:, pubdate: Time.now.strftime("%Y-%m-%d"),
|
71
|
+
other_views:[])
|
74
72
|
post = self.new
|
75
|
-
post.new_metadata(title.chomp, teaser.chomp, body.chomp)
|
76
|
-
post.create_draft
|
77
|
-
post.create_post_subtree
|
78
|
-
# post.build is not called here! It is called
|
79
|
-
# in runeblog.rb:create_new_post AFTER post.edit
|
80
|
-
post
|
81
|
-
end
|
82
|
-
|
83
|
-
def new_metadata(title, teaser = nil, body = nil)
|
84
|
-
verify(title.is_a?(String) => "Title #{title.inspect} is not a string")
|
85
|
-
meta = OpenStruct.new
|
86
|
-
meta.title = title
|
87
|
-
meta.teaser ||= teaser
|
88
|
-
meta.body ||= body
|
89
|
-
meta.pubdate = Time.now.strftime("%Y-%m-%d")
|
90
|
-
meta.date = meta.pubdate # fix later
|
91
|
-
meta.views = [@blog.view.to_s]
|
92
|
-
meta.tags = []
|
93
73
|
# ONLY place next_sequence is called!
|
94
|
-
meta.num =
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
74
|
+
num = post.meta.num = post.blog.next_sequence
|
75
|
+
|
76
|
+
# new_metadata
|
77
|
+
post.meta.title, post.meta.teaser, post.meta.body, post.meta.pubdate =
|
78
|
+
title, teaser, body, pubdate
|
79
|
+
post.meta.views = [post.blog.view.to_s] + other_views
|
80
|
+
post.meta.tags = []
|
81
|
+
post.blog.make_slug(post.meta) # adds to meta
|
82
|
+
|
83
|
+
# create_draft
|
84
|
+
viewhome = post.blog.view.publisher.url
|
85
|
+
meta = post.meta
|
86
|
+
text = RuneBlog.post_template(num: meta.num, title: meta.title, date: meta.pubdate,
|
87
|
+
view: meta.view, teaser: meta.teaser, body: meta.body,
|
88
|
+
views: meta.views, tags: meta.tags, home: viewhome)
|
89
|
+
srcdir = "#{post.blog.root}/drafts/"
|
90
|
+
vpdir = "#{post.blog.root}/drafts/"
|
107
91
|
verify(Dir.exist?(srcdir) => "#{srcdir} not found",
|
108
|
-
|
109
|
-
fname =
|
110
|
-
|
111
|
-
dump(
|
92
|
+
meta.slug.is_a?(String) => "slug #{meta.slug.inspect} is invalid")
|
93
|
+
fname = meta.slug + ".lt3"
|
94
|
+
post.draft = srcdir + fname
|
95
|
+
dump(text, post.draft)
|
96
|
+
return post
|
112
97
|
end
|
113
98
|
|
114
99
|
def edit
|
@@ -120,32 +105,31 @@ class RuneBlog::Post
|
|
120
105
|
error(err)
|
121
106
|
end
|
122
107
|
|
123
|
-
def build
|
124
|
-
|
125
|
-
views =
|
108
|
+
def build # THIS CODE WILL GO AWAY
|
109
|
+
post = self
|
110
|
+
views = post.meta.views
|
126
111
|
text = File.read(@draft)
|
127
|
-
# STDERR.puts "-- build: draft = #{@draft.inspect}"
|
128
|
-
livetext = Livetext.new(STDOUT)
|
129
|
-
Livetext.parameters = [@blog, @meta.num, livetext]
|
130
|
-
meta = livetext.process_text(text)
|
131
|
-
raise RuneBlog::LivetextError(@draft) if meta.nil?
|
132
112
|
|
133
|
-
|
134
|
-
|
135
|
-
meta.views = views # FIXME
|
113
|
+
@blog.generate_post(@draft)
|
114
|
+
return
|
136
115
|
|
137
|
-
|
116
|
+
STDERR.puts "-- Post#build starts in #{Dir.pwd} ..."
|
117
|
+
|
118
|
+
@meta.views.each do |view_name|
|
138
119
|
# Create dir using slug (index.html, metadata?)
|
139
|
-
|
140
|
-
|
141
|
-
create_dir(
|
142
|
-
Dir.chdir(
|
143
|
-
|
144
|
-
|
145
|
-
|
120
|
+
dir = "#{@blog.root}/views/#{view_name}/posts/"
|
121
|
+
pdir = dir + meta.slug + "/"
|
122
|
+
create_dir(pdir) unless Dir.exist?(pdir)
|
123
|
+
Dir.chdir(pdir) do
|
124
|
+
title_name = pdir + (meta.slug + ".lt3").sub(/^\d{4}-/, "")
|
125
|
+
dump(text, title_name)
|
126
|
+
cmd = "livetext #{title_name} >#{title_name.sub(/.lt3$/, ".html")}"
|
127
|
+
STDERR.puts "--- In #{pdir}"
|
128
|
+
STDERR.puts "--- cmd = #{cmd}\n "
|
129
|
+
system(cmd)
|
146
130
|
end
|
147
131
|
end
|
148
|
-
meta
|
132
|
+
@meta
|
149
133
|
rescue => err
|
150
134
|
p err
|
151
135
|
puts err.backtrace.join("\n")
|
data/lib/publish.rb
CHANGED
data/lib/repl.rb
CHANGED
@@ -39,9 +39,10 @@ module RuneBlog::REPL
|
|
39
39
|
def cmd_config(arg, testing = false)
|
40
40
|
check_empty(arg)
|
41
41
|
dir = @blog.view.dir
|
42
|
+
# FIXME bad path
|
42
43
|
items = ["publish",
|
43
44
|
"themes/standard/blogview.lt3",
|
44
|
-
"themes/standard/post
|
45
|
+
"themes/standard/post-index.lt3"]
|
45
46
|
num, fname = STDSCR.menu(title: "Edit file:", items: items)
|
46
47
|
edit_file("#{dir}/#{fname}")
|
47
48
|
end
|
@@ -248,8 +249,28 @@ module RuneBlog::REPL
|
|
248
249
|
end
|
249
250
|
|
250
251
|
file = files.first
|
251
|
-
|
252
|
-
|
252
|
+
draft = "#{@blog.root}/drafts/#{file}"
|
253
|
+
result = edit_file(draft)
|
254
|
+
|
255
|
+
STDERR.puts "Calling gp: pwd = #{Dir.pwd} draft = #{draft}"
|
256
|
+
puts
|
257
|
+
|
258
|
+
@blog.generate_post(draft)
|
259
|
+
return
|
260
|
+
|
261
|
+
# NEW code...
|
262
|
+
view = @blog.view
|
263
|
+
# livetext source > naked post 9999-slug (dir?)
|
264
|
+
draft = @blog.root + "/drafts/#{file}"
|
265
|
+
# theme = "#{@blog.view.dir}/themes/standard"
|
266
|
+
# src = "#{theme}/post-index.lt3"
|
267
|
+
|
268
|
+
system("cp #{draft} #{src}") # terms are confusing
|
269
|
+
file2 = file.sub(/.lt3$/, ".html")
|
270
|
+
Dir.chdir(theme) do
|
271
|
+
system("livetext index.lt3 >#{file2}")
|
272
|
+
end
|
273
|
+
# @blog.rebuild_post(file)
|
253
274
|
@out
|
254
275
|
end
|
255
276
|
|
data/lib/runeblog.rb
CHANGED
@@ -9,14 +9,18 @@ require 'view'
|
|
9
9
|
require 'publish'
|
10
10
|
require 'post'
|
11
11
|
|
12
|
+
# ::Home = Dir.pwd unless defined?(::Home)
|
13
|
+
|
12
14
|
###
|
13
15
|
|
14
16
|
class RuneBlog
|
15
17
|
|
16
18
|
DotDir = ".blogs"
|
17
|
-
ConfigFile = "
|
19
|
+
ConfigFile = "config"
|
18
20
|
GemData = RuneBlog::Path + "/../data"
|
19
21
|
|
22
|
+
# ::Home = Dir.pwd
|
23
|
+
|
20
24
|
make_exception(:FileNotFound, "File $1 was not found")
|
21
25
|
make_exception(:BlogRepoAlreadyExists, "Blog repo $1 already exists")
|
22
26
|
make_exception(:CantAssignView, "$1 is not a view")
|
@@ -41,34 +45,6 @@ class RuneBlog
|
|
41
45
|
|
42
46
|
include Helpers
|
43
47
|
|
44
|
-
=begin
|
45
|
-
timestamps
|
46
|
-
filename (cf with real file)
|
47
|
-
|
48
|
-
themes
|
49
|
-
standard
|
50
|
-
head.lt3
|
51
|
-
meta.lt3
|
52
|
-
global.lt3
|
53
|
-
assets/
|
54
|
-
blog/
|
55
|
-
[kill assets?]
|
56
|
-
sidebar/
|
57
|
-
ad.lt3
|
58
|
-
calendar.lt3
|
59
|
-
news.lt3
|
60
|
-
tag_cloud.lt3
|
61
|
-
_postentry
|
62
|
-
generate.lt3
|
63
|
-
index.lt3
|
64
|
-
meta.lt3
|
65
|
-
navbar.lt3
|
66
|
-
post/
|
67
|
-
generate.lt3
|
68
|
-
head.lt3
|
69
|
-
index.lt3
|
70
|
-
=end
|
71
|
-
|
72
48
|
def self.create_new_blog_repo(first_view, dir = ".blogs/data")
|
73
49
|
raise ArgumentError unless dir.is_a?(String) && ! dir.empty?
|
74
50
|
root_dir = Dir.pwd + "/" + dir
|
@@ -89,12 +65,24 @@ class RuneBlog
|
|
89
65
|
puts err.backtrace.join("\n")
|
90
66
|
end
|
91
67
|
|
92
|
-
def initialize # assumes existing blog
|
68
|
+
def initialize(top = true) # at top? always assumes existing blog
|
93
69
|
# Crude - FIXME later -
|
94
70
|
# What views are there? Publishing, etc.
|
95
71
|
self.class.blog = self # Weird. Like a singleton - dumbass circular dependency?
|
96
|
-
|
97
|
-
|
72
|
+
$_blog = self # Dumber still?
|
73
|
+
dir = ""
|
74
|
+
unless top
|
75
|
+
md = Dir.pwd.match(%r[.*.blogs])
|
76
|
+
dir = md[0]
|
77
|
+
end
|
78
|
+
file = dir.empty? ? ConfigFile : dir + "/" + ConfigFile
|
79
|
+
errmsg = "No config file! file = #{file.inspect} dir = #{Dir.pwd}"
|
80
|
+
raise errmsg unless File.exist?(file)
|
81
|
+
# Hmm. current_view doesn't belong?
|
82
|
+
@root, @view_name, @editor = read_config(file, :root, :current_view, :editor)
|
83
|
+
md = Dir.pwd.match(%r[.*/views/(.*?)/])
|
84
|
+
@view_name = md[1] if md
|
85
|
+
# STDERR.puts "---- vname = #@view_name"
|
98
86
|
@views = get_views
|
99
87
|
@view = str2view(@view_name)
|
100
88
|
@sequence = get_sequence
|
@@ -102,6 +90,17 @@ class RuneBlog
|
|
102
90
|
@post_tags = []
|
103
91
|
end
|
104
92
|
|
93
|
+
def inspect
|
94
|
+
str = "[["
|
95
|
+
ivars = ["@root", "@sequence"] # self.instance_variables
|
96
|
+
ivars.each do |iv|
|
97
|
+
val = self.instance_variable_get(iv)
|
98
|
+
str << "#{iv} = #{val} "
|
99
|
+
end
|
100
|
+
str << "]]"
|
101
|
+
str
|
102
|
+
end
|
103
|
+
|
105
104
|
def view?(name)
|
106
105
|
raise ArgumentError unless name.is_a?(String) && ! name.empty?
|
107
106
|
views.any? {|x| x.name == name }
|
@@ -117,16 +116,23 @@ class RuneBlog
|
|
117
116
|
@views.find {|x| x.name == str }
|
118
117
|
end
|
119
118
|
|
119
|
+
def _set_publisher
|
120
|
+
file = @view.dir + "/publish"
|
121
|
+
@view.publisher = nil
|
122
|
+
return unless File.exist?(file)
|
123
|
+
@view.publisher = RuneBlog::Publishing.new(read_config(file))
|
124
|
+
end
|
125
|
+
|
120
126
|
def view=(arg)
|
121
127
|
case arg
|
122
128
|
when RuneBlog::View
|
123
129
|
@view = arg
|
124
|
-
|
130
|
+
_set_publisher
|
125
131
|
when String
|
126
132
|
new_view = str2view(arg)
|
127
133
|
raise NoSuchView(arg) if new_view.nil?
|
128
134
|
@view = new_view
|
129
|
-
|
135
|
+
_set_publisher
|
130
136
|
else
|
131
137
|
raise CantAssignView(arg.class.to_s)
|
132
138
|
end
|
@@ -142,7 +148,7 @@ class RuneBlog
|
|
142
148
|
@sequence
|
143
149
|
end
|
144
150
|
|
145
|
-
def viewdir(v = nil)
|
151
|
+
def viewdir(v = nil) # delete?
|
146
152
|
v = str2view(v) if v.is_a?(String)
|
147
153
|
raise ArgumentError unless v.nil? || v.is_a?(RuneBlog::View)
|
148
154
|
v ||= @view
|
@@ -150,11 +156,10 @@ class RuneBlog
|
|
150
156
|
end
|
151
157
|
|
152
158
|
def self.exist?
|
153
|
-
Dir.exist?(DotDir) && File.exist?(ConfigFile)
|
159
|
+
Dir.exist?(DotDir) && File.exist?(DotDir + "/" + ConfigFile)
|
154
160
|
end
|
155
161
|
|
156
162
|
def create_view(arg)
|
157
|
-
debug "=== create_view #{arg.inspect}"
|
158
163
|
raise ArgumentError unless arg.is_a?(String) && ! arg.empty?
|
159
164
|
|
160
165
|
names = self.views.map(&:to_s)
|
@@ -168,11 +173,12 @@ class RuneBlog
|
|
168
173
|
Dir.chdir(vdir)
|
169
174
|
x = RuneBlog::Default
|
170
175
|
create_dir('themes')
|
171
|
-
|
176
|
+
# create_dir("generated")
|
172
177
|
create_dir('assets')
|
178
|
+
create_dir('posts')
|
173
179
|
|
174
180
|
Dir.chdir("themes") { system("tar zxvf #{GemData}/standard.tgz >/dev/null 2>&1") }
|
175
|
-
|
181
|
+
# system("cp themes/standard/blog/assets/* assets/")
|
176
182
|
|
177
183
|
pub = "user: xxx\nserver: xxx\ndocroot: xxx\npath: xxx\nproto: xxx\n"
|
178
184
|
dump(pub, "publish")
|
@@ -182,9 +188,6 @@ class RuneBlog
|
|
182
188
|
view = RuneBlog::View.new(arg)
|
183
189
|
self.view = view
|
184
190
|
vdir = self.view.dir
|
185
|
-
dir0 = "#{vdir}/themes/standard/blog"
|
186
|
-
dir1 = "#{vdir}/generated"
|
187
|
-
system("livetext #{dir0}/generate.lt3 >#{dir1}/index.html 2>#{dir1}/errors.txt")
|
188
191
|
dump("Initial creation", "last_published")
|
189
192
|
Dir.chdir(up)
|
190
193
|
@views << view
|
@@ -200,7 +203,7 @@ class RuneBlog
|
|
200
203
|
end
|
201
204
|
|
202
205
|
def view_files
|
203
|
-
vdir = self.
|
206
|
+
vdir = self.view.dir
|
204
207
|
files = ["#{vdir}/index.html"]
|
205
208
|
files += posts.map {|x| "#{vdir}/#{x}" }
|
206
209
|
# Huh?
|
@@ -215,14 +218,17 @@ class RuneBlog
|
|
215
218
|
result
|
216
219
|
end
|
217
220
|
|
218
|
-
def create_new_post(title, testing = false, teaser: nil, body: nil)
|
219
|
-
# STDERR.puts "-- create_new_post: teaser = #{teaser.inspect} body = #{body.inspect}"
|
221
|
+
def create_new_post(title, testing = false, teaser: nil, body: nil, other_views: [])
|
220
222
|
save = Dir.pwd
|
221
223
|
Dir.chdir(self.view.dir)
|
222
|
-
|
224
|
+
# change to create_draft ?
|
225
|
+
post = Post.create(title: title, teaser: teaser, body: body, other_views: other_views)
|
223
226
|
post.edit unless testing
|
224
227
|
meta = post.build
|
225
228
|
Dir.chdir(save)
|
229
|
+
return meta.num
|
230
|
+
Dir.chdir(save)
|
231
|
+
meta.num = 999
|
226
232
|
meta.num
|
227
233
|
rescue => err
|
228
234
|
puts err
|
@@ -240,7 +246,7 @@ class RuneBlog
|
|
240
246
|
end
|
241
247
|
|
242
248
|
def posts
|
243
|
-
dir = self.view.dir
|
249
|
+
dir = self.view.dir + "/posts"
|
244
250
|
posts = Dir.entries(dir).grep(/^\d{4}/)
|
245
251
|
posts
|
246
252
|
end
|
@@ -259,8 +265,6 @@ class RuneBlog
|
|
259
265
|
end
|
260
266
|
|
261
267
|
def process_post(file)
|
262
|
-
# puts " process_post #{file.inspect} pwd = #{Dir.pwd}"
|
263
|
-
debug "=== process_post #{file.inspect} pwd = #{Dir.pwd}"
|
264
268
|
raise ArgumentError unless file.is_a?(String)
|
265
269
|
path = @root + "/drafts/#{file}"
|
266
270
|
raise FileNotFound(path) unless File.exist?(path)
|
@@ -275,18 +279,88 @@ class RuneBlog
|
|
275
279
|
end
|
276
280
|
|
277
281
|
def generate_index(view)
|
282
|
+
# FIXME
|
278
283
|
debug "=== generate_index view = #{view.to_s}"
|
279
284
|
raise ArgumentError unless view.is_a?(String) || view.is_a?(RuneBlog::View)
|
280
285
|
|
281
286
|
vdir = self.view.dir
|
282
287
|
dir0 = "#{vdir}/themes/standard/blog"
|
283
|
-
|
284
|
-
|
288
|
+
# dir1 = "#{vdir}/generated"
|
289
|
+
# system("livetext #{dir0}/generate.lt3 >#{dir1}/index.html 2>#{dir1}/errors.txt")
|
285
290
|
rescue => err
|
286
291
|
error(err)
|
287
292
|
exit
|
288
293
|
end
|
289
294
|
|
295
|
+
######## New code
|
296
|
+
|
297
|
+
def generate_view(view)
|
298
|
+
end
|
299
|
+
|
300
|
+
# Remember: A post in multiple views will trigger multiple
|
301
|
+
# views needing to be rebuilt (and published)
|
302
|
+
|
303
|
+
# generate a post:
|
304
|
+
# given draft 9999-title.lt3
|
305
|
+
# create VIEW/posts/9999-title/index.lt3
|
306
|
+
# LATER: metadata!! or is it in head?
|
307
|
+
# Generate VIEW/posts/9999-title/head.lt3?
|
308
|
+
# livetext draft_wrapper_plain.lt3 >generated/posts/plain-title.html # unframed
|
309
|
+
# livetext draft_generate.lt3 >generated/posts/real-title.html # framed
|
310
|
+
# livetext draft_wrapper_perma.lt3 >generated/posts/perma-title.html # permaframed
|
311
|
+
#
|
312
|
+
# Generate associated views:
|
313
|
+
# livetext ??/recent.lt3 >VIEW/working/recent.html
|
314
|
+
# livetext VIEW/blog/generate.lt3 ??
|
315
|
+
|
316
|
+
def generate_post(draft)
|
317
|
+
dir = File.dirname(draft)
|
318
|
+
fname = File.basename(draft)
|
319
|
+
# STDERR.puts "--- gp01 dir/fname = #{dir} #{fname}"
|
320
|
+
# FIXME dumb code
|
321
|
+
view_line = File.readlines(draft).grep(/^.views /)
|
322
|
+
raise "More than one .views call!" if view_line.size > 1
|
323
|
+
raise "No .views call!" if view_line.size < 1
|
324
|
+
view_line = view_line.first
|
325
|
+
|
326
|
+
# STDERR.puts "--- gp01b view_line = #{view_line}"
|
327
|
+
views = view_line[7..-1].split
|
328
|
+
slug_dir = fname.sub(/.lt3$/, "")
|
329
|
+
# STDERR.puts "--- gp02 preloop"
|
330
|
+
views.each do |view|
|
331
|
+
# STDERR.puts "--- gp03 view = #{view}"
|
332
|
+
vdir = "#@root/views/#{view}"
|
333
|
+
dir = "#{vdir}/posts/#{slug_dir}/"
|
334
|
+
STDERR.puts "--- gp03b vdir = #{vdir} dir = #{dir}"
|
335
|
+
Dir.mkdir(dir) unless Dir.exist?(dir)
|
336
|
+
puts
|
337
|
+
# --- gp04 system: cp /Users/Hal/Dropbox/files/runeblog/.blogs/data/drafts/0007-the-graffiti-wall.lt3
|
338
|
+
# /Users/Hal/Dropbox/files/runeblog/.blogs/data/around_austin/posts/0007-the-graffiti-wall.lt3/
|
339
|
+
STDERR.puts "--- gp04 system: cp #{draft} #{dir}"
|
340
|
+
STDERR.puts
|
341
|
+
system("cp #{draft} #{dir}")
|
342
|
+
Dir.chdir(dir) do
|
343
|
+
STDERR.puts "--- gp05 into #{dir}: livetext #{draft} >#{draft}.html"
|
344
|
+
system("livetext #{draft} >#{draft}.html")
|
345
|
+
# copy from theme?
|
346
|
+
theme = vdir + "/themes/standard"
|
347
|
+
files = ["blog-generate.lt3", "blog-index.lt3", "global.lt3", "blog-head.lt3", "meta.lt3", "navbar.lt3"]
|
348
|
+
files = files.map {|x| theme + "/" + x }
|
349
|
+
STDERR.puts "---- Files = #{files.inspect}"
|
350
|
+
files.each do |f|
|
351
|
+
STDERR.puts "---- cp #{f} ."
|
352
|
+
system("cp #{f} .")
|
353
|
+
end
|
354
|
+
STDERR.puts "---- Files copied from theme"
|
355
|
+
system("livetext blog-generate.lt3 >bgen.html")
|
356
|
+
STDERR.puts "---- Files went thru livetext"
|
357
|
+
end
|
358
|
+
# create framed pure slug (where?)
|
359
|
+
end
|
360
|
+
end
|
361
|
+
|
362
|
+
########
|
363
|
+
|
290
364
|
def relink
|
291
365
|
self.views.each {|view| generate_index(view) }
|
292
366
|
end
|
@@ -369,7 +443,8 @@ class RuneBlog
|
|
369
443
|
end
|
370
444
|
|
371
445
|
def make_slug(meta)
|
372
|
-
|
446
|
+
# check_meta(meta, "makeslug")
|
447
|
+
# meta.num = 9999 # FIXME
|
373
448
|
raise ArgumentError unless meta.title.is_a?(String)
|
374
449
|
label = '%04d' % meta.num # FIXME can do better
|
375
450
|
slug0 = meta.title.downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '')
|