# class Veritrans::Tercerog::Mdk::MdkConfig

MdkConfig クラス

    各設定ファイルから値を取得するインターフェイスを提供します。

MdkConfig クラス

    各設定ファイルに定義されているキーの定数を定義します。

MdkConfig クラス

    各設定ファイルの設定値を検証します。

### Constants

ADD_URL_PAYMENT
ADD_URL_PAYMENT_VERSION
ADD_URL_VTID
ADD_URL_VTID_VERSION
CA_CERT_FILE

  SSL暗号用 CA証明書ファイル名

COMMON_ITEM

  共通アイテム

CONNECTION_TIMEOUT

  接続タイムアウト時間(秒)

DTO_ENCODE

  要求、応答DTOに設定される文字列のエンコード

DUMMY_REQUEST

  ダミーモード（テスト時のみ指定します）

HOST_URL

  接続先ホスト

MASK_ITEM

  マスク対象アイテム

MDK_DTO_VERSION

  DTOのバージョンを指定します。

MDK_ERROR_MODE

  MDK固有エラーモード(テスト時のみ指定します）

MDK_VERSION

  MDKのバージョンを指定します。

MERCHANT_CC_ID

  マーチャントCCID。VeriTrans指定のものを設定します。

MERCHANT_SECRET_KEY

  マーチャント認証鍵。VeriTrans指定のものを設定します。

MESSAGE_DIGEST_TYPE

  メッセージダイジェストタイプ

PAYNOWID_SERVICE_TYPE
PROXY_PASSWORD

  プロキシパスワード

PROXY_SERVER_URL

  プロキシのURLを指定します(未指定若しくは当プロパティを指定しない場合、プロキシなしとして扱います)

PROXY_USERNAME

  プロキシユーザ名

READ_TIMEOUT

  読み取りタイムアウト時間(秒)

SSL_PROTOCOL

  SSLプロトコル

### Public Class Methods

instance(*user_properties) click to toggle source

### MdkConfigのインスタンスを取得します。¶ ↑

@param

  user_properties ユーザ定義のプロパティファイル（可変長指定）

@return

  インスタンス

    # File tgMdk/lib/tg_mdk/mdk_config.rb, line 25
    def self.instance(*user_properties)
      Thread.current[:tg_mdk_config_thread_data_key] ||= new(*user_properties)
    end

### Private Class Methods

new(*user_properties) click to toggle source

### コンストラクタ（private）¶ ↑

@param

  user_properties ユーザ定義のプロパティファイル（可変長指定）

    # File tgMdk/lib/tg_mdk/mdk_config.rb, line 33
    def initialize(*user_properties)
      tg_mdk_directory = File.expand_path(File.dirname(__FILE__))
      mdk_root_directory = "#{tg_mdk_directory}/../.."

      @errors ||= []
      @properties = {}
      @propertie_files = [mdk_root_directory + "/tg_mdk.ini",
                          tg_mdk_directory + "/internal.ini",
                          tg_mdk_directory + "/mdk_dto/dto.ini"]
      @propertie_files.concat(user_properties) unless user_properties.empty?

      build_properties
      define_propertie_methods
    end

### Public Instance Methods

[](key) click to toggle source

### 各パラメータへHashとしてアクセスするメソッドを定義します。¶ ↑

READ_TIMEOUTの値取得時に、値がない場合はCONNECTION_TIMEOUTの値を返す

@param

  key キー

    # File tgMdk/lib/tg_mdk/mdk_config.rb, line 91
    def [](key)
      return nil if key.nil?
      if key == :READ_TIMEOUT
        read_timeout = @properties[key]
        unless read_timeout.nil?
          read_timeout
        else
          @properties[:CONNECTION_TIMEOUT]
        end
      elsif key.kind_of? Symbol
        @properties[key]
      elsif key.kind_of? String
        @properties[key.intern]
      else
        nil
      end
    end

errors() click to toggle source

### 検証エラーの例外［Array］を取得します。¶ ↑

@return

  検証時に発生した例外のリスト

    # File tgMdk/lib/tg_mdk/mdk_config/validate.rb, line 21
    def errors
      @errors
    end

get_user_agent() click to toggle source

### 電文のヘッダ情報に載せるuser-agent情報の文字列を返す。¶ ↑

    # File tgMdk/lib/tg_mdk/mdk_config.rb, line 121
    def get_user_agent()
      mdk_ver = self["MDK_VERSION"]
      mdk_dto_ver = self["MDK_DTO_VERSION"]
      ruby_ver = RUBY_VERSION
      return "VeriTrans 4GMDK/#{mdk_ver}/#{mdk_dto_ver} (Ruby #{ruby_ver})"
    end

overwrite(key, value) click to toggle source

### キーに対応する値を上書き設定します¶ ↑

@param

  key キー

@param

  value キーに紐付く値

    # File tgMdk/lib/tg_mdk/mdk_config.rb, line 114
    def overwrite(key, value)
      @properties[key.strip.intern] = value.strip
    end

valid?(valid_only = false) click to toggle source

### パラメータを検証します。¶ ↑

@param

  valid_only trueの場合、検証のみ実行します。

    falseの場合、検証エラー時、例外をraiseします。

@return

  true: 検証成功、false: 検証エラー

    # File tgMdk/lib/tg_mdk/mdk_config/validate.rb, line 31
    def valid?(valid_only = false)
      # store exception
      @errors = []

      # DUMMY_REQUEST
      presence_of?(DUMMY_REQUEST, dummy_request)
      numeric_of?(DUMMY_REQUEST, dummy_request)

      # MDK_ERROR_MODE
      presence_of?(MDK_ERROR_MODE, mdk_error_mode)
      numeric_of?(MDK_ERROR_MODE, mdk_error_mode)

      # MDK_VERSION
      presence_of?(MDK_VERSION, mdk_version)

      # MDK_DTO_VERSION
      presence_of?(MDK_DTO_VERSION, mdk_dto_version)

      # MERCHANT_CC_ID
      presence_of?(MERCHANT_CC_ID, merchant_cc_id)

      # MERCHANT_SECRET_KEY
      presence_of?(MERCHANT_SECRET_KEY, merchant_secret_key)

      # HOST_URL
      presence_of?(HOST_URL, host_url)
      format_of?(HOST_URL, host_url, /^https:\/\/(\w)+(\.\w)*/i)

      # CONNECTION_TIMEOUT
      presence_of?(CONNECTION_TIMEOUT, connection_timeout)
      numeric_of?(CONNECTION_TIMEOUT, connection_timeout)

      # READ_TIMEOUT
      unless read_timeout.nil?
        presence_of?(READ_TIMEOUT, read_timeout)
        numeric_of?(READ_TIMEOUT, read_timeout)
      end

      # CA_CERT_FILE
      if !ca_cert_file.nil? && !ca_cert_file.empty?
        exist_of?(CA_CERT_FILE, ca_cert_file)
      end

      # SSL_PROTOCOL
      presence_of?(SSL_PROTOCOL, ssl_protocol)

      # COMMON_ITEM
      presence_of?(COMMON_ITEM, common_item)

      # MASK_ITEM
      presence_of?(MASK_ITEM, mask_item)

      # MESSAGE_DIGEST_TYPE
      presence_of?(MESSAGE_DIGEST_TYPE, message_digest_type)

      if valid_only
        return @errors.empty? ? true : false
      else
        # エラーがある場合は、先頭の例外をスローします。
        raise @errors.first unless @errors.empty?
        return true
      end
    end

### Private Instance Methods

build_properties() click to toggle source

### プロパティファイルを読み取り、インスタンス変数にセットします。¶ ↑

    # File tgMdk/lib/tg_mdk/mdk_config.rb, line 52
    def build_properties
      @propertie_files.each do |propertie_file|
        unless File.readable?(propertie_file)
          raise Veritrans::Tercerog::Mdk::MdkError.new(
                        Veritrans::Tercerog::Mdk::MdkMessage::MB01_NOT_FOUND_CONFIG_FILE, propertie_file)
        end
        open(propertie_file, 'r:utf-8').read.scan(/^\w.*/) do |line|
          key, value = line.split('=')
          if value.nil?
            @properties[key.strip.intern] = "" if key
          else
            @properties[key.strip.intern] = value.strip if key
          end
        end
      end
    rescue => e
      raise e
    end

define_propertie_methods() click to toggle source

### 各パラメータへプロパティとしてアクセスするメソッドを定義します。¶ ↑

    # File tgMdk/lib/tg_mdk/mdk_config.rb, line 75
    def define_propertie_methods
      Veritrans::Tercerog::Mdk::MdkConfig.constants.each do |const|
        Veritrans::Tercerog::Mdk::MdkConfig.class_eval do
          define_method const.downcase.intern do
            @properties[const.intern]
          end
        end
      end
    end

exist_of?(key, value) click to toggle source

### ファイル存在チェック¶ ↑

@param

  key 検証対象項目

@param

  value 検証対象の値

@return

  true: 検証成功、false: 検証エラー

    # File tgMdk/lib/tg_mdk/mdk_config/validate.rb, line 145
    def exist_of?(key, value)
      return true if File.exist?(value)

      @errors << Veritrans::Tercerog::Mdk::MdkError.new(Veritrans::Tercerog::Mdk::MdkMessage::MA03_FILE_DOES_NOT_EXIST, key)
      false
    end

format_of?(key, value, regexp) click to toggle source

### 書式チェック¶ ↑

@param

  key 検証対象項目

@param

  value 検証対象の値

@param

  regexp 検証対象の書式、正規表現

@return

  true: 検証成功、false: 検証エラー

    # File tgMdk/lib/tg_mdk/mdk_config/validate.rb, line 117
    def format_of?(key, value, regexp)
      return true if regexp =~ value

      @errors << Veritrans::Tercerog::Mdk::MdkError.new(Veritrans::Tercerog::Mdk::MdkMessage::MA02_CONFIG_NOT_CORRECT, key, value)
      false
    end

numeric_of?(key, value) click to toggle source

### 数値チェック¶ ↑

@param

  key 検証対象項目

@param

  value 検証対象の値

@return

  true: 検証成功、false: 検証エラー

    # File tgMdk/lib/tg_mdk/mdk_config/validate.rb, line 131
    def numeric_of?(key, value)
      return true if /^([1-9]\d*|0)(\.\d+)?$/ =~ value

      @errors << Veritrans::Tercerog::Mdk::MdkError.new(Veritrans::Tercerog::Mdk::MdkMessage::MA02_CONFIG_NOT_CORRECT, key, value)
      false
    end

presence_of?(key, value) click to toggle source

### 必須パラメータチェック¶ ↑

@param

  key 検証対象項目

@param

  value 検証対象の値

@return

  true: 検証成功、false: 検証エラー

    # File tgMdk/lib/tg_mdk/mdk_config/validate.rb, line 102
    def presence_of?(key, value)
      return true unless value.nil? || value.empty?

      @errors << Veritrans::Tercerog::Mdk::MdkError.new(Veritrans::Tercerog::Mdk::MdkMessage::MA01_CONFIG_MISSING, key)
      false
    end