module Dyndoc::HtmlServers

Public Class Methods

cfg() click to toggle source
# File lib/dyndoc-html-servers.rb, line 220
def HtmlServers.cfg
  unless @@cfg
    dyndoc_home = Dyndoc.home
    cfg_yml = File.join(dyndoc_home,"etc","dyn-html.yml")
    @@cfg=(File.exist? cfg_yml) ? ::YAML::load_file(cfg_yml) : {}
    @@cfg["dyndoc_home"]=dyndoc_home
  end
  @@cfg
end
create_html_page(dyn_file,html_file,opts,pages_root) click to toggle source
# File lib/dyndoc-html-servers.rb, line 253
def HtmlServers.create_html_page(dyn_file,html_file,opts,pages_root)

  Dyndoc.cli_convert_from_file(dyn_file[1..-1],html_file, opts)
  ## fix html_file for _rmd, _adoc and _ttm
  if html_file =~ /^(.*)_(rmd|adoc|ttm)\.html$/
    html_file = $1+".html"
  end
  if html_file =~ /^(.*)_erb\.html$/
    erb_page=File.join(pages_root,$1)
    if File.exists? erb_page+"_erb.html"
      FileUtils.mv erb_page+"_erb.html",erb_page+".erb"
    end
    html_file = "erb"+$1
  end

end
dyn_html_filewatcher(cfg={}) click to toggle source
# File lib/dyndoc-html-servers.rb, line 270
def HtmlServers.dyn_html_filewatcher(cfg={}) #cfg
  require 'dyndoc-convert'
  require 'dyndoc-edit'
  require 'filewatcher'
  require 'dyndoc-linter'

  $VERBOSE = nil
  options={first: true}
  ## To put inside yaml config file!
  root ||= cfg["root"] || HtmlServers.cfg["root"] || File.join(ENV["HOME"],"RodaSrv")
  dyn_root = cfg["dyn_root"] || HtmlServers.cfg["dyn_root"] || File.join(root ,"edit") 
  public_root = cfg["public_root"] || HtmlServers.cfg["public_root"] || File.join(root ,"public")
  dyn_public_edit_root = File.join(public_root,"users","*",".edit","**","*.dyn")
  pages_root = File.join(public_root ,"pages")
  current_email = cfg["email"] || HtmlServers.cfg["email"] || "rdrouilh@gmail.com" #default email user can be overriden by -u option
  host=(cfg["html-srv-host"] || HtmlServers.cfg["html-srv-host"] || "http://localhost").to_s
  port=(cfg["html-srv-port"] || HtmlServers.cfg["html-srv-port"] || DyndocServers.dyn_http_port? || "9294").to_s
  base_url= host+":"+port

  opts = {
    dyn_root: dyn_root,
    html_root: pages_root,
    user: nil #current_email
  }

  puts "watching "+ dyn_public_edit_root + " and " + dyn_root
  old_html_file=""
  ::FileWatcher.new([dyn_public_edit_root,dyn_root]).watch() do |filename, event|
    ##
    p [:filename,filename,event]
    if [:changed,:updated,:new].include? event and File.extname(filename) == ".dyn"
      ##p [:filename_event,event,filename]
      if (lint_error=Dyndoc::Linter.check_file(filename)).empty?
        ## do not process preload, postload, lib and layout files
        unless filename =~ /(?:_pre|_post|_lib|_layout)\.dyn$/
          ## find dyn_file (relative path from root)
          dyn_public_edit_file=""
          dyn_file=Pathname(filename).relative_path_from(Pathname(dyn_root)).to_s
          if dyn_file[0,2] == '..' # try the public_root
            dyn_public_edit_file=Pathname(filename).relative_path_from(Pathname(public_root)).to_s
            dyn_public_edit_file=dyn_public_edit_file.split("/")
            if dyn_public_edit_file[0]=="users" and dyn_public_edit_file[2]==".edit"
              dyn_file="/"+File.join(dyn_public_edit_file[1],dyn_public_edit_file[3..-1])
              dyn_public_edit_file=dyn_public_edit_file.join("/")
            end
          else
            dyn_file="/"+dyn_file
          end
          
          unless HtmlServers.unwatched?(dyn_file[1..-1]).empty?
            if RUBY_PLATFORM =~ /darwin/
              `osascript -e 'display notification "Warning: #{dyn_file} unwatched by #{HtmlServers.unwatched?(dyn_file[1..-1])}!" with title "dyn-ctl unwatch"'`
            end
          else
            opts_doc=Dyndoc::FileWatcher.get_dyn_html_info(filename,dyn_file,opts[:user])
            opts.merge! opts_doc
            ##p [:html_files,html_files]

            html_file=opts[:html_files][opts[:current_doc_tag]] # No more default # || html_files[""]
            ##p [:opts,opts,:current_doc_tag,opts[:current_doc_tag]]
            state=""
            begin
              HtmlServers.create_html_page(dyn_file,html_file,opts,pages_root)

              puts dyn_file[1..-1]+(dyn_public_edit_file.empty? ? "" : "*")+" processed => "+html_file+" created!"
              options[:first] = html_file != old_html_file
              if html_file != old_html_file
                old_html_file = html_file
                url=File.join(base_url,html_file)
                ## p [:url,url]
                Dyndoc::Browser.load(url)
              else
                Dyndoc::Browser.reload
              end
            rescue => e
              state="error: #{e.message} =>"
            ensure
              notify_file=filename.split("/")
              if (ind=notify_file.index ".edit")
                notify_file=notify_file[0..ind].join("/")
                File.open(notify_file+"/notify.out","w") do |f|
                  f << state + filename
                end
              end
            end
          end
        end
      else
        if RUBY_PLATFORM =~ /darwin/
          ##p lint_error
          cmd_to_display='display notification "' +lint_error.map{|e| e[0].to_s+") "+e[1].to_s}.join('" & "')+ '" with title "Lint Error:'+filename+'"'
          p [:cmd_display,cmd_to_display]
          `osascript -e '#{cmd_to_display}'`
        else
          puts "Lint Error: "+filename+" with "+lint_error.inspect
        end
      end
    end
  end

end
dyn_http_server(host=nil,port=nil) click to toggle source
# File lib/dyndoc-html-servers.rb, line 230
def HtmlServers.dyn_http_server(host=nil,port=nil)
  require 'thin'
  dyn_html_srv_ru=File.join(ENV["HOME"],"RodaSrv","public","users",".dyn-html","srv.ru")
  dyn_html_srv_ru="/home/ubuntu/tools/dyn-html/srv.ru" unless File.exists? dyn_html_srv_ru # DyndocDockerSite guest-tools folder
  dyn_html_srv_ru=File.join(ENV["HOME"],"dyndoc","html-srv","dyn.ru") unless File.exists? dyn_html_srv_ru
  dyn_html_srv_ru=File.expand_path("../../share/html-srv/dyn-html-srv.ru",__FILE__) unless File.exists? dyn_html_srv_ru
  
  arg=["-R",dyn_html_srv_ru]
  if HtmlServers.cfg["html-srv-port"]
    arg += ["-p",HtmlServers.cfg["html-srv-port"].to_s]
  else
    arg += ["-p",(port || DyndocServers.dyn_http_port?  || 9294).to_s]
  end
  if host
    arg += ["-a",host]
  elsif HtmlServers.cfg["html-srv-host"]
    arg += ["-a",HtmlServers.cfg["html-srv-host"].to_s]
  end
  arg << "start"
  ##p [:arg,arg]
  Thin::Runner.new(arg).run!
end
unwatch_add(path) click to toggle source
# File lib/dyndoc-html-servers.rb, line 200
def HtmlServers.unwatch_add(path)
  return unless path
  HtmlServers.unwatch_cfg.unshift path
  HtmlServers.unwatch_save
end
unwatch_cfg() click to toggle source
# File lib/dyndoc-html-servers.rb, line 182
def HtmlServers.unwatch_cfg
  if @@unwatch.empty?
    @@unwatch=(File.exist? @@unwatch_yml) ? ::YAML::load_file(@@unwatch_yml) : []
  end
  @@unwatch
end
unwatch_ls() click to toggle source
# File lib/dyndoc-html-servers.rb, line 189
def HtmlServers.unwatch_ls
  res=HtmlServers.unwatch_cfg.empty? ? "Empty folders list" : (HtmlServers.unwatch_cfg.each_with_index.map {|e,i| (i+1).to_s+") "+e}.join("\n") + "\n")
  puts res
end
unwatch_rm(path) click to toggle source
# File lib/dyndoc-html-servers.rb, line 206
def HtmlServers.unwatch_rm(path)
  return unless path
  HtmlServers.unwatch_cfg
  @@unwatch -= [path]
  HtmlServers.unwatch_save
end
unwatch_save() click to toggle source
# File lib/dyndoc-html-servers.rb, line 194
def HtmlServers.unwatch_save
  File.open(@@unwatch_yml,"w") do |f|
    f << @@unwatch.to_yaml
  end
end
unwatched?(file) click to toggle source
# File lib/dyndoc-html-servers.rb, line 213
def HtmlServers.unwatched?(file)
  return "" if HtmlServers.unwatch_cfg.empty?
  return HtmlServers.unwatch_cfg.map{|e| file[0...e.length] == e ? e : ""}[0] || ""
end