name_of_person 1.1.1 → 1.1.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 361510fe7cb6b267e3a9d5e2b58e62b17a1a1330fb8ec833c5f6b9b744ad3811
4
- data.tar.gz: a520d4f0283d4333607491548e03aa7509921008210385ba67c594bb6b47ad58
3
+ metadata.gz: c68f3b0e0e4361dc4dd4d5214d1f896cee83276ba8b4654cacba1782766e50a3
4
+ data.tar.gz: 9d232052de3441c9201f48905d89d81d06560e9fc99ae2788c451b62a7b943ac
5
5
  SHA512:
6
- metadata.gz: 4a828efd10ce8133325a60ca4bdbc643b3736f84c9acc1e8738d612223ffaef082e425b9478c1cb152197db7a0128754cfbc493783832859bcb1f544a4c0f6ce
7
- data.tar.gz: c98b44e5420cadd80d7a2d997a1493e99ebed9b81f73bc2d6b2302ff9e47dca6d072b9a59804417f1acd1a5b44da243fd8c176f8f4d35ad27a5c7aa0669cc2f5
6
+ metadata.gz: 1895f409c69ac9131f7c949d8ef5d480f6a413b88d5afa91503930d98f6582680e54e27ce212d98dbb97bb16c4c08d11a26e90845ef0828b127b190bfaaf0bec
7
+ data.tar.gz: 3683027336a25105aa4c22638b532eebbfe311ada04e47569c303649e505fc25b3d6a29752a3911cb071f4839791b36e5f182b67d03cb2800e9dd1ad50e0d652
data/Gemfile.lock CHANGED
@@ -1,38 +1,36 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- name_of_person (1.1.1)
4
+ name_of_person (1.1.2)
5
5
  activesupport (>= 5.2.0)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- activemodel (5.2.1)
11
- activesupport (= 5.2.1)
12
- activesupport (5.2.1)
10
+ activemodel (7.0.7.2)
11
+ activesupport (= 7.0.7.2)
12
+ activesupport (7.0.7.2)
13
13
  concurrent-ruby (~> 1.0, >= 1.0.2)
14
- i18n (>= 0.7, < 2)
15
- minitest (~> 5.1)
16
- tzinfo (~> 1.1)
17
- byebug (10.0.2)
18
- concurrent-ruby (1.0.5)
19
- i18n (1.1.0)
14
+ i18n (>= 1.6, < 2)
15
+ minitest (>= 5.1)
16
+ tzinfo (~> 2.0)
17
+ byebug (11.1.3)
18
+ concurrent-ruby (1.2.2)
19
+ i18n (1.14.1)
20
+ concurrent-ruby (~> 1.0)
21
+ minitest (5.19.0)
22
+ rake (13.0.6)
23
+ tzinfo (2.0.6)
20
24
  concurrent-ruby (~> 1.0)
21
- minitest (5.11.3)
22
- rake (12.3.1)
23
- thread_safe (0.3.6)
24
- tzinfo (1.2.5)
25
- thread_safe (~> 0.1)
26
25
 
27
26
  PLATFORMS
28
27
  ruby
29
28
 
30
29
  DEPENDENCIES
31
30
  activemodel (>= 5.2.0)
32
- bundler (~> 1.15)
33
31
  byebug
34
32
  name_of_person!
35
33
  rake
36
34
 
37
35
  BUNDLED WITH
38
- 1.17.2
36
+ 2.4.18
data/README.md CHANGED
@@ -22,6 +22,12 @@ person.name.abbreviated # => "D. Heinemeier Hansson"
22
22
  person.name.sorted # => "Heinemeier Hansson, David"
23
23
  person.name.mentionable # => "davidh"
24
24
  person.name.possessive # => "David Heinemeier Hansson's"
25
+ person.name.possessive(:first) # => "David's"
26
+ person.name.possessive(:last) # => "Hansson's"
27
+ person.name.possessive(:initials) # => "DHH's"
28
+ person.name.possessive(:sorted) # => "Heinemeier Hansson, David's"
29
+ person.name.possessive(:abbreviated) # => "D. Heinemeier Hansson's"
30
+
25
31
 
26
32
  # Use directly
27
33
  name = NameOfPerson::PersonName.full("David Heinemeier Hansson")
@@ -43,9 +49,9 @@ require 'active_record'
43
49
  require 'active_model'
44
50
  ```
45
51
 
46
- ## Maintenance Expectations
52
+ ## No further development is going to happen
47
53
 
48
- This library is an extraction from Basecamp that's been sufficient in almost unaltered form for over 10 years. While contributions are always welcome, do not expect a lot of feature evolution beyond the basics. Feel free to fork this library if you'd like to add large upgrades like titulations or different accommodations for other languages.
54
+ This gem is essentially frozen, as the developers have decided to only deal with full names going forward in their applications. Feel free to fork this work, brand it under a new name, and continue development.
49
55
 
50
56
  ## License
51
57
 
@@ -10,7 +10,7 @@ module NameOfPerson
10
10
 
11
11
  # Returns a PersonName object created from the first_name and last_name attributes.
12
12
  def name
13
- NameOfPerson::PersonName.new(first_name, last_name) if first_name
13
+ NameOfPerson::PersonName.new(first_name, last_name) if first_name.present?
14
14
  end
15
15
  end
16
16
  end
@@ -1,3 +1,9 @@
1
- if defined?(ActiveModel)
2
- ActiveModel::Model.send :include, NameOfPerson::HasPersonName
1
+ if ActiveSupport.gem_version < "7.1.0.alpha"
2
+ if defined?(ActiveModel)
3
+ ActiveModel::Model.send :include, NameOfPerson::HasPersonName
4
+ end
5
+ else
6
+ ActiveSupport.on_load(:active_model) do
7
+ include NameOfPerson::HasPersonName
8
+ end
3
9
  end
@@ -1,3 +1,3 @@
1
- if defined?(ActiveRecord)
2
- ActiveRecord::Base.send :include, NameOfPerson::HasPersonName
1
+ ActiveSupport.on_load(:active_record) do
2
+ include NameOfPerson::HasPersonName
3
3
  end
@@ -1,3 +1,4 @@
1
+ require 'active_support'
1
2
  require 'active_support/core_ext/string'
2
3
 
3
4
  module NameOfPerson
@@ -36,13 +37,21 @@ module NameOfPerson
36
37
  end
37
38
 
38
39
  # Returns full name with with trailing 's or ' if name ends in s.
39
- def possessive
40
- @possessive ||= "#{self}'#{"s" unless end_with?("s")}"
40
+ def possessive(method = :full)
41
+ whitelist = %i[full first last abbreviated sorted initials]
42
+
43
+ unless whitelist.include?(method.to_sym)
44
+ raise ArgumentError, 'Please provide a valid method'
45
+ end
46
+
47
+ name = public_send(method)
48
+
49
+ @possessive ||= "#{name}'#{'s' unless name.downcase.end_with?('s')}"
41
50
  end
42
51
 
43
52
  # Returns just the initials.
44
53
  def initials
45
- @initials ||= remove(/(\(|\[).*(\)|\])/).scan(/([[:word:]])[[:word:]]+/i).join
54
+ @initials ||= remove(/(\(|\[).*(\)|\])/).scan(/([[:word:]])[[:word:]]*/i).join
46
55
  end
47
56
 
48
57
  # Returns a mentionable version of the familiar name
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'name_of_person'
3
- s.version = '1.1.1'
3
+ s.version = '1.1.2'
4
4
  s.authors = 'David Heinemeier Hansson'
5
5
  s.email = 'david@basecamp.com'
6
6
  s.summary = 'Presenting names of people in full, familiar, abbreviated, and initialized forms (but without titulation etc)'
@@ -12,7 +12,6 @@ Gem::Specification.new do |s|
12
12
  s.add_dependency 'activesupport', '>= 5.2.0'
13
13
 
14
14
  s.add_development_dependency 'activemodel', '>= 5.2.0'
15
- s.add_development_dependency 'bundler', '~> 1.15'
16
15
 
17
16
  s.files = `git ls-files`.split("\n")
18
17
  s.test_files = `git ls-files -- test/*`.split("\n")
@@ -56,6 +56,32 @@ class PersonNameTest < ActiveSupport::TestCase
56
56
  assert_equal "Foo Bars'", PersonName.new('Foo', 'Bars').possessive
57
57
  end
58
58
 
59
+ test "possessive first" do
60
+ assert_equal "#{@name.first}'s", @name.possessive(:first)
61
+ end
62
+
63
+ test "possessive last" do
64
+ assert_equal "#{@name.last}'s", @name.possessive(:last)
65
+ end
66
+
67
+ test "possessive sorted" do
68
+ assert_equal "#{@name.sorted}'s", @name.possessive(:sorted)
69
+ end
70
+
71
+ test "possessive initials" do
72
+ assert_equal "#{@name.initials}'s", @name.possessive(:initials)
73
+ end
74
+
75
+ test "possessive abbreviated" do
76
+ assert_equal "#{@name.abbreviated}'s", @name.possessive(:abbreviated)
77
+ end
78
+
79
+ test "possessive with invalid arguments" do
80
+ assert_raise ArgumentError do
81
+ @name.possessive(:not_allowed)
82
+ end
83
+ end
84
+
59
85
  test "initials" do
60
86
  name = PersonName.full('David Heinemeier Hansson')
61
87
  assert_equal 'DHH', name.initials
@@ -86,6 +112,11 @@ class PersonNameTest < ActiveSupport::TestCase
86
112
  assert_equal 'CM', name.initials
87
113
  end
88
114
 
115
+ test "initials single letter" do
116
+ name = PersonName.full('C')
117
+ assert_equal 'C', name.initials
118
+ end
119
+
89
120
  test "from full name" do
90
121
  name = PersonName.full('Will St. Clair')
91
122
  assert_equal 'Will', name.first
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: name_of_person
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Heinemeier Hansson
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-04-25 00:00:00.000000000 Z
11
+ date: 2023-09-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -38,21 +38,7 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: 5.2.0
41
- - !ruby/object:Gem::Dependency
42
- name: bundler
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '1.15'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '1.15'
55
- description:
41
+ description:
56
42
  email: david@basecamp.com
57
43
  executables: []
58
44
  extensions: []
@@ -77,7 +63,7 @@ homepage: https://github.com/basecamp/name_of_person
77
63
  licenses:
78
64
  - MIT
79
65
  metadata: {}
80
- post_install_message:
66
+ post_install_message:
81
67
  rdoc_options: []
82
68
  require_paths:
83
69
  - lib
@@ -92,8 +78,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
92
78
  - !ruby/object:Gem::Version
93
79
  version: '0'
94
80
  requirements: []
95
- rubygems_version: 3.0.3
96
- signing_key:
81
+ rubygems_version: 3.4.18
82
+ signing_key:
97
83
  specification_version: 4
98
84
  summary: Presenting names of people in full, familiar, abbreviated, and initialized
99
85
  forms (but without titulation etc)