hydra-editor 0.1.1 → 0.2.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 79829b582cd67317fe3dd9ca93973022d5faf33f
4
- data.tar.gz: 800b69b756b5029c4b4cce692f2cc80fcc0a384d
3
+ metadata.gz: 7d4df6ff1905911d18d55cf3a29f90110ed2e9f6
4
+ data.tar.gz: 6fe5727b88830e9bffdeb14def5086b424a879c6
5
5
  SHA512:
6
- metadata.gz: ffb00e067dd04edaec73fd812c96a91cfbbda411a65964abc4bda920a5fa5780bfcbfdaf34cf3dcbd4611d2cd3f8c3c08195dbd16ce2bb40c409c1efc060599c
7
- data.tar.gz: d3f8175ab883da5c33469042958b7ae017a415d0c0a11e6599e4c1ad04a25477c47d4e06175ecc0dcaaf14c1eb66d1c4ef01daf13a9f997073b8a06383039e2a
6
+ metadata.gz: eea2175ee9783b6da57c28fe8ba8bb74ede02a8bf324a5f7e2c3770755e5472a01e49f6b2783e2483b07958b9a8ab9038693d9fd46d855152bcee411cfa2abad
7
+ data.tar.gz: c3ae9b2431484a4c62c5b8302614ab587ebd3e56c0e55baf6f181015dc3b9e07031e0b07bcba4c520e197e2be20b20c62d452888284dd3d208dac4ee08a686ca
data/History.md ADDED
@@ -0,0 +1,11 @@
1
+ # History of hydra-editor releases
2
+
3
+ ## 0.0.2
4
+ * Requiring active-fedora >= 6.3.0 in order to have the .required? method on ActiveFedora::Base:q
5
+
6
+ ## 0.1.0
7
+ * RecordsControllerBehavior made more easily reusable outside of RecordsController.
8
+
9
+ ### 0.1.1
10
+ * Correctly account for modifications made by initialize_fields when processing form data. Fixes #14.
11
+
data/README.md CHANGED
@@ -1,4 +1,5 @@
1
- # HydraEditor [![Gem Version](https://badge.fury.io/rb/hydra-editor.png)](http://badge.fury.io/rb/hydra-editor)
1
+ # HydraEditor [![Gem Version](https://badge.fury.io/rb/hydra-editor.png)](http://badge.fury.io/rb/hydra-editor) [![Build Status](https://travis-ci.org/projecthydra/hydra-editor.png)](https://travis-ci.org/projecthydra/hydra-editor)
2
+
2
3
 
3
4
  To use add to your gemfile:
4
5
 
data/Rakefile CHANGED
@@ -35,27 +35,20 @@ desc "Generate the dummy app"
35
35
  task :setup do
36
36
  unless File.exists?("#{dummy}/Rakefile")
37
37
  `rails new #{dummy}`
38
- `cp -r spec/support/Gemfile #{dummy}/`
39
38
  `cp -r spec/support/lib/generators #{dummy}/lib`
40
39
  Dir.chdir(dummy) do
41
- sh "rails g blacklight --devise"
42
- sh "rails g hydra:head -f"
43
- sh "rm spec/models/user_spec.rb" # generated by devise
44
- puts "Generating test app"
40
+ puts "Generating test app ..."
45
41
  sh "rails generate test_app"
46
- puts "running migrations"
47
- sh 'rake db:migrate db:test:prepare'
48
- sh "touch public/test.html" # for spec/features/record_editing_spec.rb
42
+ sh "touch public/test.html" # for spec/features/record_editing_spec.rb
49
43
  end
50
44
  end
51
45
  end
52
46
 
53
- desc "Run the spec tests"
54
- task :spec => :setup do
55
- here = File.expand_path("../", __FILE__)
56
- Dir.chdir(dummy) do
57
- Bundler.with_clean_env do
58
- sh "bundle exec rspec --color -I#{here}/spec #{here}/spec"
59
- end
60
- end
47
+ require 'rspec/core/rake_task'
48
+
49
+ RSpec::Core::RakeTask.new(:spec => :setup) do |t|
50
+ t.pattern = 'spec/**/*_spec.rb'
61
51
  end
52
+
53
+
54
+ task :default => :spec
@@ -1,18 +1,24 @@
1
1
  module RecordsControllerBehavior
2
2
  extend ActiveSupport::Concern
3
-
3
+
4
4
  included do
5
- before_filter :load_and_authorize_record, only: [:edit, :update]
6
- end
5
+ load_and_authorize_resource only: [:new, :edit, :update, :create], instance_name: resource_instance_name
7
6
 
8
- def new
9
- authorize! :create, ActiveFedora::Base
10
- unless has_valid_type?
7
+ rescue_from HydraEditor::InvalidType do
11
8
  render 'records/choose_type'
12
- return
13
9
  end
10
+ end
14
11
 
15
- @record = params[:type].constantize.new
12
+ module ClassMethods
13
+ def cancan_resource_class
14
+ HydraEditor::ControllerResource
15
+ end
16
+ def resource_instance_name
17
+ name.sub("Controller", "").underscore.split('/').last.singularize
18
+ end
19
+ end
20
+
21
+ def new
16
22
  initialize_fields
17
23
  render 'records/new'
18
24
  end
@@ -23,23 +29,15 @@ module RecordsControllerBehavior
23
29
  end
24
30
 
25
31
  def create
26
- authorize! :create, ActiveFedora::Base
27
- unless has_valid_type?
28
- redirect_to(respond_to?(:hydra_editor) ? hydra_editor.new_record_path : new_record_path, flash: {error: "Lost the type"})
29
- return
30
- end
31
- @record = params[:type].constantize.new
32
32
  set_attributes
33
33
 
34
34
  respond_to do |format|
35
- if @record.save
35
+ if resource.save
36
36
  format.html { redirect_to redirect_after_create, notice: 'Object was successfully created.' }
37
- # ActiveFedora::Base#to_json causes a circular reference. Do something easy
38
- data = @record.terms_for_editing.inject({}) { |h,term| h[term] = @record[term]; h }
39
- format.json { render json: data, status: :created, location: redirect_after_create }
37
+ format.json { render json: object_as_json, status: :created, location: redirect_after_create }
40
38
  else
41
39
  format.html { render action: "new" }
42
- format.json { render json: @record.errors, status: :unprocessable_entity }
40
+ format.json { render json: resource.errors, status: :unprocessable_entity }
43
41
  end
44
42
  end
45
43
 
@@ -48,50 +46,44 @@ module RecordsControllerBehavior
48
46
  def update
49
47
  set_attributes
50
48
  respond_to do |format|
51
- if @record.save
49
+ if resource.save
52
50
  format.html { redirect_to redirect_after_update, notice: 'Object was successfully updated.' }
53
51
  format.json { head :no_content }
54
52
  else
55
53
  format.html { render action: "edit" }
56
- format.json { render json: @record.errors, status: :unprocessable_entity }
54
+ format.json { render json: resource.errors, status: :unprocessable_entity }
57
55
  end
58
56
  end
59
57
  end
60
58
 
61
59
  protected
62
60
 
63
- def load_and_authorize_record
64
- load_record
65
- authorize_record!
66
- end
67
-
68
- def load_record
69
- @record = ActiveFedora::Base.find(params[:id], cast: true)
70
- end
71
-
72
- def authorize_record!
73
- authorize! params[:action].to_sym, @record
61
+ def object_as_json
62
+ # ActiveFedora::Base#to_json causes a circular reference (before 7.0). Do something easy
63
+ resource.terms_for_editing.each_with_object({}) { |term, h| h[term] = resource[term] }
74
64
  end
75
65
 
76
66
  # Override this method if you want to set different metadata on the object
77
67
  def set_attributes
78
- @record.attributes = collect_form_attributes
68
+ resource.attributes = collect_form_attributes
79
69
  end
80
70
 
81
71
  def collect_form_attributes
82
- attributes = params[ActiveModel::Naming.singular(@record)]
72
+ raw_attributes = params[ActiveModel::Naming.singular(resource)]
73
+ # we could probably do this with strong parameters if the gemspec depends on Rails 4+
74
+ permitted_attributes = resource.terms_for_editing.each_with_object({}) { |key, attrs| attrs[key] = raw_attributes[key] if raw_attributes[key] }
83
75
  # removes attributes that were only changed by initialize_fields
84
- attributes.reject { |key, value| @record[key].empty? and value == [""] }
76
+ permitted_attributes.reject { |key, value| resource[key].empty? and value == [""] }
85
77
  end
86
78
 
87
79
  # Override to redirect to an alternate location after create
88
80
  def redirect_after_create
89
- main_app.catalog_path @record
81
+ main_app.catalog_path resource
90
82
  end
91
83
 
92
84
  # Override to redirect to an alternate location after update
93
85
  def redirect_after_update
94
- main_app.catalog_path @record
86
+ main_app.catalog_path resource
95
87
  end
96
88
 
97
89
  def has_valid_type?
@@ -99,9 +91,24 @@ module RecordsControllerBehavior
99
91
  end
100
92
 
101
93
  def initialize_fields
102
- @record.terms_for_editing.each do |key|
94
+ resource.terms_for_editing.each do |key|
103
95
  # if value is empty, we create an one element array to loop over for output
104
- @record[key] = [''] if @record[key].empty?
96
+ resource[key] = [''] if resource[key].empty?
105
97
  end
106
98
  end
99
+
100
+ def resource
101
+ get_resource_ivar
102
+ end
103
+
104
+ # Get resource ivar based on the current resource controller.
105
+ #
106
+ def get_resource_ivar #:nodoc:
107
+ instance_variable_get("@#{resource_instance_name}")
108
+ end
109
+
110
+ def resource_instance_name
111
+ self.class.resource_instance_name
112
+ end
113
+
107
114
  end
data/config/routes.rb CHANGED
@@ -1,4 +1,3 @@
1
1
  HydraEditor::Engine.routes.draw do
2
2
  resources :records, only: [:new, :edit, :create, :update], :constraints => { :id => /[a-zA-Z0-9_.:]+/ }
3
-
4
3
  end
data/lib/hydra-editor.rb CHANGED
@@ -1,7 +1,15 @@
1
+ require "cancan"
1
2
  require "hydra_editor/engine"
2
3
  require "bootstrap_forms"
3
4
 
4
5
  module HydraEditor
6
+
7
+ class InvalidType < RuntimeError; end
8
+
9
+ extend ActiveSupport::Autoload
10
+
11
+ autoload :ControllerResource
12
+
5
13
  def self.models= val
6
14
  @models = val
7
15
  end
@@ -9,4 +17,8 @@ module HydraEditor
9
17
  def self.models
10
18
  @models ||= []
11
19
  end
20
+
21
+ def self.valid_model?(type)
22
+ models.include? type
23
+ end
12
24
  end
@@ -0,0 +1,18 @@
1
+ class HydraEditor::ControllerResource < CanCan::ControllerResource
2
+ def find_resource
3
+ ActiveFedora::Base.find(id_param, cast: true)
4
+ end
5
+
6
+ def resource_class
7
+ raise HydraEditor::InvalidType, "Lost the type" unless has_valid_type?
8
+ type_param.constantize
9
+ end
10
+
11
+ def has_valid_type?
12
+ HydraEditor.valid_model? type_param
13
+ end
14
+
15
+ def type_param
16
+ @params[:type]
17
+ end
18
+ end
@@ -1,8 +1,10 @@
1
1
  module HydraEditor
2
2
  class Engine < ::Rails::Engine
3
3
  engine_name 'hydra_editor'
4
- config.paths.add "app/helpers/concerns", eager_load: true
5
- config.paths.add "app/controllers/concerns", eager_load: true
6
- config.paths.add "app/models/concerns", eager_load: true
4
+ config.autoload_paths += %W(
5
+ #{config.root}/app/helpers/concerns
6
+ #{config.root}/app/controllers/concerns
7
+ #{config.root}/app/models/concerns
8
+ )
7
9
  end
8
10
  end
@@ -1,3 +1,3 @@
1
1
  module HydraEditor
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hydra-editor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Coyne
8
+ - David Chandek-Stark
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2013-11-06 00:00:00.000000000 Z
12
+ date: 2014-01-02 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: rails
@@ -87,21 +88,7 @@ dependencies:
87
88
  - !ruby/object:Gem::Version
88
89
  version: '0'
89
90
  - !ruby/object:Gem::Dependency
90
- name: capybara
91
- requirement: !ruby/object:Gem::Requirement
92
- requirements:
93
- - - '>='
94
- - !ruby/object:Gem::Version
95
- version: '0'
96
- type: :development
97
- prerelease: false
98
- version_requirements: !ruby/object:Gem::Requirement
99
- requirements:
100
- - - '>='
101
- - !ruby/object:Gem::Version
102
- version: '0'
103
- - !ruby/object:Gem::Dependency
104
- name: sqlite3
91
+ name: factory_girl_rails
105
92
  requirement: !ruby/object:Gem::Requirement
106
93
  requirements:
107
94
  - - '>='
@@ -115,7 +102,7 @@ dependencies:
115
102
  - !ruby/object:Gem::Version
116
103
  version: '0'
117
104
  - !ruby/object:Gem::Dependency
118
- name: blacklight
105
+ name: capybara
119
106
  requirement: !ruby/object:Gem::Requirement
120
107
  requirements:
121
108
  - - '>='
@@ -156,9 +143,9 @@ dependencies:
156
143
  - - '>='
157
144
  - !ruby/object:Gem::Version
158
145
  version: '0'
159
- description: A basic Dublin Core metadata editor for hydra-head
146
+ description: A basic metadata editor for hydra-head
160
147
  email:
161
- - justin@curationexperts.com
148
+ - hydra-tech@googlegroups.com
162
149
  executables: []
163
150
  extensions: []
164
151
  extra_rdoc_files: []
@@ -182,11 +169,13 @@ files:
182
169
  - config/locales/hydra_editor.yml
183
170
  - config/routes.rb
184
171
  - lib/hydra-editor.rb
172
+ - lib/hydra_editor/controller_resource.rb
185
173
  - lib/hydra_editor/engine.rb
186
174
  - lib/hydra_editor/version.rb
187
175
  - lib/tasks/hydra-editor_tasks.rake
188
176
  - Rakefile
189
177
  - README.md
178
+ - History.md
190
179
  homepage: http://github.com/projecthydra/hydra-editor
191
180
  licenses: []
192
181
  metadata: {}
@@ -206,8 +195,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
206
195
  version: '0'
207
196
  requirements: []
208
197
  rubyforge_project:
209
- rubygems_version: 2.0.6
198
+ rubygems_version: 2.1.11
210
199
  signing_key:
211
200
  specification_version: 4
212
- summary: A basic Dublin Core metadata editor for hydra-head
201
+ summary: A basic metadata editor for hydra-head
213
202
  test_files: []