module SimpleSearch::ViewHelper

Public Instance Methods

page_params(page_num, page_by, page_arr_key=nil) click to toggle source

Returns a url params in hash for the page number given

# File lib/simple_search/view_helper.rb, line 81
          def page_params(page_num, page_by, page_arr_key=nil)
                  params = if page_arr_key
                          old_arr = request.parameters[page_arr_key].with_indifferent_access
                          request.parameters.merge(page_arr_key => old_arr.merge(:page => page_num, :page_by => page_by ) )
                  else
                          request.parameters.merge(:page => page_num, :page_by => page_by )
                  end
params.with_indifferent_access
          end
page_properties(arel, page_options={}) click to toggle source

Returns page related properties in hash

# File lib/simple_search/view_helper.rb, line 51
          def page_properties(arel, page_options={})
                  total_rows = arel.limit(1000000).offset(0).count

                  # check if page is in an url array
                  matches = request.fullpath.match Regexp.new("\&([a-z_]+)\\[page|page_by\\]=") # &array[page]
                  page_arr_key = (matches && matches.length == 2) ? matches[1] : nil

                  # get current page value
                  page = page_arr_key ? request.parameters[page_arr_key][:page] : request.parameters[:page]
                  page ||= 1 
page = page.to_i

                  page_by = page_arr_key ? request.parameters[page_arr_key][:page_by] : request.parameters[:page_by]
                  page_by ||= 30 
page_by = page_by.to_i

                  last_page = total_rows / page_by.to_i 
                  last_page += 1 if total_rows % page_by.to_i != 0
                  {
                          :total_rows => total_rows,
                          :last_page => last_page,
                          :current_page => (page || 1).to_i,
                          :rows_per_page => (page_by || 30).to_i,
                          :page_arr_key => page_arr_key
                  }.merge(page_options)
          end
page_url_params(arel, page_props=nil) click to toggle source

Returns page url params in hash with the page number as key

# File lib/simple_search/view_helper.rb, line 94
          def page_url_params(arel, page_props=nil)
                  page_props ||= page_properties(arel)
num_pages  = page_props[:num_pages] || 5 
                  num_bf_af = (num_pages-1)/2
                  current_page = page_props[:current_page]
                  last_page    = page_props[:last_page]

                  page_numbers = [1, last_page]
                  page_numbers << ([current_page-num_bf_af,1].max..[current_page+num_bf_af,last_page].min).to_a
                  page_numbers << last_page
                  page_numbers = page_numbers.flatten.uniq.sort

                  page_url_params = {}
                  for num in page_numbers
                          page_url_params[num] = page_params(num, page_props[:rows_per_page], page_props[:page_arr_key])
                  end

                  page_url_params
          end
page_urls(arel, page_options={}, http_options={}) click to toggle source
# File lib/simple_search/view_helper.rb, line 114
          def page_urls(arel, page_options={}, http_options={})
                  page_urls = []
                  prev_page = 0        
page_props = page_properties(arel, page_options)
                  page_url_params(arel, page_props ).each { |page, url_params|
                          if page.to_i > (prev_page+1) # page number jumped up, need to have some indicator
                                  page_urls << "<span class='filler'>...</span>"
                          end
  new_options = page_props[:current_page] == page ? http_options.merge({:class => 'current'}) : http_options
                          page_urls << link_to(page, url_params, new_options)
  prev_page = page
                  }
page_urls
          end