#!/usr/bin/ruby =begin rdoc Autor:: Erick Muńiz Website:: http://erick.munizfam.com Email:: {my_name}@munizfam{dot}com License:: Esta obra está bajo una licencia Atribución-No comercial-Licenciamiento Recíproco 2.5 de Creative Commons. Para ver una copia de esta licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/ o envie una carta a Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. =begin rdoc La clase Librarian es la encargada de mantener actualizada mi lista de apuntadores, puede ser llamada desde la linea de comandos o puede ser ejecutada desde su propio thread, en realidad la implementacion apunta hacia ser ejecutada desde su propio thread =end module Librarian class Librarian attr_reader :active attr_reader :fileExt @running = false public # updateLibrary se encarga de tener la libreria de apuntadores actualizada def updateLibrary explorer = Explorer.new writer = Writer.new if fileExt == "html" parser = HtmlParser.new else parser = XmlParser.new end #-- #necesita proteccion, agregar exception handling #++ writer.createFile(filename) running = true parser.parseNextLine do |line| if running == false break end address = nil line = nil if (parser.lineHasLink == true) address = parser.getUrlAddresss #-- #necesita proteccion, agregar exception handling #++ explorer.checkStatus(address) status = explorer.alive # obtener ultima modificacion si esta disponible end if address == nil || status == good # si no hay apuntador en esta linea o el apuntador esta disponible # agregarlo al nuevo archivo line = parser.getLineContent #-- #necesita proteccion, agregar exception handling #++ writer.writeLine(line) end end writer.closeFile(filename) puts "Proceso Finalizado" puts "Ligas eliminadas del archivo "+ explorer.getRemovedNodes running = false; end def cancelUpdate running = false; end protected :active :fileExt private def initialize(filename = "bookmarks.html", fileExt = "html") @active = false end end =begin rdoc La clase Explorer es la encargada de revisar el estatus de las ligas, recibe la URL a ser revisada y revisa cual es el estatus de la pagina, obteniendo tambien la fecha de su ultima actualizacion =end class Explorer @@notExistent = 0; attr_reader :alive attr_reader :updated public def checkStatus(url) end def getRemovedNodes @@notExistent end def getUpdateDate end private def initialize @alive = false end end =begin rdoc La clase Writer es la encargada de regenerar el archivo con los apuntadores que se encuentran aun activos en la red, va a generar un archivo intermedio, pues nomas porque se me ocurrio para practicar un poco mas, probablemente el archivo intermedio contenga informacion interesante y se convierta o otro archivo, al momento es solo temporal =end class Writer public def writeLine end def createFile(filename) end def closeFile end private def createTmpFile end def deleteTmpFile end end =begin rdoc La clase Parser es la encargada de abrir el archivo original y buscar los apuntadores en el, el parser tiene que ser muy simple ya que es para solucionar un problema muy especifico y existe un formato prefabricado, la unica funcionalidad es buscar la siguiente sub cadena en cada una de las lineas "