runeblog 0.2.3 → 0.2.5

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.
@@ -6,6 +6,7 @@ class RuneBlog::Default
6
6
  def RuneBlog.post_template(num: 0, title: "No title", date: nil, view: "test_view",
7
7
  teaser: "No teaser", body: "No body", tags: ["untagged"],
8
8
  views: [], back: "javascript:history.go(-1)", home: "no url")
9
+ log!(enter: __method__, args: [num, title, date, view, teaser, body, tags, views, back, home])
9
10
  viewlist = (views + [view.to_s]).join(" ")
10
11
  taglist = ".tags " + tags.join(" ")
11
12
  <<-TEXT
@@ -20,6 +20,7 @@ end
20
20
  # Refactor, move stuff elsewhere?
21
21
 
22
22
  def make_exception(sym, str)
23
+ log!(enter: __method__, args: [sym, str])
23
24
  return if Object.constants.include?(sym)
24
25
  Object.const_set(sym, StandardError.dup)
25
26
  define_method(sym) do |*args|
@@ -30,10 +31,12 @@ def make_exception(sym, str)
30
31
  end
31
32
 
32
33
  def prefix(num)
34
+ log!(enter: __method__, args: [num])
33
35
  "#{'%04d' % num.to_i}"
34
36
  end
35
37
 
36
38
  def check_meta(meta, where = "")
39
+ log!(enter: __method__, args: [meta, where])
37
40
  str = "--- #{where}\n"
38
41
  str << "\ncheck_meta: \n" + caller.join("\n") + "\n meta = #{meta.inspect}\n"
39
42
  str << " title missing!\n" unless meta.title
@@ -46,12 +49,14 @@ def check_meta(meta, where = "")
46
49
  end
47
50
 
48
51
  def verify(hash)
52
+ log!(enter: __method__, args: [hash])
49
53
  hash.each_pair do |expr, msg|
50
54
  puts "<< #{msg}" unless expr
51
55
  end
52
56
  end
53
57
 
54
58
  def assure(hash) # really the same as verify for now...
59
+ log!(enter: __method__, args: [hash])
55
60
  hash.each_pair do |expr, msg|
56
61
  puts "<< #{msg}" unless expr
57
62
  end
@@ -6,39 +6,52 @@ require 'fileutils'
6
6
  module RuneBlog::Helpers
7
7
 
8
8
  def copy(src, dst)
9
- if src =~ /\*/
10
- system("cp #{src} #{dst}")
11
- else
12
- FileUtils.cp(src, dst)
13
- end
9
+ log!(enter: __method__, args: [src, dst])
10
+ cmd = "cp #{src} #{dst} 2>/dev/null"
11
+ # puts "\n--- pwd = #{Dir.pwd} \n Trying: #{cmd}"
12
+ # if src =~ /\*/
13
+ rc = system(cmd)
14
+ puts " FROM #{caller[0]}" unless rc
15
+ exit unless rc
16
+ # else
17
+ # FileUtils.cp(src, dst)
18
+ # end
14
19
  end
15
20
 
16
21
  def copy!(src, dst)
17
- if src =~ /\*/
18
- system("cp -r #{src} #{dst}")
19
- else
20
- FileUtils.cp_r(src, dst)
21
- end
22
+ log!(enter: __method__, args: [src, dst])
23
+ cmd = "cp -r #{src} #{dst} 2>/dev/null"
24
+ # puts "\n--- pwd = #{Dir.pwd} \n Trying: #{cmd}"
25
+ # if src =~ /\*/
26
+ rc = system(cmd)
27
+ puts " FROM #{caller[0]}" unless rc
28
+ exit unless rc
29
+ # else
30
+ # FileUtils.cp_r(src, dst)
31
+ # end
22
32
  end
23
33
 
24
34
  def stale?(src, dst)
35
+ log!(enter: __method__, args: [src, dst])
25
36
  return true unless File.exist?(dst)
26
37
  return true if File.mtime(src) > File.mtime(dst)
27
38
  return false
28
39
  end
29
40
 
30
41
  def livetext(src, dst=nil)
42
+ log!(enter: __method__, args: [src, dst])
31
43
  src << ".lt3" unless src.end_with?(".lt3")
32
44
  if dst
33
45
  dst << ".html" unless dst.end_with?(".html")
34
46
  else
35
47
  dst = src.sub(/.lt3$/, "")
36
48
  end
37
- return unless stale?(src, dst)
49
+ # return unless stale?(src, dst)
38
50
  system("livetext #{src} >#{dst}")
39
51
  end
40
52
 
41
53
  def get_root
54
+ log!(enter: __method__)
42
55
  if $_blog
43
56
  if $_blog.root
44
57
  puts "0. Returned: #{$_blog.root}/"
@@ -54,7 +67,7 @@ module RuneBlog::Helpers
54
67
  end
55
68
 
56
69
  def read_config(file, *syms)
57
- # puts "dir = #{Dir.pwd}"
70
+ log!(enter: __method__, args: [file, *syms])
58
71
  lines = File.readlines(file).map(&:chomp)
59
72
  obj = ::OpenStruct.new
60
73
  lines.each do |line|
@@ -79,6 +92,7 @@ module RuneBlog::Helpers
79
92
  end
80
93
 
81
94
  def try_read_config(file, hash)
95
+ log!(enter: __method__, args: [file, hash])
82
96
  return hash.values unless File.exist?(file)
83
97
  vals = read_config(file, *hash.keys)
84
98
  # STDERR.puts vals.inspect
@@ -86,6 +100,7 @@ module RuneBlog::Helpers
86
100
  end
87
101
 
88
102
  def put_config(root:, view:"test_view", editor: "/usr/local/bin/vim")
103
+ log!(enter: __method__, args: [root, view, editor])
89
104
  Dir.mkdir(root) unless Dir.exist?(root)
90
105
  Dir.chdir(root) do
91
106
  File.open("config", "w") do |cfg|
@@ -97,6 +112,7 @@ def put_config(root:, view:"test_view", editor: "/usr/local/bin/vim")
97
112
  end
98
113
 
99
114
  def write_config(obj, file)
115
+ log!(enter: __method__, args: [obj, file])
100
116
  hash = obj.to_h
101
117
  # Dir.chdir(::Home)
102
118
  # puts "--- wc: pwd = #{Dir.pwd}"
@@ -108,6 +124,7 @@ end
108
124
  end
109
125
 
110
126
  def get_views # read from filesystem
127
+ log!(enter: __method__)
111
128
  # Dir.chdir(::Home) do
112
129
  verify(@root => "#@root is nil",
113
130
  Dir.exist?(@root) => "#@root doesn't exist",
@@ -118,6 +135,7 @@ end
118
135
  end
119
136
 
120
137
  def new_dotfile(root: ".blogs", current_view: "test_view", editor: "vi")
138
+ log!(enter: __method__, args: [root, current_view, editor])
121
139
  # raise BlogAlreadyExists if Dir.exist?(".blogs")
122
140
  # Dir.mkdir(".blogs")
123
141
  root = Dir.pwd + "/" + root
@@ -127,12 +145,14 @@ end
127
145
  end
128
146
 
129
147
  def new_sequence
148
+ log!(enter: __method__)
130
149
  dump(0, "sequence")
131
150
  version_info = "#{RuneBlog::VERSION}\nBlog created: #{Time.now.to_s}"
132
151
  dump(version_info, "VERSION")
133
152
  end
134
153
 
135
154
  def subdirs(dir)
155
+ log!(enter: __method__, args: [dir])
136
156
  verify(Dir.exist?(dir) => "Directory #{dir} not found")
137
157
  dirs = Dir.entries(dir) - %w[. ..]
138
158
  dirs.reject! {|x| ! File.directory?("#@root/views/#{x}") }
@@ -140,6 +160,7 @@ end
140
160
  end
141
161
 
142
162
  def find_draft_slugs
163
+ log!(enter: __method__)
143
164
  verify(@root => "#@root is nil",
144
165
  Dir.exist?(@root) => "#@root doesn't exist",
145
166
  Dir.exist?("#@root/drafts") => "#@root/drafts doesn't exist")
@@ -154,6 +175,7 @@ end
154
175
  end
155
176
 
156
177
  def create_dirs(*dirs)
178
+ log!(enter: __method__, args: [*dirs])
157
179
  dirs.each do |dir|
158
180
  dir = dir.to_s # symbols allowed
159
181
  next if Dir.exist?(dir)
@@ -163,24 +185,28 @@ end
163
185
  end
164
186
  end
165
187
 
166
- def interpolate(str, binding)
188
+ def interpolate(str, bind)
189
+ log!(enter: __method__, args: [str, bind])
167
190
  wrap = "<<-EOS\n#{str}\nEOS"
168
- eval wrap, binding
191
+ eval wrap, bind
169
192
  end
170
193
 
171
194
  def error(err) # Hmm, this is duplicated
195
+ log!(str: "duplicated method", enter: __method__, args: [err])
172
196
  str = "\n Error: #{err}"
173
197
  puts str
174
198
  puts err.backtrace.join("\n")
175
199
  end
176
200
 
177
201
  def dump(obj, name)
202
+ log!(enter: __method__, args: [obj, name])
178
203
  File.write(name, obj)
179
204
  end
180
205
 
181
206
  end
182
207
 
183
208
  def dump(obj, name) # FIXME scope
209
+ log!(str: "scope problem", enter: __method__, args: [obj, name])
184
210
  File.write(name, obj)
185
211
  end
186
212
 
@@ -410,9 +410,13 @@ def meta
410
410
  end
411
411
 
412
412
  def recent_posts # side-effect
413
- _out %[<div class="col-lg-9 col-md-9 col-sm-9 col-xs-12">]
414
- all_teasers
415
- _out %[</div>]
413
+ _out <<-HTML
414
+ <div class="col-lg-9 col-md-9 col-sm-9 col-xs-12">
415
+ <iframe id="main" style="width: 100vw; height: 100vh; position: relative;"
416
+ src='recent.html' width=100% frameborder="0" allowfullscreen>
417
+ </iframe>
418
+ </div>
419
+ HTML
416
420
  end
417
421
 
418
422
  def sidebar
@@ -0,0 +1,58 @@
1
+ unless self.respond_to?("log!")
2
+ $logging = true
3
+ $log = File.new("/tmp/runeblog}.log","w")
4
+
5
+ def log!(str: "", enter: nil, args: [], pwd: false, dir: false)
6
+ return unless $logging
7
+ time = Time.now.strftime("%H:%M:%S")
8
+
9
+ meth = ""
10
+ meth = "#{enter}" if enter
11
+
12
+ para = "(#{args.inspect[1..-2]})"
13
+
14
+ source = caller[0].sub(/.*\//, " in ").sub(/:/, " line ").sub(/:.*/, "")
15
+ source = "in #{source} (probably liveblog.rb)" if source.include? "(eval)"
16
+
17
+ str = " ... #{str}" unless str.empty?
18
+ indent = " "*12
19
+
20
+ $log.puts "#{time} #{meth}#{para}"
21
+ $log.puts "#{indent} #{str} " unless str.empty?
22
+ $log.puts "#{indent} #{source}"
23
+ $log.puts "#{indent} pwd = #{Dir.pwd} " if pwd
24
+ if dir
25
+ files = (Dir.entries('.') - %w[. ..]).join(" ")
26
+ $log.puts "#{indent} dir/* = #{files}"
27
+ end
28
+ # $log.puts "#{indent} livetext params = #{livedata.inpect} " unless livedata.nil?
29
+ $log.puts
30
+ $log.close
31
+ $log = File.new("/tmp/runeblog.log","a")
32
+ end
33
+
34
+ def log(str: "", enter: nil, args: [], pwd: false, dir: false)
35
+ return unless $logging
36
+ time = Time.now.strftime("%H:%M:%S")
37
+ meth = ""
38
+ meth = "#{enter}" if enter
39
+ para = " args: #{args.inspect[1..-2]}"
40
+ source = caller[0].sub(/.*\//, " in ").sub(/:/, " line ").sub(/:.*/, "")
41
+ source = " in #{source} (probably liveblog.rb)" if source.include? "(eval)"
42
+ str = " ... #{str}" unless str.empty?
43
+ indent = " "*12
44
+ STDERR.puts "#{time} #{str} #{meth}"
45
+ STDERR.puts "#{indent} #{source}"
46
+ STDERR.puts "#{indent} pwd = #{Dir.pwd} " if pwd
47
+ if dir
48
+ files = (Dir.entries('.') - %w[. ..]).join(" ")
49
+ STDERR.puts "#{indent} dir/* = #{files}"
50
+ end
51
+ STDERR.puts "#{indent} #{para} " unless args.empty?
52
+ # STDERR.puts "#{indent} livetext params = #{livedata.inpect} " unless livedata.nil?
53
+ STDERR.puts
54
+ # $log.close
55
+ # $log = File.new("/tmp/runeblog.log","a")
56
+ end
57
+ end
58
+
@@ -11,12 +11,14 @@ class RuneBlog::Post
11
11
  include RuneBlog::Helpers
12
12
 
13
13
  def self.files(num, root)
14
+ log!(enter: __method__, args: [num, root])
14
15
  files = Find.find(root).to_a
15
16
  result = files.grep(/#{prefix(num)}-/)
16
17
  result
17
18
  end
18
19
 
19
20
  def self.load(post)
21
+ log!(enter: __method__, args: [post])
20
22
  raise "Doesn't work right now"
21
23
  raise NoBlogAccessor if RuneBlog.blog.nil?
22
24
  # "post" is a slug
@@ -41,6 +43,7 @@ class RuneBlog::Post
41
43
  end
42
44
 
43
45
  def write_metadata(meta) # FIXME ???
46
+ log!(enter: __method__, args: [meta])
44
47
  debug "=== write_metadata:"
45
48
  debug "-----\n#{meta.inspect}\n-----"
46
49
  fname2 = "metadata.txt"
@@ -63,12 +66,14 @@ class RuneBlog::Post
63
66
  end
64
67
 
65
68
  def initialize
69
+ log!(enter: __method__)
66
70
  @blog = RuneBlog.blog || raise(NoBlogAccessor)
67
71
  @meta = OpenStruct.new
68
72
  end
69
73
 
70
74
  def self.create(title:, teaser:, body:, pubdate: Time.now.strftime("%Y-%m-%d"),
71
75
  other_views:[])
76
+ log!(enter: __method__, args: [title, teaser, body, pubdate, other_views])
72
77
  post = self.new
73
78
  # ONLY place next_sequence is called!
74
79
  num = post.meta.num = post.blog.next_sequence
@@ -97,6 +102,7 @@ class RuneBlog::Post
97
102
  end
98
103
 
99
104
  def edit
105
+ log!(enter: __method__)
100
106
  verify(File.exist?(@draft) => "File #{@draft} not found")
101
107
  result = system("vi #@draft +8") # TODO improve this
102
108
  raise EditorProblem(draft) unless result
@@ -106,6 +112,7 @@ class RuneBlog::Post
106
112
  end
107
113
 
108
114
  def build
115
+ log!(enter: __method__)
109
116
  post = self
110
117
  views = post.meta.views
111
118
  text = File.read(@draft)
@@ -118,6 +125,7 @@ class RuneBlog::ViewPost
118
125
  :teaser_text
119
126
 
120
127
  def initialize(view, postdir)
128
+ log!(enter: __method__, args: [view, postdir])
121
129
  # Assumes already parsed/processed
122
130
  @blog = RuneBlog.blog || raise(NoBlogAccessor)
123
131
  @path = postdir.dup
@@ -133,6 +141,7 @@ class RuneBlog::ViewPost
133
141
  end
134
142
 
135
143
  def get_dirs
144
+ log!(enter: __method__, args: [view, postdir])
136
145
  fname = File.basename(draft)
137
146
  noext = fname.sub(/.lt3$/, "")
138
147
  vdir = "#@root/views/#{view}"
@@ -9,6 +9,7 @@ class RuneBlog::Publishing
9
9
  BadRemotePerms = Exception.new("Bad remote permissions")
10
10
 
11
11
  def initialize(*params)
12
+ log!(enter: __method__, args: [*params])
12
13
  @blog = RuneBlog.blog
13
14
  # Clunky...
14
15
  if params.size == 1 && params[0].is_a?(OpenStruct)
@@ -22,21 +23,25 @@ class RuneBlog::Publishing
22
23
  end
23
24
 
24
25
  def to_h
26
+ log!(enter: __method__)
25
27
  {user: @user, server: @server, docroot: @docroot,
26
28
  path: @path, proto: @proto}
27
29
  end
28
30
 
29
31
  def url
32
+ log!(enter: __method__)
30
33
  vname = @blog.view.name # .gsub(/_/, "\\_")
31
34
  url = "#@proto://#@server/#@path/#{vname}"
32
35
  end
33
36
 
34
37
  def system!(str)
38
+ log!(enter: __method__, args: [str])
35
39
  rc = system(str)
36
40
  rc
37
41
  end
38
42
 
39
43
  def publish(files, assets=[])
44
+ log!(enter: __method__, args: [files, assets])
40
45
  dir = "#@docroot/#@path"
41
46
  view_name = @blog.view.name
42
47
  viewpath = "#{dir}/#{view_name}"
@@ -60,6 +65,7 @@ class RuneBlog::Publishing
60
65
  end
61
66
 
62
67
  def remote_login?
68
+ log!(enter: __method__)
63
69
  cmd = "ssh -o BatchMode=yes #@user@#@server -x date >/dev/null 2>&1"
64
70
  result = system(cmd)
65
71
  return nil unless result
@@ -67,6 +73,7 @@ class RuneBlog::Publishing
67
73
  end
68
74
 
69
75
  def remote_permissions?
76
+ log!(enter: __method__)
70
77
  dir = "#@docroot/#@path"
71
78
  temp = "#@path/__only_testing"
72
79
  try1 = system("ssh -o BatchMode=yes -o ConnectTimeout=1 #@user@#@server -x mkdir -p #{temp} >/dev/null 2>&1")
@@ -1,5 +1,7 @@
1
1
  require 'date'
2
2
 
3
+ require 'logging'
4
+
3
5
  require 'runeblog_version'
4
6
  require 'global'
5
7
  require 'helpers-blog'
@@ -26,7 +28,6 @@ class RuneBlog
26
28
  make_exception(:NoSuchView, "No such view: $1")
27
29
  make_exception(:NoBlogAccessor, "Runeblog.blog is not set")
28
30
 
29
-
30
31
  class << self
31
32
  attr_accessor :blog
32
33
  include Helpers
@@ -40,6 +41,7 @@ class RuneBlog
40
41
  include Helpers
41
42
 
42
43
  def self.create_new_blog_repo(dir = ".blogs")
44
+ log!(enter: __method__, args: [dir])
43
45
  raise ArgumentError unless dir.is_a?(String) && ! dir.empty?
44
46
  root_dir = Dir.pwd + "/" + dir
45
47
  self.create(dir)
@@ -49,6 +51,7 @@ class RuneBlog
49
51
  end
50
52
 
51
53
  def self.create(root = ".blogs")
54
+ log!(enter: __method__, args: [root])
52
55
  # Crude - FIXME later - # What views are there? Publishing, etc.
53
56
  self.blog = self # Weird. Like a singleton - dumbass circular dependency?
54
57
  $_blog = self # Dumber still?
@@ -56,6 +59,8 @@ class RuneBlog
56
59
  raise BlogRepoAlreadyExists if Dir.exist?(root)
57
60
  create_dirs(root)
58
61
  Dir.chdir(root) do
62
+ # puts " pwd = #{Dir.pwd} Trying: cp #{RuneBlog::Path}/../empty_view.tgz ."
63
+ system("cp #{RuneBlog::Path}/../empty_view.tgz .")
59
64
  create_dirs(:drafts, :views)
60
65
  new_sequence
61
66
  end
@@ -66,6 +71,7 @@ class RuneBlog
66
71
  end
67
72
 
68
73
  def self.open(root = ".blogs")
74
+ log!(enter: __method__, args: [root])
69
75
  # Crude - FIXME later - # What views are there? Publishing, etc.
70
76
  self.blog = self # Weird. Like a singleton - dumbass circular dependency?
71
77
  $_blog = self # Dumber still?
@@ -74,6 +80,7 @@ class RuneBlog
74
80
  end
75
81
 
76
82
  def initialize(root_dir = ".blogs") # always assumes existing blog
83
+ log!(enter: "initialize", args: [root_dir])
77
84
  # Crude - FIXME later - # What views are there? Publishing, etc.
78
85
  self.class.blog = self # Weird. Like a singleton - dumbass circular dependency?
79
86
  $_blog = self # Dumber still?
@@ -94,32 +101,37 @@ class RuneBlog
94
101
  end
95
102
 
96
103
  def inspect
97
- str = "[["
104
+ log!(enter: __method__)
105
+ str = "blog: "
98
106
  ivars = ["@root", "@sequence"] # self.instance_variables
99
107
  ivars.each do |iv|
100
108
  val = self.instance_variable_get(iv)
101
- str << "#{iv} = #{val} "
109
+ str << "#{iv}: #{val} "
102
110
  end
103
- str << "]]"
111
+ # str << "]]"
104
112
  str
105
113
  end
106
114
 
107
115
  def view?(name)
116
+ log!(enter: __method__, args: [name])
108
117
  raise ArgumentError unless name.is_a?(String) && ! name.empty?
109
118
  views.any? {|x| x.name == name }
110
119
  end
111
120
 
112
121
  def view(name = nil)
122
+ log!(enter: __method__, args: [name])
113
123
  raise ArgumentError unless name.nil? || (name.is_a?(String) && ! name.empty?)
114
124
  name.nil? ? @view : str2view(name)
115
125
  end
116
126
 
117
127
  def str2view(str)
128
+ log!(enter: __method__, args: [str])
118
129
  raise ArgumentError unless str.is_a?(String) && ! str.empty?
119
130
  @views.find {|x| x.name == str }
120
131
  end
121
132
 
122
133
  def _set_publisher
134
+ log!(enter: __method__)
123
135
  file = @view.dir + "/publish"
124
136
  @view.publisher = nil
125
137
  return unless File.exist?(file)
@@ -127,6 +139,7 @@ class RuneBlog
127
139
  end
128
140
 
129
141
  def view=(arg)
142
+ log!(enter: __method__, args: [arg])
130
143
  case arg
131
144
  when RuneBlog::View
132
145
  @view = arg
@@ -142,16 +155,19 @@ class RuneBlog
142
155
  end
143
156
 
144
157
  def get_sequence
158
+ log!(enter: __method__)
145
159
  File.read(root + "/sequence").to_i
146
160
  end
147
161
 
148
162
  def next_sequence
163
+ log!(enter: __method__)
149
164
  @sequence += 1
150
165
  dump(@sequence, "#@root/sequence")
151
166
  @sequence
152
167
  end
153
168
 
154
169
  def viewdir(v = nil) # delete?
170
+ log!(enter: __method__, args: [v])
155
171
  v = str2view(v) if v.is_a?(String)
156
172
  raise ArgumentError unless v.nil? || v.is_a?(RuneBlog::View)
157
173
  v ||= @view
@@ -159,38 +175,62 @@ class RuneBlog
159
175
  end
160
176
 
161
177
  def self.exist?
178
+ log!(enter: __method__)
162
179
  Dir.exist?(DotDir) && File.exist?(DotDir + "/" + ConfigFile)
163
180
  end
164
181
 
182
+ def _copy_to_staging
183
+ copy!("themes/standard/", "staging/")
184
+ copy!("themes/standard/widgets/", "staging/")
185
+ end
186
+
187
+ def _copy_to_remote
188
+ copy!("themes/standard/etc", "remote/")
189
+ copy!("themes/standard/assets", "remote/")
190
+ copy!("themes/standard/widgets", "remote/")
191
+ end
192
+
165
193
  def create_view(arg)
194
+ log!(enter: __method__, args: [arg])
166
195
  raise ArgumentError unless arg.is_a?(String) && ! arg.empty?
167
196
 
168
197
  names = self.views.map(&:to_s)
169
198
  raise ViewAlreadyExists(arg) if names.include?(arg)
170
199
 
171
- vdir = "#@root/views/#{arg}/"
200
+ vdir = arg.dup
172
201
  raise DirAlreadyExists(vdir) if Dir.exist?(vdir)
173
- create_dirs(vdir)
174
- up = Dir.pwd
175
-
176
- Dir.chdir(vdir) do
177
- x = RuneBlog::Default
178
- copy!("#{Themes}", "themes")
179
- create_dirs(:assets, :posts)
180
- create_dirs(:staging, "remote/permalink", "remote/navbar")
181
- livetext "themes/standard/etc/blog.css.lt3" # strip ext
182
- copy!("themes/standard/*", "staging/")
183
-
184
- copy!("themes/standard/etc", "remote/")
185
- copy!("themes/standard/assets", "remote/")
186
- copy!("themes/standard/widgets", "remote/")
187
202
 
203
+ # puts "cv: pwd = #{Dir.pwd} file = #{`ls`}"
204
+ Dir.chdir(@root) do
205
+ # puts "---- (#{arg}) tar operation..."
206
+
207
+ # system("bash")
208
+ cmd1 = "tar zxvf empty_view.tgz >/dev/null 2>&1"
209
+ cmd2 = "cp -r empty_view views/#{arg}"
210
+ system(cmd1)
211
+ # puts " pwd = #{Dir.pwd}"
212
+ # puts " . => #{`echo *`}"
213
+ # puts " ./views => #{`ls views`}"
214
+ # puts " #{cmd1}\n #{cmd2}"
215
+ system(cmd2)
216
+ end
217
+ # create_dirs(vdir)
218
+
219
+ # puts "vdir = #{vdir} pwd = #{Dir.pwd}"
220
+ Dir.chdir("#@root/views/#{vdir}") do
221
+ # system("bash")
222
+ # x = RuneBlog::Default
223
+ # copy!("#{Themes}", "themes")
224
+ # create_dirs(:assets, :posts, :staging, "remote/permalink", "remote/navbar")
225
+ # livetext "themes/standard/etc/blog.css.lt3" # strip ext
226
+ # _copy_to_staging
227
+ # _copy_to_remote
228
+ livetext "themes/standard/blog/generate", "remote/index"
188
229
  pub = "user: xxx\nserver: xxx\ndocroot: xxx\npath: xxx\nproto: xxx\n"
189
230
  dump(pub, "publish")
190
231
 
191
232
  view = RuneBlog::View.new(arg)
192
233
  self.view = view
193
- vdir = self.view.dir
194
234
  dump("Initial creation", "last_published")
195
235
  end
196
236
  @views << view
@@ -198,6 +238,7 @@ class RuneBlog
198
238
  end
199
239
 
200
240
  def delete_view(name, force = false)
241
+ log!(enter: __method__, args: [name, force])
201
242
  raise ArgumentError unless name.is_a?(String) && ! name.empty?
202
243
  if force
203
244
  system("rm -rf #@root/views/#{name}")
@@ -206,6 +247,7 @@ class RuneBlog
206
247
  end
207
248
 
208
249
  def view_files
250
+ log!(enter: __method__)
209
251
  vdir = self.view.dir
210
252
  files = ["#{vdir}/index.html"]
211
253
  files += posts.map {|x| "#{vdir}/#{x}" }
@@ -214,6 +256,7 @@ class RuneBlog
214
256
  end
215
257
 
216
258
  def post_lookup(postid) # side-effect?
259
+ log!(enter: __method__, args: [postid])
217
260
  # .. = templates, ../.. = views/thisview
218
261
  slug = title = date = teaser_text = nil
219
262
 
@@ -229,6 +272,7 @@ class RuneBlog
229
272
  end
230
273
 
231
274
  def teaser(slug)
275
+ log!(enter: __method__, args: [slug])
232
276
  id = slug.to_i
233
277
  text = nil
234
278
  post_entry_name = @theme + "/blog/post_entry.lt3"
@@ -246,7 +290,7 @@ class RuneBlog
246
290
  end
247
291
 
248
292
  def collect_recent_posts(file)
249
- @vdir = ".."
293
+ log!(enter: __method__, args: [file])
250
294
  posts = nil
251
295
  dir_posts = @vdir + "/posts"
252
296
  entries = Dir.entries(dir_posts)
@@ -269,15 +313,17 @@ class RuneBlog
269
313
  text << teaser(postid) # side effect! calls _out
270
314
  end
271
315
  text << "</body></html>"
272
- File.write(file, text) # FIXME ???
316
+ File.write("#@vdir/remote/"+file, text) # FIXME ???
273
317
  iframe_text = <<-HTML
274
318
  <iframe name="main" style="width: 100vw;height: 100vh;position: relative;"
275
319
  src='recent.html' width=100% frameborder="0" allowfullscreen>
276
320
  </iframe>
277
321
  HTML
322
+ # FIXME ^ serves no purpose??
278
323
  end
279
324
 
280
325
  def create_new_post(title, testing = false, teaser: nil, body: nil, other_views: [])
326
+ log!(enter: __method__, args: [title, testing, teaser, body, other_views])
281
327
  meta = nil
282
328
  Dir.chdir(self.view.dir) do
283
329
  post = Post.create(title: title, teaser: teaser, body: body, other_views: other_views)
@@ -292,6 +338,7 @@ class RuneBlog
292
338
  end
293
339
 
294
340
  def edit_initial_post(file, testing = false)
341
+ log!(enter: __method__, args: [file, testing])
295
342
  debug "=== edit_initial_post #{file.inspect} => #{sourcefile}"
296
343
  sourcefile = "#@root/drafts/#{file}"
297
344
  result = system("#@editor #{sourcefile} +8") unless testing
@@ -302,17 +349,20 @@ class RuneBlog
302
349
  end
303
350
 
304
351
  def posts
352
+ log!(enter: __method__)
305
353
  dir = self.view.dir + "/posts"
306
354
  posts = Dir.entries(dir).grep(/^\d{4}/)
307
355
  posts
308
356
  end
309
357
 
310
358
  def drafts
359
+ log!(enter: __method__)
311
360
  dir = "#@root/drafts"
312
361
  drafts = Dir.entries(dir).grep(/^\d{4}.*/)
313
362
  end
314
363
 
315
364
  def change_view(view)
365
+ log!(enter: __method__, args: [view])
316
366
  raise ArgumentError unless view.is_a?(String) || view.is_a?(RuneBlog::View)
317
367
  x = OpenStruct.new
318
368
  x.root, x.current_view, x.editor = @root, view.to_s, @editor # dumb - FIXME later
@@ -321,20 +371,22 @@ class RuneBlog
321
371
  end
322
372
 
323
373
  def generate_index(view) # FIXME delete?
324
- debug "=== generate_index view = #{view.to_s}"
374
+ log!(enter: __method__, args: [view], pwd: true, dir: true)
325
375
  raise ArgumentError unless view.is_a?(String) || view.is_a?(RuneBlog::View)
326
-
327
- vdir = self.view.dir
328
- dir0 = "#{vdir}/themes/standard/blog"
329
- rescue => err
330
- error(err)
331
- exit
376
+ @vdir = @root + "/views/#{view}"
377
+ collect_recent_posts("recent.html")
332
378
  end
333
379
 
334
380
  def generate_view(view) # huh?
381
+ log!(enter: __method__, args: [view])
382
+ generate_index(view)
383
+ Dir.chdir(@root + "/views/#{view}/themes/standard") do
384
+ livetext "blog/generate.lt3", "../../remote/index.html"
385
+ end
335
386
  end
336
387
 
337
388
  def _get_views(draft)
389
+ log!(enter: __method__, args: [draft])
338
390
  # FIXME dumb code
339
391
  view_line = File.readlines(draft).grep(/^.views /)
340
392
  raise "More than one .views call!" if view_line.size > 1
@@ -361,6 +413,7 @@ class RuneBlog
361
413
  # livetext VIEW/blog/generate.lt3 ??
362
414
 
363
415
  def _copy_get_dirs(draft, view)
416
+ log!(enter: __method__, args: [draft, view])
364
417
  fname = File.basename(draft)
365
418
  noext = fname.sub(/.lt3$/, "")
366
419
  vdir = "#@root/views/#{view}"
@@ -373,45 +426,56 @@ class RuneBlog
373
426
  end
374
427
 
375
428
  def generate_post(draft)
429
+ log!(enter: __method__, args: [draft])
376
430
  views = _get_views(draft)
377
431
  views.each do |view|
378
432
  noext, viewdir, slugdir, aslug, @theme = _copy_get_dirs(draft, view)
379
- staging = viewdir + "/staging"
433
+ # staging = viewdir + "/staging"
434
+ remote = viewdir + "/remote"
380
435
  Dir.chdir(slugdir) do
381
436
  copy(draft, ".")
382
437
  lt3 = draft.split("/")[-1]
383
438
  # Remember: Some posts may be in more than one view -- careful with links back
384
439
  # system("livetext #{draft} >staging/#{name}/index.html") # permalink?
385
- copy!("#{@theme}/*", "#{staging}")
386
- copy(lt3, staging)
440
+ # copy!("#{@theme}/*", "#{staging}")
441
+ # copy(lt3, staging)
442
+ copy(lt3, remote)
387
443
  html = noext[5..-1]
388
444
  livetext draft, html # livetext "foobar.lt3", "foobar.html"
389
- copy(html, "../../staging/post/index.html")
445
+ # copy(html, "../../staging/post/index.html")
446
+ copy(html, "../../remote/post/index.html")
390
447
  title_line = File.readlines(draft).grep(/^.title /).first
391
448
  title = title_line.split(" ", 2)[1]
392
449
  excerpt = File.read("teaser.txt")
393
450
  vars = %[.set title="#{title.chomp}"\n] +
394
451
  %[.set teaser="#{excerpt.chomp}"]
395
- Dir.chdir(staging) do
396
- File.open("vars.lt3", "w") {|f| f.puts vars }
397
- livetext "post/generate.lt3", html
398
- copy html, "../remote"
399
- livetext "post/permalink.lt3", "../remote/permalink/#{html}"
400
- collect_recent_posts("recent.html")
401
- copy("recent.html", "../remote")
402
- copy!("navbar/*html", "../remote/navbar/")
403
- copy!("widgets", "../remote/") # really copies too much...
404
- livetext "blog/generate", "../remote/index"
452
+ theme = "../../theme/standard"
453
+ File.open("vars.lt3", "w") {|f| f.puts vars }
454
+ livetext "#{theme}/post/generate.lt3", "#{remote}/#{html}"
455
+ livetext "#{theme}/post/permalink.lt3", "#{remote}/permalink/#{html}"
456
+ # puts <<-TEXT
457
+ # File.open("vars.lt3", "w") {|f| f.puts vars }
458
+ # livetext "../post/generate.lt3", "#{remote}/#{html}"
459
+ # livetext "../post/permalink.lt3", "#{remote}/permalink/#{html}"
460
+ # TEXT
461
+ # system("bash")
462
+ log!(str: "About to enter remote/", pwd: true, dir: true)
463
+ Dir.chdir(remote) do
464
+ log!(str: "Now in remote/", pwd: true, dir: true)
465
+ system("cp -r ../themes/standard/widgets .")
466
+ log!(str: "finished with remote/", pwd: true, dir: true)
405
467
  end
406
468
  end
407
469
  end
408
470
  end
409
471
 
410
472
  def relink
473
+ log!(enter: __method__)
411
474
  self.views.each {|view| generate_index(view) }
412
475
  end
413
476
 
414
477
  def index_entry(view, meta)
478
+ log!(enter: __method__, args: [view, meta])
415
479
  debug "=== index_entry #{view.to_s.inspect} #{meta.num} #{meta.title.inspect}"
416
480
  check_meta(meta, "index_entry1")
417
481
  raise ArgumentError unless view.is_a?(String) || view.is_a?(RuneBlog::View)
@@ -432,6 +496,7 @@ class RuneBlog
432
496
  end
433
497
 
434
498
  def rebuild_post(file)
499
+ log!(enter: __method__, args: [file])
435
500
  raise "Doesn't currently work"
436
501
  debug "Called rebuild_post(#{file.inspect})"
437
502
  raise ArgumentError unless file.is_a?(String)
@@ -446,6 +511,7 @@ class RuneBlog
446
511
  end
447
512
 
448
513
  def remove_post(num)
514
+ log!(enter: __method__, args: [num])
449
515
  raise ArgumentError unless num.is_a?(Integer)
450
516
  tag = prefix(num)
451
517
  files = Find.find(self.view.dir).to_a
@@ -461,6 +527,7 @@ class RuneBlog
461
527
  end
462
528
 
463
529
  def undelete_post(num)
530
+ log!(enter: __method__, args: [num])
464
531
  raise ArgumentError unless num.is_a?(Integer)
465
532
  files = Find.find("#@root/views/").to_a
466
533
  tag = prefix(num)
@@ -476,12 +543,14 @@ class RuneBlog
476
543
  end
477
544
 
478
545
  def delete_draft(num)
546
+ log!(enter: __method__, args: [num])
479
547
  raise ArgumentError unless num.is_a?(Integer)
480
548
  tag = prefix(num)
481
549
  system("rm -rf #@root/drafts/#{tag}-*")
482
550
  end
483
551
 
484
552
  def make_slug(meta)
553
+ log!(enter: __method__, args: [meta])
485
554
  raise ArgumentError unless meta.title.is_a?(String)
486
555
  label = '%04d' % meta.num # FIXME can do better
487
556
  slug0 = meta.title.downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '')