Skip to content

Commit 8e6ea26

Browse files
authored
Merge pull request #1474 from samvera/backports
Backports
2 parents 0d0337a + cf69b95 commit 8e6ea26

File tree

5 files changed

+38
-10
lines changed

5 files changed

+38
-10
lines changed

active-fedora.gemspec

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,18 +25,20 @@ Gem::Specification.new do |s|
2525
s.add_dependency 'faraday', '~> 0.12'
2626
s.add_dependency 'faraday-encoding', '0.0.4'
2727

28-
s.add_development_dependency "rails"
28+
s.add_development_dependency "equivalent-xml"
29+
s.add_development_dependency 'fcrepo_wrapper', '~> 0.2'
30+
s.add_development_dependency "github_changelog_generator"
2931
s.add_development_dependency "rdoc"
30-
s.add_development_dependency "yard"
32+
s.add_development_dependency "psych", "< 4" # Restricted because 4.0+ do not work with rubocop 0.56.x
33+
s.add_development_dependency "rails"
3134
s.add_development_dependency "rake"
32-
s.add_development_dependency "solr_wrapper", "~> 2.0"
33-
s.add_development_dependency 'fcrepo_wrapper', '~> 0.2'
3435
s.add_development_dependency "rspec", "~> 3.5"
3536
s.add_development_dependency "rspec-its"
36-
s.add_development_dependency "equivalent-xml"
37-
s.add_development_dependency "simplecov", '~> 0.8'
3837
s.add_development_dependency "rubocop", '~> 0.56.0'
3938
s.add_development_dependency "rubocop-rspec", '~> 1.12.0'
39+
s.add_development_dependency "simplecov", '~> 0.8'
40+
s.add_development_dependency "solr_wrapper", "~> 2.0"
41+
s.add_development_dependency "yard"
4042

4143
s.files = `git ls-files`.split("\n")
4244
s.test_files = `git ls-files -- {spec}/*`.split("\n")

lib/active_fedora.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,11 @@
1111
# Monkey patching RDF::Literal::DateTime to support fractional seconds.
1212
# See https://github.com/samvera/active_fedora/issues/497
1313
# Also monkey patches in a fix for timezones to be stored properly.
14+
# This is needed in both RDF <= 3.2.4 and RDF >= 3.2.5
15+
# TODO: Figure out how to contribute something upstream to avoid monkey-patching
1416
module RDF
1517
class Literal
16-
class DateTime < Literal
18+
class DateTime
1719
ALTERNATIVE_FORMAT = '%Y-%m-%dT%H:%M:%S'.freeze
1820
DOT = '.'.freeze
1921
EMPTY = ''.freeze

lib/active_fedora/core/fedora_id_translator.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ module ActiveFedora::Core
22
class FedoraIdTranslator
33
SLASH = '/'.freeze
44
def self.call(id)
5-
id = URI.escape(id, '[]'.freeze)
5+
id = URI::DEFAULT_PARSER.escape(id, '[]'.freeze)
66
id = "/#{id}" unless id.start_with? SLASH
77
unless ActiveFedora.fedora.base_path == SLASH || id.start_with?("#{ActiveFedora.fedora.base_path}/")
88
id = ActiveFedora.fedora.base_path + id

lib/active_fedora/file.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ def retrieve_content
179179

180180
def ldp_headers
181181
headers = { 'Content-Type'.freeze => mime_type, 'Content-Length'.freeze => content.size.to_s }
182-
headers['Content-Disposition'.freeze] = "attachment; filename=\"#{URI.encode(@original_name)}\"" if @original_name
182+
headers['Content-Disposition'.freeze] = "attachment; filename=\"#{URI::DEFAULT_PARSER.escape(@original_name)}\"" if @original_name
183183
headers
184184
end
185185

spec/integration/date_time_properties_spec.rb

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,33 @@ class Foo < ActiveFedora::Base
3333

3434
describe 'serializing' do
3535
let(:object) { Foo.new(date: [date]) }
36-
let(:triple) { object.resource.query(predicate: ::RDF::Vocab::DC.date).to_a.first }
36+
let(:triple) { object.resource.query(predicate: ::RDF::Vocab::DC.date).to_a.first.object }
3737
it 'time zone must have semicolin to be a cannonical XMLSchema#dateTime' do
3838
expect(triple.to_s).to match(/\+01:00/)
3939
end
40+
41+
context 'nanoseconds' do
42+
let(:date) { DateTime.parse("2015-10-22T10:20:03.653991025+01:00") }
43+
44+
it 'includes nanosecond precision' do
45+
expect(triple.to_s).to eq "2015-10-22T10:20:03.653991025+01:00"
46+
end
47+
48+
context 'with trailing zeros' do
49+
let(:date) { DateTime.parse("2015-10-22T15:34:20.97800000-11:00") }
50+
51+
it 'trims trailing zeros' do
52+
expect(triple.to_s).to eq "2015-10-22T15:34:20.978-11:00"
53+
end
54+
55+
context 'and only zero nanoseconds' do
56+
let(:date) { DateTime.parse("2015-10-22T15:34:20.000000000-11:00") }
57+
58+
it 'trims trailing zeros and dot if nanoseconds are all 0' do
59+
expect(triple.to_s).to eq "2015-10-22T15:34:20-11:00"
60+
end
61+
end
62+
end
63+
end
4064
end
4165
end

0 commit comments

Comments
 (0)