blacklight_user_generated_content 0.0.1

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.
Files changed (37) hide show
  1. data/Gemfile +9 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +3 -0
  4. data/Rakefile +29 -0
  5. data/app/controllers/comments_controller.rb +102 -0
  6. data/app/controllers/tags_controller.rb +73 -0
  7. data/app/controllers/user_generated_content.rb +4 -0
  8. data/app/models/tag.rb +3 -0
  9. data/app/models/tagging.rb +3 -0
  10. data/app/views/comments/_comment.html.erb +17 -0
  11. data/app/views/comments/_form.html.erb +9 -0
  12. data/app/views/comments/edit.html.erb +2 -0
  13. data/app/views/comments/index.html.erb +5 -0
  14. data/app/views/comments/new.html.erb +3 -0
  15. data/app/views/comments/show.html.erb +2 -0
  16. data/app/views/tags/index.html.erb +1 -0
  17. data/app/views/tags/new.html.erb +9 -0
  18. data/app/views/tags/show.html.erb +2 -0
  19. data/app/views/user_generated_content/_index_partials/_ugc.html.erb +17 -0
  20. data/app/views/user_generated_content/index.html.erb +32 -0
  21. data/config/routes.rb +5 -0
  22. data/lib/blacklight_user_generated_content/active_record_duck_type.rb +81 -0
  23. data/lib/blacklight_user_generated_content/comment.rb +4 -0
  24. data/lib/blacklight_user_generated_content/commentable.rb +8 -0
  25. data/lib/blacklight_user_generated_content/document.rb +8 -0
  26. data/lib/blacklight_user_generated_content/engine.rb +19 -0
  27. data/lib/blacklight_user_generated_content/findable.rb +13 -0
  28. data/lib/blacklight_user_generated_content/helper.rb +8 -0
  29. data/lib/blacklight_user_generated_content/route_sets.rb +16 -0
  30. data/lib/blacklight_user_generated_content/solr_helper/scope.rb +23 -0
  31. data/lib/blacklight_user_generated_content/solr_helper.rb +5 -0
  32. data/lib/blacklight_user_generated_content/taggable.rb +8 -0
  33. data/lib/blacklight_user_generated_content.rb +27 -0
  34. data/lib/generators/blacklight_user_generated_content/blacklight_user_generated_content_generator.rb +63 -0
  35. data/lib/generators/blacklight_user_generated_content/templates/alter_commentable_id_to_string.rb +9 -0
  36. data/lib/generators/blacklight_user_generated_content/templates/alter_taggable_id_to_string.rb +13 -0
  37. metadata +186 -0
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem "rails", "3.0.7"
4
+ gem "capybara", ">= 0.4.0"
5
+ gem "sqlite3"
6
+
7
+ # To use debugger (ruby-debug for Ruby 1.8.7+, ruby-debug19 for Ruby 1.9.2+)
8
+ # gem 'ruby-debug'
9
+ # gem 'ruby-debug19'
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2011 YOURNAME
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,3 @@
1
+ = BlacklightUserGeneratedContent
2
+
3
+ This project rocks and uses MIT-LICENSE.
data/Rakefile ADDED
@@ -0,0 +1,29 @@
1
+ # encoding: UTF-8
2
+ require 'rubygems'
3
+ begin
4
+ require 'bundler/setup'
5
+ rescue LoadError
6
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
7
+ end
8
+
9
+ require 'rake'
10
+ require 'rake/rdoctask'
11
+
12
+ require 'rake/testtask'
13
+
14
+ Rake::TestTask.new(:test) do |t|
15
+ t.libs << 'lib'
16
+ t.libs << 'test'
17
+ t.pattern = 'test/**/*_test.rb'
18
+ t.verbose = false
19
+ end
20
+
21
+ task :default => :test
22
+
23
+ Rake::RDocTask.new(:rdoc) do |rdoc|
24
+ rdoc.rdoc_dir = 'rdoc'
25
+ rdoc.title = 'BlacklightUserGeneratedContent'
26
+ rdoc.options << '--line-numbers' << '--inline-source'
27
+ rdoc.rdoc_files.include('README.rdoc')
28
+ rdoc.rdoc_files.include('lib/**/*.rb')
29
+ end
@@ -0,0 +1,102 @@
1
+ class CommentsController < ApplicationController
2
+ include Blacklight::SolrHelper
3
+ load_and_authorize_resource
4
+
5
+ rescue_from CanCan::AccessDenied do |exception|
6
+ redirect_to root_url, :alert => exception.message
7
+ end
8
+
9
+
10
+ # GET /comments
11
+ # GET /comments.xml
12
+ def index
13
+ if params[:catalog_id]
14
+ @response, @documents = get_solr_response_for_field_values("id",params[:catalog_id])
15
+ @document = @documents.first
16
+ end
17
+
18
+ @comments = @comments.where(:public => true) if params[:public]
19
+ @comments = @comments.where(:commentable_id => @document.id, :commentable_type => @document.class.to_s) if @document
20
+ @comments = @comments.where(:user_id => params[:user_id]) if params[:user_id]
21
+
22
+ respond_to do |format|
23
+ format.html # index.html.erb
24
+ format.xml { render :xml => @comments }
25
+ end
26
+ end
27
+
28
+ # GET /comments/1
29
+ # GET /comments/1.xml
30
+ def show
31
+ # @comment = Comment.find(params[:id])
32
+
33
+ respond_to do |format|
34
+ format.html # show.html.erb
35
+ format.xml { render :xml => @comment }
36
+ end
37
+ end
38
+
39
+ # GET /comments/new
40
+ # GET /comments/new.xml
41
+ def new
42
+ @response, @documents = get_solr_response_for_field_values("id",params[:catalog_id])
43
+ @document = @documents.first
44
+
45
+ @comment = Comment.new :commentable => @document
46
+
47
+ respond_to do |format|
48
+ format.html # new.html.erb
49
+ format.xml { render :xml => @comment }
50
+ end
51
+ end
52
+
53
+ # GET /comments/1/edit
54
+ def edit
55
+ # @comment = Comment.find(params[:id])
56
+
57
+ end
58
+
59
+ # POST /comments
60
+ # POST /comments.xml
61
+ def create
62
+ @comment = Comment.new(params[:comment])
63
+ @comment.user = current_user
64
+ respond_to do |format|
65
+ if @comment.save
66
+ format.html { redirect_to(@comment) }
67
+ format.xml { render :xml => @comment, :status => :created, :location => @comment }
68
+ else
69
+ format.html { render :action => "new" }
70
+ format.xml { render :xml => @comment.errors, :status => :unprocessable_entity }
71
+ end
72
+ end
73
+ end
74
+
75
+ # PUT /comments/1
76
+ # PUT /comments/1.xml
77
+ def update
78
+ # @comment = Comment.find(params[:id])
79
+
80
+ respond_to do |format|
81
+ if @comment.update_attributes(params[:comment])
82
+ format.html { redirect_to @comment }
83
+ format.xml { head :ok }
84
+ else
85
+ format.html { render :action => "edit" }
86
+ format.xml { render :xml => @comment.errors, :status => :unprocessable_entity }
87
+ end
88
+ end
89
+ end
90
+
91
+ # DELETE /comments/1
92
+ # DELETE /comments/1.xml
93
+ def destroy
94
+ # @comment = Comment.find(params[:id])
95
+ @comment.destroy
96
+
97
+ respond_to do |format|
98
+ format.html { redirect_to @comment }
99
+ format.xml { head :ok }
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,73 @@
1
+ class TagsController < ApplicationController
2
+ include Blacklight::SolrHelper
3
+
4
+ def index
5
+ @response, @documents = get_solr_response_for_field_values("id",params[:catalog_id])
6
+ @document = @documents.first
7
+
8
+ @tags = @document.owner_tag_list_on(nil, :tags)
9
+
10
+ respond_to do |format|
11
+ format.html
12
+ end
13
+ end
14
+
15
+ def show
16
+ @response, @documents = get_solr_response_for_field_values("id",params[:catalog_id])
17
+ @document = @documents.first
18
+
19
+ @tags = @document.owner_tag_list_on(nil, :tags)
20
+
21
+ respond_to do |format|
22
+ format.html
23
+ end
24
+ end
25
+
26
+ def new
27
+ @response, @documents = get_solr_response_for_field_values("id",params[:catalog_id])
28
+ @document = @documents.first
29
+
30
+ @tags = @document.owner_tag_list_on(nil, :tags)
31
+
32
+ respond_to do |format|
33
+ format.html
34
+ end
35
+ end
36
+
37
+ def edit
38
+ @tag = ActsAsTaggableOn::Tag.find_by_name(params[:id])
39
+
40
+ respond_to do |format|
41
+ format.html
42
+ end
43
+ end
44
+
45
+ def create
46
+ @response, @documents = get_solr_response_for_field_values("id",params[:catalog_id])
47
+ @document = @documents.first
48
+
49
+ #@document.tag_list << params[:tags].split(",").map(&:strip)
50
+ if current_user
51
+ current_user.tag(@document, :with => params[:tags], :on => 'tags')
52
+ else
53
+ User.new.tag(@document, :with => params[:tags], :on => 'tags')
54
+ end
55
+ @document.save rescue nil
56
+
57
+ respond_to do |format|
58
+ format.html { redirect_to new_catalog_tags_path(:catalog_id => @document.id) }
59
+ format.json { render :json => @document.tag_list }
60
+ end
61
+ end
62
+
63
+ def update
64
+ @response, @documents = get_solr_response_for_field_values("id",params[:catalog_id])
65
+ @document = @documents.first
66
+
67
+ end
68
+
69
+ def destroy
70
+ @tag = ActsAsTaggableOn::Tag.find_by_name(params[:id])
71
+ @tag.destroy
72
+ end
73
+ end
@@ -0,0 +1,4 @@
1
+ class UserGeneratedContentController < CatalogController
2
+ include UserGeneratedContent::SolrHelper::Scope
3
+ helper UserGeneratedContent::Helper
4
+ end
data/app/models/tag.rb ADDED
@@ -0,0 +1,3 @@
1
+ class Tag < ActsAsTaggableOn::Tag
2
+
3
+ end
@@ -0,0 +1,3 @@
1
+ class Tagging < ActsAsTaggableOn::Tagging
2
+
3
+ end
@@ -0,0 +1,17 @@
1
+ <%= content_tag :li, :class => "comment comment-#{comment.id}" do %>
2
+ <strong><%= comment.title || nil %></strong>
3
+ <div class="byline">
4
+ <% if comment.user %>
5
+ By <%= comment.user.to_s %> at
6
+ <% end %>
7
+ <%= comment.created_at.strftime("%m/%d/%Y") %></div>
8
+ <div class="comment"><%= comment.comment %></div>
9
+
10
+ <% if current_user and comment.user == current_user %>
11
+ <div>
12
+ <%= link_to 'Edit', edit_comment_path(comment) %>
13
+ <%= link_to 'Destroy', comment, :confirm => 'Are you sure?', :method => :delete %>
14
+ </div>
15
+ </li>
16
+ <% end %>
17
+ <% end %>
@@ -0,0 +1,9 @@
1
+ <%= form_for(comment) do |f| %>
2
+ <%= f.hidden_field :commentable_id %>
3
+ <%= f.hidden_field :commentable_type %>
4
+
5
+ <%= f.label :comment, "Body", :class => "ui-helper-hidden-accessible" %>
6
+ <%= f.text_area :comment %>
7
+
8
+ <%= f.submit "Add" %>
9
+ <% end %>
@@ -0,0 +1,2 @@
1
+ <h1>Edit Comment</h1>
2
+ <%= render :partial => 'form', :locals => { :comment => @comment, :document => @comment.commentable } %>
@@ -0,0 +1,5 @@
1
+ <h2>Comments (<%= @comments.length %>)</h2>
2
+
3
+ <ul>
4
+ <%= render :partial => 'comments/comment', :collection => @comments, :as => :comment %>
5
+ </ul>
@@ -0,0 +1,3 @@
1
+ <h1>Add Comment</h1>
2
+ <%= render :partial => 'form', :locals => { :comment => @comment } %>
3
+
@@ -0,0 +1,2 @@
1
+ <h1>Comment</h1>
2
+ <%= render :partial => 'comments/comment', :locals => { :comment => @comment } %>
@@ -0,0 +1 @@
1
+ <%= @tags.join " " %>
@@ -0,0 +1,9 @@
1
+ <div id="new_tag" style="overflow: visible">
2
+ <h1>Add Tag</h1>
3
+ <%= form_for :document, :url => catalog_tags_path(:catalog_id => @document.id), :html => { :method => :post } do |f| %>
4
+ <%= label_tag :tags, 'Use "," to separate each tag.' %>
5
+ <%= text_field_tag :tags %>
6
+ <%= f.submit "Add Tag" %>
7
+ <% end %>
8
+ </div>
9
+ <%= @tags.join ", " %>
@@ -0,0 +1,2 @@
1
+
2
+ <%= @tags.join " " %>
@@ -0,0 +1,17 @@
1
+ <div class="defList_container">
2
+ <div class="blacklight-tags">
3
+ <div class="label">My Tags</div>
4
+ <div class="value">
5
+ <%= document.owner_tag_list_on(current_user, :tags).join(", ") %>
6
+ </div>
7
+ </div>
8
+ <div class="blacklight-comments">
9
+ <div class="label">My Notes</div>
10
+ <div class="value">
11
+ <% document.comments.where(:user_id => current_user.id).each do |c| %>
12
+ <p><span style="display: inline-block; width: 90px"><%= c.created_at.strftime("%m/%d/%Y") %></span><%= truncate(c.comment, :length => 150) %> <%= link_to '[View]', catalog_path(document.id, :anchor=> "comment-#{c.id}") %> </p>
13
+ <% end %>
14
+ </div>
15
+ </div>
16
+
17
+ </div>
@@ -0,0 +1,32 @@
1
+ <% @page_title = application_name + ": My Notes" %>
2
+
3
+ <% extra_head_content << render_opensearch_response_metadata %>
4
+
5
+ <%= render :partial => 'did_you_mean' %>
6
+
7
+ <%= render 'constraints', :localized_params=>params %>
8
+
9
+ <h1>My Notes</h1>
10
+
11
+ <div class="search-results-header">
12
+
13
+ <div class="pageEntriesInfo">
14
+ <%= page_entries_info @response.docs, :entry_name=>'item' %>
15
+ <%=link_to "Start&nbsp;over&thinsp;".html_safe, catalog_index_path, :id=>"startOverLink" %>
16
+ </div>
17
+
18
+ <%= render 'sort_and_per_page' %>
19
+
20
+ <%= render 'results_pagination' %>
21
+ </div>
22
+
23
+
24
+ <%= render_document_list_partial %>
25
+
26
+ <% sidebar_items << capture do %>
27
+ <%= render :partial=>'facets' %>
28
+ <% end %>
29
+
30
+ <%= render 'results_pagination' %>
31
+
32
+
data/config/routes.rb ADDED
@@ -0,0 +1,5 @@
1
+ Rails.application.routes.draw do
2
+ resources :user_generated_content, :only => [:index]
3
+ resources :comments
4
+ resources :tags
5
+ end
@@ -0,0 +1,81 @@
1
+ module BlacklightUserGeneratedContent::ActiveRecordDuckType
2
+
3
+ def self.included base
4
+ # ActiveModel/ActiveRecord stuff
5
+ base.send :include, ActiveModel::Observing
6
+ base.send :extend, ActiveModel::Naming
7
+ base.send :extend, ActiveModel::Callbacks
8
+ base.send :extend, ActiveModel::Observing
9
+ base.send :define_model_callbacks, :destroy, :save
10
+ base.send :include, ActiveRecord::Associations
11
+ base.send :include, ActiveRecord::Reflection
12
+
13
+ # Mock ActiveRecord methods only to the extent required
14
+ base.send :extend, ActiveRecordClassMethods
15
+ base.send :include, ActiveRecordInstanceMethods
16
+ end
17
+
18
+ # ActiveRecord mock methods
19
+ module ActiveRecordClassMethods
20
+ def base_class
21
+ self
22
+ end
23
+
24
+ def primary_key
25
+ :id
26
+ end
27
+
28
+ def compute_type(type_name)
29
+ ActiveSupport::Dependencies.constantize(type_name)
30
+ end
31
+
32
+ def quote_value *args
33
+ ActiveRecord::Base.quote_value *args
34
+ end
35
+
36
+ def table_exists?
37
+ false
38
+ end
39
+ end
40
+
41
+
42
+ # ActiveRecord instance mock methods
43
+ module ActiveRecordInstanceMethods
44
+ def quoted_id
45
+ ActiveRecord::Base.quote_value id
46
+ end
47
+
48
+ def interpolate_sanitized_sql *args
49
+ active_record_model.send :interpolate_sanitized_sql, *args
50
+ end
51
+ def interpolate_and_sanitize_sql *args
52
+ # XXX interpolate_and_sanitize_sql is an ActiveRecord::Base method,
53
+ # XXX rather than create a mock object or something, just use a model we know a priori exists
54
+ active_record_model.send :interpolate_and_sanitize_sql, *args
55
+ end
56
+
57
+ def new_record?
58
+ false
59
+ end
60
+
61
+ def destroyed?
62
+ false
63
+ end
64
+
65
+ def persisted?
66
+ false
67
+ end
68
+
69
+ private
70
+ def active_record_model
71
+ ActsAsTaggableOn::Tag.new
72
+ end
73
+ end
74
+
75
+ def save
76
+ _run_save_callbacks do
77
+ end
78
+ end
79
+
80
+ end
81
+
@@ -0,0 +1,4 @@
1
+ module BlacklightUserGeneratedContent
2
+ module Comment
3
+ end
4
+ end
@@ -0,0 +1,8 @@
1
+ module BlacklightUserGeneratedContent::Commentable
2
+
3
+ # `base` is likely /NOT/ a type of ActiveRecord::Base, the acts_as_commentable plugin is not automatically included
4
+ def self.included base
5
+ base.send :include, Juixe::Acts::Commentable
6
+ base.send :acts_as_commentable
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ module BlacklightUserGeneratedContent
2
+ module Document
3
+ def self.included(base)
4
+ base.send :include, BlacklightUserGeneratedContent::ActiveRecordDuckType
5
+ base.send :extend, BlacklightUserGeneratedContent::Findable
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,19 @@
1
+ require 'blacklight'
2
+ require 'blacklight_user_generated_content'
3
+
4
+ module BlacklightUserGeneratedContent
5
+ class Engine < Rails::Engine
6
+ initializer 'blacklight_user_generated_content.init', :after => 'blacklight.init' do |app|
7
+
8
+ end
9
+
10
+ config.to_prepare do
11
+ # BlacklightUserGeneratedContent.inject!
12
+
13
+ unless BlacklightUserGeneratedContent.omit_inject[:routes]
14
+ Blacklight::Routes.send(:include, BlacklightUserGeneratedContent::RouteSets)
15
+ end
16
+ end
17
+
18
+ end
19
+ end
@@ -0,0 +1,13 @@
1
+ module BlacklightUserGeneratedContent
2
+ module Findable
3
+ # Override RSolr finder method to mock ActiveRecord#find
4
+ # Provide a mock method for #find
5
+ # XXX this seems slightly dangerous as is, but seems to work well enough
6
+ def find *args
7
+ if args.first.is_a? String
8
+ return super(:qt => :document, :id => args.first).first
9
+ end
10
+ super(*args)
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,8 @@
1
+ module BlacklightUserGeneratedContent::Helper
2
+ def render_document_partial doc, action_name
3
+ str = super(doc, action_name)
4
+ str += render :partial => "catalog_ugc/_#{action_name}_partials/ugc", :locals => { :document => doc }
5
+
6
+ str.html_safe
7
+ end
8
+ end
@@ -0,0 +1,16 @@
1
+ module BlacklightUserGeneratedContent
2
+ module RouteSets
3
+ protected
4
+ def catalog
5
+ add_routes do |options|
6
+ resources :catalog, :only => [:index, :show, :update] do
7
+ resources :comments
8
+ resource :tags
9
+ end
10
+ end
11
+
12
+ super
13
+ end
14
+
15
+ end
16
+ end
@@ -0,0 +1,23 @@
1
+ module BlacklightUserGeneratedContent
2
+ module SolrHelper
3
+ module Scope
4
+ def self.included(some_class)
5
+ some_class.solr_search_params_logic << :restrict_to_user_generated_content_scope
6
+ end
7
+
8
+ def restrict_to_user_generated_content_scope solr_parameters, user_parameters
9
+ solr_parameters[:fq] ||= []
10
+ if current_user
11
+ if current_user.has_role? :admin and user_params[:all]
12
+ solr_parameters[:fq] << "comments_ids_i:[* TO *]"
13
+ else
14
+ solr_parameters[:fq] << "comments_user_ids_i:#{current_user.id} OR tags_user_ids_i:#{current_user.id}"
15
+ end
16
+ else
17
+ solr_parameters[:fq] << "comments_public_b:true"
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+
@@ -0,0 +1,5 @@
1
+ module BlacklightUserGeneratedContent
2
+ module SolrHelper
3
+
4
+ end
5
+ end
@@ -0,0 +1,8 @@
1
+ require 'acts-as-taggable-on'
2
+ module BlacklightUserGeneratedContent::Taggable
3
+ # `base` is likely /NOT/ a type of ActiveRecord::Base, the acts_as_taggable_on plugin is not automatically included
4
+ def self.included base
5
+ base.send :extend, ActsAsTaggableOn::Taggable
6
+ base.send :acts_as_taggable_on, :tags
7
+ end
8
+ end
@@ -0,0 +1,27 @@
1
+ require 'cancan'
2
+ require 'acts_as_commentable'
3
+ require 'acts-as-taggable-on'
4
+
5
+ module BlacklightUserGeneratedContent
6
+ autoload :ActiveRecordDuckType, 'blacklight_user_generated_content/active_record_duck_type'
7
+ autoload :Findable, 'blacklight_user_generated_content/findable'
8
+ autoload :Document, 'blacklight_user_generated_content/document'
9
+ autoload :SolrHelper, 'blacklight_user_generated_content/solr_helper'
10
+ autoload :Taggable, 'blacklight_user_generated_content/taggable'
11
+ autoload :Commentable, 'blacklight_user_generated_content/commentable'
12
+ autoload :Comment, 'blacklight_user_generated_content/comment'
13
+ autoload :RouteSets, 'blacklight_user_generated_content/route_sets'
14
+
15
+ require 'blacklight_user_generated_content/engine' if defined?(Rails)
16
+
17
+ @omit_inject = {}
18
+
19
+ def self.omit_inject=(value)
20
+ value = Hash.new(true) if value == true
21
+ @omit_inject = value
22
+ end
23
+
24
+ def self.omit_inject ; @omit_inject ; end
25
+
26
+
27
+ end
@@ -0,0 +1,63 @@
1
+ require 'rails/generators'
2
+ require 'rails/generators/base'
3
+ require 'rails/generators/migration'
4
+
5
+ class BlacklightUserGeneratedContentGenerator < Rails::Generators::Base
6
+ include Rails::Generators::Migration
7
+ source_root File.expand_path('../templates', __FILE__)
8
+
9
+ # Implement the required interface for Rails::Generators::Migration.
10
+ # taken from http://github.com/rails/rails/blob/master/activerecord/lib/generators/active_record.rb
11
+ def self.next_migration_number(dirname)
12
+ if ActiveRecord::Base.timestamped_migrations
13
+ Time.now.utc.strftime("%Y%m%d%H%M%S")
14
+ else
15
+ "%.3d" % (current_migration_number(dirname) + 1)
16
+ end
17
+ end
18
+
19
+ desc """
20
+ """
21
+ def generate_cancan_ability
22
+ generate "cancan:ability"
23
+ end
24
+
25
+ def inject_comments_roles
26
+ inject_into_file "app/models/ability.rb", :after => "def initialize(user)" do
27
+ <<-EOF
28
+
29
+ user ||= User.new
30
+
31
+ can :read, Comment
32
+ can :create, Comment
33
+ can :manage, Comment, :user_id => user.id
34
+ EOF
35
+ end
36
+ end
37
+
38
+ def generate_acts_as_taggable_migrations
39
+ generate "acts_as_taggable_on:migration"
40
+ end
41
+
42
+ def update_taggable_id_to_string_migration
43
+ migration_template 'alter_taggable_id_to_string.rb', 'db/migrate/alter_taggable_id_to_string.rb'
44
+ end
45
+
46
+ def generate_acts_as_commentable_migrations
47
+ generate "comment"
48
+ end
49
+
50
+ def add_comment_mixin
51
+ inject_into_file "app/models/comment.rb", :after => "include ActsAsCommentable::Comment" do
52
+ "\ninclude BlacklightUserGeneratedContent::Comment"
53
+ end
54
+ end
55
+
56
+ def add_document_mixin
57
+ inject_into_file "app/models/solr_document.rb", :after => "include Blacklight::Solr::Document" do
58
+ "\ninclude BlacklightUserGeneratedContent::Document\n" +
59
+ "include BlacklightUserGeneratedContent::Commentable\n" +
60
+ "include BlacklightUserGeneratedContent::Taggable\n"
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,9 @@
1
+ class AlterCommentableIdToString < ActiveRecord::Migration
2
+ def self.up
3
+ change_column :comments, :commentable_id, :string
4
+ end
5
+
6
+ def self.down
7
+ change_column :comments, :commentable_id, :integer
8
+ end
9
+ end
@@ -0,0 +1,13 @@
1
+ class AlterTaggableIdToString < ActiveRecord::Migration
2
+ def self.up
3
+ remove_index :taggings, [:taggable_id, :taggable_type, :context]
4
+ change_column :taggings, :taggable_id, :string
5
+ add_index :taggings, [:taggable_id, :taggable_type, :context]
6
+ end
7
+
8
+ def self.down
9
+ remove_index :taggings, [:taggable_id, :taggable_type, :context]
10
+ change_column :taggings, :taggable_id, :integer
11
+ add_index :taggings, [:taggable_id, :taggable_type, :context]
12
+ end
13
+ end
metadata ADDED
@@ -0,0 +1,186 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: blacklight_user_generated_content
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors: []
13
+
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-06-05 00:00:00 -04:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: rails
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ hash: 7
30
+ segments:
31
+ - 3
32
+ - 0
33
+ version: "3.0"
34
+ type: :runtime
35
+ version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
37
+ name: blacklight
38
+ prerelease: false
39
+ requirement: &id002 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ hash: 3
45
+ segments:
46
+ - 0
47
+ version: "0"
48
+ type: :runtime
49
+ version_requirements: *id002
50
+ - !ruby/object:Gem::Dependency
51
+ name: rsolr-ext
52
+ prerelease: false
53
+ requirement: &id003 !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ hash: 3
59
+ segments:
60
+ - 0
61
+ version: "0"
62
+ type: :runtime
63
+ version_requirements: *id003
64
+ - !ruby/object:Gem::Dependency
65
+ name: cancan
66
+ prerelease: false
67
+ requirement: &id004 !ruby/object:Gem::Requirement
68
+ none: false
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ hash: 3
73
+ segments:
74
+ - 0
75
+ version: "0"
76
+ type: :runtime
77
+ version_requirements: *id004
78
+ - !ruby/object:Gem::Dependency
79
+ name: acts-as-taggable-on
80
+ prerelease: false
81
+ requirement: &id005 !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ hash: 3
87
+ segments:
88
+ - 0
89
+ version: "0"
90
+ type: :runtime
91
+ version_requirements: *id005
92
+ - !ruby/object:Gem::Dependency
93
+ name: acts_as_commentable
94
+ prerelease: false
95
+ requirement: &id006 !ruby/object:Gem::Requirement
96
+ none: false
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ hash: 3
101
+ segments:
102
+ - 0
103
+ version: "0"
104
+ type: :runtime
105
+ version_requirements: *id006
106
+ description: Insert BlacklightUserGeneratedContent description.
107
+ email:
108
+ executables: []
109
+
110
+ extensions: []
111
+
112
+ extra_rdoc_files: []
113
+
114
+ files:
115
+ - app/controllers/comments_controller.rb
116
+ - app/controllers/tags_controller.rb
117
+ - app/controllers/user_generated_content.rb
118
+ - app/models/tag.rb
119
+ - app/models/tagging.rb
120
+ - app/views/comments/_comment.html.erb
121
+ - app/views/comments/_form.html.erb
122
+ - app/views/comments/edit.html.erb
123
+ - app/views/comments/index.html.erb
124
+ - app/views/comments/new.html.erb
125
+ - app/views/comments/show.html.erb
126
+ - app/views/tags/index.html.erb
127
+ - app/views/tags/new.html.erb
128
+ - app/views/tags/show.html.erb
129
+ - app/views/user_generated_content/_index_partials/_ugc.html.erb
130
+ - app/views/user_generated_content/index.html.erb
131
+ - lib/blacklight_user_generated_content/active_record_duck_type.rb
132
+ - lib/blacklight_user_generated_content/comment.rb
133
+ - lib/blacklight_user_generated_content/commentable.rb
134
+ - lib/blacklight_user_generated_content/document.rb
135
+ - lib/blacklight_user_generated_content/engine.rb
136
+ - lib/blacklight_user_generated_content/findable.rb
137
+ - lib/blacklight_user_generated_content/helper.rb
138
+ - lib/blacklight_user_generated_content/route_sets.rb
139
+ - lib/blacklight_user_generated_content/solr_helper/scope.rb
140
+ - lib/blacklight_user_generated_content/solr_helper.rb
141
+ - lib/blacklight_user_generated_content/taggable.rb
142
+ - lib/blacklight_user_generated_content.rb
143
+ - lib/generators/blacklight_user_generated_content/blacklight_user_generated_content_generator.rb
144
+ - lib/generators/blacklight_user_generated_content/templates/alter_commentable_id_to_string.rb
145
+ - lib/generators/blacklight_user_generated_content/templates/alter_taggable_id_to_string.rb
146
+ - config/routes.rb
147
+ - MIT-LICENSE
148
+ - Rakefile
149
+ - Gemfile
150
+ - README.rdoc
151
+ has_rdoc: true
152
+ homepage:
153
+ licenses: []
154
+
155
+ post_install_message:
156
+ rdoc_options: []
157
+
158
+ require_paths:
159
+ - lib
160
+ required_ruby_version: !ruby/object:Gem::Requirement
161
+ none: false
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ hash: 3
166
+ segments:
167
+ - 0
168
+ version: "0"
169
+ required_rubygems_version: !ruby/object:Gem::Requirement
170
+ none: false
171
+ requirements:
172
+ - - ">="
173
+ - !ruby/object:Gem::Version
174
+ hash: 3
175
+ segments:
176
+ - 0
177
+ version: "0"
178
+ requirements: []
179
+
180
+ rubyforge_project:
181
+ rubygems_version: 1.5.3
182
+ signing_key:
183
+ specification_version: 3
184
+ summary: Insert BlacklightUserGeneratedContent summary.
185
+ test_files: []
186
+