diff options
Diffstat (limited to 'lib/sisu/develop/hub.rb')
-rw-r--r-- | lib/sisu/develop/hub.rb | 277 |
1 files changed, 277 insertions, 0 deletions
diff --git a/lib/sisu/develop/hub.rb b/lib/sisu/develop/hub.rb new file mode 100644 index 00000000..1ed7a8e7 --- /dev/null +++ b/lib/sisu/develop/hub.rb @@ -0,0 +1,277 @@ +# encoding: utf-8 +=begin + +* Name: SiSU + +** Description: documents, structuring, processing, publishing, search +*** hub + +** Author: Ralph Amissah + <ralph@amissah.com> + <ralph.amissah@gmail.com> + +** Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Ralph Amissah, + All Rights Reserved. + +** License: GPL 3 or later: + + SiSU, a framework for document structuring, publishing and search + + Copyright (C) Ralph Amissah + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program. If not, see <http://www.gnu.org/licenses/>. + + If you have Internet connection, the latest version of the GPL should be + available at these locations: + <http://www.fsf.org/licensing/licenses/gpl.html> + <http://www.gnu.org/licenses/gpl.html> + + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> + +** SiSU uses: + * Standard SiSU markup syntax, + * Standard SiSU meta-markup syntax, and the + * Standard SiSU object citation numbering and system + +** Hompages: + <http://www.jus.uio.no/sisu> + <http://www.sisudoc.org> + +** Git + <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=summary> + <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=blob;f=lib/sisu/develop/hub.rb;hb=HEAD> + +=end +module SiSU + require_relative 'constants' # constants.rb + require_relative 'se' # se.rb + include SiSU_Env + include SiSU_Screen + require_relative 'hub_actions' # hub_actions.rb + require_relative 'hub_loop_markup_files' # hub_loop_markup_files.rb + require_relative 'hub_options' # hub_options.rb + require_relative 'dp' # dp.rb + include SiSU_Param + require_relative 'utils' # utils.rb + begin + require 'uri' + rescue LoadError + SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia). + error('uri NOT FOUND (LoadError)') + end + class HubMaster + def initialize(argv,sisu_runtime) + begin + opt=SiSU_Commandline::Options.new(argv,sisu_runtime) + SiSU::Processing.new(opt).actions_without_files + SiSU::Processing.new(opt).actions_on_files + SiSU::Processing.new(opt).actions_without_files_post + rescue + selection=(opt ? opt.selections.src : '') + SiSU_Screen::Ansi.new(selection,$!,$@).rescue do + __LINE__.to_s + ':' + __FILE__ + end + ensure + Dir.chdir(call_path) + end + end + end + class Processing + begin + require 'fileutils' + include FileUtils + rescue LoadError + SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia). + error('fileutils NOT FOUND (LoadError)') + end + @@env=nil + attr_accessor :op + def initialize(opt) + @opt=opt + @@env=@env=SiSU_Env::InfoEnv.new + @msg,@msgs='',nil + @tell=lambda { + SiSU_Screen::Ansi.new( + @opt.selections.str, + @msg, + "#{@msgs.inspect if @msgs}" + ) + } + end + def remove_skipped_files_if_any_from_processing_files_array + if @remove_faulty_markup_files_array.length > 0 + @opt.files = (@opt.files - @remove_faulty_markup_files_array) + end + end + def print_error_message_if_files_skipped + if @remove_faulty_markup_files_array.length > 0 + puts '---' + STDERR.puts 'ERROR with file(s), did not process: ' + + @remove_faulty_markup_files_array.join(',') + end + end + def do_each_file_loop_check_and_perform_selected_actions(opt) + actions=SiSU_Hub_Actions::HubActions.new(opt) + actions.outputs.each_file.abstract_objects? + actions.outputs.each_file.qrcode? + actions.outputs.each_file.hash_digests? + actions.outputs.each_file.text? + actions.outputs.each_file.html? + actions.outputs.each_file.xhtml? + actions.outputs.each_file.xml? + actions.outputs.each_file.pdf? + actions.outputs.each_file.man_or_info? + actions.outputs.each_file.po4a_make? + actions.outputs.each_file.sqlite_discrete? + actions.outputs.each_file.manifest? + end + def do_each_file_loop_options + if @opt.files.length > 0 + @opt.files.each_with_index do |fno,i| + @opt.fno=fno + @opt.fns=fno. + gsub(/(?:https?|file):\/\/\S+\/(\S+)\.sst$/,'\1.-sst'). + gsub(/\.ssm$/,'.ssm.sst') + @opt.f_pth=@opt.f_pths[i] + if @opt.fns !~/\.-sst$/ + @opt.pth=@opt.f_pths[i][:pth] + @opt.lng=@opt.f_pths[i][:lng] + else + @opt.pth=Dir.pwd + @opt.lng='en' + end + unless @opt.pth.nil? + @@pwd=@opt.pth + Dir.chdir(@opt.pth) #watch + end + #@env=SiSU_Env::InfoEnv.new(@opt.fns) + do_each_file_loop_check_and_perform_selected_actions(@opt) + end + else + do_each_file_loop_check_and_perform_selected_actions(@opt) + end + end + def do_loop_files_on_given_option_pre + begin + if @opt.act[:zap][:set]==:on #% --zap, -Z + SiSU_Hub_Loops::OptionLoopFiles.new(@opt).loop_files_on_given_option do + require_relative 'zap' + SiSU_Zap::Source.new(@opt).read # -Z zap.rb + end + end + ensure + end + end + def do_loop_files_on_given_option_post + actions=SiSU_Hub_Actions::HubActions.new(@opt) + if defined? actions.outputs.loop_files.share_source? + actions.outputs.loop_files.share_source? + end + if defined? actions.outputs.loop_files.run_termsheet? + actions.outputs.loop_files.run_termsheet? + end + if defined? actions.outputs.loop_files.po4a_setup? + actions.outputs.loop_files.po4a_setup? + end + if defined? actions.outputs.loop_files.sql? + actions.outputs.loop_files.sql? + end + SiSU_Hub_Actions::Operations.new.counter + if defined? actions.outputs.loop_files.manifest? + actions.outputs.loop_files.manifest? + end + if defined? actions.outputs.loop_files.sitemaps? + actions.outputs.loop_files.sitemaps? + end + if defined? actions.outputs.loop_files.urls? + actions.outputs.loop_files.urls? + end + end + def actions_without_files + actions=SiSU_Hub_Actions::HubActions.new(@opt) + actions.report.version_info? + actions.report.version_info_extra? + actions.prepare.site? + actions.prepare.sql? + end + def actions_without_files_post + actions=SiSU_Hub_Actions::HubActions.new(@opt) + actions.prepare.remote_site? + actions.prepare.search_form? + actions.prepare.webrick? + end + def actions_on_files + if @opt.act[:profile][:set]==:on + begin + require 'profile' + rescue LoadError + SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia). + error('profile NOT FOUND (LoadError)') + end + end + actions=SiSU_Hub_Actions::HubActions.new(@opt) + actions.outputs.each_file.harvest? + actions.outputs.init? + do_loop_files_on_given_option_pre + do_each_file_loop_options + #remove_skipped_files_if_any_from_processing_files_array # NEEDS WORK + do_loop_files_on_given_option_post + #print_error_message_if_files_skipped + if (@opt.act[:verbose][:set]==:on \ + || @opt.act[:verbose_plus][:set]==:on \ + || @opt.act[:maintenance][:set]==:on) + @msg,@msgs="\tsisu -W [to start ruby web-server on output directory]\n",nil + end + if (@opt.act[:verbose][:set]==:on \ + || @opt.act[:verbose_plus][:set]==:on \ + || @opt.act[:maintenance][:set]==:on \ + || @opt.act[:urls_selected][:set]==:on \ + || @opt.act[:urls_all][:set]==:on) + @tell.call.print_brown unless @opt.files.join.empty? + end + if defined? @@env.processing_path.processing \ + and @@env.user \ + and FileTest.directory?(@@env.processing_path.processing) \ + and @@env.processing_path.processing =~/#{@@env.user}$/ + #clean tmp processing dir of content as is located in public area + if @@env.processing_path.processing_base_tmp =~/^\/tmp\/\S+/ + FileUtils::cd(@@env.processing_path.processing_base_tmp) do + FileUtils::rm_rf('.') unless @opt.act[:maintenance][:set] ==:on + end + end + end + end + end + class HubClose + def initialize(call_path,argv) + begin + env=SiSU_Env::InfoEnv.new + rescue + ensure + if FileTest.directory?(env.processing_path.processing) \ + and FileTest.directory?(env.processing_path.processing_base_tmp) \ + and env.processing_path.processing_base_tmp =~/#{env.processing_path.processing}/ \ + and env.processing_path.processing_base_tmp =~/^\/tmp\/\S+/ \ + and not argv.inspect =~/"--maintenance"|"-M"/ + FileUtils::cd(env.processing_path.processing_base_tmp) do + FileUtils::rm_rf('.') + end + end + Dir.chdir(call_path) + end + end + end +end +__END__ |