af_solr_generator 0.0.2
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/af_solr_generator.rb +54 -0
- data/lib/af_solr_generator.rb +6 -0
- data/templates/controller_template.erb +39 -0
- data/templates/results.erb +19 -0
- data/templates/search_form.erb +12 -0
- data/templates/show.erb +15 -0
- data/test/test_af_solr.rb +11 -0
- data/test/test_helper.rb +3 -0
- metadata +90 -0
@@ -0,0 +1,54 @@
|
|
1
|
+
class Stubby
|
2
|
+
def initialize
|
3
|
+
@f = Hash.new
|
4
|
+
end
|
5
|
+
def field(name, type, modifier={})
|
6
|
+
@f[name.to_sym]=type.to_sym
|
7
|
+
end
|
8
|
+
def retrieve
|
9
|
+
@f
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
class AfSolrGenerator < Rails::Generator::NamedBase
|
14
|
+
attr_accessor :fields
|
15
|
+
def manifest
|
16
|
+
@fields = Hash.new
|
17
|
+
record do |m|
|
18
|
+
z = name.classify.constantize
|
19
|
+
raise "#{z} is not an ActiveFedora::Base!" unless z.superclass == ActiveFedora::Base
|
20
|
+
z.ds_specs.each do |k,v|
|
21
|
+
stubby = Stubby.new
|
22
|
+
v.last.call(stubby)
|
23
|
+
@fields[k.to_sym] = stubby.retrieve
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
m.directory 'app/controllers/'
|
28
|
+
m.directory "app/views/#{name}_search"
|
29
|
+
m.template "controller_template.erb", "app/controllers/#{name}_search_controller.rb"
|
30
|
+
m.template "search_form.erb", "app/views/#{name}_search/#{name}_search_form.html.erb"
|
31
|
+
m.template "results.erb", "app/views/#{name}_search/results.html.erb"
|
32
|
+
m.template "show.erb", "app/views/#{name}_search/show.html.erb"
|
33
|
+
puts <<-EOS
|
34
|
+
Make sure to add a route for the search interface, if you're using ReST. The search
|
35
|
+
interface lives at :controller=>#{name}_search_controller, :action=>search
|
36
|
+
|
37
|
+
It's up to you to configure your routes, but the system defaults to work with
|
38
|
+
the default passthrough rails routes:
|
39
|
+
|
40
|
+
map.connect ':controller/:action/:id'
|
41
|
+
|
42
|
+
EOS
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
protected
|
47
|
+
def banner
|
48
|
+
<<-EOS
|
49
|
+
Creates an ActiveFedora search controller based on your ActiveFedora::Base model definitions.
|
50
|
+
|
51
|
+
USAGE: #{$0} #{spec.name} <model name>
|
52
|
+
EOS
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
gem 'ruby-fedora'
|
3
|
+
gem 'active-fedora'
|
4
|
+
class <%=class_name%>SearchController < ApplicationController
|
5
|
+
before_filter :register_af
|
6
|
+
STREAMS= [<%=fields.keys.map{|x|":#{x}"}.join(', ')%>]
|
7
|
+
|
8
|
+
def index
|
9
|
+
render :action=>'<%=name%>_search_form'
|
10
|
+
end
|
11
|
+
|
12
|
+
def search
|
13
|
+
@hits = ActiveFedora::SolrService.instance.conn.query(transform(params)).to_a
|
14
|
+
render :action=>'results'
|
15
|
+
end
|
16
|
+
|
17
|
+
def transform(params)
|
18
|
+
q= []
|
19
|
+
STREAMS.each do |s|
|
20
|
+
params[s].each{|k,v| q<<"#{k}_field:#{v}" unless v.blank?}
|
21
|
+
end
|
22
|
+
q.join(' ')
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
#this really doesn't belong here, you should probably create a real controller for your <%=class_name%>s
|
27
|
+
def show
|
28
|
+
@inst = <%=class_name%>.load_instance(params[:id])
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def register_af
|
35
|
+
#change this if your fedora/solr runs somewhere else...
|
36
|
+
ActiveFedora::SolrService.register('http://localhost:8080/solr')
|
37
|
+
Fedora::Repository.register('http://fedoraAdmin:fedoraAdmin@localhost:8080/fedora')
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<h1><%%=@hits.size%> <%=name.humanize%> Found.</h1>
|
2
|
+
<table border='1'>
|
3
|
+
<tr>
|
4
|
+
<th>PID</th>
|
5
|
+
<%%@hits.first.keys.sort.each do |k|%>
|
6
|
+
<th><%%=k.to_s.humanize%></th>
|
7
|
+
<%%end%>
|
8
|
+
</tr>
|
9
|
+
|
10
|
+
|
11
|
+
<%%@hits.each do |f|%>
|
12
|
+
<tr>
|
13
|
+
<td><%%=link_to f['id'], :action=>:show, :id=>f['id']%></td>
|
14
|
+
<%%- f.keys.compact.sort.each do |v| %>
|
15
|
+
<td><%%=f[v] %></td>
|
16
|
+
<%%end%>
|
17
|
+
<%%end%>
|
18
|
+
</tr>
|
19
|
+
</table>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<%%-form_tag url_for(:action=>:search, :controller=>:<%=name%>_search) do%>
|
2
|
+
<%-fields.each do |k,v| %>
|
3
|
+
<%% fields_for :<%=k%> do |f|%>
|
4
|
+
<h1><%=k%></h1>
|
5
|
+
<%v.each do |f| %>
|
6
|
+
<label><%=f.first.to_s.humanize%></label>
|
7
|
+
<%%=f.text_field :<%=f.first%>%>
|
8
|
+
<%end%>
|
9
|
+
<%%end%>
|
10
|
+
<%-end%>
|
11
|
+
<%%=submit_tag "Search"%>
|
12
|
+
<%%- end %>
|
data/templates/show.erb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
<h1><%%=@inst.pid%></h1>
|
2
|
+
<table>
|
3
|
+
<tr><th>Key</th><th>Value</th></tr>
|
4
|
+
<%%@inst.datastreams.each do |name, ds| %>
|
5
|
+
<tr ><th colspan="2" style="background:#f0f0f0;">Datastream: <%%=ds.dsid%>(<%%=ds.class%>)</th></tr>
|
6
|
+
<%%ds.fields.each do |k,v|%>
|
7
|
+
<tr><td style="background:#ff4000"><%%=k.to_s%></td><td><%%=v[:values].join("\r")%></td></tr>
|
8
|
+
<%%end%>
|
9
|
+
<%% ds.attributes.each do |k,v| %>
|
10
|
+
<tr>
|
11
|
+
<td style="background:#707070"><%%=k%></td><td><%%=v%></td>
|
12
|
+
</tr>
|
13
|
+
<%%end%>
|
14
|
+
<%%end%>
|
15
|
+
</table>
|
data/test/test_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,90 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: af_solr_generator
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- MediaShelf LLC
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-02-26 00:00:00 -06:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: ruby-fedora
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 1.0.1
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: active-fedora
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.0.1
|
34
|
+
version:
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: hoe
|
37
|
+
type: :development
|
38
|
+
version_requirement:
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 1.8.0
|
44
|
+
version:
|
45
|
+
description: FIX (describe your package)
|
46
|
+
email:
|
47
|
+
- matt.zumwalt@yourmediashelf.com
|
48
|
+
executables: []
|
49
|
+
|
50
|
+
extensions: []
|
51
|
+
|
52
|
+
extra_rdoc_files: []
|
53
|
+
|
54
|
+
files:
|
55
|
+
- af_solr_generator.rb
|
56
|
+
- lib/af_solr_generator.rb
|
57
|
+
- templates/controller_template.erb
|
58
|
+
- templates/search_form.erb
|
59
|
+
- templates/results.erb
|
60
|
+
- templates/show.erb
|
61
|
+
has_rdoc: true
|
62
|
+
homepage: FIX (url)
|
63
|
+
post_install_message:
|
64
|
+
rdoc_options:
|
65
|
+
- --main
|
66
|
+
- README.rdoc
|
67
|
+
require_paths:
|
68
|
+
- lib
|
69
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: "0"
|
74
|
+
version:
|
75
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: "0"
|
80
|
+
version:
|
81
|
+
requirements: []
|
82
|
+
|
83
|
+
rubyforge_project: rubyfedora
|
84
|
+
rubygems_version: 1.3.1
|
85
|
+
signing_key:
|
86
|
+
specification_version: 2
|
87
|
+
summary: FIX (describe your package)
|
88
|
+
test_files:
|
89
|
+
- test/test_af_solr.rb
|
90
|
+
- test/test_helper.rb
|