mods_display 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8ec2c58c34a3f05225a077459d6cc226cd587a0a
4
- data.tar.gz: c0e3f4e6e7533f5b25c0eb735f0bd0f5cfd9ea47
3
+ metadata.gz: b6fbeb6e358da70acf9959feba56cea0b735f47b
4
+ data.tar.gz: b4236dd3026d7d7cb3c5a93217e64491c6fd6528
5
5
  SHA512:
6
- metadata.gz: 567d5eed25681658bf0cd94141d83b846d99b9d6698e20462f52a83a52f833c4e757fdb2da218c1c0decec854bc9b2651d044397685847e8547127afca49d8bb
7
- data.tar.gz: f3e05076e40607b5ca914401feb0acce6aacf80ba43361bfbdb05aa535d4372fae6832910c0f805be6b422141d310c17e3e57dba4062afba21c980c3a9a8447e
6
+ metadata.gz: b2e555e1dd3269a8ad2fea3aa1426e042b417992cba343369dc4c8ba3a27c66c18d2ab637df006e9a9f69550a31d44237ed7535994093da65bcf3f916460dbb2
7
+ data.tar.gz: 91caac5689b774665d1e027b20cb4dbdcded4f62950799c46c77a062781968588e36a8313049695cb9b6baaf54494057d65cbf1289de2191d02ec156093cc0b7
@@ -1,8 +1,10 @@
1
1
  class ModsDisplay::Subject < ModsDisplay::Field
2
2
 
3
3
  def fields
4
- return_values = []
4
+ return_fields = []
5
5
  @values.each do |value|
6
+ return_values = []
7
+ label = displayLabel(value) || "Subject"
6
8
  return_text = []
7
9
  selected_subjects(value).each do |child|
8
10
  if self.respond_to?(:"process_#{child.name}")
@@ -18,9 +20,11 @@ class ModsDisplay::Subject < ModsDisplay::Field
18
20
  unless return_text.empty?
19
21
  return_values << return_text.flatten
20
22
  end
23
+ unless return_values.empty?
24
+ return_fields << ModsDisplay::Values.new(:label => label, :values => return_values)
25
+ end
21
26
  end
22
- return [] if return_values.empty?
23
- [ModsDisplay::Values.new(:label => "Subject", :values => return_values)]
27
+ collapse_subjects return_fields
24
28
  end
25
29
 
26
30
  # Would really like to clean this up, but it works and is tested for now.
@@ -99,5 +103,35 @@ class ModsDisplay::Subject < ModsDisplay::Field
99
103
  def omit_elements
100
104
  [:cartographics, :geographicCode, :text]
101
105
  end
102
-
106
+
107
+ # Providing subject specific collapsing method so we can
108
+ # collapse the labels w/o flattening all the subject fields.
109
+ def collapse_subjects(display_fields)
110
+ return_values = []
111
+ current_label = nil
112
+ prev_label = nil
113
+ buffer = []
114
+ display_fields.each_with_index do |field, index|
115
+ current_label = field.label
116
+ current_values = field.values
117
+ if display_fields.length == 1
118
+ return_values << ModsDisplay::Values.new(:label => current_label, :values => current_values)
119
+ elsif index == (display_fields.length-1)
120
+ # need to deal w/ when we have a last element but we have separate labels in the buffer.
121
+ if current_label != prev_label
122
+ return_values << ModsDisplay::Values.new(:label => prev_label, :values => [buffer.flatten(1)])
123
+ return_values << ModsDisplay::Values.new(:label => current_label, :values => current_values)
124
+ else
125
+ buffer.concat(current_values)
126
+ return_values << ModsDisplay::Values.new(:label => current_label, :values => buffer.flatten(0))
127
+ end
128
+ elsif prev_label and (current_label != prev_label)
129
+ return_values << ModsDisplay::Values.new(:label => prev_label, :values => buffer.flatten(0))
130
+ buffer = []
131
+ end
132
+ buffer.concat(current_values)
133
+ prev_label = current_label
134
+ end
135
+ return_values
136
+ end
103
137
  end
@@ -1,3 +1,3 @@
1
1
  module ModsDisplay
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.1"
3
3
  end
data/mods_display.gemspec CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |gem|
10
10
  gem.email = ["jessie.keck@gmail.com"]
11
11
  gem.description = %q{MODS Display is a gem to centralize the display logic of MODS medadata.}
12
12
  gem.summary = %q{The MODS Display gem allows implementers to configure a customized display of MODS metadata. This display implements the specifications defined at Stanford for how to display MODS.}
13
- gem.homepage = ""
13
+ gem.homepage = "https://github.com/sul-dlss/mods_display"
14
14
 
15
15
  gem.files = `git ls-files`.split($/)
16
16
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
@@ -25,8 +25,8 @@ describe ModsDisplay::Subject do
25
25
  @geo_subject = Stanford::Mods::Record.new.from_str(hierarchical_geo_subjects, false).subject
26
26
  @name_subject = Stanford::Mods::Record.new.from_str(name_subjects, false).subject
27
27
  @complex_subject = Stanford::Mods::Record.new.from_str(complex_subjects, false).subject
28
+ @display_label = Stanford::Mods::Record.new.from_str(display_label_subjects, false).subject
28
29
  end
29
-
30
30
  describe "fields" do
31
31
  it "should split individual child elments of subject into separate parts" do
32
32
  fields = mods_display_subject(@subject).fields
@@ -43,6 +43,16 @@ describe ModsDisplay::Subject do
43
43
  fields.length.should == 1
44
44
  fields.first.values.should == [["United States", "California", "Stanford"]]
45
45
  end
46
+ it "should handle display labels properly" do
47
+ fields = mods_display_subject(@display_label).fields
48
+ fields.length.should == 3
49
+ fields.first.label.should == "Subject"
50
+ fields.first.values.should == [["A Subject", "Another Subject"], ["B Subject", "Another B Subject"]]
51
+ fields[1].label.should == "Subject Heading"
52
+ fields[1].values.should == [["Jazz", "Japan", "History and criticism"]]
53
+ fields.last.label.should == "Subject"
54
+ fields.last.values.should == [["Bay Area", "Stanford"]]
55
+ end
46
56
  it "should handle blank subjects properly" do
47
57
  mods_display_subject(@blank_subject).fields.should == []
48
58
  end
@@ -88,6 +98,12 @@ describe ModsDisplay::Subject do
88
98
  html.scan(/<br\/>/).length.should == 1
89
99
  html.scan(/ &gt; /).length.should == 3
90
100
  end
101
+ it "should handle complex display labels" do
102
+ html = mods_display_subject(@display_label).to_html
103
+ html.scan(/<dt title='Subject'>Subject:<\/dt>/).length.should eq 2
104
+ html.scan(/<dt title='Subject Heading'>Subject Heading:<\/dt>/).length.should eq 1
105
+ html.scan(/<dd>/).length.should == 3
106
+ end
91
107
  end
92
108
 
93
109
  end
@@ -76,5 +76,27 @@ module SubjectsFixtures
76
76
  </mods>
77
77
  XML
78
78
  end
79
-
79
+ def display_label_subjects
80
+ <<-XML
81
+ <mods>
82
+ <subject>
83
+ <topic>A Subject</topic>
84
+ <geographical>Another Subject</geographical>
85
+ </subject>
86
+ <subject>
87
+ <topic>B Subject</topic>
88
+ <geographical>Another B Subject</geographical>
89
+ </subject>
90
+ <subject displayLabel="Subject Heading">
91
+ <topic>Jazz</topic>
92
+ <geographical>Japan</geographical>
93
+ <topic>History and criticism</topic>
94
+ </subject>
95
+ <subject>
96
+ <topic>Bay Area</topic>
97
+ <geographical>Stanford</geographical>
98
+ </subject>
99
+ </mods>
100
+ XML
101
+ end
80
102
  end
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.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jessie Keck
@@ -137,7 +137,7 @@ files:
137
137
  - spec/integration/html_spec.rb
138
138
  - spec/integration/installation_spec.rb
139
139
  - spec/spec_helper.rb
140
- homepage: ''
140
+ homepage: https://github.com/sul-dlss/mods_display
141
141
  licenses: []
142
142
  metadata: {}
143
143
  post_install_message: