Neo4j Acts as list
This is a port of the classic +acts_as_list+ to Neo4j.
This acts_as extension provides the capabilities for sorting and reordering a number of objects in a list.
If you do not specify custom position +column+ in the options, a key named +position+ will be used automatically.
Installation
gem install acts_as_list_neo4j
Usage
WARNING: This gem still requires refactoring. Currently, it only works OK for small workloads.
See the /specs folder specs that demontrate the API. Usage examples are located in the /examples folder.
To make a class Act as List, simply do:
include ActsAsList::Neo4j
And it will automatically set up a property and call acts_as_list with that property. By default the property name is :position.
You can change the defaut position_column name used: ActsAsList::Neo4j.default_position_column = :pos
.
For this class variable to be effetive, it should be set before calling include ActsAsList::Neo4j
.
Example
class Item
include Neo4j::ActiveNode
include ActsAsList::Neo4j
property :text
end
%w{'clean', 'wash', 'repair'}.each do |text|
Item.new(text: text)
end
Item.first.move(:bottom)
Item.last.move(:higher)
Overriding defaults
By default, when including ActsAsList::Neo4j, the property is set to :position and the acts_as_list column to :position.
To change this:
include ActsAsList::Mongoid
property :pos, type: Integer
acts_as_list column: :pos
move API
item.move(:highest) # moves to top of list.
item.move(:lowest) # moves to bottom of list.
item.move(:top) # moves to top of list.
item.move(:bottom) # moves to bottom of list.
item.move(:up) # moves one up (:higher and :up is the same) within the scope.
item.move(:down) # moves one up (:lower and :down is the same) within the scope.
item.move(to: position) # moves item to a specific position.
item.move(above: other) # moves item above the other item.*
item.move(below: other)
Running the specs
bundle exec rspec spec