mods_display 0.0.1.beta3 → 0.0.1.beta4

Sign up to get free protection for your applications and to get access to all the features.
@@ -6,8 +6,34 @@ class ModsDisplay::Field
6
6
  end
7
7
 
8
8
  def fields
9
+ return_values = []
10
+ current_label = nil
11
+ prev_label = nil
12
+ buffer = []
13
+ @value.each_with_index do |val, index|
14
+ current_label = displayLabel(val)
15
+ current_text = (text || val.text).strip
16
+ if @value.length == 1
17
+ return_values << ModsDisplay::Values.new(:label => current_label, :values => [current_text])
18
+ elsif index == (@value.length-1)
19
+ # need to deal w/ when we have a last element but we have separate labels in the buffer.
20
+ if current_label != prev_label
21
+ return_values << ModsDisplay::Values.new(:label => prev_label, :values => buffer.flatten)
22
+ return_values << ModsDisplay::Values.new(:label => current_label, :values => [current_text])
23
+ else
24
+ buffer << current_text
25
+ return_values << ModsDisplay::Values.new(:label => current_label, :values => buffer.flatten)
26
+ end
27
+ elsif prev_label and (current_label != prev_label)
28
+ return_values << ModsDisplay::Values.new(:label => prev_label, :values => buffer.flatten)
29
+ buffer = []
30
+ end
31
+ buffer << current_text
32
+ prev_label = current_label
33
+ end
34
+ return_values
9
35
  @value.map do |val|
10
- ModsDisplay::Values.new(:label => displayLabel(val), :values => [text || val.text].flatten)
36
+ ModsDisplay::Values.new(:label => displayLabel(val) || label, :values => [text || val.text].flatten)
11
37
  end
12
38
  end
13
39
 
@@ -27,12 +53,14 @@ class ModsDisplay::Field
27
53
  return nil if fields.empty?
28
54
  output = ""
29
55
  fields.each do |field|
30
- output << "<dt#{label_class} title='#{field.label}'>#{field.label}:</dt>"
31
- output << "<dd#{value_class}>"
32
- output << field.values.map do |val|
33
- @config.link ? link_to_value(val.to_s) : val.to_s
34
- end.join(@config.delimiter)
35
- output << "</dd>"
56
+ if field.values.any?{|f| !f.empty? }
57
+ output << "<dt#{label_class} title='#{field.label}'>#{field.label}:</dt>"
58
+ output << "<dd#{value_class}>"
59
+ output << field.values.map do |val|
60
+ @config.link ? link_to_value(val.to_s) : val.to_s
61
+ end.join(@config.delimiter)
62
+ output << "</dd>"
63
+ end
36
64
  end
37
65
  output
38
66
  end
@@ -1,23 +1,17 @@
1
1
  class ModsDisplay::Location < ModsDisplay::Field
2
-
3
- def fields
4
- return_values = []
5
- @value.each do |val|
6
- return_values << ModsDisplay::Values.new(:label => label || location_label(val), :values => [val.text])
7
- end
8
- return_values
9
- end
10
-
2
+
11
3
  private
12
-
4
+
5
+ def displayLabel(element)
6
+ super(element) || location_label(element) || "Location"
7
+ end
8
+
13
9
  def location_label(element)
14
10
  if element.attributes["type"].respond_to?(:value) && location_labels.has_key?(element.attributes["type"].value)
15
11
  location_labels[element.attributes["type"].value]
16
- else
17
- "Location"
18
12
  end
19
13
  end
20
-
14
+
21
15
  def location_labels
22
16
  {"repository" => "Repository"}
23
17
  end
@@ -21,21 +21,21 @@ class ModsDisplay::Name < ModsDisplay::Field
21
21
  name_parts = val.namePart.map do |name_part|
22
22
  name_part.text
23
23
  end.join(", ")
24
- people << ModsDisplay::Name::Person.new(:name => name_parts, :role => role)
24
+ people << ModsDisplay::Name::Person.new(:name => name_parts, :role => role) unless name_parts.empty?
25
25
  end
26
26
  if @value.length == 1
27
- return_values << ModsDisplay::Values.new(:label => current_label, :values => people.flatten)
27
+ return_values << ModsDisplay::Values.new(:label => current_label, :values => people.flatten) unless people.empty?
28
28
  elsif index == (@value.length-1)
29
29
  # need to deal w/ when we have a last element but we have separate labels in the buffer.
30
30
  if current_label != prev_label
31
- return_values << ModsDisplay::Values.new(:label => prev_label, :values => buffer.flatten)
32
- return_values << ModsDisplay::Values.new(:label => current_label, :values => people.flatten)
31
+ return_values << ModsDisplay::Values.new(:label => prev_label, :values => buffer.flatten) unless buffer.flatten.empty?
32
+ return_values << ModsDisplay::Values.new(:label => current_label, :values => people.flatten) unless people.empty?
33
33
  else
34
34
  buffer << people
35
- return_values << ModsDisplay::Values.new(:label => current_label, :values => buffer.flatten)
35
+ return_values << ModsDisplay::Values.new(:label => current_label, :values => buffer.flatten) unless buffer.flatten.empty?
36
36
  end
37
37
  elsif prev_label and (current_label != prev_label)
38
- return_values << ModsDisplay::Values.new(:label => prev_label, :values => buffer.flatten)
38
+ return_values << ModsDisplay::Values.new(:label => prev_label, :values => buffer.flatten) unless buffer.flatten.empty?
39
39
  buffer = []
40
40
  end
41
41
  buffer << people
@@ -2,7 +2,11 @@ class ModsDisplay::RelatedItem < ModsDisplay::Field
2
2
 
3
3
  def fields
4
4
  return_values = []
5
- @value.each do |val|
5
+ current_label = nil
6
+ prev_label = nil
7
+ buffer = []
8
+ @value.each_with_index do |val, index|
9
+ current_label = (displayLabel(val) || "Related Item")
6
10
  unless (val.typeOfResource.length > 0 and
7
11
  val.typeOfResource.attributes.length > 0 and
8
12
  val.typeOfResource.attributes.first.has_key?("collection") and
@@ -13,8 +17,26 @@ class ModsDisplay::RelatedItem < ModsDisplay::Field
13
17
  location = nil
14
18
  location = val.location.url.text if (val.location.length > 0 and
15
19
  val.location.url.length > 0)
16
- return_text = "<a href='#{location}'>#{title}</a>" if location
17
- return_values << ModsDisplay::Values.new(:label => displayLabel(val) || "Related Item", :values => [return_text])
20
+ return_text = "<a href='#{location}'>#{title}</a>" if location and !title.empty?
21
+ end
22
+ unless return_text.empty?
23
+ if @value.length == 1
24
+ return_values << ModsDisplay::Values.new(:label => current_label, :values => [return_text])
25
+ elsif index == (@value.length-1)
26
+ # need to deal w/ when we have a last element but we have separate labels in the buffer.
27
+ if current_label != prev_label
28
+ return_values << ModsDisplay::Values.new(:label => prev_label, :values => buffer.flatten)
29
+ return_values << ModsDisplay::Values.new(:label => current_label, :values => [return_text])
30
+ else
31
+ buffer << return_text
32
+ return_values << ModsDisplay::Values.new(:label => current_label, :values => buffer.flatten)
33
+ end
34
+ elsif prev_label and (current_label != prev_label)
35
+ return_values << ModsDisplay::Values.new(:label => prev_label, :values => buffer.flatten)
36
+ buffer = []
37
+ end
38
+ buffer << return_text
39
+ prev_label = current_label
18
40
  end
19
41
  end
20
42
  end
@@ -1,14 +1,17 @@
1
1
  class ModsDisplay::RelatedLocation < ModsDisplay::Field
2
2
 
3
-
4
3
  def fields
5
4
  return_values = []
6
5
  @value.each do |val|
7
- if val.location.length > 0
8
- return_values << ModsDisplay::Values.new(:label => displayLabel(val) || "Location", :values => [val.location.text.strip])
6
+ if val.location.length > 0 and val.titleInfo.length < 1
7
+ return_values << ModsDisplay::Values.new(:label => displayLabel(val), :values => [val.location.text.strip])
9
8
  end
10
9
  end
11
10
  return_values
12
11
  end
13
12
 
13
+ def displayLabel(element)
14
+ super(element) || "Location"
15
+ end
16
+
14
17
  end
@@ -6,12 +6,12 @@ class ModsDisplay::Subject < ModsDisplay::Field
6
6
  return_text = []
7
7
  selected_subjects(val).each do |child|
8
8
  if self.respond_to?(:"process_#{child.name}")
9
- return_text << self.send(:"process_#{child.name}", child)
9
+ return_text << self.send(:"process_#{child.name}", child) unless self.send(:"process_#{child.name}", child).to_s.empty?
10
10
  else
11
11
  if child.text.include?("--")
12
12
  return_text << child.text.split("--").map{|t| t.strip }
13
13
  else
14
- return_text << child.text
14
+ return_text << child.text unless child.text.empty?
15
15
  end
16
16
  end
17
17
  end
@@ -55,7 +55,7 @@ class ModsDisplay::HTML
55
55
 
56
56
  def field_config(field_key)
57
57
  begin
58
- @config.send(field_key)
58
+ @config.send(field_key_translation[field_key] || field_key)
59
59
  rescue
60
60
  ModsDisplay::Configuration::Base.new
61
61
  end
@@ -84,4 +84,11 @@ class ModsDisplay::HTML
84
84
  :identifier => :identifier,
85
85
  :location => :location}
86
86
  end
87
+
88
+ def field_key_translation
89
+ {:relatedLocation => :related_location,
90
+ :relatedItem => :related_item
91
+ }
92
+ end
93
+
87
94
  end
@@ -1,3 +1,3 @@
1
1
  module ModsDisplay
2
- VERSION = "0.0.1.beta3"
2
+ VERSION = "0.0.1.beta4"
3
3
  end
@@ -16,6 +16,7 @@ end
16
16
  describe ModsDisplay::Language do
17
17
  before(:all) do
18
18
  @name = Stanford::Mods::Record.new.from_str("<mods><name><namePart>John Doe</namePart></name></mods>", false).plain_name
19
+ @blank_name = Stanford::Mods::Record.new.from_str("<mods><name><namePart/><role><roleTerm></roleTerm></role></name></mods>", false).plain_name
19
20
  @conf_name = Stanford::Mods::Record.new.from_str("<mods><name type='conference'><namePart>John Doe</namePart></name></mods>", false).plain_name
20
21
  @display_form = Stanford::Mods::Record.new.from_str("<mods><name><namePart>John Doe</namePart><displayForm>Mr. John Doe</displayForm></name></mods>", false).plain_name
21
22
  @collapse_label = Stanford::Mods::Record.new.from_str("<mods><name><namePart>John Doe</namePart></name><name><namePart>Jane Doe</namePart></name></mods>", false).plain_name
@@ -46,6 +47,9 @@ describe ModsDisplay::Language do
46
47
  fields.first.values.first.should be_a(ModsDisplay::Name::Person)
47
48
  fields.first.values.first.role.should == "Depicted"
48
49
  end
50
+ it "should not add blank names" do
51
+ mods_display_name(@blank_name).fields.should == []
52
+ end
49
53
  it "should collapse adjacent matching labels" do
50
54
  fields = mods_display_name(@collapse_label).fields
51
55
  fields.length.should == 1
@@ -10,6 +10,8 @@ describe ModsDisplay::RelatedItem do
10
10
  @linked_item = Stanford::Mods::Record.new.from_str("<mods><relatedItem><titleInfo>A Related Item</titleInfo><location><url>http://library.stanford.edu/</url></location></relatedItem></mods>", false).related_item
11
11
  @collection = Stanford::Mods::Record.new.from_str("<mods><relatedItem><titleInfo>This is a Collection</titleInfo><typeOfResource collection='yes' /></relatedItem></mods>", false).related_item
12
12
  @display_label = Stanford::Mods::Record.new.from_str("<mods><relatedItem displayLabel='Special Item'><titleInfo>A Related Item</titleInfo></relatedItem></mods>", false).related_item
13
+ @blank_item = Stanford::Mods::Record.new.from_str("<mods><relatedItem><titleInfo><title></title></titleInfo><location><url></url></location></relatedItem></mods>", false).related_item
14
+ @multi_items = Stanford::Mods::Record.new.from_str("<mods><relatedItem><titleInfo><title>Library</title></titleInfo><location><url>http://library.stanford.edu</url></location></relatedItem><relatedItem><titleInfo><title>SDR</title></titleInfo><location><url>http://purl.stanford.edu</url></location></relatedItem></mods>", false).related_item
13
15
  end
14
16
  describe "label" do
15
17
  it "should default to Related Item" do
@@ -33,5 +35,16 @@ describe ModsDisplay::RelatedItem do
33
35
  it "should not return any fields if the described related item is a collection" do
34
36
  mods_display_item(@collection).fields.should == []
35
37
  end
38
+ it "should not return empty links when there is no title or link" do
39
+ mods_display_item(@blank_item).fields.should == []
40
+ end
41
+ it "should collapse labels down into the same record" do
42
+ fields = mods_display_item(@multi_items).fields
43
+ fields.length.should == 1
44
+ fields.first.label.should == "Related Item"
45
+ fields.first.values.length.should == 2
46
+ fields.first.values.first.should =~ /<a href=.*>Library<\/a>/ or
47
+ fields.first.values.last.should =~ /<a href=.*>SDR<\/a>/
48
+ end
36
49
  end
37
50
  end
@@ -8,6 +8,7 @@ describe ModsDisplay::RelatedLocation do
8
8
  before(:all) do
9
9
  @location = Stanford::Mods::Record.new.from_str("<mods><relatedItem><location>The Location</location></relatedItem></mods>", false).related_item
10
10
  @non_location = Stanford::Mods::Record.new.from_str("<mods><relatedItem><title>No Location</title></relatedItem></mods>", false).related_item
11
+ @related_item = Stanford::Mods::Record.new.from_str("<mods><relatedItem><titleInfo>Do not display as Related Location</titleInfo><location>The Location</location></relatedItem></mods>", false).related_item
11
12
  @display_label = Stanford::Mods::Record.new.from_str("<mods><relatedItem displayLabel='Special Location'><location>The Location</location></relatedItem></mods>", false).related_item
12
13
  end
13
14
  describe "label" do
@@ -27,5 +28,8 @@ describe ModsDisplay::RelatedLocation do
27
28
  it "should not return any fields if there is no location" do
28
29
  mods_display_related_location(@non_location).fields.should == []
29
30
  end
31
+ it "should not return locations that are already related items" do
32
+ mods_display_related_location(@related_item).fields.should == []
33
+ end
30
34
  end
31
35
  end
@@ -20,6 +20,7 @@ end
20
20
  describe ModsDisplay::Subject do
21
21
  before(:all) do
22
22
  @subject = Stanford::Mods::Record.new.from_str(subjects, false).subject
23
+ @blank_subject = Stanford::Mods::Record.new.from_str(blank_subject, false).subject
23
24
  @emdash_subject = Stanford::Mods::Record.new.from_str(emdash_subjects, false).subject
24
25
  @geo_subject = Stanford::Mods::Record.new.from_str(hierarchical_geo_subjects, false).subject
25
26
  @name_subject = Stanford::Mods::Record.new.from_str(name_subjects, false).subject
@@ -42,6 +43,9 @@ describe ModsDisplay::Subject do
42
43
  fields.length.should == 1
43
44
  fields.first.values.should == [["United States", "California", "Stanford"]]
44
45
  end
46
+ it "should handle blank subjects properly" do
47
+ mods_display_subject(@blank_subject).fields.should == []
48
+ end
45
49
  end
46
50
 
47
51
  describe "name subjects" do
@@ -10,6 +10,16 @@ module SubjectsFixtures
10
10
  </mods>
11
11
  XML
12
12
  end
13
+
14
+ def blank_subject
15
+ <<-XML
16
+ <mods>
17
+ <subject>
18
+ <topic/>
19
+ </subject>
20
+ </mods>
21
+ XML
22
+ end
13
23
 
14
24
  def emdash_subjects
15
25
  <<-XML
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mods_display
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1.beta3
4
+ version: 0.0.1.beta4
5
5
  prerelease: 6
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-05-29 00:00:00.000000000 Z
12
+ date: 2013-06-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: stanford-mods
@@ -139,7 +139,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
139
139
  version: '0'
140
140
  segments:
141
141
  - 0
142
- hash: -2627729319439715150
142
+ hash: -2208754655843204973
143
143
  required_rubygems_version: !ruby/object:Gem::Requirement
144
144
  none: false
145
145
  requirements: