# class Veritrans::Tercerog::Mdk::MdkJsonQuery

MdkJsonQuery クラス

    リクエストDTOから取得するJSON生成用ハッシュの生成を管理するクラス

### Constants

DQUOTE_CHAR

  ダブルクオート

DQUOTE_CHAR_ESCAPE

  ダブルクオートエスケープ文字列

### Attributes

name_array[R]

### Public Class Methods

new(dto) click to toggle source

### コンストラクタ¶ ↑

コンフィグファイルからデータを取得して当クラスを使用できる状態にする。

@param

  dto 処理対象Dto

    # File tgMdk/lib/tg_mdk/mdk_json_query.rb, line 36
    def initialize(dto)
      # コンフィグクラス生成
      config = Veritrans::Tercerog::Mdk::MdkConfig.instance
      # DTOの文字エンコードを取得
      @encode = config[:DTO_ENCODE]
      # JSON生成用ハッシュ作成
      @name_array = to_json_hash(dto)
    end

### Private Instance Methods

get_attr_value(key, value) click to toggle source

### 属性値を取得する。¶ ↑

指定した属性値がDTOである場合はJSON形式に変換可能なハッシュに置き換える。

@param

  key キー

@param

  value 値

@return

  属性値

    # File tgMdk/lib/tg_mdk/mdk_json_query.rb, line 93
    def get_attr_value(key, value)

      if value.nil?
        return nil
      end

      result = nil
      if value.is_a?(String)
        # 設定値が文字列
        if !value.empty?
          result = Veritrans::Tercerog::Mdk::MdkUtils::mdk_encode_from(@encode, value)
        end
      elsif value.is_a?(Array)
        # 設定値が配列
        result = []
        value.each do |element|
          attr_value = get_attr_value(key, element)
          if !attr_value.nil? && !attr_value.empty?
            result << attr_value
          end
        end
      elsif !value.instance_variables.empty?
        # 設定値がオブジェクト
        result = to_json_hash(value)
      else
        # 判定できない無効なクラスが指定されている
        msg = "#{key} is invalid type '#{value.class.name}'"
        Veritrans::Tercerog::Mdk::logger.error(msg)
        raise Veritrans::Tercerog::Mdk::MdkError.new(Veritrans::Tercerog::Mdk::MdkMessage::MA07_INVALID_DTO_VALUE_TYPE, key, value.class.name)
      end

      if result.nil? || result.empty?
        return nil
      end
      return result
    end

to_json_hash(dto) click to toggle source

### Dtoに設定されたパラメータを取得しJSON生成用ハッシュを生成する¶ ↑

@param

  dto 処理対象Dto

@return

  JSON生成用ハッシュ

    # File tgMdk/lib/tg_mdk/mdk_json_query.rb, line 60
    def to_json_hash(dto)

      if dto.nil?
        return {}
      end

      result_hash = {}

      # DTOのインスタンス変数を取得
      dto.instance_variables.each do |name|
        # インスタンス変数の値を取得
        name = name.to_s # for ruby 1.9
        value = dto.instance_variable_get(name)
        attr_name = name.mdk_camelize[1, name.length - 1]
        attr_value = get_attr_value(attr_name, value)

        if !attr_value.nil? && !attr_value.empty?
          result_hash.store(attr_name, attr_value)
        end
      end

      return result_hash
    end

value_escape(value) click to toggle source

### 設定値のエスケープ処理を行う¶ ↑

@param

  value 設定値

@return

  エスケープ処理後の設定値

    # File tgMdk/lib/tg_mdk/mdk_json_query.rb, line 50
    def value_escape(value)
      value = value.gsub(DQUOTE_CHAR, DQUOTE_CHAR_ESCAPE)
    end