solr_mapper 0.1.3 → 0.1.4
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/Manifest +1 -2
- data/Rakefile +1 -1
- data/lib/solr_mapper/solr_document.rb +22 -6
- data/solr_mapper.gemspec +3 -3
- metadata +5 -5
data/Manifest
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
LICENSE.txt
|
2
|
-
Manifest
|
3
2
|
README.rdoc
|
4
3
|
Rakefile
|
5
4
|
lib/solr_mapper.rb
|
@@ -7,7 +6,6 @@ lib/solr_mapper/calculations.rb
|
|
7
6
|
lib/solr_mapper/locators.rb
|
8
7
|
lib/solr_mapper/relations.rb
|
9
8
|
lib/solr_mapper/solr_document.rb
|
10
|
-
solr_mapper.gemspec
|
11
9
|
spec/base.rb
|
12
10
|
spec/calculations_spec.rb
|
13
11
|
spec/locators_spec.rb
|
@@ -19,3 +17,4 @@ spec/solr/stuff/config/schema.xml
|
|
19
17
|
spec/solr/thing/config/schema.xml
|
20
18
|
spec/solr/widget/conf/schema.xml
|
21
19
|
spec/url_spec.rb
|
20
|
+
Manifest
|
data/Rakefile
CHANGED
@@ -16,7 +16,7 @@ require 'rubygems'
|
|
16
16
|
require 'rake'
|
17
17
|
require 'echoe'
|
18
18
|
|
19
|
-
Echoe.new('solr_mapper', '0.1.
|
19
|
+
Echoe.new('solr_mapper', '0.1.4') do |p|
|
20
20
|
p.description = "Object Document Mapper for the Apache Foundation's Solr search platform"
|
21
21
|
p.url = "http://github.com/skunkworx/solr_mapper"
|
22
22
|
p.author = "Chris Umbel"
|
@@ -25,10 +25,12 @@ module SolrMapper
|
|
25
25
|
attr_accessor :per_page
|
26
26
|
attr_accessor :solr_fields
|
27
27
|
|
28
|
+
# send a read REST command to Solr
|
28
29
|
def execute_read(opts)
|
29
30
|
eval(RestClient.get(build_url('select', opts.merge(:wt => 'ruby'))))
|
30
31
|
end
|
31
32
|
|
33
|
+
# send a write REST command to SOlr
|
32
34
|
def execute_write(data, opts = nil)
|
33
35
|
send_update(data, opts)
|
34
36
|
|
@@ -47,6 +49,7 @@ module SolrMapper
|
|
47
49
|
URI::escape("#{base_url}/#{path}#{qs}")
|
48
50
|
end
|
49
51
|
|
52
|
+
# create a querystring from a hash
|
50
53
|
def build_qs(opts)
|
51
54
|
uri = ''
|
52
55
|
|
@@ -66,11 +69,13 @@ module SolrMapper
|
|
66
69
|
query(values, opts)
|
67
70
|
end
|
68
71
|
|
72
|
+
# main interface by which consumers search solr via SolrMapper
|
69
73
|
def query(values, opts = {})
|
70
74
|
results, _ = query_counted(values, opts)
|
71
75
|
results
|
72
76
|
end
|
73
77
|
|
78
|
+
# execute solr query and return the count as well as the results
|
74
79
|
def query_counted(values, opts = {})
|
75
80
|
if values.kind_of?(Hash)
|
76
81
|
search_string = ''
|
@@ -88,6 +93,7 @@ module SolrMapper
|
|
88
93
|
return map(response), response['response']['numFound']
|
89
94
|
end
|
90
95
|
|
96
|
+
# look up an object by primary key
|
91
97
|
def find(id)
|
92
98
|
result = query(:id => id)
|
93
99
|
return result[0] if result.count > 0
|
@@ -114,29 +120,32 @@ module SolrMapper
|
|
114
120
|
end
|
115
121
|
|
116
122
|
protected
|
123
|
+
# map values returned from Solr into ruby objects
|
117
124
|
def map(docs)
|
118
125
|
objs = []
|
119
126
|
|
120
127
|
docs['response']['docs'].each do |doc|
|
121
128
|
obj = self.new
|
129
|
+
obj.send(:before_load) if obj.respond_to?(:before_load)
|
122
130
|
|
123
131
|
doc.each_pair do |k, v|
|
124
132
|
k = '_id' if k.to_s == 'id'
|
125
133
|
|
126
|
-
unless obj.
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
obj.instance_variable_set("@#{k}", v)
|
134
|
+
class_eval { attr_accessor k } unless obj.respond_to?("#{k}=")
|
135
|
+
self.solr_fields << k unless self.solr_fields.include?(k)
|
136
|
+
|
137
|
+
obj.send("#{k}=", v)
|
132
138
|
end
|
133
139
|
|
140
|
+
obj.send(:after_load) if obj.respond_to?(:after_load)
|
141
|
+
|
134
142
|
objs << obj
|
135
143
|
end
|
136
144
|
|
137
145
|
objs
|
138
146
|
end
|
139
147
|
|
148
|
+
|
140
149
|
def send_update(data, opts = nil)
|
141
150
|
solr_resource = RestClient::Resource.new(build_url('update', opts))
|
142
151
|
solr_resource.post(data, {:content_type => 'text/xml'})
|
@@ -154,9 +163,14 @@ module SolrMapper
|
|
154
163
|
end
|
155
164
|
|
156
165
|
def save()
|
166
|
+
send(:before_save) if respond_to?(:before_save)
|
167
|
+
|
157
168
|
self.class.execute_write(to_solr_xml, {:overwrite => true})
|
169
|
+
|
170
|
+
send(:after_save) if respond_to?(:after_save)
|
158
171
|
end
|
159
172
|
|
173
|
+
# remove an object from the index
|
160
174
|
def destroy
|
161
175
|
# make an xml delete message that Solr will be happy with
|
162
176
|
delete_message = ''
|
@@ -169,6 +183,7 @@ module SolrMapper
|
|
169
183
|
self.class.execute_write(delete_message)
|
170
184
|
end
|
171
185
|
|
186
|
+
# convert a ruby object to xml compliant with a Solr update REST command
|
172
187
|
def to_solr_xml
|
173
188
|
output = ''
|
174
189
|
builder = Builder::XmlMarkup.new(:target => output, :indent => 2)
|
@@ -214,6 +229,7 @@ module SolrMapper
|
|
214
229
|
save()
|
215
230
|
end
|
216
231
|
|
232
|
+
# handle rails building a url from us
|
217
233
|
def to_param
|
218
234
|
instance_variable_get('@_id').to_s
|
219
235
|
end
|
data/solr_mapper.gemspec
CHANGED
@@ -2,15 +2,15 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{solr_mapper}
|
5
|
-
s.version = "0.1.
|
5
|
+
s.version = "0.1.4"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Chris Umbel"]
|
9
|
-
s.date = %q{2010-10-
|
9
|
+
s.date = %q{2010-10-27}
|
10
10
|
s.description = %q{Object Document Mapper for the Apache Foundation's Solr search platform}
|
11
11
|
s.email = %q{chrisu@dvdempire.com}
|
12
12
|
s.extra_rdoc_files = ["LICENSE.txt", "README.rdoc", "lib/solr_mapper.rb", "lib/solr_mapper/calculations.rb", "lib/solr_mapper/locators.rb", "lib/solr_mapper/relations.rb", "lib/solr_mapper/solr_document.rb"]
|
13
|
-
s.files = ["LICENSE.txt", "
|
13
|
+
s.files = ["LICENSE.txt", "README.rdoc", "Rakefile", "lib/solr_mapper.rb", "lib/solr_mapper/calculations.rb", "lib/solr_mapper/locators.rb", "lib/solr_mapper/relations.rb", "lib/solr_mapper/solr_document.rb", "spec/base.rb", "spec/calculations_spec.rb", "spec/locators_spec.rb", "spec/misc_spec.rb", "spec/paginated_spec.rb", "spec/query_spec.rb", "spec/relation_spec.rb", "spec/solr/stuff/config/schema.xml", "spec/solr/thing/config/schema.xml", "spec/solr/widget/conf/schema.xml", "spec/url_spec.rb", "Manifest", "solr_mapper.gemspec"]
|
14
14
|
s.homepage = %q{http://github.com/skunkworx/solr_mapper}
|
15
15
|
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Solr_mapper", "--main", "README.rdoc"]
|
16
16
|
s.require_paths = ["lib"]
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 4
|
9
|
+
version: 0.1.4
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Chris Umbel
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-10-
|
17
|
+
date: 2010-10-27 00:00:00 +00:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -85,7 +85,6 @@ extra_rdoc_files:
|
|
85
85
|
- lib/solr_mapper/solr_document.rb
|
86
86
|
files:
|
87
87
|
- LICENSE.txt
|
88
|
-
- Manifest
|
89
88
|
- README.rdoc
|
90
89
|
- Rakefile
|
91
90
|
- lib/solr_mapper.rb
|
@@ -93,7 +92,6 @@ files:
|
|
93
92
|
- lib/solr_mapper/locators.rb
|
94
93
|
- lib/solr_mapper/relations.rb
|
95
94
|
- lib/solr_mapper/solr_document.rb
|
96
|
-
- solr_mapper.gemspec
|
97
95
|
- spec/base.rb
|
98
96
|
- spec/calculations_spec.rb
|
99
97
|
- spec/locators_spec.rb
|
@@ -105,6 +103,8 @@ files:
|
|
105
103
|
- spec/solr/thing/config/schema.xml
|
106
104
|
- spec/solr/widget/conf/schema.xml
|
107
105
|
- spec/url_spec.rb
|
106
|
+
- Manifest
|
107
|
+
- solr_mapper.gemspec
|
108
108
|
has_rdoc: true
|
109
109
|
homepage: http://github.com/skunkworx/solr_mapper
|
110
110
|
licenses: []
|