Конвертируйте и переводите хэш Ruby в удобочитаемую строку - PullRequest
0 голосов
/ 17 июня 2019

У меня есть следующий хэш Ruby:

{"limit"=>250, "days_ago"=>14, "days_ago_filter"=>"lt", "key"=>3}

Я хотел бы преобразовать ее в удобочитаемую строку и при необходимости перевести некоторые значения:

Limit: 250 - Days Ago: 14 - Days Ago Filter: Less than - Key: D♯, E♭

Итак, lt, в данном случае, фактически переводится на Less than. и 3 для key переводится в D♯, E♭.

Я почти там с этим:

variables.map {|k,v| "#{k.split('_').map(&:capitalize).join(' ')}: #{v}"}.join(' - ')

Но при переводе этих значений я попадаюсь в ловушку.

Ответы [ 2 ]

1 голос
/ 18 июня 2019

Я бы предложил использовать хэши для отображения возможных значений, например:

days_ago_filter_map = {
  "lt" => "Less than",
  # ...other cases here...
}

musical_key_map = {
  3 => "D♯, E♭",
  # ...other cases here...
}

Затем вы можете включить key:

variables.map do |key, value| 
  label = "#{key.split('_').map(&:capitalize).join(' ')}"
  formatted_value = case key
  when "days_ago_filter" then days_ago_filter_map.fetch(value)
  when "key" then musical_key_map.fetch(value)
  else value
  end
  "#{label}: #{formatted_value}" 
end.join(' - ')

Обратите внимание, что если выЕсли на ваших картах ничего не указано, приведенный выше код вызовет KeyNotFound ошибок.Вы можете установить значение по умолчанию в вашем fetch, например

days_ago_filter_map.fetch(value, "Unknown filter")
musical_key_map.fetch(value, "No notes found for that key")
0 голосов
/ 11 июля 2019

Вы также можете создавать YAML-файлы для таких отображений:

values_for_replacement = {
  "lt" => "Less than",
3 => "D♯, E♭"
}

Вы можете попробовать следующее:

variables.map {|k,v|
value_to_be_replaced = values_for_replacement[v]
"#{k.humanize}: #{(value_to_be_replaced.present? ? value_to_be_replaced : v)}"}.join(' - ')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...