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.
@@ -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