Class: Pagy::Calendar

Inherits:
Pagy
  • Object
show all
Includes:
OverflowExtra::Pagy
Defined in:
lib/pagy/calendar.rb

Overview

Paginate a Time period by units (year, month, week or day)

Constant Summary collapse

DAY =
60 * 60 * 24
WEEK =
DAY * 7

Constants inherited from Pagy

DEFAULT, ElasticsearchRails, Meilisearch, PAGE_PLACEHOLDER, Searchkick, VERSION

Instance Attribute Summary collapse

Attributes inherited from Pagy

#count, #from, #in, #items, #last, #next, #offset, #page, #pages, #prev, #to, #vars

Instance Method Summary collapse

Methods included from OverflowExtra::Pagy

#overflow?

Methods inherited from Pagy

root, #series

Methods included from SearchkickExtra::Pagy

#new_from_searchkick

Methods included from MeilisearchExtra::Pagy

#new_from_meilisearch

Methods included from ElasticsearchRailsExtra::Pagy

#new_from_elasticsearch_rails

Methods included from SharedExtra::Pagy

#sequels

Methods included from GearboxExtra

#setup_items_var, #setup_pages_var

Constructor Details

#initialize(vars) ⇒ Calendar

Merge and validate the options, do some simple arithmetic and set a few instance variables

Raises:



23
24
25
26
27
28
29
30
31
# File 'lib/pagy/calendar.rb', line 23

def initialize(vars) # rubocop:disable Lint/MissingSuper
  normalize_vars(vars)
  setup_vars(page: 1, week_offset: 0)
  setup_unit_vars
  raise OverflowError.new(self, :page, "in 1..#{@last}", @page) if @page > @last

  @prev = (@page - 1 unless @page == 1)
  @next = @page == @last ? (1 if @vars[:cycle]) : @page + 1
end

Instance Attribute Details

#count=(value) ⇒ Object (writeonly)

Sets the attribute count

Parameters:

  • value

    the value to set the attribute count to.



20
21
22
# File 'lib/pagy/calendar.rb', line 20

def count=(value)
  @count = value
end

#in=(value) ⇒ Object (writeonly)

Sets the attribute in

Parameters:

  • value

    the value to set the attribute in to.



20
21
22
# File 'lib/pagy/calendar.rb', line 20

def in=(value)
  @in = value
end

#orderObject (readonly)

Returns the value of attribute order.



19
20
21
# File 'lib/pagy/calendar.rb', line 19

def order
  @order
end

#unitObject (readonly)

Returns the value of attribute unit.



19
20
21
# File 'lib/pagy/calendar.rb', line 19

def unit
  @unit
end

#utc_fromObject (readonly)

Returns the value of attribute utc_from.



19
20
21
# File 'lib/pagy/calendar.rb', line 19

def utc_from
  @utc_from
end

#utc_toObject (readonly)

Returns the value of attribute utc_to.



19
20
21
# File 'lib/pagy/calendar.rb', line 19

def utc_to
  @utc_to
end

#week_offsetObject (readonly)

Returns the value of attribute week_offset.



19
20
21
# File 'lib/pagy/calendar.rb', line 19

def week_offset
  @week_offset
end

Instance Method Details

#current_page_label(format = nil) ⇒ Object



46
47
48
# File 'lib/pagy/calendar.rb', line 46

def current_page_label(format = nil)
  page_label(@page, format)
end

#page_label(num = @page, format = nil) ⇒ Object

Generate a label for each page, with the specific ‘Time` period it refers to



34
35
36
37
38
39
40
41
42
43
44
# File 'lib/pagy/calendar.rb', line 34

def page_label(num = @page, format = nil)
  snap = snap(num.to_i)
  format ||= @vars[:"#{@unit}_format"]
  case @unit
  when :year  then new_time(@initial.year + snap)
  when :month then bump_month(@initial, snap)
  when :week  then @initial + (snap * WEEK)
  when :day   then @initial + (snap * DAY)
  else raise InternalError, "expected @unit to be in [:year, :month, :week, :day]; got #{@unit.inspect}"
  end.strftime(format)
end