Sha256: d4ab6585af1e7051219f2ef0c9d60f340a9065364423dac48f2c14573b1ae0aa

Contents?: true

Size: 1.65 KB

Versions: 1

Compression:

Stored size: 1.65 KB

Contents

class FacetedSearch::Base
  
  # Manage a set of Basefacets which facilitate complex 
  # queries by storing search criteria found in request parameters 
  # and recalling these parameters to refine scopes
  
  # See Ryan Bates RailsCast Episodes 112 & 119 for an explanation of 
  # Anonymous Scopes and Session Models
  
  def initialize(session)
    raise Exception.new("initialize is a subclass responsibility")
  end

  def register(facet)
    @facets = [] if not @facets
    @facets << facet
    return facet
  end

  def create_keyword_facet(attributes)
    register(FacetedSearch::KeywordFacet.new(attributes, @model.table_name, @session))
  end
  
  def create_numeric_range_facet(attribute)
    register(FacetedSearch::NumericRangeFacet.new(attribute, @model.table_name, @session))
  end

  def refined(scope)
    @facets.each {|facet| scope = facet.refined(scope)}
    return scope
  end
  
  def paginate(scope=nil)
    scope = @model.scoped({}) if not scope
    scope = refined(scope)
    return scope.paginate({:page=>page})
  end
  
  def to_params
    params={}
    @facets.each {|facet| params.merge(facet.to_params) }
    return params
  end
  
  def to_md5
    require 'digest/md5'
    Digest::MD5.hexdigest(to_params.to_s)
  end

  def update_with(params)
    @facets.each {|facet| facet.update_with(params)}
    @session[page_param] = params[page_param] unless params[page_param].blank?
  end
  
  def order
    @session[order_param]
  end
  
  def page
    @session[page_param]
  end
   
  def order_param
    "#{@model.table_name}_order"
  end

  def order_by_param
    "#{@model.table_name}_order_by"
  end

  def page_param
    "#{@model.table_name}_page"
  end


end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
jrhicks-static-generators-0.4.4 rails_generators/static_app/templates/faceted_search/lib/base.rb