publisher tags

This commit is contained in:
John Bintz 2011-03-18 15:49:11 -04:00
parent 8f9141bece
commit 50965072a9
6 changed files with 169 additions and 27 deletions

View File

@ -11,16 +11,31 @@ module AVM
class Image
DUBLIN_CORE_FIELDS = [ :title, :description ]
PHOTOSHOP_SINGLES = {
'Headline' => :headline,
'DateCreated' => :date
}
PHOTOSHOP_SINGLE_FIELDS = [
'Headline',
'DateCreated',
'Credit'
]
PHOTOSHOP_SINGLE_METHODS = [
:headline,
:date,
:credit
]
PHOTOSHOP_SINGLES_MESSAGES = [
:headline,
:string_date,
:credit
]
PHOTOSHOP_SINGLES_FOR_METHODS = PHOTOSHOP_SINGLE_FIELDS.zip(PHOTOSHOP_SINGLE_METHODS)
PHOTOSHOP_SINGLES_FOR_MESSAGES = PHOTOSHOP_SINGLE_FIELDS.zip(PHOTOSHOP_SINGLES_MESSAGES)
AVM_SINGLE_FIELDS = [
'Distance.Notes',
'Spectral.Notes',
'ReferenceURL',
'Credit',
'ID',
'Type',
'Image.ProductQuality',
@ -36,14 +51,20 @@ module AVM
'Spatial.ReferenceDimension',
'Spatial.ReferenceValue',
'Spatial.Equinox',
'Spatial.CoordinateFrame'
'Spatial.CoordinateFrame',
'Publisher',
'PublisherID',
'ResourceID',
'ResourceURL',
'RelatedResources',
'MetadataDate',
'MetadataVersion',
]
AVM_SINGLE_METHODS = [
:distance_notes,
:spectral_notes,
:reference_url,
:credit,
:id,
:type,
:quality,
@ -59,14 +80,20 @@ module AVM
:reference_dimension,
:reference_value,
:equinox,
:coordinate_frame
:coordinate_frame,
:publisher,
:publisher_id,
:resource_id,
:resource_url,
:related_resources,
:metadata_date,
:metadata_version,
]
AVM_SINGLE_MESSAGES = [
:distance_notes,
:spectral_notes,
:reference_url,
:credit,
:id,
:image_type,
:image_quality,
@ -82,7 +109,14 @@ module AVM
:reference_dimension,
:reference_value,
:equinox,
:coordinate_frame
:coordinate_frame,
:publisher,
:publisher_id,
:resource_id,
:resource_url,
:related_resources,
:string_metadata_date,
:metadata_version,
]
AVM_SINGLES = AVM_SINGLE_FIELDS.zip(AVM_SINGLE_METHODS)
@ -102,7 +136,9 @@ module AVM
:id, :image_type, :image_quality, :coordinate_frame,
:equinox, :reference_value, :reference_dimension, :reference_pixel,
:spatial_scale, :spatial_rotation, :coordinate_system_projection, :spatial_quality,
:spatial_notes, :fits_header, :spatial_cd_matrix, :distance
:spatial_notes, :fits_header, :spatial_cd_matrix, :distance,
:publisher, :publisher_id, :resource_id, :resource_url,
:related_resources, :metadata_date, :metadata_version
]
attr_reader :creator, :observations
@ -142,14 +178,16 @@ module AVM
refs[:dublin_core].add_child(%{<dc:#{field}>#{alt_li_tag(send(field))}</dc:#{field}>})
end
refs[:photoshop].add_child(%{<photoshop:Headline>#{headline}</photoshop:Headline>})
refs[:photoshop].add_child(%{<photoshop:DateCreated>#{string_date}</photoshop:DateCreated>})
PHOTOSHOP_SINGLES_FOR_MESSAGES.each do |tag, message|
refs[:photoshop].add_child(%{<photoshop:#{tag}>#{send(message)}</photoshop:#{tag}>})
end
AVM_SINGLES_FOR_MESSAGES.each do |tag, message|
if value = send(message)
case value
when Array
value = '<rdf:Seq>' + value.collect { |v| "<rdf:li>#{v.to_s}</rdf:li>" }.join + '</rdf:Seq>'
container_tag = (message == :related_resources) ? 'Bag' : 'Seq'
value = "<rdf:#{container_tag}>" + value.collect { |v| "<rdf:li>#{v.to_s}</rdf:li>" }.join + "</rdf:#{container_tag}>"
else
value = value.to_s
end
@ -198,12 +236,19 @@ module AVM
end
def date
(Time.parse(@options[:date]) rescue nil)
date_or_nil(:date)
end
def metadata_date
date_or_nil(:metadata_date)
end
def string_date
return nil if !date
date.strftime('%Y-%m-%d')
string_date_or_nil(:date)
end
def string_metadata_date
string_date_or_nil(:metadata_date)
end
def distance
@ -232,7 +277,7 @@ module AVM
end
end
PHOTOSHOP_SINGLES.each do |tag, field|
PHOTOSHOP_SINGLES_FOR_METHODS.each do |tag, field|
if node = refs[:photoshop].at_xpath("./photoshop:#{tag}")
options[field] = node.text
end
@ -270,6 +315,16 @@ module AVM
end
private
def date_or_nil(field)
(Time.parse(@options[field]) rescue nil)
end
def string_date_or_nil(field)
return nil if !send(field)
send(field).strftime('%Y-%m-%d')
end
def alt_li_tag(text)
%{<rdf:Alt><rdf:li xml:lang="x-default">#{text}</rdf:li></rdf:Alt>}
end

View File

@ -34,6 +34,14 @@ describe AVM::Image do
let(:fits_header) { 'FITS header' }
let(:spatial_cd_matrix) { [ 1, 2, 3, 4 ] }
let(:publisher) { 'Publisher' }
let(:publisher_id) { 'Publisher ID' }
let(:resource_id) { 'Resource ID' }
let(:resource_url) { 'Resource URL' }
let(:related_resources) { [ 'Resource 1', 'Resource 2' ] }
let(:metadata_date) { '2010-01-05' }
let(:metadata_version) { '1.2' }
def self.with_all_options
let(:options) { {
:title => title,
@ -61,6 +69,13 @@ describe AVM::Image do
:spatial_notes => spatial_notes,
:fits_header => fits_header,
:spatial_cd_matrix => spatial_cd_matrix,
:publisher => publisher,
:publisher_id => publisher_id,
:resource_id => resource_id,
:resource_url => resource_url,
:related_resources => related_resources,
:metadata_date => metadata_date,
:metadata_version => metadata_version,
} }
end
@ -96,6 +111,14 @@ describe AVM::Image do
its(:spatial_notes) { should == spatial_notes }
its(:fits_header) { should == fits_header }
its(:spatial_cd_matrix) { should == spatial_cd_matrix }
its(:publisher) { should == publisher }
its(:publisher_id) { should == publisher_id }
its(:resource_id) { should == resource_id }
its(:resource_url) { should == resource_url }
its(:related_resources) { should == related_resources }
its(:metadata_date) { should == Time.parse(metadata_date) }
its(:metadata_version) { should == metadata_version }
end
describe '#initialize' do
@ -130,7 +153,14 @@ describe AVM::Image do
:fits_header => fits_header,
:spatial_cd_matrix => spatial_cd_matrix,
:distance => [ light_years, redshift ],
:creator => []
:creator => [],
:publisher => publisher,
:publisher_id => publisher_id,
:resource_id => resource_id,
:resource_url => resource_url,
:related_resources => related_resources,
:metadata_date => Time.parse(metadata_date),
:metadata_version => metadata_version,
} }
its(:distance) { should == [ light_years, redshift ] }
@ -217,8 +247,8 @@ describe AVM::Image do
which.at_xpath(xpath).text
end
def xpath_list(which, xpath)
which.at_xpath(xpath).search('.//rdf:li').collect(&:text)
def xpath_list(which, xpath, search = './/rdf:li')
which.at_xpath(xpath).search(search).collect(&:text)
end
it "should have the image info tags" do
@ -229,7 +259,7 @@ describe AVM::Image do
xpath_text(avm, './avm:Distance.Notes').should == distance_notes
xpath_text(avm, './avm:Spectral.Notes').should == spectral_notes
xpath_text(avm, './avm:ReferenceURL').should == reference_url
xpath_text(avm, './avm:Credit').should == credit
xpath_text(photoshop, './photoshop:Credit').should == credit
xpath_text(photoshop, './photoshop:DateCreated').should == date
xpath_text(avm, './avm:ID').should == id
xpath_text(avm, './avm:Type').should == type
@ -250,6 +280,16 @@ describe AVM::Image do
xpath_list(avm, './avm:Spatial.CDMatrix').should == spatial_cd_matrix.collect(&:to_s)
end
it "should have the publisher tags" do
xpath_text(avm, './avm:Publisher').should == publisher
xpath_text(avm, './avm:PublisherID').should == publisher_id
xpath_text(avm, './avm:ResourceID').should == resource_id
xpath_text(avm, './avm:ResourceURL').should == resource_url
xpath_list(avm, './avm:RelatedResources', './rdf:Bag/rdf:li').should == related_resources
xpath_text(avm, './avm:MetadataDate').should == metadata_date
xpath_text(avm, './avm:MetadataVersion').should == metadata_version
end
context "distance" do
context "no distances" do
let(:redshift) { nil }

View File

@ -12,7 +12,6 @@
<rdf:li xml:lang="x-default">Description</rdf:li>
</rdf:Alt>
</dc:description>
</rdf:Description>
<rdf:Description rdf:about=""
xmlns:Iptc4xmpCore="http://iptc.org/std/Iptc4xmpCore/1.0/xmlns/">
@ -22,6 +21,7 @@
<rdf:Description rdf:about=""
xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/">
<photoshop:Headline>Headline</photoshop:Headline>
<photoshop:Credit>Credit</photoshop:Credit>
<photoshop:DateCreated>2010-01-01</photoshop:DateCreated>
</rdf:Description>
<rdf:Description rdf:about=""
@ -29,7 +29,6 @@
<avm:Spectral.Notes>Spectral Notes</avm:Spectral.Notes>
<avm:Distance.Notes>Distance Notes</avm:Distance.Notes>
<avm:ReferenceURL>Reference URL</avm:ReferenceURL>
<avm:Credit>Credit</avm:Credit>
<avm:ID>ID</avm:ID>
<avm:Type>Observation</avm:Type>
<avm:Image.ProductQuality>Good</avm:Image.ProductQuality>
@ -78,6 +77,18 @@
<rdf:li>4</rdf:li>
</rdf:Seq>
</avm:Spatial.CDMatrix>
<avm:Publisher>Publisher</avm:Publisher>
<avm:PublisherID>Publisher ID</avm:PublisherID>
<avm:ResourceID>Resource ID</avm:ResourceID>
<avm:ResourceURL>Resource URL</avm:ResourceURL>
<avm:RelatedResources>
<rdf:Bag>
<rdf:li>Resource 1</rdf:li>
<rdf:li>Resource 2</rdf:li>
</rdf:Bag>
</avm:RelatedResources>
<avm:MetadataDate>2010-01-05</avm:MetadataDate>
<avm:MetadataVersion>1.2</avm:MetadataVersion>
</rdf:Description>
</rdf:RDF>
</x:xmpmeta>

View File

@ -21,6 +21,7 @@
<rdf:Description rdf:about=""
xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/">
<photoshop:Headline>Headline</photoshop:Headline>
<photoshop:Credit>Credit</photoshop:Credit>
<photoshop:DateCreated>2010-01-01</photoshop:DateCreated>
</rdf:Description>
<rdf:Description rdf:about=""
@ -28,7 +29,6 @@
<avm:Spectral.Notes>Spectral Notes</avm:Spectral.Notes>
<avm:Distance.Notes>Distance Notes</avm:Distance.Notes>
<avm:ReferenceURL>Reference URL</avm:ReferenceURL>
<avm:Credit>Credit</avm:Credit>
<avm:ID>ID</avm:ID>
<avm:Type>Observation</avm:Type>
<avm:Image.ProductQuality>Good</avm:Image.ProductQuality>
@ -72,6 +72,18 @@
<rdf:li>4</rdf:li>
</rdf:Seq>
</avm:Spatial.CDMatrix>
<avm:Publisher>Publisher</avm:Publisher>
<avm:PublisherID>Publisher ID</avm:PublisherID>
<avm:ResourceID>Resource ID</avm:ResourceID>
<avm:ResourceURL>Resource URL</avm:ResourceURL>
<avm:RelatedResources>
<rdf:Bag>
<rdf:li>Resource 1</rdf:li>
<rdf:li>Resource 2</rdf:li>
</rdf:Bag>
</avm:RelatedResources>
<avm:MetadataDate>2010-01-05</avm:MetadataDate>
<avm:MetadataVersion>1.2</avm:MetadataVersion>
</rdf:Description>
</rdf:RDF>
</x:xmpmeta>

View File

@ -22,6 +22,7 @@
<rdf:Description rdf:about=""
xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/">
<photoshop:Headline>Headline</photoshop:Headline>
<photoshop:Credit>Credit</photoshop:Credit>
<photoshop:DateCreated>2010-01-01</photoshop:DateCreated>
</rdf:Description>
<rdf:Description rdf:about=""
@ -29,7 +30,6 @@
<avm:Spectral.Notes>Spectral Notes</avm:Spectral.Notes>
<avm:Distance.Notes>Distance Notes</avm:Distance.Notes>
<avm:ReferenceURL>Reference URL</avm:ReferenceURL>
<avm:Credit>Credit</avm:Credit>
<avm:ID>ID</avm:ID>
<avm:Type>Observation</avm:Type>
<avm:Image.ProductQuality>Good</avm:Image.ProductQuality>
@ -78,6 +78,18 @@
<rdf:li>4</rdf:li>
</rdf:Seq>
</avm:Spatial.CDMatrix>
<avm:Publisher>Publisher</avm:Publisher>
<avm:PublisherID>Publisher ID</avm:PublisherID>
<avm:ResourceID>Resource ID</avm:ResourceID>
<avm:ResourceURL>Resource URL</avm:ResourceURL>
<avm:RelatedResources>
<rdf:Bag>
<rdf:li>Resource 1</rdf:li>
<rdf:li>Resource 2</rdf:li>
</rdf:Bag>
</avm:RelatedResources>
<avm:MetadataDate>2010-01-05</avm:MetadataDate>
<avm:MetadataVersion>1.2</avm:MetadataVersion>
</rdf:Description>
</rdf:RDF>
</x:xmpmeta>

View File

@ -21,6 +21,7 @@
<rdf:Description rdf:about=""
xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/">
<photoshop:Headline>Headline</photoshop:Headline>
<photoshop:Credit>Credit</photoshop:Credit>
<photoshop:DateCreated>2010-01-01</photoshop:DateCreated>
</rdf:Description>
<rdf:Description rdf:about=""
@ -28,7 +29,6 @@
<avm:Spectral.Notes>Spectral Notes</avm:Spectral.Notes>
<avm:Distance.Notes>Distance Notes</avm:Distance.Notes>
<avm:ReferenceURL>Reference URL</avm:ReferenceURL>
<avm:Credit>Credit</avm:Credit>
<avm:ID>ID</avm:ID>
<avm:Type>Observation</avm:Type>
<avm:Image.ProductQuality>Good</avm:Image.ProductQuality>
@ -72,6 +72,18 @@
<rdf:li>4</rdf:li>
</rdf:Seq>
</avm:Spatial.CDMatrix>
<avm:Publisher>Publisher</avm:Publisher>
<avm:PublisherID>Publisher ID</avm:PublisherID>
<avm:ResourceID>Resource ID</avm:ResourceID>
<avm:ResourceURL>Resource URL</avm:ResourceURL>
<avm:RelatedResources>
<rdf:Bag>
<rdf:li>Resource 1</rdf:li>
<rdf:li>Resource 2</rdf:li>
</rdf:Bag>
</avm:RelatedResources>
<avm:MetadataDate>2010-01-05</avm:MetadataDate>
<avm:MetadataVersion>1.2</avm:MetadataVersion>
</rdf:Description>
</rdf:RDF>
</x:xmpmeta>