Skip to content

Instantly share code, notes, and snippets.

@shipiev
Created October 14, 2016 11:08
Show Gist options
  • Save shipiev/0c168e9a42bfc281bf7ecddb5e5a058e to your computer and use it in GitHub Desktop.
Save shipiev/0c168e9a42bfc281bf7ecddb5e5a058e to your computer and use it in GitHub Desktop.
Модуль с одной публичной функцией, которая call
module Concerns
module PrintOrder
module GroupPageNumbers
def sequent_grouping(array)
begin_group, prev_value, result = nil, nil, []
array.sort.each_with_index do |item, index|
if index.zero?
begin_group, prev_value = index, item
elsif prev_value.succ != item
group = array[begin_group...index]
result << ((yield group) || group)
begin_group = index
end
if index == array.size - 1
group = array[begin_group..index]
result << ((yield group) || group)
end
prev_value = item
end
result
end
def compress_pages(array)
sequent_grouping(array) do |arr|
arr.size == 1 ? arr.first : "#{arr[0]}-#{arr[-1]}"
end.join(',')
end
alias call compress_pages
module_function :call
end
end
end
@shipiev
Copy link
Author

shipiev commented Oct 14, 2016

Вызывать примерно так же как и метод:

Concerns::PrintOrder::GroupPageNumbers.(array)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment