あなたのすべての要件を完全には理解していないので、いくつかの仮定を立てます。
- で始まるページは
1
、次のnil
ように想定されます1
- 今日は 10 月 27 日です。バッチ サイズが 10 でページ番号が 1であると仮定すると、バッチは次のようになります。
Sun, 27 Oct 2013..Wed, 05 Nov 2013
- 今日は 10 月 27 日です。バッチ サイズが 10 でページ番号が 2であると仮定すると、バッチは次のようになります。
Sun, 06 Oct 2013..Wed, 15 Nov 2013
そこには非常に複雑なロジックがあるため、それを別のオブジェクトに抽出するのが賢明です。コードとテストを分離するため、一般的で適切な方法と見なされます。カスタムクラス:
# app/services/batch_of_days.rb
class Services::BatchOfDays
class << self
def create(page_nr = 1, batch_size = 10, start_from = Date.today)
new(page_nr.to_i, batch_size, start_from).create
end
end
def initialize(page_nr, batch_size, start_from)
@page_nr = page_nr
@batch_size = batch_size
@start_from = start_from
end
def create
first_day..last_day
end
private
def first_day
@first_day ||= @start_from + ( @page_nr - 1 ) * @batch_size
end
def last_day
first_day + @batch_size - 1
end
end
使用法:
irb(main):262:0> BatchOfDays.create
# => Sun, 27 Oct 2013..Tue, 05 Nov 2013
irb(main):262:0> BatchOfDays.create(1)
# => Sun, 27 Oct 2013..Tue, 05 Nov 2013
irb(main):263:0> BatchOfDays.create(2)
# => Wed, 06 Nov 2013..Fri, 15 Nov 2013
irb(main):264:0> BatchOfDays.create(3)
# => Sat, 16 Nov 2013..Mon, 25 Nov 2013