ruby - RSS 作成 - コンフィグレーションファイル読込

 
1. 概要
2. 書式
3. モジュール

1. 概要

 このあたり右往左往しておりまして、データベース使うからコンフィグレーションファイルいらないやとか思いましたが・・・。  ユーザ名・パスワード、等々は、コンフィグレーションファイルから読み込むようにしないとソースにべた書きじゃんと思い直しました。  リンクチェックを作成したときのものがほぼそのまま使えそうです。

2. 書式

 ソースファイルと同じディレクトリに .rssconf と言う名前で  以下の形式で記述します。

[database]		←	データベース接続時のパラメータ
host = ホスト名
user = ユーザ名
password = パスワード
dbname = データベース名
port = ポート番号

[link]			←	取得すべきリンク先を収集するためのタグとクラス定義
tag   = リンク定義しているものを包括しているタグ
class = 取得すべきリンクを定義しているクラス(ホワイトスペースで区切って複数定義可)

[sitemap]		←	本処理で作成したオブジェクトを元に html 形式のサイトマップを作成します
fullpath = 作成したサイトマップのファイルを出力するファイル名をフルパスで指定
 データベース接続のパラメータの項目名は、pg ライブラリに渡す引数としてそのまま渡せるようにしているので変更することはできません。

3. モジュール

 モジュールはこんな感じで
=begin

  コンフィグレーションファイルの読込を行う

=end
require('pry')
require('inifile')

class ReadConf
  def initialize()
  end

  def execute(path)
    begin
      parameter = Hash.new                            # ini ファイルから取得するパラメータ
      database  = nil                                 # データベースの定義
      linktag   = nil                                 # 取得すべきリンクを包括しているタグ名
      linkclass = Array.new                           # 目次でリンクを定義しているクラス名
      inifile = IniFile.load(path+'/.rssconf')

      if (inifile[:database])                         # [database] セクションがある
        database = inifile[:database]                 # セクションの内容をそのまま取り込む
      end

      parameter[:database] = database                 # データベース定義

      if (inifile[:link])                             # [link] セクションがある
        if (inifile[:link]['tag'])                    # tag アイテムがある
          linktag = inifile[:link]['tag']             # tag = の定義を取得
        end

        if (inifile[:link]['class'])                  # class アイテムがある
          cls = inifile[:link]['class']               # class = の定義を取得
          split = cls.split(/\s/)                     # ホワイトスペースで分割

          split.each do | item |                      # 配列として取り込む
            linkclass.push(item)
          end
        end
      end

      parameter[:linktag]   = linktag                 # リンクタグ定義
      parameter[:linkclass] = linkclass               # リンククラス定義

      sitemap = nil

      if (inifile[:sitemap])                          # [sitemap] セクションがある
        sitemap = inifile[:sitemap]                   # セクションの内容をそのまま取り込む
      end

      parameter[:sitemap] = sitemap                   # サイトマップ定義
    rescue => error
      exeptlog = ExceptLog.new
      exeptlog.execute(self, error)
      exit 1
    ensure
      return parameter
    end
  end
end

 データベースにアクセスするときのパラメータをハッシュで返すわけです。