runeblog 0.0.81 → 0.0.82

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