ruby - サイトマップ作成 - モジュール

 
1. 概要
2. モジュール

1. 概要

 簡易的なものを作成したので、案外簡単にできました(2018年11月09日)。  小さかったので、ソースファイルは1本です。  なかで require しているソースは、前節のものをそのまま使用しています。

2. モジュール

#!/usr/bin/env ruby
=begin

=end

$LOAD_PATH << File.dirname(File.expand_path(__FILE__))

require('pry')
#require('openssl')
#require('Contents')
require('BaseClass')
require('ExceptLog')
#require('DBaccess')
require('ReadConf')
#require('CheckParent')

class Sitemap < BaseClass
  def initialize
    @@doc = ""
  end

  def link=(contents)
    clone = contents[:document].clone
    clone.slice!("index.html")
    mylink = './' + clone
    #binding.pry

    @@doc += '<li>'
    @@doc += '<a href="'+mylink+'">'
    @@doc += contents[:title]+"("+contents[:modified].strftime("%Y年%m月%d日")+" 更新)"
    @@doc += '</a>'
    @@doc += "</li>\n"
  end

  def write(tree, contents)
    begin
      @@doc += '<ul style="list-style: none;">'+"\n"

      tree.each do | parentKey, parentValue |
        #puts("[#{self.class.name}.#{__method__}][#{sprintf("%3d", __LINE__)}] parentKey=[#{parentKey}]")
        #binding.pry

        if (parentKey.class == String)
          if (contents.has_key?(parentKey))
            self.link=(contents[parentKey])
          end
        end

        if (parentValue == nil)
          next
        end

        if (parentValue.class == Hash)
          parentValue.each do | chileKey, childValue |
            write(childValue, contents)
          end
        else
          parentValue.each do | child |
            write(child, contents)
          end
        end

        #puts("[#{self.class.name}.#{__method__}][#{sprintf("%3d", __LINE__)}] parentKey.class=[#{parentKey.class}]")
      end

      @@doc += "</ul>\n"
    rescue => error
      exeptlog = ExceptLog.new
      exeptlog.execute(self, error)
      exit 1
    end
  end

  def doc
    return @@doc
  end
end

begin
  readconf = ReadConf.new
  $parameter = readconf.execute(File.dirname(File.expand_path(__FILE__))) # コンフィグレーションファイルの読込
  #binding.pry

  tree     = Hash.new
  conArray = Array.new

  Pathname.new(File.dirname(File.expand_path(__FILE__))+'/tree.dmp').open('rb') do | file |
    tree = Marshal.load(file)
  end

  Pathname.new(File.dirname(File.expand_path(__FILE__))+'/contents.dmp').open('rb') do | file |
    conArray = Marshal.load(file)
  end

  contents = Hash.new

  conArray.each do | item |
    contents[item[:uri]] = item
  end

  sitemap = Sitemap.new
  sitemap.write(tree, contents)

  Pathname.new($parameter[:sitemap]['fullpath']).open('w') do | file |
    file.puts(sitemap.doc)
  end

rescue => error
  exeptlog = ExceptLog.new
  exeptlog.execute(self, error)
  exit 1
ensure

end

 全コンテンツを出力してしまいましたが、FreeBSD 10.4 以前の古いコンテンツは最上位のみ出力して、配下を出力しないようにしようと考えています。  もしくはアコーディオンで表示させるべきか?(2018年11月09日)