dm-is-searchable 0.9.9 → 0.9.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/History.txt CHANGED
@@ -1,3 +1,7 @@
1
+ === 0.9.10 / 2009-01-19
2
+
3
+ * No changes this version
4
+
1
5
  === 0.9.9 / 2009-01-04
2
6
 
3
7
  * 1 minor enhancement:
data/README.txt CHANGED
@@ -1 +1,120 @@
1
1
  = dm-is-searchable
2
+
3
+ * http://datamapper.org
4
+ * git://github.com/sam/dm-more.git
5
+
6
+ == Description
7
+
8
+ A DataMapper search plugin api to search for resources from one repository and
9
+ load from another.
10
+
11
+ Typically a full text search adapter that can only produce partial resources is
12
+ searched and the resulting resource collection is then loaded from your default
13
+ repository.
14
+
15
+ == Synopsis
16
+
17
+ === Resources
18
+
19
+ require "rubygems"
20
+ require "dm-core"
21
+ require "dm-is-searchable"
22
+
23
+ DataMapper.setup(:default, :adapter => 'in_memory')
24
+
25
+ # Your search adapter configuration. See your search adapters setup options.
26
+ DataMapper.setup(:search, :adapter => 'your_adapter')
27
+
28
+ class Cow
29
+ include DataMapper::Resource
30
+ property :name, String, :key => true
31
+ property :likes, String
32
+ property :cowpats, Integer
33
+
34
+ is :searchabe # This defaults to repository(:search), you could also do
35
+ # is :searchable, :repository => :some_searchable_repository
36
+ end
37
+
38
+ class Chicken
39
+ include DataMapper::Resource
40
+ property :name, String, :key => true
41
+ property :likes, String
42
+ property :eggs, Integer
43
+
44
+ is :searchable
45
+ repository(:search) do
46
+ # We only want to be able to search by name.
47
+ properties(:search).clear
48
+ property :name, String
49
+ end
50
+ end
51
+
52
+ === Searching
53
+
54
+ Mixing in is-searchable by default defines a single class method in your
55
+ resource with the signature of:
56
+
57
+ # ==== Parameters
58
+ # search_options<Hash>::
59
+ # DM::Query conditions to pass to the searchable repository. Unless you
60
+ # explicitly defined a searchable repository this is repository(:search).
61
+ #
62
+ # options<Hash>::
63
+ # Optionsal DM::Query conditions to pass to the repository holding the full
64
+ # resource. Without a scoped search this is repository(:default).
65
+ #
66
+ # ==== Returns
67
+ # DM::Collection:: Zero or more DM::Resource objects.
68
+ MyModel#search(search_options = {}, options = {})
69
+
70
+ A basic full text search for cows called 'Pete', 'Peter', 'Pedro' (dependant on
71
+ the search adapter) would look like:
72
+
73
+ puts Cow.search(:name => 'pete').inspect
74
+ #=> [<Cow name="peter" cowpats="12" ...>, <Cow name='pete' cowpats="1024" ...>, ...]
75
+
76
+ Adding extra conditions to apply to the default repository allows you to do
77
+ interesting things to the search adapter results. For example conditions on
78
+ properties not available in your search adapter or unsupported operators:
79
+
80
+ # Unsupported #gt operator in search adapter.
81
+ puts Cow.search({:name => 'pete'}, {:cowpats.gt => 1000}).inspect
82
+ #=> [<Cow name="pete" cowpats="1024" ...>]
83
+
84
+ # Unknown property in search adapter.
85
+ puts Chicken.search({:name => 'steve'}, {:eggs => (100..200)}).inspect
86
+ #=> [<Chicken name="steve" eggs="120" ...>]
87
+
88
+ === Adapter
89
+
90
+ Like all DM adapters a custom search adapter implements the
91
+ DM::AbstractAdapter interface.
92
+
93
+ The key differences from a typical adapter are:
94
+
95
+ ==== DM::AbstractAdapter#read_many
96
+
97
+ An Array of Hashes in the form of <tt>[{:id => 12}, {:id => 53}]</tt> will
98
+ work just fine. In fact so long as the following snippet would run on the
99
+ returned value you are free to return whatever you like.
100
+
101
+ ids = read_many_result.collect{|doc| doc[:id]} #=> Array of ID's.
102
+
103
+ ==== DM::AbstractAdapter#read_one
104
+
105
+ No need to DM::Model#load here. Just return your partial resource as a Hash
106
+ in the form of <tt>{:id => 12}</tt>. Like <tt>#read_many</tt> the returned
107
+ value really only needs to respond to <tt>#[:id]</tt>.
108
+
109
+ read_one_result[:id] #=> The resource ID to load.
110
+
111
+
112
+ == Compatible Search Adapters
113
+
114
+ === Ferret
115
+ Gem:: dm-ferret-adapter
116
+ Git:: git://github.com/sam/dm-more.git # dm-more/adapters/dm-ferret-adapter
117
+
118
+ === Sphinx
119
+ Gem:: dm-sphinx-adapter
120
+ Git:: git://github.com/shanna/dm-sphinx-adapter.git
@@ -3,7 +3,7 @@ require 'rubygems'
3
3
  require 'pathname'
4
4
 
5
5
  # Add all external dependencies for the plugin here
6
- gem 'dm-core', '~>0.9.9'
6
+ gem 'dm-core', '~>0.9.10'
7
7
  require 'dm-core'
8
8
 
9
9
  # Require plugin-files
@@ -12,9 +12,7 @@ require Pathname(__FILE__).dirname.expand_path / 'dm-is-searchable' / 'is' / 'se
12
12
 
13
13
  # Include the plugin in Resource
14
14
  module DataMapper
15
- module Resource
16
- module ClassMethods
17
- include DataMapper::Is::Searchable
18
- end # module ClassMethods
19
- end # module Resource
15
+ module Model
16
+ include DataMapper::Is::Searchable
17
+ end # module Model
20
18
  end # module DataMapper
@@ -1,7 +1,7 @@
1
1
  module DataMapper
2
2
  module Is
3
3
  module Searchable
4
- VERSION = '0.9.9'
4
+ VERSION = '0.9.10'
5
5
  end
6
6
  end
7
7
  end
data/tasks/spec.rb CHANGED
@@ -8,7 +8,7 @@ begin
8
8
  desc 'Run specifications'
9
9
  Spec::Rake::SpecTask.new(:spec) do |t|
10
10
  t.spec_opts << '--options' << 'spec/spec.opts' if File.exists?('spec/spec.opts')
11
- t.spec_files = Pathname.glob((ROOT + 'spec/**/*_spec.rb').to_s)
11
+ t.spec_files = Pathname.glob((ROOT + 'spec/**/*_spec.rb').to_s).map { |f| f.to_s }
12
12
 
13
13
  begin
14
14
  gem 'rcov', '~>0.8'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dm-is-searchable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.9
4
+ version: 0.9.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bernerd Schaefer
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-01-04 00:00:00 -08:00
12
+ date: 2009-01-19 00:00:00 -08:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -20,7 +20,7 @@ dependencies:
20
20
  requirements:
21
21
  - - ~>
22
22
  - !ruby/object:Gem::Version
23
- version: 0.9.9
23
+ version: 0.9.10
24
24
  version:
25
25
  description: A DataMapper plugin for searching
26
26
  email: