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
         |