2012-04-30 2 views
0

В моем приложении Rails мне нужно получить даты следующего вхождения определенного дня недели, начиная с какой-либо другой даты. Поэтому в основном мне нужны функции date.next_monday, date.next_wednesday. Я не думаю, что они существуют в стандартных библиотеках Руби, поэтому я решил обезьяны патч класс Date как так:Monkey-patch Дата класса для next_ <weekday> методов

class Date 
    weekdays = [:sunday, :monday, :tuesday, :wednesday, :thursday, :friday, :saturday] 
    weekdays.each do |weekday| 
    method_name = "next_" + weekday.to_s 
    send :define_method, method_name do 
     tmp_date = self + 1 
     until tmp_date.send((weekday.to_s + "?").to_sym) 
     tmp_date = tmp_date + 1 
     end 
     tmp_date 
    end 
    end 
end 

Это, кажется, работает хорошо. Мои вопросы:

  1. Неужели мне не нужно было все это делать? (Есть ли какой-нибудь способ, чтобы получить next_, что я не думал?
  2. Если то, что я нужен, есть лучший способ, чтобы получить массив дней недели?

Спасибо!

+1

Рассмотрима коммерческого метода:. http://stackoverflow.com/questions/4514988/rails-is-there-away-to-get-the -date-object-that-the-closeest-monday-to-today – gayavat

+0

Это выглядит полезным. Другой ответ t o этот вопрос также имел полезные ссылки, например, щекочущий камень. Но этот ответ ушел, прежде чем я смог его проголосовать: \ – Adnan

ответ