hydra-core 9.0.0.rc3 → 9.0.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: 1d78684487930080bec86b38178c7db06a8d5b27
4
- data.tar.gz: f4ff2193e8a2c8bcef376e8c27e38d9d55ba2a4d
3
+ metadata.gz: d3dc0df874f1747bdf07a14695798097af242746
4
+ data.tar.gz: e71228bd90712613105a6f5cd95814ea96869bb7
5
5
  SHA512:
6
- metadata.gz: 919c39a8ce1ef2e19039f6a3d9510e20acf465b313f558814623f8fcb83c43ebf369c79891e52d3a0b9fdd4c357fb8986c4c0b770b2fd549f9e79cdf7621394f
7
- data.tar.gz: 1ab0e63052e322ae86a20d8ad05584ceea032c5a41e3e42b79d7798a7325d10f16f392ac25f1313c9fb5fcc3641fe91975a0d50de65aa6c6d520024b5f19d7da
6
+ metadata.gz: 7c77621d079b9c51f7f697ad91352c2c4568b97d66b7e4f555f53052050fafd45e72d85b3cf8e1c4649d675117e0e463228aebea2b19c49246b658243f62c0fa
7
+ data.tar.gz: 3b89bdaa8d927be310e0a9597c27ac4b9053bf01860de64490a27c60cee2e76778e83e52104f32d2d29e13e181a79ef8931fe9d5366601c1e660362ea2468174
@@ -2,15 +2,17 @@ module Hydra
2
2
  module Controller
3
3
  module DownloadBehavior
4
4
  extend ActiveSupport::Concern
5
+ extend Deprecation
5
6
 
6
7
  included do
7
8
  include Hydra::Controller::ControllerBehavior
9
+ include ActionController::Live
8
10
  before_filter :authorize_download!
9
11
  end
10
12
 
11
- # Responds to http requests to show the datastream
13
+ # Responds to http requests to show the file
12
14
  def show
13
- if datastream.new_record?
15
+ if file.new_record?
14
16
  render_404
15
17
  else
16
18
  send_content
@@ -34,7 +36,7 @@ module Hydra
34
36
 
35
37
  # Customize the :download ability in your Ability class, or override this method
36
38
  def authorize_download!
37
- authorize! :download, datastream
39
+ authorize! :download, file
38
40
  end
39
41
 
40
42
  def asset
@@ -42,19 +44,34 @@ module Hydra
42
44
  end
43
45
 
44
46
  def datastream
45
- @ds ||= datastream_to_show
47
+ Deprecation.warn(DownloadBehavior, "datastream is deprecated and will be removed in hydra-head 10.0. Use `file` instead.")
48
+ file
46
49
  end
47
50
 
48
- # Override this method to change which datastream is shown.
49
- # Loads the file specified by the HTTP parameter `:datastream_id`.
50
- # If this object does not have a datastream by that name, return the default datastream
51
- # as returned by {#default_content_ds}
51
+ def file
52
+ @file ||= load_file
53
+ end
54
+
55
+ # Override this method to change which file is shown.
56
+ # Loads the file specified by the HTTP parameter `:file_id`.
57
+ # If this object does not have a file by that name, return the default file
58
+ # as returned by {#default_file}
52
59
  # @return [ActiveFedora::File] the file
60
+ def load_file
61
+ file_path = params[:file]
62
+ if !file_path && params[:datastream_id]
63
+ Deprecation.warn(DownloadBehavior, "Parameter `datastream_id` is deprecated and will be removed in hydra-head 10.0. Use `file` instead.")
64
+ file_path = params[:datastream_id]
65
+ end
66
+ f = asset.attached_files[file_path] if file_path
67
+ f ||= default_file
68
+ raise "Unable to find a file for #{asset}" if f.nil?
69
+ f
70
+ end
71
+
53
72
  def datastream_to_show
54
- ds = asset.attached_files[params[:datastream_id]] if params.has_key?(:datastream_id)
55
- ds ||= default_content_ds
56
- raise "Unable to find a datastream for #{asset}" if ds.nil?
57
- ds
73
+ Deprecation.warn(DownloadBehavior, "datastream_to_show is deprecated and will be removed in hydra-head 10.0")
74
+ load_file
58
75
  end
59
76
 
60
77
  # Handle the HTTP show request
@@ -73,69 +90,91 @@ module Hydra
73
90
 
74
91
  # Create some headers for the datastream
75
92
  def content_options
76
- {disposition: 'inline', type: datastream.mime_type, filename: datastream_name}
93
+ { disposition: 'inline', type: file.mime_type, filename: file_name }
77
94
  end
78
95
 
79
96
  # Override this if you'd like a different filename
80
97
  # @return [String] the filename
81
98
  def datastream_name
82
- params[:filename] || datastream.original_name || (asset.respond_to?(:label) && asset.label) || datastream.id
99
+ Deprecation.warn(DownloadBehavior, "datastream_name is deprecated and will be removed in hydra-head 10.0, use file_name instead")
100
+ file_name
101
+ end
102
+
103
+ # Override this if you'd like a different filename
104
+ # @return [String] the filename
105
+ def file_name
106
+ params[:filename] || file.original_name || (asset.respond_to?(:label) && asset.label) || file.id
83
107
  end
84
108
 
85
109
 
86
110
  # render an HTTP HEAD response
87
111
  def content_head
88
- response.headers['Content-Length'] = datastream.size
89
- response.headers['Content-Type'] = datastream.mime_type
112
+ response.headers['Content-Length'] = file.size
113
+ response.headers['Content-Type'] = file.mime_type
90
114
  head :ok
91
115
  end
92
116
 
93
-
94
117
  # render an HTTP Range response
95
118
  def send_range
96
119
  _, range = request.headers['HTTP_RANGE'].split('bytes=')
97
120
  from, to = range.split('-').map(&:to_i)
98
- to = datastream.size - 1 unless to
121
+ to = file.size - 1 unless to
99
122
  length = to - from + 1
100
- response.headers['Content-Range'] = "bytes #{from}-#{to}/#{datastream.size}"
123
+ response.headers['Content-Range'] = "bytes #{from}-#{to}/#{file.size}"
101
124
  response.headers['Content-Length'] = "#{length}"
102
125
  self.status = 206
103
126
  prepare_file_headers
104
- datastream.stream(request.headers['HTTP_RANGE']) do |block|
105
- response.stream.write block
106
- end
107
- ensure
108
- response.stream.close
127
+ stream_body file.stream(request.headers['HTTP_RANGE'])
109
128
  end
110
129
 
111
130
  def send_file_contents
112
131
  self.status = 200
113
132
  prepare_file_headers
114
- datastream.stream do |block|
115
- response.stream.write block
116
- end
117
- ensure
118
- response.stream.close
133
+ stream_body file.stream
119
134
  end
120
135
 
121
136
  def prepare_file_headers
122
137
  send_file_headers! content_options
123
- response.headers['Content-Type'] = datastream.mime_type
124
- self.content_type = datastream.mime_type
138
+ response.headers['Content-Type'] = file.mime_type
139
+ self.content_type = file.mime_type
125
140
  end
126
141
 
127
142
  private
128
143
 
144
+ def stream_body(iostream)
145
+ iostream.each do |in_buff|
146
+ response.stream.write in_buff
147
+ end
148
+ ensure
149
+ response.stream.close
150
+ end
151
+
129
152
  def default_content_ds
130
- if asset.class.respond_to?(:default_content_ds)
153
+ Deprecation.warn(DownloadBehavior, "default_content_ds is deprecated and will be removed in hydra-head 10.0, use default_file instead")
154
+ default_file
155
+ end
156
+
157
+ def default_file
158
+ if asset.class.respond_to?(:default_file_path)
159
+ asset.attached_files[asset.class.default_file_path]
160
+ elsif asset.class.respond_to?(:default_content_ds)
161
+ Deprecation.warn(DownloadBehavior, "default_content_ds is deprecated and will be removed in hydra-head 10.0, use default_file_path instead")
131
162
  asset.attached_files[asset.class.default_content_ds]
163
+ elsif asset.attached_files.key?(DownloadsController.default_file_path)
164
+ asset.attached_files[DownloadsController.default_file_path]
132
165
  elsif asset.attached_files.key?(DownloadsController.default_content_dsid)
166
+ Deprecation.warn(DownloadBehavior, "DownloadsController.default_content_dsid is deprecated and will be removed in hydra-head 10.0, use default_file_path instead")
133
167
  asset.attached_files[DownloadsController.default_content_dsid]
134
168
  end
135
169
  end
136
170
 
137
171
  module ClassMethods
138
172
  def default_content_dsid
173
+ Deprecation.warn(DownloadBehavior, "default_content_dsid is deprecated and will be removed in hydra-head 10.0, use default_file_path instead")
174
+ default_file_path
175
+ end
176
+
177
+ def default_file_path
139
178
  "content"
140
179
  end
141
180
  end
@@ -1,19 +1,11 @@
1
1
  require 'mime/types'
2
2
 
3
3
  module Hydra::ModelMethods
4
+ extend ActiveSupport::Concern
4
5
 
5
- # Adds metadata about the depositor to the asset
6
- # Most important behavior: if the asset has a rightsMetadata datastream, this method will add +depositor_id+ to its individual edit permissions.
7
- # @param [String, #user_key] depositor
8
- #
9
- def apply_depositor_metadata(depositor)
10
- depositor_id = depositor.respond_to?(:user_key) ? depositor.user_key : depositor
11
-
12
- if respond_to? :depositor
13
- self.depositor = depositor_id
14
- end
15
- self.edit_users += [depositor_id]
16
- return true
6
+ included do
7
+ Deprecation.warn self, "Hydra::ModelMethods is deprecated and will be remove in hydra-head 10.0.0", caller(3)
8
+ include Hydra::WithDepositor
17
9
  end
18
10
 
19
11
  # Puts the contents of file (posted blob) into a datastream and sets the title and label
@@ -21,12 +13,12 @@ module Hydra::ModelMethods
21
13
  #
22
14
  # @param [#read] file the IO object that is the blob
23
15
  # @param [String] file the IO object that is the blob
24
- def add_file(file, dsid, file_name, mime_type=nil)
16
+ def add_file(file, path, file_name, mime_type=nil)
25
17
  mime_type ||= best_mime_for_filename(file_name)
26
- options = {label: file_name, mime_type: mime_type, original_name: file_name}
27
- options[:dsid] = dsid if dsid
28
- add_file_datastream(file, options)
29
- set_title_and_label( file_name, only_if_blank: true )
18
+ options = { mime_type: mime_type, original_name: file_name }
19
+ options[:path] = path if path
20
+ super(file, options)
21
+ set_title_and_label(file_name, only_if_blank: true)
30
22
  end
31
23
 
32
24
  def best_mime_for_filename(file_name)
@@ -44,13 +36,13 @@ module Hydra::ModelMethods
44
36
  # obj.set_title_and_label("My Title", :only_if_blank=> true)
45
37
  def set_title_and_label(new_title, opts={})
46
38
  if opts[:only_if_blank]
47
- if self.label.nil? || self.label.empty?
39
+ if respond_to?(:label) && label.blank?
48
40
  self.label = new_title
49
- self.set_title( new_title )
41
+ set_title new_title
50
42
  end
51
43
  else
52
- self.label = new_title
53
- set_title( new_title )
44
+ self.label = new_title if respond_to? :label
45
+ set_title new_title
54
46
  end
55
47
  end
56
48
 
@@ -62,6 +54,7 @@ module Hydra::ModelMethods
62
54
  if respond_to? :title=
63
55
  self.title = self.class.multiple?(:title) ? Array(new_title) : new_title
64
56
  elsif attached_files.has_key?("descMetadata")
57
+ Deprecation.warn ModelMethods, 'setting title in descMetadata is deprecated and will be remove in hydra-head 10.0. If you need this behavior declare `has_attribute :title`'
65
58
  if descMetadata.respond_to?(:title_values)
66
59
  descMetadata.title_values = new_title
67
60
  else
@@ -1,6 +1,13 @@
1
1
  # properties datastream: catch-all for info that didn't have another home. Particularly depositor.
2
2
  module Hydra::Datastream
3
3
  class Properties < ActiveFedora::OmDatastream
4
+ extend Deprecation
5
+
6
+ def initialize(*)
7
+ super
8
+ Deprecation.warn(Properties, "Hydra::Datastream::Properties is deprecated and will be removed in hydra-head 10.0")
9
+ end
10
+
4
11
  set_terminology do |t|
5
12
  t.root(:path=>"fields", :xmlns => '', :namespace_prefix => nil)
6
13
 
data/hydra-core.gemspec CHANGED
@@ -18,13 +18,12 @@ Gem::Specification.new do |gem|
18
18
 
19
19
  gem.required_ruby_version = '>= 1.9.3'
20
20
 
21
- gem.add_dependency "rails", '>= 3.2.3', '< 5'
22
- gem.add_dependency 'block_helpers'
21
+ gem.add_dependency "rails", '~> 4.0'
23
22
  gem.add_dependency 'hydra-access-controls', version
24
23
  gem.add_dependency 'jettywrapper', '>= 2.0.0'
25
24
 
26
- gem.add_development_dependency 'sqlite3'
27
- gem.add_development_dependency 'yard'
28
- gem.add_development_dependency 'rspec-rails'
29
- gem.add_development_dependency 'factory_girl_rails'
25
+ gem.add_development_dependency 'sqlite3', '~> 1.3'
26
+ gem.add_development_dependency 'yard', '~> 0.8.7'
27
+ gem.add_development_dependency 'rspec-rails', '~> 3.1'
28
+ gem.add_development_dependency 'factory_girl_rails', '~> 4.2'
30
29
  end
@@ -1,3 +1,3 @@
1
1
  module HydraHead
2
- VERSION = "9.0.0.rc3"
2
+ VERSION = "9.0.0"
3
3
  end
@@ -18,7 +18,6 @@ describe DownloadsController do
18
18
  describe "with a file" do
19
19
  before do
20
20
  class ContentHolder < ActiveFedora::Base
21
- include Hydra::ModelMethods
22
21
  include Hydra::AccessControls::Permissions
23
22
  contains 'thumbnail'
24
23
  end
@@ -26,9 +25,9 @@ describe DownloadsController do
26
25
  end
27
26
  let(:obj) do
28
27
  ContentHolder.new.tap do |obj|
29
- obj.add_file_datastream('fizz', dsid: 'buzz', mime_type: 'image/png', original_name: 'buzz.png')
30
- obj.add_file_datastream('foobarfoobarfoobar', dsid: 'content', mime_type: 'image/png', original_name: 'world.png')
31
- obj.add_file_datastream("It's a stream", dsid: 'descMetadata', mime_type: 'text/plain', original_name: 'metadata.xml')
28
+ obj.add_file('fizz', path: 'buzz', original_name: 'buzz.png', mime_type: 'image/png')
29
+ obj.add_file('foobarfoobarfoobar', path: 'content', original_name: 'world.png', mime_type: 'image/png')
30
+ obj.add_file("It's a stream", path: 'descMetadata', original_name: 'metadata.xml', mime_type: 'text/plain')
32
31
  obj.read_users = [@user.user_key]
33
32
  obj.save!
34
33
  end
@@ -37,24 +36,25 @@ describe DownloadsController do
37
36
  after do
38
37
  obj.destroy
39
38
  Object.send(:remove_const, :ContentHolder)
40
- end
39
+ end
40
+
41
41
  context "when not logged in" do
42
42
  context "when a specific datastream is requested" do
43
43
  it "should redirect to the root path and display an error" do
44
- get :show, id: obj, datastream_id: "descMetadata"
44
+ get :show, id: obj, file: "descMetadata"
45
45
  expect(response).to redirect_to new_user_session_path
46
46
  expect(flash[:alert]).to eq "You are not authorized to access this page."
47
47
  end
48
48
  end
49
49
  end
50
50
  context "when logged in, but without read access" do
51
- let(:user) { User.new.tap {|u| u.email = 'email2@example.com'; u.password = 'password'; u.save} }
51
+ let(:user) { User.create(email: 'email2@example.com', password: 'password') }
52
52
  before do
53
53
  sign_in user
54
54
  end
55
55
  context "when a specific datastream is requested" do
56
56
  it "should redirect to the root path and display an error" do
57
- get :show, id: obj, datastream_id: "descMetadata"
57
+ get :show, id: obj, file: "descMetadata"
58
58
  expect(response).to redirect_to root_path
59
59
  expect(flash[:alert]).to eq "You are not authorized to access this page."
60
60
  end
@@ -69,14 +69,25 @@ describe DownloadsController do
69
69
  describe "#show" do
70
70
  it "should default to returning default download configured by object" do
71
71
  allow(ContentHolder).to receive(:default_content_ds).and_return('buzz')
72
+ expect(Deprecation).to receive(:warn)
72
73
  get :show, id: obj
73
74
  expect(response).to be_successful
74
75
  expect(response.headers['Content-Type']).to eq "image/png"
75
76
  expect(response.headers["Content-Disposition"]).to eq "inline; filename=\"buzz.png\""
76
77
  expect(response.body).to eq 'fizz'
77
78
  end
79
+
80
+ it "should default to returning default download configured by object" do
81
+ allow(ContentHolder).to receive(:default_file_path).and_return('buzz')
82
+ get :show, id: obj
83
+ expect(response).to be_successful
84
+ expect(response.headers['Content-Type']).to eq "image/png"
85
+ expect(response.headers["Content-Disposition"]).to eq "inline; filename=\"buzz.png\""
86
+ expect(response.body).to eq 'fizz'
87
+ end
88
+
78
89
  it "should default to returning default download configured by controller" do
79
- expect(DownloadsController.default_content_dsid).to eq "content"
90
+ expect(DownloadsController.default_file_path).to eq "content"
80
91
  get :show, id: obj
81
92
  expect(response).to be_successful
82
93
  expect(response.headers['Content-Type']).to eq "image/png"
@@ -87,13 +98,13 @@ describe DownloadsController do
87
98
  context "when a specific datastream is requested" do
88
99
  context "and it doesn't exist" do
89
100
  it "should return :not_found when the datastream doesn't exist" do
90
- get :show, id: obj, datastream_id: "thumbnail"
101
+ get :show, id: obj, file: "thumbnail"
91
102
  expect(response).to be_not_found
92
103
  end
93
104
  end
94
105
  context "and it exists" do
95
106
  it "should return it" do
96
- get :show, id: obj, datastream_id: "descMetadata"
107
+ get :show, id: obj, file: "descMetadata"
97
108
  expect(response).to be_successful
98
109
  expect(response.headers['Content-Type']).to eq "text/plain"
99
110
  expect(response.headers["Content-Disposition"]).to eq "inline; filename=\"metadata.xml\""
@@ -120,23 +131,25 @@ describe DownloadsController do
120
131
  let(:parent) { ActiveFedora::Base.new(id: '1234') }
121
132
 
122
133
  before do
123
- parent.add_file_datastream('one1two2threfour', dsid: 'webm', mime_type: 'video/webm', original_name: 'MyVideo.webm')
134
+ parent.add_file('one1two2threfour', path: 'webm', mime_type: 'video/webm', original_name: 'MyVideo.webm')
124
135
  parent.save!
125
136
  expect(controller).to receive(:authorize!).with(:download, instance_of(ActiveFedora::File)).and_return(true)
126
137
  end
127
138
  it "head request" do
128
139
  request.env["HTTP_RANGE"] = 'bytes=0-15'
129
- head :show, id: parent, datastream_id: 'webm'
130
- expect(response.headers['Content-Length']).to eq 16
140
+ head :show, id: parent, file: 'webm'
141
+ # See https://github.com/rails/rails/issues/18714
142
+ # expect(response.headers['Content-Length']).to eq 16
131
143
  expect(response.headers['Accept-Ranges']).to eq 'bytes'
132
144
  expect(response.headers['Content-Type']).to eq 'video/webm'
133
145
  end
134
146
  it "should send the whole thing" do
135
147
  request.env["HTTP_RANGE"] = 'bytes=0-15'
136
- get :show, id: '1234', datastream_id: 'webm'
148
+ get :show, id: '1234', file: 'webm'
137
149
  expect(response.body).to eq 'one1two2threfour'
138
150
  expect(response.headers["Content-Range"]).to eq 'bytes 0-15/16'
139
- expect(response.headers["Content-Length"]).to eq '16'
151
+ # See https://github.com/rails/rails/issues/18714
152
+ # expect(response.headers["Content-Length"]).to eq '16'
140
153
  expect(response.headers['Accept-Ranges']).to eq 'bytes'
141
154
  expect(response.headers['Content-Type']).to eq "video/webm"
142
155
  expect(response.headers["Content-Disposition"]).to eq "inline; filename=\"MyVideo.webm\""
@@ -144,22 +157,24 @@ describe DownloadsController do
144
157
  end
145
158
  it "should send the whole thing when the range is open ended" do
146
159
  request.env["HTTP_RANGE"] = 'bytes=0-'
147
- get :show, id: '1234', datastream_id: 'webm'
160
+ get :show, id: '1234', file: 'webm'
148
161
  expect(response.body).to eq 'one1two2threfour'
149
162
  end
150
163
  it "should get a range not starting at the beginning" do
151
164
  request.env["HTTP_RANGE"] = 'bytes=3-15'
152
- get :show, id: '1234', datastream_id: 'webm'
165
+ get :show, id: '1234', file: 'webm'
153
166
  expect(response.body).to eq '1two2threfour'
154
167
  expect(response.headers["Content-Range"]).to eq 'bytes 3-15/16'
155
- expect(response.headers["Content-Length"]).to eq '13'
168
+ # See https://github.com/rails/rails/issues/18714
169
+ # expect(response.headers["Content-Length"]).to eq '13'
156
170
  end
157
171
  it "should get a range not ending at the end" do
158
172
  request.env["HTTP_RANGE"] = 'bytes=4-11'
159
- get :show, id: '1234', datastream_id: 'webm'
173
+ get :show, id: '1234', file: 'webm'
160
174
  expect(response.body).to eq 'two2thre'
161
175
  expect(response.headers["Content-Range"]).to eq 'bytes 4-11/16'
162
- expect(response.headers["Content-Length"]).to eq '8'
176
+ # See https://github.com/rails/rails/issues/18714
177
+ # expect(response.headers["Content-Length"]).to eq '8'
163
178
  end
164
179
  end
165
180
  end
@@ -2,61 +2,65 @@ require 'spec_helper'
2
2
 
3
3
  describe Hydra::ModelMethods do
4
4
 
5
- before :all do
5
+ before do
6
+ allow(Deprecation).to receive(:warn)
6
7
  class TestModel < ActiveFedora::Base
7
8
  include Hydra::AccessControls::Permissions
8
9
  include Hydra::ModelMethods
9
- contains "properties", class_name: 'Hydra::Datastream::Properties'
10
- has_attributes :depositor, datastream: :properties, multiple: false
10
+ property :depositor, predicate: ::RDF::URI.new("http://id.loc.gov/vocabulary/relators/dpt"), multiple: false
11
+ attr_accessor :label
11
12
  end
12
13
  end
13
14
 
14
- subject { TestModel.new }
15
-
16
- describe "apply_depositor_metadata" do
17
- it "should add edit access" do
18
- subject.apply_depositor_metadata('naomi')
19
- expect(subject.edit_users).to eq ['naomi']
20
- end
21
-
22
- it "should not overwrite people with edit access" do
23
- subject.edit_users = ['jessie']
24
- subject.apply_depositor_metadata('naomi')
25
- expect(subject.edit_users).to match_array ['naomi', 'jessie']
26
- end
15
+ after { Object.send(:remove_const, :TestModel) }
27
16
 
28
- it "should set depositor" do
29
- subject.apply_depositor_metadata('chris')
30
- expect(subject.properties.depositor).to eq ['chris']
31
- end
32
- it "should accept objects that respond_to? :user_key" do
33
- stub_user = double(:user, :user_key=>'monty')
34
- subject.apply_depositor_metadata(stub_user)
35
- expect(subject.properties.depositor).to eq ['monty']
36
- end
37
- end
17
+ subject { TestModel.new }
38
18
 
39
19
  describe 'add_file' do
40
20
  let(:file_name) { "my_file.foo" }
41
21
  let(:mock_file) { "File contents" }
42
22
 
43
23
  it "should set the dsid, mimetype and content" do
44
- expect(subject).to receive(:add_file_datastream).with(mock_file, label: file_name, mime_type: "mymimetype", dsid: 'bar', original_name: file_name)
45
24
  expect(subject).to receive(:set_title_and_label).with(file_name, only_if_blank: true )
46
25
  expect(MIME::Types).to receive(:of).with(file_name).and_return([double(content_type: "mymimetype")])
47
26
  subject.add_file(mock_file, 'bar', file_name)
27
+ expect(subject.bar.content).to eq mock_file
48
28
  end
49
29
 
50
30
  it "should accept a supplied mime_type and content" do
51
- expect(subject).to receive(:add_file_datastream).with(mock_file, label: file_name, mime_type: "image/png", dsid: 'bar', original_name: file_name)
52
31
  expect(subject).to receive(:set_title_and_label).with(file_name, only_if_blank: true )
53
32
  subject.add_file(mock_file, 'bar', file_name, 'image/png')
33
+ expect(subject.bar.content).to eq mock_file
34
+ end
35
+ end
36
+
37
+ describe '#set_title_and_label' do
38
+ context 'when only_if_blank is true' do
39
+ before do
40
+ subject.label = initial_label
41
+ subject.set_title_and_label('second', only_if_blank: true)
42
+ end
43
+
44
+ context 'and label is already set' do
45
+ let(:initial_label) { 'first' }
46
+ it "should not update the label" do
47
+ expect(subject.label).to eq 'first'
48
+ end
49
+ end
50
+
51
+ context 'and label is not already set' do
52
+ let(:initial_label) { nil }
53
+ it "should not update the label" do
54
+ expect(subject.label).to eq 'second'
55
+ end
56
+ end
54
57
  end
55
58
  end
56
59
 
57
60
  describe '#set_title' do
58
61
  context "on a class with a title property" do
59
62
  before do
63
+ expect(Deprecation).to receive(:warn)
60
64
  class WithProperty < ActiveFedora::Base
61
65
  include Hydra::ModelMethods
62
66
  property :title, predicate: ::RDF::DC.title
@@ -1,3 +1,2 @@
1
1
  gem 'rspec-rails', '~> 3.1', group: :test
2
2
  gem 'rspec-its'
3
-
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hydra-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 9.0.0.rc3
4
+ version: 9.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Zumwalt, Bess Sadler, Julie Meloni, Naomi Dushay, Jessie Keck, John Scofield,
@@ -9,56 +9,36 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-01-16 00:00:00.000000000 Z
12
+ date: 2015-01-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - ">="
19
- - !ruby/object:Gem::Version
20
- version: 3.2.3
21
- - - "<"
22
- - !ruby/object:Gem::Version
23
- version: '5'
24
- type: :runtime
25
- prerelease: false
26
- version_requirements: !ruby/object:Gem::Requirement
27
- requirements:
28
- - - ">="
29
- - !ruby/object:Gem::Version
30
- version: 3.2.3
31
- - - "<"
32
- - !ruby/object:Gem::Version
33
- version: '5'
34
- - !ruby/object:Gem::Dependency
35
- name: block_helpers
36
- requirement: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
18
+ - - "~>"
39
19
  - !ruby/object:Gem::Version
40
- version: '0'
20
+ version: '4.0'
41
21
  type: :runtime
42
22
  prerelease: false
43
23
  version_requirements: !ruby/object:Gem::Requirement
44
24
  requirements:
45
- - - ">="
25
+ - - "~>"
46
26
  - !ruby/object:Gem::Version
47
- version: '0'
27
+ version: '4.0'
48
28
  - !ruby/object:Gem::Dependency
49
29
  name: hydra-access-controls
50
30
  requirement: !ruby/object:Gem::Requirement
51
31
  requirements:
52
32
  - - '='
53
33
  - !ruby/object:Gem::Version
54
- version: 9.0.0.rc3
34
+ version: 9.0.0
55
35
  type: :runtime
56
36
  prerelease: false
57
37
  version_requirements: !ruby/object:Gem::Requirement
58
38
  requirements:
59
39
  - - '='
60
40
  - !ruby/object:Gem::Version
61
- version: 9.0.0.rc3
41
+ version: 9.0.0
62
42
  - !ruby/object:Gem::Dependency
63
43
  name: jettywrapper
64
44
  requirement: !ruby/object:Gem::Requirement
@@ -77,58 +57,58 @@ dependencies:
77
57
  name: sqlite3
78
58
  requirement: !ruby/object:Gem::Requirement
79
59
  requirements:
80
- - - ">="
60
+ - - "~>"
81
61
  - !ruby/object:Gem::Version
82
- version: '0'
62
+ version: '1.3'
83
63
  type: :development
84
64
  prerelease: false
85
65
  version_requirements: !ruby/object:Gem::Requirement
86
66
  requirements:
87
- - - ">="
67
+ - - "~>"
88
68
  - !ruby/object:Gem::Version
89
- version: '0'
69
+ version: '1.3'
90
70
  - !ruby/object:Gem::Dependency
91
71
  name: yard
92
72
  requirement: !ruby/object:Gem::Requirement
93
73
  requirements:
94
- - - ">="
74
+ - - "~>"
95
75
  - !ruby/object:Gem::Version
96
- version: '0'
76
+ version: 0.8.7
97
77
  type: :development
98
78
  prerelease: false
99
79
  version_requirements: !ruby/object:Gem::Requirement
100
80
  requirements:
101
- - - ">="
81
+ - - "~>"
102
82
  - !ruby/object:Gem::Version
103
- version: '0'
83
+ version: 0.8.7
104
84
  - !ruby/object:Gem::Dependency
105
85
  name: rspec-rails
106
86
  requirement: !ruby/object:Gem::Requirement
107
87
  requirements:
108
- - - ">="
88
+ - - "~>"
109
89
  - !ruby/object:Gem::Version
110
- version: '0'
90
+ version: '3.1'
111
91
  type: :development
112
92
  prerelease: false
113
93
  version_requirements: !ruby/object:Gem::Requirement
114
94
  requirements:
115
- - - ">="
95
+ - - "~>"
116
96
  - !ruby/object:Gem::Version
117
- version: '0'
97
+ version: '3.1'
118
98
  - !ruby/object:Gem::Dependency
119
99
  name: factory_girl_rails
120
100
  requirement: !ruby/object:Gem::Requirement
121
101
  requirements:
122
- - - ">="
102
+ - - "~>"
123
103
  - !ruby/object:Gem::Version
124
- version: '0'
104
+ version: '4.2'
125
105
  type: :development
126
106
  prerelease: false
127
107
  version_requirements: !ruby/object:Gem::Requirement
128
108
  requirements:
129
- - - ">="
109
+ - - "~>"
130
110
  - !ruby/object:Gem::Version
131
- version: '0'
111
+ version: '4.2'
132
112
  description: 'Hydra-Head is a Rails Engine containing the core code for a Hydra application.
133
113
  The full hydra stack includes: Blacklight, Fedora, Solr, active-fedora, solrizer,
134
114
  and om'
@@ -205,12 +185,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
205
185
  version: 1.9.3
206
186
  required_rubygems_version: !ruby/object:Gem::Requirement
207
187
  requirements:
208
- - - ">"
188
+ - - ">="
209
189
  - !ruby/object:Gem::Version
210
- version: 1.3.1
190
+ version: '0'
211
191
  requirements: []
212
192
  rubyforge_project:
213
- rubygems_version: 2.4.3
193
+ rubygems_version: 2.2.2
214
194
  signing_key:
215
195
  specification_version: 4
216
196
  summary: Hydra-Head Rails Engine (requires Rails3)