af_solr_generator 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -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,6 @@
1
+ $:.unshift(File.dirname(__FILE__)) unless
2
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
+
4
+ module AfSolrGenerator
5
+ VERSION = '0.0.2'
6
+ 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 %>
@@ -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>
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestAfSolr < Test::Unit::TestCase
4
+
5
+ def setup
6
+ end
7
+
8
+ def test_truth
9
+ assert true
10
+ end
11
+ end
@@ -0,0 +1,3 @@
1
+ require 'stringio'
2
+ require 'test/unit'
3
+ require File.dirname(__FILE__) + '/../lib/af_solr'
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