mods_display 0.0.3 → 0.0.4

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.
@@ -6,25 +6,32 @@ class ModsDisplay::Imprint < ModsDisplay::Field
6
6
  if imprint_display_form(val)
7
7
  return_values << imprint_display_form(val)
8
8
  else
9
+ edition = nil
9
10
  place = nil
10
11
  publisher = nil
11
12
  placePub = nil
13
+ edition = val.edition.map do |e|
14
+ e.text unless e.text.strip.empty?
15
+ end.compact.join(" ").strip
12
16
  place = val.place.map do |p|
13
17
  p.text unless p.text.strip.empty?
14
18
  end.compact.join(" : ").strip unless val.place.text.strip.empty?
15
19
  publisher = val.publisher.map do |p|
16
20
  p.text unless p.text.strip.empty?
17
21
  end.compact.join(" : ").strip unless val.publisher.text.strip.empty?
18
- placePub = [place, publisher].compact.join(" : ")
19
- placePub = nil if placePub.strip.empty?
20
22
  parts = val.children.select do |child|
21
- ["dateCreated", "dateIssued", "dateCaptured", "dateOther"].include?(child.name) and !child.attributes.has_key?("encoding")
23
+ ["dateIssued", "dateOther"].include?(child.name) and !child.attributes.has_key?("encoding")
22
24
  end.map do |child|
23
25
  child.text.strip unless child.text.strip.empty?
24
26
  end.compact.join(", ")
27
+ edition = nil if edition.strip.empty?
25
28
  parts = nil if parts.strip.empty?
26
- unless [placePub, parts].compact.join(", ").strip.empty?
27
- return_values << ModsDisplay::Values.new(:label => displayLabel(val) || "Imprint", :values => [[placePub, parts].compact.join(", ")])
29
+ placePub = [place, publisher].compact.join(" : ")
30
+ placePub = nil if placePub.strip.empty?
31
+ editionPlace = [edition, placePub].compact.join(" - ")
32
+ editionPlace = nil if editionPlace.strip.empty?
33
+ unless [editionPlace, parts].compact.join(", ").strip.empty?
34
+ return_values << ModsDisplay::Values.new(:label => displayLabel(val) || "Imprint", :values => [[editionPlace, parts].compact.join(", ")])
28
35
  end
29
36
  if other_pub_info(val).length > 0
30
37
  other_pub_info(val).each do |pub_info|
@@ -56,10 +63,11 @@ class ModsDisplay::Imprint < ModsDisplay::Field
56
63
  end
57
64
 
58
65
  def pub_info_labels
59
- {:dateValid => "Date valid",
66
+ {:dateCreated => "Date created",
67
+ :dateCaptured => "Date captured",
68
+ :dateValid => "Date valid",
60
69
  :dateModified => "Date modified",
61
70
  :copyrightDate => "Copyright date",
62
- :edition => "Edition",
63
71
  :issuance => "Issuance",
64
72
  :frequency => "Frequency"
65
73
  }
@@ -21,7 +21,7 @@ class ModsDisplay::Title < ModsDisplay::Field
21
21
  ["partName", "partNumber"].include?(child.name)
22
22
  end.map do |child|
23
23
  child.text
24
- end.compact.join(", ")
24
+ end.compact.join(parts_delimiter(val))
25
25
  parts = nil if parts.strip.empty?
26
26
  return_values << ModsDisplay::Values.new(:label => displayLabel(val) || title_label(val), :values => [[preParts, parts].compact.join(". ")])
27
27
  end
@@ -31,6 +31,15 @@ class ModsDisplay::Title < ModsDisplay::Field
31
31
 
32
32
  private
33
33
 
34
+ def parts_delimiter(element)
35
+ children = element.children.to_a
36
+ # index will retun nil which is not comparable so we call 100 if the element isn't present (thus meaning it's at the end of the list)
37
+ if (children.index{ |c| c.name == "partNumber" } || 100) < (children.index{|c| c.name == "partName"} || 100)
38
+ return ", "
39
+ end
40
+ ". "
41
+ end
42
+
34
43
  def title_label(element)
35
44
  if (element.attributes["type"].respond_to?(:value) and
36
45
  title_labels.has_key?(element.attributes["type"].value))
@@ -1,3 +1,3 @@
1
1
  module ModsDisplay
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -10,6 +10,7 @@ end
10
10
  describe ModsDisplay::Imprint do
11
11
  before(:all) do
12
12
  @imprint = Stanford::Mods::Record.new.from_str(imprint_mods, false).origin_info
13
+ @no_edition = Stanford::Mods::Record.new.from_str(no_edition_mods, false).origin_info
13
14
  @edition_and_date = Stanford::Mods::Record.new.from_str(origin_info_mods, false).origin_info
14
15
  @encoded_date = Stanford::Mods::Record.new.from_str(encoded_date, false).origin_info
15
16
  @encoded_only = Stanford::Mods::Record.new.from_str(only_encoded_data, false).origin_info
@@ -26,24 +27,29 @@ describe ModsDisplay::Imprint do
26
27
  it "should get the label from non-imprint origin info fields" do
27
28
  fields = mods_display_imprint(@edition_and_date).fields
28
29
  fields.first.label.should == "Date valid"
29
- fields.last.label.should == "Edition"
30
+ fields.last.label.should == "Issuance"
30
31
  end
31
32
  it "should get multiple labels when we have mixed content" do
32
- mods_display_imprint(@mixed).fields.map{|val| val.label }.should == ["Imprint", "Edition"]
33
+ mods_display_imprint(@mixed).fields.map{|val| val.label }.should == ["Imprint", "Issuance", "Date captured"]
33
34
  end
34
35
  it "should use the displayLabel when available" do
35
- mods_display_imprint(@display_label).fields.map{|val| val.label }.should == ["TheLabel", "EditionLabel", "EditionLabel"]
36
+ mods_display_imprint(@display_label).fields.map{|val| val.label }.should == ["TheLabel", "IssuanceLabel", "IssuanceLabel"]
36
37
  end
37
38
  end
38
39
 
39
40
  describe "fields" do
40
41
  it "should return various parts of the imprint" do
41
- mods_display_imprint(@imprint).fields.map{|val| val.values }.join(" ").should == "A Place : A Publisher, A Create Date, An Issue Date, A Capture Date, Another Date"
42
+ mods_display_imprint(@imprint).fields.map{|val| val.values }.join(" ").should == "An edition - A Place : A Publisher, An Issue Date, Another Date"
43
+ end
44
+ it "should handle the punctuation when the edition is missing" do
45
+ values = mods_display_imprint(@no_edition).fields.map{|val| val.values }.join(" ")
46
+ values.strip.should_not match(/^-/)
47
+ values.should match(/^A Place/)
42
48
  end
43
49
  it "should get the text for non-imprint origin info fields" do
44
50
  fields = mods_display_imprint(@edition_and_date).fields
45
51
  fields.first.values.should == ["A Valid Date"]
46
- fields.last.values.should == ["The Edition"]
52
+ fields.last.values.should == ["The Issuance"]
47
53
  end
48
54
  it "should omit dates with an encoding attribute" do
49
55
  mods_display_imprint(@encoded_date).fields.map{|val| val.values }.join.should_not include("An Encoded Date")
@@ -53,9 +59,10 @@ describe ModsDisplay::Imprint do
53
59
  end
54
60
  it "should handle mixed mods properly" do
55
61
  values = mods_display_imprint(@mixed).fields
56
- values.length.should == 2
62
+ values.length.should == 3
57
63
  values.map{|val| val.values}.should include(["A Place : A Publisher"])
58
- values.map{|val| val.values}.should include(["The Edition"])
64
+ values.map{|val| val.values}.should include(["The Issuance"])
65
+ values.map{|val| val.values}.should include(["The Capture Date"])
59
66
  end
60
67
  end
61
68
  describe "to_html" do
@@ -70,8 +77,9 @@ describe ModsDisplay::Imprint do
70
77
  it "should have individual dt/dd pairs for mixed content" do
71
78
  html = mods_display_imprint(@mixed).to_html
72
79
  html.scan(/<dt title='Imprint'>Imprint:<\/dt>/).length.should == 1
73
- html.scan(/<dt title='Edition'>Edition:<\/dt>/).length.should == 1
74
- html.scan(/<dd>/).length.should == 2
80
+ html.scan(/<dt title='Issuance'>Issuance:<\/dt>/).length.should == 1
81
+ html.scan(/<dt title='Date captured'>Date captured:<\/dt>/).length.should == 1
82
+ html.scan(/<dd>/).length.should == 3
75
83
  end
76
84
  end
77
85
 
@@ -7,7 +7,8 @@ end
7
7
  describe ModsDisplay::Title do
8
8
  before(:all) do
9
9
  @title = Stanford::Mods::Record.new.from_str("<mods><titleInfo><title>Title</title></titleInfo></mods>", false).title_info
10
- @title_parts = Stanford::Mods::Record.new.from_str("<mods><titleInfo><nonSort>The</nonSort><title>Title</title><subTitle>For</subTitle><partName>Something</partName><partNumber>62</partNumber></titleInfo></mods>", false).title_info
10
+ @title_parts = Stanford::Mods::Record.new.from_str("<mods><titleInfo><nonSort>The</nonSort><title>Title</title><subTitle>For</subTitle><partName>Something</partName><partNumber>Part 62</partNumber></titleInfo></mods>", false).title_info
11
+ @reverse_title_parts = Stanford::Mods::Record.new.from_str("<mods><titleInfo><nonSort>The</nonSort><title>Title</title><subTitle>For</subTitle><partNumber>Part 62</partNumber><partName>Something</partName></titleInfo></mods>", false).title_info
11
12
  @display_label = Stanford::Mods::Record.new.from_str("<mods><titleInfo displayLabel='MyTitle'><title>Title</title></titleInfo></mods>", false).title_info
12
13
  @display_form = Stanford::Mods::Record.new.from_str("<mods><titleInfo><title>Title</title><displayForm>The Title of This Item</displayForm></titleInfo></mods>", false).title_info
13
14
  @alt_title = Stanford::Mods::Record.new.from_str("<mods><titleInfo type='alternative'><title>Title</title></titleInfo></mods>", false).title_info
@@ -34,7 +35,10 @@ describe ModsDisplay::Title do
34
35
  end
35
36
  describe "text" do
36
37
  it "should construct all the elements in titleInfo" do
37
- mods_display_title(@title_parts).fields.first.values.should include "The Title : For. Something, 62"
38
+ mods_display_title(@title_parts).fields.first.values.should include "The Title : For. Something. Part 62"
39
+ end
40
+ it "should use the correct delimiter in the case that a partNumber comes before a partName" do
41
+ mods_display_title(@reverse_title_parts).fields.first.values.should include "The Title : For. Part 62, Something"
38
42
  end
39
43
  it "should use the displayForm when available" do
40
44
  mods_display_title(@display_form).fields.first.values.should include "The Title of This Item"
@@ -1,5 +1,18 @@
1
1
  module ImprintFixtures
2
2
  def imprint_mods
3
+ <<-MODS
4
+ <mods>
5
+ <originInfo>
6
+ <edition>An edition</edition>
7
+ <place>A Place</place>
8
+ <publisher>A Publisher</publisher>
9
+ <dateIssued>An Issue Date</dateIssued>
10
+ <dateOther>Another Date</dateOther>
11
+ </originInfo>
12
+ </mods>
13
+ MODS
14
+ end
15
+ def no_edition_mods
3
16
  <<-MODS
4
17
  <mods>
5
18
  <originInfo>
@@ -20,7 +33,7 @@ module ImprintFixtures
20
33
  <dateValid>A Valid Date</dateValid>
21
34
  </originInfo>
22
35
  <originInfo>
23
- <edition>The Edition</edition>
36
+ <issuance>The Issuance</issuance>
24
37
  </originInfo>
25
38
  </mods>
26
39
  MODS
@@ -50,7 +63,8 @@ module ImprintFixtures
50
63
  <originInfo>
51
64
  <place>A Place</place>
52
65
  <publisher>A Publisher</publisher>
53
- <edition>The Edition</edition>
66
+ <issuance>The Issuance</issuance>
67
+ <dateCaptured>The Capture Date</dateCaptured>
54
68
  </originInfo>
55
69
  </mods>
56
70
  MODS
@@ -75,13 +89,14 @@ module ImprintFixtures
75
89
  <<-MODS
76
90
  <mods>
77
91
  <originInfo displayLabel="TheLabel">
92
+ <edition>The edition</edition>
78
93
  <place>A Place</place>
79
94
  <publisher>A Publisher</publisher>
80
95
  </originInfo>
81
- <originInfo displayLabel="EditionLabel">
96
+ <originInfo displayLabel="IssuanceLabel">
82
97
  <place>A Place</place>
83
98
  <publisher>A Publisher</publisher>
84
- <edition>The Edition</edition>
99
+ <issuance>The Edition</issuance>
85
100
  </originInfo>
86
101
  </mods>
87
102
  MODS
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.3
4
+ version: 0.0.4
5
5
  prerelease:
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-06-27 00:00:00.000000000 Z
12
+ date: 2013-07-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: stanford-mods
@@ -151,7 +151,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
151
151
  version: '0'
152
152
  segments:
153
153
  - 0
154
- hash: -2372385921417665833
154
+ hash: -1792709584890457737
155
155
  required_rubygems_version: !ruby/object:Gem::Requirement
156
156
  none: false
157
157
  requirements:
@@ -160,7 +160,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
160
160
  version: '0'
161
161
  segments:
162
162
  - 0
163
- hash: -2372385921417665833
163
+ hash: -1792709584890457737
164
164
  requirements: []
165
165
  rubyforge_project:
166
166
  rubygems_version: 1.8.25