Class: RuneBlog::Publishing

Inherits:
Object
  • Object
show all
Defined in:
lib/global.rb,
lib/publish.rb

Constant Summary collapse

BadRemoteLogin =
Exception.new("Can't login remotely")
BadRemotePerms =
Exception.new("Bad remote permissions")

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(view) ⇒ Publishing

Returns a new instance of Publishing.



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/publish.rb', line 10

def initialize(view)
  log!(enter: __method__, args: [view.to_s])
  @blog = RuneBlog.blog
#     # Clunky...
#     if params.size == 1 && params[0].is_a?(OpenStruct)
#       obj = params[0]
#       array = obj.to_h.values_at(:user, :server, :docroot, 
#                                  :path, :proto)
#       @user, @server, @docroot, @path, @proto = *array
#     else
#       @user, @server, @docroot, @path, @proto = *params
#     end
  # find a better way?
  gfile = @blog.root/:views/view/"themes/standard/global.lt3"
  data = File.readlines(gfile)
  grab = ->(var) { data.grep(/^#{var} /).first.chomp.split(" ", 2)[1] }
  @user    = grab.call("publish.user")
  @server  = grab.call("publish.server")
  @docroot = grab.call("publish.docroot")
  @path    = grab.call("publish.path")
  @proto   = grab.call("publish.proto")
end

Instance Attribute Details

#docrootObject (readonly)

Returns the value of attribute docroot.



5
6
7
# File 'lib/publish.rb', line 5

def docroot
  @docroot
end

#pathObject (readonly)

Returns the value of attribute path.



5
6
7
# File 'lib/publish.rb', line 5

def path
  @path
end

#serverObject (readonly)

Returns the value of attribute server.



5
6
7
# File 'lib/publish.rb', line 5

def server
  @server
end

#userObject (readonly)

Returns the value of attribute user.



5
6
7
# File 'lib/publish.rb', line 5

def user
  @user
end

Instance Method Details

#publish(files, assets = []) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/publish.rb', line 51

def publish(files, assets=[])
  log!(enter: __method__, args: [files, assets])
  dir = @docroot/@path
  view_name = @blog.view.name
  viewpath = dir # /view_name
#   result = system!("ssh #@user@#@server -x mkdir -p #{viewpath}") 
  result = system!("ssh #@user@#@server -x mkdir -p #{viewpath}/assets") 
  files.each do |file|
    dest = "#@user@#@server:" + dir  # /view_name
    file.gsub!(/\/\//, "/")  # weird... :-/
    cmd = "scp -r #{file} #{dest} >/dev/null 2>/tmp/wtf"
    debug "cmd = #{cmd.inspect}  - see /tmp/wtf"
    result = system!(cmd) || puts("\n  Could not copy #{file} to #{dest}")
  end
  unless assets.empty?
    cmd = "scp #{assets.join(' ')} #@user@#@server:#{viewpath}/assets >/dev/null 2>/tmp/wtf2"
    result = system!(cmd)
    raise PublishError if !result
  end
  dump(files, "#{@blog.view.dir}/last_published")
  true
end

#remote_login?Boolean

Returns:

  • (Boolean)


74
75
76
77
78
79
80
# File 'lib/publish.rb', line 74

def remote_login?
  log!(enter: __method__)
  cmd = "ssh -o BatchMode=yes #@user@#@server -x date >/dev/null 2>&1"
  result = system(cmd)
  return nil unless result
  true
end

#remote_permissions?Boolean

Returns:

  • (Boolean)


82
83
84
85
86
87
88
89
90
91
# File 'lib/publish.rb', line 82

def remote_permissions?
  log!(enter: __method__)
  dir = @docroot/@path
  temp = @path/"__only_testing" 
  try1 = system("ssh -o BatchMode=yes -o ConnectTimeout=1 #@user@#@server -x mkdir -p #{temp} >/dev/null 2>&1")
  return nil unless try1
  try2 = system("ssh -o BatchMode=yes -o ConnectTimeout=1 #@user@#@server -x rmdir #{temp} >/dev/null 2>&1")
  return nil unless try2
  true
end

#system!(str) ⇒ Object



45
46
47
48
49
# File 'lib/publish.rb', line 45

def system!(str)
  log!(enter: __method__, args: [str])
  rc = system(str)
  rc
end

#to_hObject



33
34
35
36
37
# File 'lib/publish.rb', line 33

def to_h
  log!(enter: __method__)
  {user: @user, server: @server, docroot: @docroot,
   path: @path, proto: @proto}
end

#urlObject



39
40
41
42
43
# File 'lib/publish.rb', line 39

def url
  log!(enter: __method__)
  vname = @blog.view.name # .gsub(/_/, "\\_")
  url = "#@proto://#@server/#@path"  # /#{vname}"
end