citeproc-ruby 1.1.7 → 1.1.13
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.
- checksums.yaml +5 -5
- data/BSDL +1 -1
- data/Gemfile +10 -32
- data/README.md +5 -2
- data/lib/citeproc/ruby.rb +1 -0
- data/lib/citeproc/ruby/format.rb +1 -1
- data/lib/citeproc/ruby/formats/latex.rb +136 -0
- data/lib/citeproc/ruby/renderer.rb +2 -1
- data/lib/citeproc/ruby/renderer/date.rb +9 -4
- data/lib/citeproc/ruby/renderer/format.rb +1 -0
- data/lib/citeproc/ruby/version.rb +1 -1
- metadata +18 -88
- data/.rspec +0 -3
- data/.rubocop.yml +0 -1156
- data/.simplecov +0 -4
- data/Guardfile +0 -14
- data/features/bibliography.feature +0 -25
- data/features/locale_overrides.feature +0 -31
- data/features/name_options.feature +0 -37
- data/features/names.feature +0 -198
- data/features/renderer.feature +0 -94
- data/features/sort.feature +0 -50
- data/features/step_definitions/engine.rb +0 -21
- data/features/step_definitions/renderer.rb +0 -85
- data/features/style_immanent_locale_terms.feature +0 -30
- data/features/support/env.rb +0 -35
- data/features/support/hooks.rb +0 -10
- data/spec/citeproc/ruby/engine_spec.rb +0 -120
- data/spec/citeproc/ruby/formats/default_spec.rb +0 -168
- data/spec/citeproc/ruby/formats/html_spec.rb +0 -167
- data/spec/citeproc/ruby/renderer/choose_spec.rb +0 -293
- data/spec/citeproc/ruby/renderer/date_spec.rb +0 -173
- data/spec/citeproc/ruby/renderer/group_spec.rb +0 -114
- data/spec/citeproc/ruby/renderer/history_spec.rb +0 -47
- data/spec/citeproc/ruby/renderer/label_spec.rb +0 -225
- data/spec/citeproc/ruby/renderer/layout_spec.rb +0 -41
- data/spec/citeproc/ruby/renderer/macro_spec.rb +0 -31
- data/spec/citeproc/ruby/renderer/names_spec.rb +0 -396
- data/spec/citeproc/ruby/renderer/number_spec.rb +0 -120
- data/spec/citeproc/ruby/renderer/text_spec.rb +0 -125
- data/spec/citeproc/ruby/renderer_spec.rb +0 -65
- data/spec/fixtures/items.rb +0 -113
- data/spec/fixtures/locales/locales-de-DE.xml +0 -298
- data/spec/fixtures/locales/locales-en-US.xml +0 -304
- data/spec/fixtures/locales/locales-fr-FR.xml +0 -317
- data/spec/fixtures/styles/apa-with-different-translations.csl +0 -451
- data/spec/fixtures/styles/apa.csl +0 -443
- data/spec/fixtures/styles/modern-language-association-8th-edition.csl +0 -293
- data/spec/spec_helper.rb +0 -73
@@ -1,41 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module CiteProc
|
4
|
-
module Ruby
|
5
|
-
|
6
|
-
describe 'Renderer#render_layout' do
|
7
|
-
let(:renderer) { Renderer.new }
|
8
|
-
|
9
|
-
let(:node) { CSL::Style::Layout.new }
|
10
|
-
|
11
|
-
let(:item) {
|
12
|
-
i = CiteProc::CitationItem.new(:id => 'ID-1')
|
13
|
-
i.data = CiteProc::Item.new(:id => 'ID-1')
|
14
|
-
i
|
15
|
-
}
|
16
|
-
|
17
|
-
it 'returns an empty string when empty' do
|
18
|
-
expect(renderer.render(item, node)).to eq('')
|
19
|
-
end
|
20
|
-
|
21
|
-
describe 'with child nodes' do
|
22
|
-
before(:each) do
|
23
|
-
node << CSL::Style::Text.new(:value => 'foo')
|
24
|
-
node << CSL::Style::Text.new(:value => 'bar')
|
25
|
-
end
|
26
|
-
|
27
|
-
it 'renders each child' do
|
28
|
-
expect(renderer.render(item, node)).to eq('foobar')
|
29
|
-
end
|
30
|
-
|
31
|
-
it 'uses the delimiters if specified' do
|
32
|
-
node[:delimiter] = '-'
|
33
|
-
expect(renderer.render(item, node)).to eq('foo-bar')
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
end
|
38
|
-
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
@@ -1,31 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module CiteProc
|
4
|
-
module Ruby
|
5
|
-
|
6
|
-
describe 'Renderer#render_macro' do
|
7
|
-
let(:renderer) { Renderer.new }
|
8
|
-
|
9
|
-
let(:node) { CSL::Style::Macro.new }
|
10
|
-
|
11
|
-
let(:item) {
|
12
|
-
i = CiteProc::CitationItem.new(:id => 'ID-1')
|
13
|
-
i.data = CiteProc::Item.new(:id => 'ID-1')
|
14
|
-
i
|
15
|
-
}
|
16
|
-
|
17
|
-
it 'returns an empty string when empty' do
|
18
|
-
expect(renderer.render(item, node)).to eq('')
|
19
|
-
end
|
20
|
-
|
21
|
-
it 'renders each child' do
|
22
|
-
node << CSL::Style::Text.new(:value => 'foo')
|
23
|
-
node << CSL::Style::Text.new(:value => 'bar')
|
24
|
-
|
25
|
-
expect(renderer.render(item, node)).to eq('foobar')
|
26
|
-
end
|
27
|
-
|
28
|
-
end
|
29
|
-
|
30
|
-
end
|
31
|
-
end
|
@@ -1,396 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
module CiteProc
|
6
|
-
module Ruby
|
7
|
-
|
8
|
-
describe "Renderer#render_names" do
|
9
|
-
let(:renderer) { Renderer.new }
|
10
|
-
|
11
|
-
let(:node) { CSL::Style::Names.new }
|
12
|
-
|
13
|
-
let(:item) {
|
14
|
-
i = CiteProc::CitationItem.new(:id => 'ID-1')
|
15
|
-
i.data = CiteProc::Item.new(:id => 'ID-1')
|
16
|
-
i
|
17
|
-
}
|
18
|
-
|
19
|
-
let(:poe) { people(:poe) }
|
20
|
-
let(:philosophers) { CiteProc::Names.new('Plato and Socrates and Aristotle') }
|
21
|
-
|
22
|
-
describe 'given an empty node' do
|
23
|
-
it 'returns an empty string for an empty item' do
|
24
|
-
expect(renderer.render(item, node)).to eq('')
|
25
|
-
end
|
26
|
-
|
27
|
-
it 'returns an empty string for an item with variables' do
|
28
|
-
item.data.edition = 'foo'
|
29
|
-
expect(renderer.render_names(item, node)).to eq('')
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
describe 'given a single name for the variable' do
|
34
|
-
before do
|
35
|
-
item.data.author = poe
|
36
|
-
node[:variable] = 'author'
|
37
|
-
end
|
38
|
-
|
39
|
-
it 'formats it in long form' do
|
40
|
-
expect(renderer.render_names(item, node)).to eq('Edgar Allen Poe')
|
41
|
-
end
|
42
|
-
|
43
|
-
it 'supports nested name node options' do
|
44
|
-
node << CSL::Style::Name.new(:form => 'short')
|
45
|
-
expect(renderer.render_names(item, node)).to eq('Poe')
|
46
|
-
end
|
47
|
-
|
48
|
-
it 'supports nested label node' do
|
49
|
-
node << CSL::Style::Label.new(:prefix => ' [', :suffix => ']')
|
50
|
-
expect(renderer.render_names(item, node)).to eq('Edgar Allen Poe [author]')
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
describe 'given multiple names for a single variable' do
|
55
|
-
before do
|
56
|
-
item.data.editor = philosophers
|
57
|
-
node[:variable] = 'editor'
|
58
|
-
end
|
59
|
-
|
60
|
-
it 'formats them as a list' do
|
61
|
-
expect(renderer.render_names(item, node)).to eq('Plato, Socrates, Aristotle')
|
62
|
-
end
|
63
|
-
|
64
|
-
it 'supports nested name node options' do
|
65
|
-
node << CSL::Style::Name.new(:and => 'symbol')
|
66
|
-
expect(renderer.render_names(item, node)).to eq('Plato, Socrates, & Aristotle')
|
67
|
-
end
|
68
|
-
|
69
|
-
it 'supports nested label node' do
|
70
|
-
node << CSL::Style::Label.new(:prefix => ' (', :suffix => ')')
|
71
|
-
expect(renderer.render_names(item, node)).to eq('Plato, Socrates, Aristotle (editors)')
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
describe 'given multiple variables' do
|
76
|
-
before do
|
77
|
-
node[:variable] = 'author editor'
|
78
|
-
node[:delimiter] = '; '
|
79
|
-
end
|
80
|
-
|
81
|
-
it 'renders all matching lists combinded using default delimiter' do
|
82
|
-
expect(renderer.render_names(item, node)).to eq('')
|
83
|
-
|
84
|
-
item.data.author = poe
|
85
|
-
expect(renderer.render_names(item, node)).to eq('Edgar Allen Poe')
|
86
|
-
|
87
|
-
item.data.editor = philosophers
|
88
|
-
expect(renderer.render_names(item, node)).to eq('Edgar Allen Poe; Plato, Socrates, Aristotle')
|
89
|
-
end
|
90
|
-
|
91
|
-
it 'keeps the variable order' do
|
92
|
-
item.data.author = poe
|
93
|
-
item.data.editor = philosophers
|
94
|
-
|
95
|
-
node[:variable] = 'editor author'
|
96
|
-
expect(renderer.render_names(item, node)).to eq('Plato, Socrates, Aristotle; Edgar Allen Poe')
|
97
|
-
end
|
98
|
-
|
99
|
-
it 'supports labels' do
|
100
|
-
item.data.author = poe
|
101
|
-
item.data.editor = philosophers
|
102
|
-
|
103
|
-
node << CSL::Style::Label.new(:prefix => ' (', :suffix => ')')
|
104
|
-
|
105
|
-
expect(renderer.render_names(item, node)).to eq('Edgar Allen Poe (author); Plato, Socrates, Aristotle (editors)')
|
106
|
-
end
|
107
|
-
|
108
|
-
it 'resolves the editor translator special case' do
|
109
|
-
renderer.format = :text
|
110
|
-
|
111
|
-
node[:variable] = 'translator author editor'
|
112
|
-
|
113
|
-
item.data.editor = 'Patrick F. Quinn and G. R. Thompson'
|
114
|
-
item.data.author = poe
|
115
|
-
|
116
|
-
node.name = { :and => 'symbol', :form => 'short' }
|
117
|
-
node.label = { :prefix => ' (', :suffix => ')' }
|
118
|
-
|
119
|
-
expect(renderer.render_names(item, node)).to eq('Poe (author); Quinn & Thompson (editors)')
|
120
|
-
|
121
|
-
item.data.translator = poe
|
122
|
-
expect(renderer.render_names(item, node)).to eq('Poe (translator); Poe (author); Quinn & Thompson (editors)')
|
123
|
-
|
124
|
-
item.data.translator = 'Patrick F. Quinn and G. R. Thompson'
|
125
|
-
|
126
|
-
expect(renderer.render(item, node)).to eq('Quinn & Thompson (editors & translators); Poe (author)')
|
127
|
-
end
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
describe "Renderer#render_name" do
|
132
|
-
let(:renderer) { Renderer.new }
|
133
|
-
|
134
|
-
let(:node) { CSL::Style::Name.new }
|
135
|
-
|
136
|
-
let(:poe) { people(:poe) }
|
137
|
-
let(:philosophers) { CiteProc::Names.new('Plato and Socrates and Aristotle') }
|
138
|
-
|
139
|
-
describe 'given an empty node' do
|
140
|
-
it 'returns an empty string given no names' do
|
141
|
-
expect(renderer.render_name(CiteProc::Names.new, node)).to eq('')
|
142
|
-
end
|
143
|
-
|
144
|
-
it 'formats the given name in long form' do
|
145
|
-
expect(renderer.render_name(poe, node)).to eq('Edgar Allen Poe')
|
146
|
-
end
|
147
|
-
|
148
|
-
it 'formats multiple names delimitted by commas' do
|
149
|
-
expect(renderer.render_name(philosophers, node)).to eq('Plato, Socrates, Aristotle')
|
150
|
-
end
|
151
|
-
end
|
152
|
-
|
153
|
-
describe 'given a node with and "and" attribute' do
|
154
|
-
it 'inserts a delimited connector' do
|
155
|
-
node[:and] = 'symbol'
|
156
|
-
expect(renderer.render_name(philosophers, node)).to eq('Plato, Socrates, & Aristotle')
|
157
|
-
|
158
|
-
node[:and] = 'text'
|
159
|
-
expect(renderer.render_name(philosophers, node)).to eq('Plato, Socrates, and Aristotle')
|
160
|
-
end
|
161
|
-
end
|
162
|
-
|
163
|
-
describe 'given a node with delimier-precedes-last' do
|
164
|
-
it 'inserts final delimiter only for three or more names when set to "contextual"' do
|
165
|
-
node.delimiter_contextually_precedes_last!
|
166
|
-
expect(renderer.render_name(philosophers, node)).to eq('Plato, Socrates, Aristotle')
|
167
|
-
|
168
|
-
node[:and] = 'text'
|
169
|
-
expect(renderer.render_name(philosophers, node)).to eq('Plato, Socrates, and Aristotle')
|
170
|
-
|
171
|
-
expect(renderer.render_name(philosophers.take(2), node)).to eq('Plato and Socrates')
|
172
|
-
|
173
|
-
node[:and] = nil
|
174
|
-
expect(renderer.render_name(philosophers.take(2), node)).to eq('Plato, Socrates')
|
175
|
-
end
|
176
|
-
|
177
|
-
it 'inserts final delimiter when set to "always"' do
|
178
|
-
node.delimiter_always_precedes_last!
|
179
|
-
|
180
|
-
expect(renderer.render_name(philosophers, node)).to eq('Plato, Socrates, Aristotle')
|
181
|
-
|
182
|
-
node[:and] = 'text'
|
183
|
-
expect(renderer.render_name(philosophers, node)).to eq('Plato, Socrates, and Aristotle')
|
184
|
-
|
185
|
-
expect(renderer.render_name(philosophers.take(2), node)).to eq('Plato, and Socrates')
|
186
|
-
|
187
|
-
node[:and] = nil
|
188
|
-
expect(renderer.render_name(philosophers.take(2), node)).to eq('Plato, Socrates')
|
189
|
-
end
|
190
|
-
|
191
|
-
it 'never inserts final delimiter when set to "never" (unless there is no "and")' do
|
192
|
-
node.delimiter_never_precedes_last!
|
193
|
-
|
194
|
-
expect(renderer.render_name(philosophers, node)).to eq('Plato, Socrates, Aristotle')
|
195
|
-
expect(renderer.render_name(philosophers.take(2), node)).to eq('Plato, Socrates')
|
196
|
-
|
197
|
-
node[:and] = 'text'
|
198
|
-
expect(renderer.render_name(philosophers, node)).to eq('Plato, Socrates and Aristotle')
|
199
|
-
expect(renderer.render_name(philosophers.take(2), node)).to eq('Plato and Socrates')
|
200
|
-
end
|
201
|
-
|
202
|
-
it 'supports only-after-inverted-name rule' do
|
203
|
-
names = CiteProc::Names.new('Doe, J. and Smith, S. and Williams, T.')
|
204
|
-
node.delimiter_precedes_last_after_inverted_name!
|
205
|
-
|
206
|
-
# always delimit when there is no and!
|
207
|
-
expect(renderer.render_name(names, node)).to eq('J. Doe, S. Smith, T. Williams')
|
208
|
-
expect(renderer.render_name(names.take(2), node)).to eq('J. Doe, S. Smith')
|
209
|
-
|
210
|
-
node[:and] = 'text'
|
211
|
-
expect(renderer.render_name(names, node)).to eq('J. Doe, S. Smith and T. Williams')
|
212
|
-
expect(renderer.render_name(names.take(2), node)).to eq('J. Doe and S. Smith')
|
213
|
-
|
214
|
-
node[:'name-as-sort-order'] = 'first'
|
215
|
-
expect(renderer.render_name(names, node)).to eq('Doe, J., S. Smith and T. Williams')
|
216
|
-
expect(renderer.render_name(names.take(2), node)).to eq('Doe, J., and S. Smith')
|
217
|
-
|
218
|
-
node[:'name-as-sort-order'] = 'all'
|
219
|
-
expect(renderer.render_name(names, node)).to eq('Doe, J., Smith, S., and Williams, T.')
|
220
|
-
expect(renderer.render_name(names.take(2), node)).to eq('Doe, J., and Smith, S.')
|
221
|
-
end
|
222
|
-
end
|
223
|
-
|
224
|
-
describe 'truncation of name lists' do
|
225
|
-
let(:names) { CiteProc::Names.new('Doe, J. and Smith, S. and Williams, T.') }
|
226
|
-
|
227
|
-
it 'supports et-al formatting via an et-al node' do
|
228
|
-
node[:'et-al-min'] = 3
|
229
|
-
node[:'et-al-use-first'] = 2
|
230
|
-
|
231
|
-
others = CSL::Style::EtAl.new(:prefix => '!!')
|
232
|
-
allow(node).to receive(:et_al).and_return(others)
|
233
|
-
|
234
|
-
expect(renderer.render_name(names, node)).to eq('J. Doe, S. Smith, !!et al.')
|
235
|
-
|
236
|
-
others[:term] = 'and others'
|
237
|
-
expect(renderer.render_name(names, node)).to eq('J. Doe, S. Smith, !!and others')
|
238
|
-
end
|
239
|
-
|
240
|
-
it 'supports et-al-use-last' do
|
241
|
-
node[:'et-al-min'] = 3
|
242
|
-
node[:'et-al-use-first'] = 2
|
243
|
-
node[:'et-al-use-last'] = true
|
244
|
-
|
245
|
-
# truncated list must be at least two names short!
|
246
|
-
expect(renderer.render_name(names, node)).to eq('J. Doe, S. Smith, et al.')
|
247
|
-
|
248
|
-
node[:'et-al-use-first'] = 1
|
249
|
-
expect(renderer.render_name(names, node)).to eq('J. Doe, … T. Williams')
|
250
|
-
end
|
251
|
-
|
252
|
-
describe 'with default delimiter settings' do
|
253
|
-
it 'truncates the list if it matches or exceeds et-al-min' do
|
254
|
-
node[:'et-al-min'] = 3
|
255
|
-
node[:'et-al-use-first'] = 2
|
256
|
-
|
257
|
-
expect(renderer.render_name(names, node)).to eq('J. Doe, S. Smith, et al.')
|
258
|
-
|
259
|
-
node[:'et-al-use-first'] = 1
|
260
|
-
expect(renderer.render_name(names, node)).to eq('J. Doe et al.')
|
261
|
-
end
|
262
|
-
|
263
|
-
it 'does not truncate the list if it is less than et-al-min' do
|
264
|
-
node[:'et-al-min'] = 4
|
265
|
-
node[:'et-al-use-first'] = 2
|
266
|
-
|
267
|
-
expect(renderer.render_name(names, node)).to eq('J. Doe, S. Smith, T. Williams')
|
268
|
-
end
|
269
|
-
end
|
270
|
-
|
271
|
-
describe 'with delimiter-precedes-et-al set' do
|
272
|
-
it 'inserts delimiter only for two or more names when set to "contextual" or nil' do
|
273
|
-
node.truncate_when! 3
|
274
|
-
node.truncate_at! 2
|
275
|
-
|
276
|
-
# default behaviour should match contextual!
|
277
|
-
expect(renderer.render_name(philosophers, node)).to eq('Plato, Socrates, et al.')
|
278
|
-
|
279
|
-
node.truncate_at! 1
|
280
|
-
expect(renderer.render_name(philosophers, node)).to eq('Plato et al.')
|
281
|
-
|
282
|
-
# set contextual explicitly
|
283
|
-
node.delimiter_contextually_precedes_et_al!
|
284
|
-
expect(renderer.render_name(philosophers, node)).to eq('Plato et al.')
|
285
|
-
|
286
|
-
node.truncate_at! 2
|
287
|
-
expect(renderer.render_name(philosophers, node)).to eq('Plato, Socrates, et al.')
|
288
|
-
end
|
289
|
-
|
290
|
-
it 'inserts delimiter when set to "always"' do
|
291
|
-
node.truncate_when! 3
|
292
|
-
node.truncate_at! 2
|
293
|
-
|
294
|
-
node.delimiter_always_precedes_et_al!
|
295
|
-
expect(renderer.render_name(philosophers, node)).to eq('Plato, Socrates, et al.')
|
296
|
-
|
297
|
-
node.truncate_at! 1
|
298
|
-
expect(renderer.render_name(philosophers, node)).to eq('Plato, et al.')
|
299
|
-
end
|
300
|
-
|
301
|
-
it 'never inserts delimiter when set to "never"' do
|
302
|
-
node.truncate_when! 3
|
303
|
-
node.truncate_at! 2
|
304
|
-
|
305
|
-
node.delimiter_never_precedes_et_al!
|
306
|
-
expect(renderer.render_name(philosophers, node)).to eq('Plato, Socrates et al.')
|
307
|
-
|
308
|
-
node.truncate_at! 1
|
309
|
-
expect(renderer.render_name(philosophers, node)).to eq('Plato et al.')
|
310
|
-
end
|
311
|
-
|
312
|
-
it 'supports only-after-inverted-name rule' do
|
313
|
-
node.truncate_when! 3
|
314
|
-
node.truncate_at! 2
|
315
|
-
|
316
|
-
node.delimiter_precedes_et_al_after_inverted_name!
|
317
|
-
|
318
|
-
expect(renderer.render_name(names, node)).to eq('J. Doe, S. Smith et al.')
|
319
|
-
|
320
|
-
node[:'name-as-sort-order'] = 'first'
|
321
|
-
expect(renderer.render_name(names, node)).to eq('Doe, J., S. Smith et al.')
|
322
|
-
|
323
|
-
node.truncate_at! 1
|
324
|
-
expect(renderer.render_name(names, node)).to eq('Doe, J., et al.')
|
325
|
-
|
326
|
-
node[:'name-as-sort-order'] = 'all'
|
327
|
-
expect(renderer.render_name(names, node)).to eq('Doe, J., et al.')
|
328
|
-
|
329
|
-
node.truncate_at! 2
|
330
|
-
expect(renderer.render_name(names, node)).to eq('Doe, J., Smith, S., et al.')
|
331
|
-
end
|
332
|
-
end
|
333
|
-
end
|
334
|
-
|
335
|
-
describe 'name-part formatting' do
|
336
|
-
let(:part) { CSL::Style::NamePart.new(:'text-case' => 'uppercase') }
|
337
|
-
before { node.parts << part }
|
338
|
-
|
339
|
-
it 'supports family name formatting' do
|
340
|
-
part[:name] = 'family'
|
341
|
-
expect(renderer.render_name(poe, node)).to eq('Edgar Allen POE')
|
342
|
-
end
|
343
|
-
|
344
|
-
it 'family part includes non-demoted particles' do
|
345
|
-
part[:name] = 'family'
|
346
|
-
|
347
|
-
expect(renderer.render_name(people(:la_fontaine), node)).to eq('Jean de LA FONTAINE')
|
348
|
-
expect(renderer.render_name(people(:humboldt), node)).to eq('Alexander von HUMBOLDT')
|
349
|
-
expect(renderer.render_name(people(:van_gogh), node)).to eq('Vincent VAN GOGH')
|
350
|
-
end
|
351
|
-
|
352
|
-
it 'family part affixes includes name suffix for non-inverted names' do
|
353
|
-
part.merge! :name => 'family', :prefix => '(', :suffix => ')'
|
354
|
-
|
355
|
-
la_fontaine = people(:la_fontaine)
|
356
|
-
la_fontaine[0].suffix = 'Jr.'
|
357
|
-
|
358
|
-
expect(renderer.render_name(la_fontaine, node)).to eq('Jean de (LA FONTAINE Jr.)')
|
359
|
-
end
|
360
|
-
|
361
|
-
it 'supports given name formatting' do
|
362
|
-
part[:name] = 'given'
|
363
|
-
expect(renderer.render_name(poe, node)).to eq('EDGAR ALLEN Poe')
|
364
|
-
end
|
365
|
-
|
366
|
-
it 'given part includes particles' do
|
367
|
-
part[:name] = 'given'
|
368
|
-
|
369
|
-
expect(renderer.render_name(people(:la_fontaine), node)).to eq('JEAN DE La Fontaine')
|
370
|
-
expect(renderer.render_name(people(:humboldt), node)).to eq('ALEXANDER VON Humboldt')
|
371
|
-
expect(renderer.render_name(people(:van_gogh), node)).to eq('VINCENT van Gogh')
|
372
|
-
end
|
373
|
-
|
374
|
-
it 'given part affixes enclose demoted particles' do
|
375
|
-
part.merge! :name => 'given', :prefix => '(', :suffix => ')'
|
376
|
-
|
377
|
-
la_fontaine = people(:la_fontaine)
|
378
|
-
|
379
|
-
expect(renderer.render_name(la_fontaine, node)).to eq('(JEAN DE) La Fontaine')
|
380
|
-
|
381
|
-
node.all_names_as_sort_order!
|
382
|
-
expect(renderer.render_name(la_fontaine, node)).to eq('La Fontaine, (JEAN DE)')
|
383
|
-
|
384
|
-
la_fontaine[0].always_demote_particle!
|
385
|
-
expect(renderer.render_name(la_fontaine, node)).to eq('Fontaine, (JEAN DE La)')
|
386
|
-
end
|
387
|
-
|
388
|
-
it 'does not alter the passed-in name object' do
|
389
|
-
part[:name] = 'family'
|
390
|
-
expect(renderer.render_name(poe, node)).to eq('Edgar Allen POE')
|
391
|
-
expect(poe.to_s).to eq('Edgar Allen Poe')
|
392
|
-
end
|
393
|
-
end
|
394
|
-
end
|
395
|
-
end
|
396
|
-
end
|