hydra-batch-edit 0.3.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9aa49936aaad686723f8044b5fe5db62f0c20313
4
- data.tar.gz: c1507a0f65638c70ee9a422c41bf07a860465d23
3
+ metadata.gz: 17d99ad991e18d8fd90baa75468017f65496ece8
4
+ data.tar.gz: 14778625a5af06ca4abeb453207a59fb13aa5947
5
5
  SHA512:
6
- metadata.gz: bfe58a72a8093bb93f69916241586d9acab16909b7297cae386ad55ad2a9305a925bf11391824b9d2099efde6ee9cdc83ca0285859dbc5c87d7b0d1d202d2ffe
7
- data.tar.gz: f20aa72493270f7c1a3a0ce9944e73869d09f12f156f04208b73ff487edb4bdbc48735aa0e8cb8768d7c84b3c0264f69bdefd054a22bcc13cf926b9dd62024cb
6
+ metadata.gz: f041d1f2f3b7b86a656a728898fcbb15eebb31883200d709a31badc40b87ed53daab06b1f98af22612c8f9766e7b34a9cf3e990aa36cf51f1a692608ae3e065f
7
+ data.tar.gz: af4af94ac779069f2cba5d00d446a330d55e2ec37e34d71c8d4274f8f39b09b3d7cddf22acb5acd4748f31b630473ecf5f91dcf2bcf2c9dc8933a9b1a54feaa2
data/README.textile CHANGED
@@ -21,7 +21,9 @@ The main thrust of the re-usable functionality this gem aims to provide:
21
21
  # Before applying the submitted updates, the before_filter in the controller checks (again) that Jackie has edit permissions for everything in the batch
22
22
  # The BatchUpdatesController#update method applies Jackie's changes to each of the objects in the batch
23
23
 
24
- *Note* The batches are tracked as a list of pids _in the user session_. They are not persisted.
24
+ *Note* As of version 1.0.0 The batches are tracke using the batches behavior in hydra-collections. They are not persisted between page changes and only exist on the current page.
25
+
26
+ *Note* Version 0.3.1 and previous The batches are tracked as a list of pids _in the user session_. They are not persisted.
25
27
 
26
28
  h2. Installing
27
29
 
@@ -51,6 +53,7 @@ In your Gemfile, add
51
53
  h2. Dependencies
52
54
 
53
55
  hydra-head
56
+ hydra-collections
54
57
  bootstrap
55
58
  blacklight.js
56
59
  coffeescript & scss
@@ -107,7 +110,8 @@ Example app/views/batch_edit/edit.html.erb
107
110
  <%= f.label :access_policy, "Access Policy:" %>
108
111
  <%= f.select :access_policy, ... %>
109
112
 
110
- <%= f.submit "Save changes", :class=>'btn btn-primary'%>
113
+ <%# note the class submits-batches causes the batch ids to be returned with the updates %>
114
+ <%= f.submit "Save changes", :class=>'submits-batches btn btn-primary'%>
111
115
 
112
116
  <% end %>
113
117
  </pre>
@@ -24,7 +24,7 @@ module BatchEditHelper
24
24
  # Displays the button to select/deselect items for your batch. Call this in the index partial that's rendered for each search result.
25
25
  # @param [Hash] document the Hash (aka Solr hit) for one Solr document
26
26
  def batch_edit_select(document)
27
- render :partial=>'/batch_edits/add_button', :locals=>{:document=>document}
27
+ return button_for_add_to_batch document
28
28
  end
29
29
 
30
30
  # Displays the check all button to select/deselect items for your batch. Put this in your search result page template. We put it in catalog/index.html
@@ -1 +1 @@
1
- <%= button_to label, batch_edit, :confirm => confirm, :method=>:delete, :class=>"btn btn-primary btn-delete hidden", 'data-behavior'=>'batch-edit', :id=>'batch-edit-delete' %>
1
+ <%= button_to label, batch_edit, :confirm => confirm, :method=>:delete, :class=>"btn btn-primary btn-delete hidden submits-batches", 'data-behavior'=>'batch-edit', :id=>'batch-edit-delete' %>
@@ -1 +1 @@
1
- <%= button_to label, edit_batch_edits_path, :method=>:get, :class=>"btn btn-update btn-primary hidden", 'data-behavior'=>'batch-edit', :id=>'batch-edit' %>
1
+ <%= button_to label, edit_batch_edits_path, :method=>:get, :class=>"btn btn-update btn-primary hidden submits-batches", 'data-behavior'=>'batch-edit', :id=>'batch-edit' %>
@@ -20,7 +20,7 @@
20
20
  </div>
21
21
 
22
22
  <div class="form-actions">
23
- <%= f.submit "Save changes", :class=>'btn btn-primary'%>
23
+ <%= f.submit "Save changes", :class=>'btn btn-primary updates-batches'%>
24
24
  </div>
25
25
 
26
26
  <% end %>
@@ -16,6 +16,7 @@ Gem::Specification.new do |gem|
16
16
  gem.version = Hydra::BatchEdit::VERSION
17
17
 
18
18
  gem.add_dependency 'blacklight'
19
+ gem.add_dependency 'hydra-collections'
19
20
 
20
21
  gem.add_development_dependency 'rake'
21
22
  gem.add_development_dependency 'rails'
@@ -1,5 +1,5 @@
1
1
  module Hydra
2
2
  module BatchEdit
3
- VERSION = "0.3.1"
3
+ VERSION = "1.0.0"
4
4
  end
5
5
  end
@@ -1,13 +1,16 @@
1
+ require 'hydra/collections'
2
+
1
3
  module Hydra
2
4
  module BatchEditBehavior
3
5
  extend ActiveSupport::Concern
4
6
 
5
7
  included do
8
+ include Hydra::Collections::AcceptsBatches
9
+
6
10
  before_filter :filter_docs_with_access!, :only=>[:edit, :update, :destroy_collection]
7
11
  before_filter :check_for_empty!, :only=>[:edit, :update, :destroy_collection]
8
12
  end
9
13
 
10
-
11
14
  # fetch the documents that match the ids in the folder
12
15
  def index
13
16
  @response, @documents = get_solr_response_for_field_values("id", batch)
@@ -18,45 +21,9 @@ module Hydra
18
21
  render :json => {"OK" => "OK"}
19
22
  end
20
23
 
21
- # add a document_id to the batch. :id of action is solr doc id
22
- def add
23
- id = params[:id]
24
- raise "Too many items in batch!" if ((batch.to_s.length+id.to_s.length) > 2200) # we are going to overflow our cookie
25
- batch << id if ! batch.include? id
26
- respond_to do |format|
27
- format.html do
28
- redirect_to :back, :notice => "#{params[:title] || "Item"} successfully added to batch"
29
- end
30
- format.js { render :json => batch }
31
- end
32
- end
33
-
34
- # remove a document_id from the batch. :id of action is solr_doc_id
35
- def destroy
36
- batch.delete(params[:id])
37
- respond_to do |format|
38
- format.html do
39
- redirect_to :back, :notice => "#{params[:title] || "Item"} successfully removed from batch"
40
- end
41
- format.js do
42
- render :json => {"OK" => "OK"}
43
- end
44
- end
45
-
46
- end
47
-
48
- # get rid of the items in the batch
49
- def clear
50
- clear_batch!
51
- respond_to do |format|
52
- format.html { redirect_to :back, :notice=> "Batch has been cleared" }
53
- format.js { render :json => batch }
54
- end
55
- end
56
-
57
24
  def edit
58
25
  end
59
-
26
+
60
27
  #pulled out to allow a user to override the default redirect
61
28
  def after_update
62
29
  redirect_to catalog_index_path
@@ -75,7 +42,6 @@ module Hydra
75
42
  obj.save
76
43
  end
77
44
  flash[:notice] = "Batch update complete"
78
- clear_batch!
79
45
  after_update
80
46
  end
81
47
 
@@ -98,48 +64,13 @@ module Hydra
98
64
  obj.destroy
99
65
  end
100
66
  flash[:notice] = "Batch delete complete"
101
- clear_batch!
102
67
  after_destroy_collection
103
68
  end
104
-
105
- def check_for_empty?
106
- return batch.empty?
107
- end
108
-
109
- protected
110
-
111
- def batch
112
- session[:batch_document_ids] ||= []
113
- end
114
-
115
- def batch=(val)
116
- session[:batch_document_ids] = val
117
- end
118
-
119
-
120
- def clear_batch!
121
- self.batch = []
122
- end
123
-
124
- def check_for_empty!
125
- if batch.empty?
126
- redirect_to :back
127
- return false
128
- end
129
- end
130
69
 
131
- def filter_docs_with_access!
132
- no_permissions = []
133
- if batch.empty?
134
- flash[:notice] = "Select something first"
135
- else
136
- batch.dup.each do |doc_id|
137
- unless can?(:edit, doc_id)
138
- session[:batch_document_ids].delete(doc_id)
139
- no_permissions << doc_id
140
- end
141
- end
142
- flash[:notice] = "You do not have permission to edit the documents: #{no_permissions.join(', ')}" unless no_permissions.empty?
70
+ def check_for_empty!
71
+ if check_for_empty_batch?
72
+ redirect_to :back
73
+ return false
143
74
  end
144
75
  end
145
76
 
@@ -13,52 +13,6 @@ describe BatchEditsController do
13
13
  it "should respond to after_delete" do
14
14
  controller.respond_to? "after_delete"
15
15
  end
16
- it "should add items to list" do
17
- @mock_response = mock()
18
- @mock_document = mock()
19
- @mock_document2 = mock()
20
- @mock_document.stub(:export_formats => {})
21
- controller.stub(:get_solr_response_for_field_values => [@mock_response, [@mock_document, @mock_document2]])
22
-
23
- put :add, :id =>"77826928"
24
- session[:batch_document_ids].length.should == 1
25
- put :add, :id => "94120425"
26
- session[:batch_document_ids].length.should == 2
27
- session[:batch_document_ids].should include("77826928")
28
- get :index
29
- assigns[:documents].length.should == 2
30
- assigns[:documents].first.should == @mock_document
31
- end
32
- it "should delete an item from list" do
33
- put :add, :id =>"77826928"
34
- put :add, :id => "94120425"
35
- delete :destroy, :id =>"77826928"
36
- session[:batch_document_ids].length.should == 1
37
- session[:batch_document_ids].should_not include("77826928")
38
- end
39
- it "should clear list" do
40
- put :add, :id =>"77826928"
41
- put :add, :id => "94120425"
42
- put :clear
43
- session[:batch_document_ids].length.should == 0
44
- end
45
-
46
- it "should generate flash messages for normal requests" do
47
- put :add, :id => "77826928"
48
- flash[:notice].length.should_not == 0
49
- end
50
- it "should clear flash messages after xhr request" do
51
- xhr :put, :add, :id => "77826928"
52
- flash[:notice].should == nil
53
- end
54
-
55
- it "should check for empty" do
56
- put :add, :id =>"77826928"
57
- put :add, :id => "94120425"
58
- controller.check_for_empty?.should == false
59
- put :clear
60
- controller.check_for_empty?.should == true
61
- end
62
16
 
63
17
  describe "edit" do
64
18
  before do
@@ -68,8 +22,7 @@ describe BatchEditsController do
68
22
  @two.save
69
23
  end
70
24
  it "should draw the form" do
71
- put :add, :id =>@one.pid
72
- put :add, :id =>@two.pid
25
+ controller.batch = [@one.pid, @two.pid]
73
26
  controller.should_receive(:can?).with(:edit, @one.pid).and_return(true)
74
27
  controller.should_receive(:can?).with(:edit, @two.pid).and_return(true)
75
28
  get :edit
@@ -95,8 +48,7 @@ describe BatchEditsController do
95
48
  flash[:notice].should == "Select something first"
96
49
  end
97
50
  it "should not update when the user doesn't have permissions" do
98
- put :add, :id =>@one.pid
99
- put :add, :id => @two.pid
51
+ controller.batch = [@one.pid, @two.pid]
100
52
  controller.should_receive(:can?).with(:edit, @one.pid).and_return(false)
101
53
  controller.should_receive(:can?).with(:edit, @two.pid).and_return(false)
102
54
  put :update, :multiresimage=>{:titleSet_display=>'My title' }
@@ -107,8 +59,7 @@ describe BatchEditsController do
107
59
  before do
108
60
  @one.save
109
61
  @two.save
110
- put :add, :id =>@one.pid
111
- put :add, :id => @two.pid
62
+ controller.batch = [@one.pid, @two.pid]
112
63
  controller.should_receive(:can?).with(:edit, @one.pid).and_return(true)
113
64
  controller.should_receive(:can?).with(:edit, @two.pid).and_return(true)
114
65
  ActiveFedora::Base.should_receive(:find).with( @one.pid, :cast=>true).and_return(@one)
@@ -145,8 +96,7 @@ describe BatchEditsController do
145
96
  flash[:notice].should == "Select something first"
146
97
  end
147
98
  it "should not update when the user doesn't have permissions" do
148
- put :add, :id =>@one.pid
149
- put :add, :id => @two.pid
99
+ controller.batch = [@one.pid, @two.pid]
150
100
  controller.should_receive(:can?).with(:edit, @one.pid).and_return(false)
151
101
  controller.should_receive(:can?).with(:edit, @two.pid).and_return(false)
152
102
  delete :destroy_collection
@@ -157,8 +107,7 @@ describe BatchEditsController do
157
107
  before do
158
108
  @one.save
159
109
  @two.save
160
- put :add, :id =>@one.pid
161
- put :add, :id => @two.pid
110
+ controller.batch = [@one.pid, @two.pid]
162
111
  controller.should_receive(:can?).with(:edit, @one.pid).and_return(true)
163
112
  controller.should_receive(:can?).with(:edit, @two.pid).and_return(true)
164
113
  ActiveFedora::Base.should_receive(:find).with( @one.pid, :cast=>true).and_return(@one)
@@ -197,12 +146,12 @@ describe BatchEditsController do
197
146
  it "should add every document in the current resultset to the batch" do
198
147
  put :all
199
148
  response.should redirect_to edit_batch_edits_path
200
- session[:batch_document_ids].should == [123, 456]
149
+ controller.batch = [123, 456]
201
150
  end
202
151
  it "ajax should add every document in the current resultset to the batch but not redirect" do
203
152
  xhr :put, :all
204
153
  response.should_not redirect_to edit_batch_edits_path
205
- session[:batch_document_ids].should == [123, 456]
154
+ controller.batch = [123, 456]
206
155
  end
207
156
  end
208
157
 
data/spec/support/Gemfile CHANGED
@@ -7,7 +7,7 @@ gem 'rails'
7
7
 
8
8
  gem 'sqlite3'
9
9
  gem 'hydra-head'
10
-
10
+ gem 'hydra-collections'
11
11
 
12
12
  # Gems used only for assets and not required
13
13
  # in production environments by default.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hydra-batch-edit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Coyne
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-04-16 00:00:00.000000000 Z
12
+ date: 2013-05-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: blacklight
@@ -25,6 +25,20 @@ dependencies:
25
25
  - - '>='
26
26
  - !ruby/object:Gem::Version
27
27
  version: '0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: hydra-collections
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - '>='
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
28
42
  - !ruby/object:Gem::Dependency
29
43
  name: rake
30
44
  requirement: !ruby/object:Gem::Requirement
@@ -83,7 +97,6 @@ files:
83
97
  - app/assets/stylesheets/batch_edit.css.scss
84
98
  - app/controllers/batch_edits_controller.rb
85
99
  - app/helpers/batch_edit_helper.rb
86
- - app/views/batch_edits/_add_button.html.erb
87
100
  - app/views/batch_edits/_check_all.html.erb
88
101
  - app/views/batch_edits/_delete_batch.html.erb
89
102
  - app/views/batch_edits/_next_page.html.erb
@@ -1,28 +0,0 @@
1
- <div data-behavior="batch-add-button">
2
- <% if can? :edit, document.id %>
3
-
4
- <%-
5
- # pass in local :document with a SolrDocument
6
- if item_in_batch?(document.id)
7
- method = :delete
8
- label = 'remove from batch'
9
- cssClass = "deleteBatch"
10
- action = "destroy"
11
- else
12
- method = :put
13
- label = 'add to batch'
14
- cssClass = "addBatch"
15
- action = "add"
16
- end
17
- -%>
18
-
19
- <%= form_tag({:controller => "batch_edits", :action => action, :id => document.id}, :method => method, :class=> "batch_toggle #{cssClass}", "data-doc-id" => document.id, "data-behavior" => 'batch-add-form', :title=>h(document[document_show_link_field])) do -%>
20
- <%= hidden_field(:bookmark, :title, :value => document[document_show_link_field]) %>
21
- <%= submit_tag(label, :class=>"batch_submit", :id => "batch_submit_#{document.id}") %>
22
- <% end %>
23
-
24
- <% else %>
25
- <br><span class="label label-warning">You don't have edit access</label>
26
- <% end %>
27
- </div>
28
-