DRY: минимизация кода

#ruby #json #hash

#ruby #json #хэш

Вопрос:

Я хочу, чтобы метод создавал следующую строку json во многих местах:

 {"daily_calendar":{"search":{"print_date":"2014-06-30"}}}
  

У меня есть следующие четыре строки кода для создания хэша:

 custom_params, print_date, search = Hash.new, Hash.new, Hash.new
print_date['print_date'] =  @week_day
search['search'] = print_date
custom_params['daily_calendar'] = search
puts custom_params.to_json
  

Каков наилучший способ сделать это в одной или двух строках и использовать его в любом месте контроллера?

Комментарии:

1. В чем спешка при выборе ответа?

Ответ №1:

Просто пишите как есть:

 hash = {daily_calendar: {search: {print_date:@week_day} } }
puts hash.to_json
  

Ответ №2:

Вы можете использовать хеш-литералы:

 custom_params = {
    "daily_calendar" => {
        "search" => {
            "print_date" => @week_day
        }
    }
}
  

Ответ №3:

 {daily_calendar: {search: {print_date: @week_day}}}.to_json
  

Ответ №4:

Рекурсивное выражение позволяет вам иметь любое количество вложенных хэшей:

 def doit(*h,v)
  h.size == 1 ? { h.first => v } : { h.shift => doit(*h,v) }
end

h = %w[one_more_level daily_calendar search print_date]
doit(*h, 'tue')     
  #=> {"one_more_level"=>{"daily_calendar"=>{"search"=>{"print_date"=>"tue"}}}}