# add method
# 1) get_val
# 2) collect
class Hash
  #== 指定項目の値取得
  #_key_:: 指定項目キー
  #
  # 戻り値:: 取得した値
  #-----------------------------------------------------------------#++
  def get_val(key)
    return self[key]
  end

  #== 指定項目の値設定
  #_key_:: 指定項目キー
  #_val_:: 値
  #
  # 戻り値:: なし
  #-----------------------------------------------------------------#++
  def set_val(key, val)
    self[key] = val
  end

  #== 指定項目の抽出
  #_keys_:: 指定項目キー
  #
  # 戻り値:: 抽出したハッシュ
  #-----------------------------------------------------------------#++
  def select_with_key(keys)
    result = {}
    self.each do |key, val|
     if idx = keys.index(key)
       result[key] = val
     end
    end
    return result
  end
  
  #== 表示名追加
  #_opts_:: 表示名と一緒に追加取得するカラム情報
  #
  # 戻り値:: self
  #-----------------------------------------------------------------#++
  def add_disp_name(opts = {})
    return self if self.blank?
    col_names = self.keys
    req_cols = []
    disp_keys = opts[:disp_keys] || {}
    disp_add_keys = opts[:disp_add_keys] || {}
    opts[:multiple_id_cols] ||= {}
    col_names.each do |col_name|
      # 除外カラム
      if opts[:except_cols] and opts[:except_cols].has_value?(col_name)
        next
      end
      # 追加取得カラム編集
      if opts[:req_cols]
        opts[:req_cols].each do |req_col|
          if req_col[:base] == col_name
            req_cols = req_col[:add]
            break
          end
        end
      end
      opts[:disp_key] = disp_keys[col_name] || 'disp_name'
      opts[:multiple_id_col] = opts[:multiple_id_cols][col_name] ? true : false
      # 表示名追加実行
      Comm::Tool::DispName.add_disp_name_unit(self, col_name, (req_cols + (disp_add_keys[col_name]||[])), opts)
      req_cols.clear
    end
    return self
  end
end
