- 1. 概要
- 2. モジュール
1. 概要
ひとつ前のモジュールから親としての URI とリンク先の URI をもらい、リンク先を探していくモジュールです。
2. モジュール
今んとここんな感じ(2018年11月08日)。
require('pry')
class CheckChild < BaseClass
def initialize(original)
protocol, userinfo, domain, other = URI.split(original)
@top = "#{protocol}" + "://" + "#{domain}"
end
def execute(parent, doc, child, checked, contents)
#puts("[#{self.class.name}.#{__method__}] parent=[#{parent}] child=[#{child}]")
# parent の URI の末尾を加工してインデックスまでを求める
index = parent
if (index[-1, 1] != '/') # 末尾が / でない場合は 末尾のひとつ前の / までをインデックスファイルとする
split = parent.split('/')
last = split.last
if (last.include?('.'))
index = parent[0,parent.length-last.length]
end
end
child.each_key do | key |
# key に対して URI のフルパスを設定する
value = Hash.new
value[:URI] = AssembleURI(index, key)
child[key] = value;
end
mytree = Hash.new
#binding.pry
child.each_value do | value |
begin
#tree = Hash.new
tree = { value[:URI] => 'UNKNOWN' }
parentproc = CheckParent.new(value[:URI])
returnvalue = parentproc.execute(value[:URI], tree, checked, contents)
if (returnvalue == 'unknown')
# 本プログラムでは種別や結果はない
$result[value[:URI]] = { :リンク元 => index, :リンク => value[:URI] }
end
mytree[value[:URI]] = returnvalue
rescue => error
puts("#{parent} → #{value[:URI]} 取得時にエラー")
next
end
end
return mytree;
rescue => error
exeptlog = ExceptLog.new
binding.pry
exeptlog.execute(self, error)
exit 1
end
# リンクチェックプログラムでは Assemble クラスで定義していたもの
# 本プログラムは内部リンクしか見ないので
# 相対リンクを絶対 URI に変更するだけ
def AssembleURI(index, original)
uri = original;
begin
if (original == '../') # ../ のみであれば
split = index.split('/') # ひとつ上のインデックスとする
uri = index[0, index.length-(split.last.length+1)]
elsif (original[0, 2] == '..') # ../ インデックスのひとつ上に / 以降を加える
split = index.split('/')
uri = index[0, index.length-(split.last.length+2)] + original[2,original.length-2]
elsif (original == '.') # . 一文字のみ
uri = index + '*' # あえて変なことにしちゃう(落ちないように)
else # ./ インデックスに / 以降を加える
uri = index + original[2,original.length-2]
end
rescue => error
puts('index'+"[#{index}]")
puts('original'+"[#{original}]")
binding.pry
puts "例外発生[#{error.class}]"
puts "#{error.backtrace}"
puts "[#{self.class.name}][#{error.message}]"
exit 1
end
return uri
end
end
これもリンクチェック時のモジュールを流用しているため、不要な処理がたくさんあります。
だいぶ減らして、配下の不要なクラスも使用しないようにしました(2018年11月09日)。
|