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