Skip to content

Commit 10ac049

Browse files
Copilothainesr
andcommitted
Fix APA style output for hyphenated first names
Co-authored-by: hainesr <143558+hainesr@users.noreply.github.com>
1 parent 499f9bd commit 10ac049

4 files changed

Lines changed: 30 additions & 1 deletion

File tree

lib/cff/formatters/formatter.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,12 @@ def self.select_and_check_model(model, preferred_citation)
4040
model.authors.empty? || model.title.empty? ? nil : model
4141
end
4242

43+
def self.initial_from_name_part(part)
44+
part.split('-').filter_map { |sub| sub[0]&.capitalize }.join('.-')
45+
end
46+
4347
def self.initials(name)
44-
name.split.map { |part| part[0].capitalize }.join('. ')
48+
name.split.map { |part| initial_from_name_part(part) }.join('. ')
4549
end
4650

4751
def self.note_from_model(model)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Kling, M.-U., & Picard, J.-L. (2021). Hyphenated names test [Computer software]
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
cff-version: 1.2.0
2+
message: If you use this software, please cite it as below.
3+
authors:
4+
- family-names: Kling
5+
given-names: Marc-Uwe
6+
- family-names: Picard
7+
given-names: Jean-Luc
8+
title: Hyphenated names test
9+
date-released: 2021-09-21

test/formatters/formatter_test.rb

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,21 @@
2020
require 'cff/index'
2121

2222
class CFFFormatterTest < Minitest::Test
23+
def test_initial_from_name_part
24+
assert_equal 'A', CFF::Formatters::Formatter.initial_from_name_part('Arfon')
25+
assert_equal 'M', CFF::Formatters::Formatter.initial_from_name_part('M.')
26+
assert_equal 'M.-U', CFF::Formatters::Formatter.initial_from_name_part('Marc-Uwe')
27+
assert_equal 'J.-L', CFF::Formatters::Formatter.initial_from_name_part('Jean-Luc')
28+
assert_equal 'A.-B.-C', CFF::Formatters::Formatter.initial_from_name_part('A-B-C')
29+
end
30+
31+
def test_initials
32+
assert_equal 'A. M', CFF::Formatters::Formatter.initials('Arfon M.')
33+
assert_equal 'M.-U', CFF::Formatters::Formatter.initials('Marc-Uwe')
34+
assert_equal 'J.-L. P', CFF::Formatters::Formatter.initials('Jean-Luc Picard')
35+
assert_equal 'A. B. C', CFF::Formatters::Formatter.initials('Arfon B. C.')
36+
end
37+
2338
def test_month_and_year_from_date
2439
[nil, '', ' ', 'nil'].each do |date|
2540
assert_equal(['', ''], CFF::Formatters::Formatter.month_and_year_from_date(date))

0 commit comments

Comments
 (0)