Project

ohm-sorted

0.01
No commit activity in last 3 years
No release in over 3 years
An plugin for Ohm that lets you create sorted indices.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

 Project Readme

ohm-sorted

Gem Version Build Status Code Climate

Sorted indices for Ohm

Setup

  1. Include the Callbacks and Sorted modules in your model:

     include Ohm::Callbacks 
     include Ohm::Sorted
    
  2. Add the sorted indices you want to your model:

  • If you want a complete index:

    sorted :created_at
    
  • If you want to partition the index based on an attribute:

    sorted :created_at, :group_by => :site_id
    

You can use both indices for the same attribute, as the partition keys are namespaced by the group_by attribute.

You will need to resave every model if they already exist for the index to get built.

The ranking attribute must be of a type that responds to to_f.

Usage

To query the sorted index, use the sorted_find class method.

>> Post.sorted_find(:created_at, site_id: "ar")

This returns an Ohm::SortedSet, similiar to an Ohm::Set but backed by a sorted set.

To limit the results to a certain score range, use the between method. This and the following methods return a new copy of the set object, but data is not read until it is necessary.

>> Post.sorted_find(:created_at, site_id: "ar").between(start_time, end_time)

To take a slice of the results, use the slice method. This returns a new copy of the set which will pass its offset and count parameters to Redis.

>> Post.sorted_find(:created_at, site_id: "ar").slice(2, 4)

Requirements

This plugin works with Ohm versions higher than 0.1.3.

Acknowledgements

Many thanks to Damian Janowski (https://github.com/djanowski)