runeblog 0.0.81 → 0.0.82

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0ad0ac59c820b552c49a9b5bddd5834e7cc6304f
4
- data.tar.gz: 48bf95d2249de54d88cc9cf68a64c370c20c0a6f
3
+ metadata.gz: e2691b40f636554604986a978b477b1696171cf2
4
+ data.tar.gz: 2cef5f6ebc60afc93e125453b6614589e3f6a420
5
5
  SHA512:
6
- metadata.gz: fb0ea9ec99450aee211bf5a7896efc121237864ca58174d26df4afa6fbe83ea3bdd51e86912204da13ba15fa0e3fdda601b1a85bb33efc347aabcb7f89ec79d9
7
- data.tar.gz: f1ac88ad0e372483897f290f52f278d31f3221ee8e71e65c233a4b1b2a747c783e985693c2b137378fa69e34f40b105b2a5492d0c9645838492bf865fca7b906
6
+ metadata.gz: 6e2850ad2ae3f999e155214e9bfd76ad83d5dd814f23cbb711a5aafb5d08524453da8bdacba4f0d747f6a1a35249f57c5467633a89351dcee47fd6381eeaf58e
7
+ data.tar.gz: 50fc4ef26de135a92fa08f860be97fb04999fe2bbe15ef21ba44683a4de9fa853fa6bfb54c4410cfc04b6483acca62748e9bfb4804d8babd04057464c666e89d
data/lib/default.rb CHANGED
@@ -30,10 +30,25 @@ BlogHeader = <<-TEXT
30
30
  TEXT
31
31
 
32
32
  BlogTrailer = <<-TEXT
33
- <!-- no trailer -->
33
+ <!-- no blog trailer -->
34
34
  TEXT
35
35
 
36
- PostTemplate = <<-'TEXT'
36
+ PostTemplate = <<-'TEXT' # interpolate later
37
+ .mixin liveblog
38
+
39
+ .title #@title
40
+ .pubdate #@date
41
+ .views #@view
42
+ .tags
43
+
44
+ .teaser
45
+ #{@meta.teaser}
46
+ .end
47
+ #{@meta.remainder}
48
+ TEXT
49
+
50
+
51
+ TeaserTemplate = <<-'TEXT' # interpolate later
37
52
  <html>
38
53
 
39
54
  <body>
data/lib/deploy.rb CHANGED
@@ -2,15 +2,27 @@ require 'helpers-blog'
2
2
  require 'runeblog'
3
3
 
4
4
  class RuneBlog::Deployment
5
- attr_reader :user, :server, :root, :path
5
+ attr_reader :user, :server, :docroot, :path
6
6
 
7
7
  BadRemoteLogin = Exception.new("Can't login remotely")
8
8
  BadRemotePerms = Exception.new("Bad remote permissions")
9
9
 
10
- def initialize(user, server, root, path, protocol = "http")
10
+ def initialize(*params)
11
11
  @blog = RuneBlog.blog
12
- @user, @server, @root, @path =
13
- user, server, root, path
12
+ # Clunky...
13
+ if params.size == 1 && params[0].is_a?(OpenStruct)
14
+ obj = params[0]
15
+ array = obj.to_h.values_at(:user, :server, :docroot,
16
+ :path, :proto)
17
+ @user, @server, @docroot, @path, @proto = *array
18
+ else
19
+ @user, @server, @docroot, @path, @proto = *obj
20
+ end
21
+ end
22
+
23
+ def to_h
24
+ {user: @user, server: @server, docroot: @docroot,
25
+ path: @path, proto: @proto}
14
26
  end
15
27
 
16
28
  def url
@@ -19,7 +31,7 @@ class RuneBlog::Deployment
19
31
 
20
32
  def deploy(files)
21
33
  reset_output
22
- dir = "#@root/#@path"
34
+ dir = "#@docroot/#@path"
23
35
  result = system("ssh #@user@#@server -x mkdir #{dir}")
24
36
  list = files.join(' ')
25
37
  cmd = "scp -r #{list} #@user@##server:#{dir} >/dev/null 2>&1"
@@ -40,11 +52,11 @@ class RuneBlog::Deployment
40
52
  end
41
53
 
42
54
  def remote_permissions?
43
- dir = "#@root/#@path"
55
+ dir = "#@docroot/#@path"
44
56
  temp = "#@path/__only_testing"
45
- try1 = system("ssh -o BatchMode=yes -o ConnectTimeout=2 #@user@#@server -x mkdir -p #{temp} >/dev/null 2>&1")
57
+ try1 = system("ssh -o BatchMode=yes -o ConnectTimeout=1 #@user@#@server -x mkdir -p #{temp} >/dev/null 2>&1")
46
58
  return nil unless try1
47
- try2 = system("ssh -o BatchMode=yes -o ConnectTimeout=2 #@user@#@server -x rmdir #{temp} >/dev/null 2>&1")
59
+ try2 = system("ssh -o BatchMode=yes -o ConnectTimeout=1 #@user@#@server -x rmdir #{temp} >/dev/null 2>&1")
48
60
  return nil unless try2
49
61
  true
50
62
  end
data/lib/helpers-blog.rb CHANGED
@@ -15,3 +15,28 @@ def error(err) # FIXME - this is duplicated
15
15
  puts err.backtrace # [0]
16
16
  end
17
17
 
18
+ def read_config(file, *syms)
19
+ lines = File.readlines(file).map(&:chomp)
20
+ obj = OpenStruct.new
21
+ lines.each do |line|
22
+ key, val = line.split(" ", 2)
23
+ key = key[0..-2] # remove colon
24
+ obj.send(key+"=", val)
25
+ end
26
+ @deployer = RuneBlog::Deployment.new(obj)
27
+ obj
28
+ rescue => err
29
+ puts "Something hit the fan: #{err}"
30
+ puts err.backtrace
31
+ exit
32
+ end
33
+
34
+ def write_config(obj, file)
35
+ hash = obj.to_h
36
+ File.open(file, "w") do |f|
37
+ hash.each_pair do |key, val|
38
+ f.puts "#{key}: #{val}"
39
+ end
40
+ end
41
+ end
42
+
data/lib/post.rb CHANGED
@@ -18,22 +18,12 @@ class RuneBlog::Post
18
18
  @title = meta.title
19
19
  @view = @blog.str2view(view_name)
20
20
  @num, @slug = make_slug
21
- date = Time.now.strftime("%Y-%m-%d")
22
- template = <<-EOS.gsub(/^ */, "")
23
- .mixin liveblog
24
-
25
- .title #@title
26
- .pubdate #{date}
27
- .views #@view
28
-
29
- .teaser
30
- #{meta.teaser}
31
- .end
32
- #{meta.remainder}
33
- EOS
34
-
21
+ @date = Time.now.strftime("%Y-%m-%d")
22
+ template = RuneBlog::Default::PostTemplate
23
+ @meta = meta
24
+ html = interpolate(template)
35
25
  @draft = "#{@blog.root}/src/#@slug.lt3"
36
- File.write(@draft, template)
26
+ File.write(@draft, html)
37
27
  end
38
28
 
39
29
  def edit
@@ -72,7 +62,7 @@ class RuneBlog::Post
72
62
  File.write("metadata.yaml", @meta.to_yaml)
73
63
  File.write("teaser.txt", @meta.teaser)
74
64
  File.write("remainder.txt", @meta.remainder)
75
- template = RuneBlog::Default::PostTemplate
65
+ template = RuneBlog::Default::TeaserTemplate
76
66
  text = interpolate(template)
77
67
  File.write("index.html", text)
78
68
  end
data/lib/repl.rb CHANGED
@@ -72,36 +72,6 @@ module RuneBlog::REPL
72
72
  error(err)
73
73
  end
74
74
 
75
- def old_cmd_deploy(arg) # FIXME non-string return expected in caller?
76
- # TBD clunky FIXME
77
- reset_output
78
- check_empty(arg)
79
- user, server, sroot, spath = *@deploy[@blog.view]
80
- if files.empty? # FIXME baloney
81
- output! "No files to deploy"
82
- return @out
83
- end
84
-
85
- output "Files:"
86
- files.each {|f| output " #{f}\n" }
87
- output_newline
88
- dir = "#{sroot}/#{spath}"
89
- # FIXME - may or may not already exist
90
- result = system("ssh root@#{server} mkdir #{dir}")
91
- # ^ needs -c??
92
-
93
- cmd = "scp -r #{files.join(' ')} root@#{server}:#{dir} >/dev/null 2>&1"
94
- output! "Deploying #{files.size} files...\n"
95
- result = system(cmd)
96
- raise "Problem occurred in deployment" unless result
97
-
98
- File.write("#{vdir}/last_deployed", files)
99
- output! "...finished.\n"
100
- @out
101
- rescue => err
102
- error(err)
103
- end
104
-
105
75
  def cmd_rebuild(arg)
106
76
  reset_output
107
77
  check_empty(arg)
@@ -156,8 +126,8 @@ module RuneBlog::REPL
156
126
  @blog.create_view(arg)
157
127
  resp = yesno("Add deployment info now? ")
158
128
  @blog.view.deployer = ask_deployment_info
159
- @blog.view.write_config # change this?
160
- @blog.view.read_config # was: get_deployment_info
129
+ write_config(@blog.view.deployer, @blog.view.dir + "/deploy") # change this?
130
+ # read_config(@blog.view.dir + "/deploy") # unnessary?
161
131
  nil
162
132
  rescue => err
163
133
  error(err)
data/lib/runeblog.rb CHANGED
@@ -1,7 +1,10 @@
1
+ require 'pp'
2
+
1
3
  require 'find'
2
4
  require 'yaml' # get rid of YAML later
3
5
  require 'livetext'
4
6
  require 'skeleton'
7
+ require 'helpers-blog'
5
8
  require 'default'
6
9
  require 'view'
7
10
  require 'deploy'
@@ -20,7 +23,9 @@ class RuneBlog
20
23
  attr_accessor :view # overridden
21
24
 
22
25
  def self.create_new_blog(dir = "data")
23
- File.write(".blog", "#{dir}\nno_default\n") # .blog lives above subtree
26
+ x = OpenStruct.new
27
+ x.root, x.current_view, x.editor = dir, "no_default", "vi"
28
+ write_config(x, ".blog")
24
29
  create_dir(dir)
25
30
  Dir.chdir(dir) do
26
31
  create_dir("views")
@@ -31,15 +36,12 @@ class RuneBlog
31
36
  end
32
37
  end
33
38
 
34
- def get_config(file)
35
- lines = File.readlines(file).map(&:chomp)
36
- root, view_name = *lines
37
- end
38
-
39
39
  def initialize(cfg_file = ".blog") # assumes existing blog
40
40
  # Crude - FIXME later - What views are there? Deployment, etc.
41
41
  self.class.blog = self # Weird. Like a singleton - dumbass circular dependency?
42
- @root, view_name = get_config(cfg_file)
42
+ obj = read_config(cfg_file)
43
+ vals = obj.to_h.values_at(:root, :current_view, :editor)
44
+ @root, view_name, @editor = *vals
43
45
  @views = subdirs("#@root/views/").sort.map {|name| RuneBlog::View.new(name) }
44
46
  @view = str2view(view_name)
45
47
  @sequence = get_sequence
@@ -61,12 +63,13 @@ class RuneBlog
61
63
  case arg
62
64
  when RuneBlog::View
63
65
  @view = arg
66
+ raise "Problem here?"
64
67
  @view.read_config
65
68
  when String
66
69
  new_view = str2view(arg)
67
70
  raise "Can't find view #{arg}" if new_view.nil?
68
71
  @view = new_view
69
- @view.read_config
72
+ @view.deployer = read_config(@view.dir + "/deploy")
70
73
  else
71
74
  raise "#{arg.inspect} was not a View or a String"
72
75
  end
@@ -123,7 +126,7 @@ class RuneBlog
123
126
  vdir = @blog.viewdir(@view)
124
127
  # meh
125
128
  files = ["#{vdir}/index.html"]
126
- files += Dir.entries(vdir).grep(/^\d\d\d\d/).map {|x| "#{vdir}/#{x}" }
129
+ files += Dir.entries(vdir).grep(/^\d{4}/).map {|x| "#{vdir}/#{x}" }
127
130
  # Huh?
128
131
  files.reject! {|f| File.mtime(f) < File.mtime("#{vdir}/last_deployed") }
129
132
  end
@@ -148,7 +151,7 @@ class RuneBlog
148
151
  end
149
152
 
150
153
  def edit_initial_post(file)
151
- result = system("vi #@root/src/#{file} +8 ")
154
+ result = system("#@editor #@root/src/#{file} +8")
152
155
  raise "Problem editing #@root/src/#{file}" unless result
153
156
  nil
154
157
  rescue => err
@@ -167,7 +170,9 @@ class RuneBlog
167
170
  end
168
171
 
169
172
  def change_view(view)
170
- File.write(".blog", "#@root\n#{view}\n")
173
+ x = OpenStruct.new
174
+ x.root, x.current_view, x.editor = @root, view, @editor # dumb - FIXME later
175
+ write_config(x, ".blog")
171
176
  self.view = view # error checking?
172
177
  end
173
178
 
@@ -210,7 +215,7 @@ class RuneBlog
210
215
  def generate_index(view)
211
216
  # Gather all posts, create list
212
217
  vdir = "#@root/views/#{view}"
213
- posts = Dir.entries(vdir).grep /^\d\d\d\d/
218
+ posts = Dir.entries(vdir).grep /^\d{4}/
214
219
  posts = posts.sort.reverse
215
220
 
216
221
  # Add view header/trailer
@@ -262,8 +267,11 @@ class RuneBlog
262
267
  def remove_post(num)
263
268
  list = files_by_id(num)
264
269
  return nil if list.empty?
265
- result = system("rm -rf #{list.join(' ')}")
266
- error_cant_delete(files) unless result
270
+ dest = list.map {|f| f.sub(/(?<num>\d{4}-)/, "_\\k<num>") }
271
+ list.each.with_index do |src, i|
272
+ cmd = "mv #{src} #{dest[i]} 2>/dev/null"
273
+ system(cmd)
274
+ end
267
275
  # FIXME - update index/etc
268
276
  true
269
277
  end
@@ -288,6 +296,7 @@ class RuneBlog
288
296
  private
289
297
 
290
298
  def subdirs(dir)
299
+ raise Exception.new("hell") if dir == "/views/"
291
300
  dirs = Dir.entries(dir) - %w[. ..]
292
301
  dirs.reject! {|x| ! File.directory?("#@root/views/#{x}") }
293
302
  dirs
@@ -296,7 +305,7 @@ class RuneBlog
296
305
  end
297
306
 
298
307
  def find_src_slugs
299
- files = Dir.entries("#@root/src/").grep /\d\d\d\d.*.lt3$/
308
+ files = Dir.entries("#@root/src/").grep /\d{4}.*.lt3$/
300
309
  files.map! {|f| File.basename(f) }
301
310
  files = files.sort.reverse
302
311
  files
data/lib/version.rb CHANGED
@@ -1,6 +1,6 @@
1
1
 
2
2
  class RuneBlog
3
- VERSION = "0.0.81"
3
+ VERSION = "0.0.82"
4
4
 
5
5
  Path = File.expand_path(File.join(File.dirname(__FILE__)))
6
6
  end
data/lib/view.rb CHANGED
@@ -9,7 +9,8 @@ class RuneBlog::View
9
9
  raise "RuneBlog.blog is not set!" if RuneBlog.blog.nil?
10
10
  @blog = RuneBlog.blog
11
11
  @name = name
12
- @deploy = read_config
12
+ dep_file = @blog.root + "/views/#@name/deploy"
13
+ @deployer = read_config(dep_file)
13
14
  end
14
15
 
15
16
  def dir
@@ -48,16 +49,5 @@ class RuneBlog::View
48
49
  File.mtime(file) < File.mtime("#{dir()}/last_deployed")
49
50
  end
50
51
 
51
- def read_config
52
- file = self.dir + "/deploy"
53
- lines = File.readlines(file).map(&:chomp)
54
- user, server, root, path, proto = *lines
55
- @deploy = RuneBlog::Deployment.new(user, server, root, path, proto)
56
- end
57
-
58
- def write_config
59
- file = @blog.view.dir + "/deploy"
60
- File.open(file, "w") {|f| f.puts [@user, @server, @root, @path, @proto] }
61
- end
62
52
  end
63
53
 
data/test/general.rb CHANGED
@@ -191,7 +191,10 @@ class TestREPL < Minitest::Test
191
191
  end
192
192
 
193
193
  def test_016_can_deploy
194
- dep = RuneBlog::Deployment.new("root", "rubyhacker.com", "/var/www", "whatever")
194
+ x = OpenStruct.new
195
+ x.user, x.server, x.docroot, x.docroot, x.path, x.proto =
196
+ "root", "rubyhacker.com", "/var/www", "whatever", "http"
197
+ dep = RuneBlog::Deployment.new(x)
195
198
  result = dep.remote_login?
196
199
  assert result == true, "Valid login doesn't work"
197
200
  result = dep.remote_permissions?
@@ -199,13 +202,19 @@ class TestREPL < Minitest::Test
199
202
  end
200
203
 
201
204
  def test_017_cannot_deploy_wrong_user
202
- dep = RuneBlog::Deployment.new("bad_user", "rubyhacker.com", "/var/www", "whatever")
205
+ x = OpenStruct.new
206
+ x.user, x.server, x.docroot, x.docroot, x.path, x.proto =
207
+ "bad_user", "rubyhacker.com", "/var/www", "whatever", "http"
208
+ dep = RuneBlog::Deployment.new(x)
203
209
  result = dep.remote_login?
204
210
  assert result.nil?, "Expected to detect login error (bad user)"
205
211
  end
206
212
 
207
213
  def test_018_cannot_deploy_bad_server
208
- dep = RuneBlog::Deployment.new("root", "nonexistent123.com", "/var/www", "whatever")
214
+ x = OpenStruct.new
215
+ x.user, x.server, x.docroot, x.docroot, x.path, x.proto =
216
+ "root", "nonexistent123.com", "/var/www", "whatever", "http"
217
+ dep = RuneBlog::Deployment.new(x)
209
218
  result = dep.remote_login?
210
219
  assert result.nil?, "Expected to detect login error (bad server)"
211
220
  end
data/test/make_blog.rb CHANGED
@@ -6,6 +6,7 @@ def make_post(x, title)
6
6
  meta = OpenStruct.new
7
7
  meta.title = title
8
8
  num = x.create_new_post(meta, true)
9
+ num
9
10
  end
10
11
 
11
12
  def show_lines(text)
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.81
4
+ version: 0.0.82
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-10-05 00:00:00.000000000 Z
11
+ date: 2018-10-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: livetext