Class: TTY::Prompt::EnumPaginator
- Defined in:
- lib/tty/prompt/enum_paginator.rb
Constant Summary
Constants inherited from Paginator
Instance Method Summary collapse
-
#paginate(list, active, per_page = nil, &block) ⇒ Object
Paginate list of choices based on current active choice.
Methods inherited from Paginator
Constructor Details
This class inherits a constructor from TTY::Prompt::Paginator
Instance Method Details
#paginate(list, active, per_page = nil, &block) ⇒ Object
Paginate list of choices based on current active choice. Move entire pages.
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/tty/prompt/enum_paginator.rb', line 12 def paginate(list, active, per_page = nil, &block) default_size = (list.size <= DEFAULT_PAGE_SIZE ? list.size : DEFAULT_PAGE_SIZE) @per_page = @per_page || per_page || default_size # Don't paginate short lists if list.size <= @per_page @lower_index = 0 @upper_index = list.size - 1 if block return list.each_with_index(&block) else return list.each_with_index.to_enum end end unless active.nil? # User may input index out of range @last_index = active end page = (@last_index / @per_page.to_f).ceil pages = (list.size / @per_page.to_f).ceil if page == 0 @lower_index = 0 @upper_index = @lower_index + @per_page - 1 elsif page > 0 && page <= pages @lower_index = (page - 1) * @per_page @upper_index = @lower_index + @per_page - 1 else @upper_index = list.size - 1 @lower_index = @upper_index - @per_page + 1 end sliced_list = list[@lower_index..@upper_index] indices = (@lower_index..@upper_index) if block sliced_list.each_with_index do |item, index| block[item, @lower_index + index] end else sliced_list.zip(indices).to_enum unless block_given? end end |