Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Ferret Adapter for DataMapper

Fetching latest commit…

Cannot retrieve the latest commit at this time

README.txt
This is a DataMapper plugin for Ferret.

= Setup code

For a single process site, use the ferret index directly:

  DataMapper.setup :search, "ferret:///path/to/index"

For a multi-process site, use the distributed index by running `ferret start`
inside your project's directory and then setting up the :search repository:

  DataMapper.setup :search, "ferret:///tmp/ferret_index.sock"

= Sample Code

require "rubygems"
require "dm-core"
require "dm-is-searchable"

DataMapper.setup(:default, "sqlite3::memory:")
DataMapper.setup(:search, "ferret://#{Pathname(__FILE__).dirname.expand_path.parent + "index"}")

class Image
  include DataMapper::Resource
  property :id, Serial
  property :title, String

  is :searchable # this defaults to :search repository, you could also do
  # is :searchable, :repository => :ferret

end

class Story
  include DataMapper::Resource
  property :id, Serial
  property :title, String
  property :author, String

  repository(:search) do
    # We only want to search on id and title.
    properties(:search).clear
    property :id, Serial
    property :title, String
  end

  is :searchable

end

Image.auto_migrate!
Story.auto_migrate!
image = Image.create(:title => "Oil Rig");
story = Story.create(:title => "Big Oil", :author => "John Doe") }

puts Image.search(:title => "Oil Rig").inspect # => [<Image title="Oil Rig">]

# For info on this, see DM::Repository#search and DM::Adapters::FerretAdapter#search.
puts repository(:search).search('title:"Oil"').inspect # => { Image => ["1"], Story => ["1"] }

image.destroy

puts Image.search(:title => "Oil Rig").inspect # => []
Something went wrong with that request. Please try again.