nomen 0.0.1 → 0.0.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
  SHA1:
3
- metadata.gz: 02f10575d1beff1b8eacf5b2c0caf3a79cf9f244
4
- data.tar.gz: 1ee6f8c5ab00ba4eaf0dad83721b5db4c32598cf
3
+ metadata.gz: e25c9721ac53215d2b874c8ffb5a4e72807f884c
4
+ data.tar.gz: 46f496975c446826abe95f3774678cc550af3870
5
5
  SHA512:
6
- metadata.gz: 7a6dd75a601cc5c1a647c80fa1652b0a8c6694ca618438c85b00f19102789eff8a30eef5181803366830d8ac7e03a72bae23e765be9a4b8dd69f5961303099b1
7
- data.tar.gz: 798ac89b09e2d2995dd72a1510e6fab87adc50b68a2cc5ca2737383f27e1897ae6849e0c35a3fb3cc33c484aeb891285a5db502648d7431fbe3b43f5d519abb9
6
+ metadata.gz: fb0d3a1c1fef929642b188e8d77bc59fd879856d9b6c954de88aebb6c690493be5c53f98d292f82758743a6dd31c8d9cf528de28a6487b5ed4f993fa0669ea11
7
+ data.tar.gz: 04d9fd97b8b8c07fe7721ac49dad7e7b7a029aa679586bf7be57a346c93276098a240b1ce37242e21d84fe8bdf322229306cc87cd9d302bea3d49d8456e853ca
@@ -6,4 +6,6 @@ rvm:
6
6
  - jruby-19mode
7
7
  - jruby-head
8
8
  - rbx-19mode
9
- - ree
9
+ matrix:
10
+ allow_failures:
11
+ - rvm: ruby-head
data/README.md CHANGED
@@ -1,20 +1,31 @@
1
- # Nomen [![Build Status](https://secure.travis-ci.org/abevoelker/nomen.png)](http://travis-ci.org/abevoelker/nomen)
1
+ Nomen
2
+ ========
3
+
4
+ [![Gem Version](https://badge.fury.io/rb/nomen.png)][gem]
5
+ [![Build Status](https://secure.travis-ci.org/abevoelker/nomen.png?branch=master)][travis]
6
+ [![Dependency Status](https://gemnasium.com/abevoelker/nomen.png)][gemnasium]
7
+
8
+ [gem]: https://rubygems.org/gems/nomen
9
+ [travis]: http://travis-ci.org/abevoelker/nomen
10
+ [gemnasium]: https://gemnasium.com/abevoelker/nomen
2
11
 
3
12
  Simple library for formatting (and maybe later, parsing) human names.
4
13
 
5
- ## Description
14
+ Description
15
+ -----------
6
16
 
7
17
  The name is latin for "name"; no misandry intended. For now I'm only handling
8
18
  my current use case, which is very basic formatting of American-style names.
9
19
 
10
20
  I am aware of the [complexity of][patio11] human names.
11
21
 
12
- ## Synopsis
22
+ Synopsis
23
+ --------
13
24
 
14
25
  ```ruby
15
26
  require 'nomen'
16
27
 
17
- n = Nomen::Name.new(first: 'Katya', middle: 'Verenice', last: 'Voelker', suffix: 'M.D.')
28
+ n = Nomen.new(first: 'Katya', middle: 'Verenice', last: 'Voelker', suffix: 'M.D.')
18
29
  n.format # => "Katya Verenice Voelker M.D."
19
30
  n.format(:inverted) # => "Voelker, Katya Verenice M.D."
20
31
  n.middle = nil
@@ -22,7 +33,8 @@ n.format # => "Katya Voelker M.D."
22
33
  n.format(:inverted) # => "Voelker, Katya M.D."
23
34
  ```
24
35
 
25
- ## Copyright
36
+ Copyright
37
+ ---------
26
38
 
27
39
  Copyright (c) 2013 Abe Voelker. Released under the terms of the MIT license.
28
40
  See LICENSE for details.
@@ -1,3 +1,27 @@
1
+ class Nomen
2
+ FRAGMENTS = [:first, :middle, :last, :suffix]
3
+ attr_accessor *FRAGMENTS
4
+
5
+ def initialize(opts={})
6
+ name_opts = opts.select{|k,v| FRAGMENTS.include?(k)}
7
+ name_opts.each{|k,v| send("#{k}=".to_sym, v)}
8
+ self
9
+ end
10
+
11
+ def format(type=:full)
12
+ Nomen::Formatters.lookup(type).format(self)
13
+ end
14
+
15
+ def to_h
16
+ FRAGMENTS.reduce({}){|a,f| a[f] = send(f); a}
17
+ end
18
+
19
+ def ==(other)
20
+ FRAGMENTS.each{|m| return false if self.send(m) != other.send(m)}
21
+ true
22
+ end
23
+
24
+ end
25
+
1
26
  require 'nomen/version'
2
- require 'nomen/name'
3
27
  require 'nomen/formatters'
@@ -1,6 +1,6 @@
1
1
  Dir[File.expand_path('../formatters/*.rb', __FILE__)].each {|file| require file }
2
2
 
3
- module Nomen
3
+ class Nomen
4
4
  module Formatters
5
5
  class UnknownFormatterError < StandardError; end
6
6
 
@@ -1,19 +1,19 @@
1
- module Nomen
1
+ class Nomen
2
2
  module Formatters
3
3
  class Full
4
4
 
5
5
  def self.format(name)
6
6
  String.new.tap do |str|
7
- if name.first
7
+ if name.first && !name.first.empty?
8
8
  str << name.first
9
9
  end
10
- if name.middle
10
+ if name.middle && !name.middle.empty?
11
11
  str << (str.empty? ? name.middle : " #{name.middle}")
12
12
  end
13
- if name.last
13
+ if name.last && !name.last.empty?
14
14
  str << (str.empty? ? name.last : " #{name.last}")
15
15
  end
16
- if name.suffix
16
+ if name.suffix && !name.suffix.empty?
17
17
  str << (str.empty? ? name.suffix : " #{name.suffix}")
18
18
  end
19
19
  end
@@ -1,23 +1,23 @@
1
- module Nomen
1
+ class Nomen
2
2
  module Formatters
3
3
  class Inverted
4
4
 
5
5
  def self.format(name)
6
6
  String.new.tap do |str|
7
- if name.last
7
+ if name.last && !name.last.empty?
8
8
  if [name.first, name.middle, name.suffix].reject(&:nil?).reject(&:empty?).any?
9
9
  str << "#{name.last},"
10
10
  else
11
11
  str << name.last
12
12
  end
13
13
  end
14
- if name.first
14
+ if name.first && !name.first.empty?
15
15
  str << (str.empty? ? name.first : " #{name.first}")
16
16
  end
17
- if name.middle
17
+ if name.middle && !name.middle.empty?
18
18
  str << (str.empty? ? name.middle : " #{name.middle}")
19
19
  end
20
- if name.suffix
20
+ if name.suffix && !name.suffix.empty?
21
21
  str << (str.empty? ? name.suffix : " #{name.suffix}")
22
22
  end
23
23
  end
@@ -1,3 +1,3 @@
1
- module Nomen
2
- VERSION = "0.0.1"
1
+ class Nomen
2
+ VERSION = "0.0.2"
3
3
  end
@@ -3,156 +3,196 @@ require File.dirname(__FILE__) + '/formatters_helper'
3
3
  describe Nomen::Formatters::Full do
4
4
  context 'formatting a name' do
5
5
 
6
+ # transforms #<Nomen @first="Bob"> into #<Nomen @first="Bob", @middle=nil, @last=nil, suffix=nil>
7
+ def nils(nomen)
8
+ Nomen.new(nomen.to_h)
9
+ end
10
+
11
+ # transforms #<Nomen @first="Bob"> into #<Nomen @first="Bob", @middle="", @last="", suffix="">
12
+ def blanks(nomen)
13
+ Nomen.new(nomen.to_h.inject({}){|a,(k,v)| a[k] = (v.nil? ? '' : v); a })
14
+ end
15
+
6
16
  # name segment combinations were generated with
7
- # s = [:first, :middle, :last, :suffix]; s.size.downto(1).map{|i| s.combination(i).to_a}.flatten(1)
17
+ # f = Nomen::FRAGMENTS; f.size.downto(1).map{|i| f.combination(i).to_a}.flatten(1)
8
18
 
9
19
  context 'with [:first, :middle, :last, :suffix]' do
10
20
  before do
11
- @name = Nomen::Name.new(first: 'Katya', middle: 'Verenice', last: 'Voelker', suffix: 'M.D.')
21
+ @name = Nomen.new(first: 'Katya', middle: 'Verenice', last: 'Voelker', suffix: 'M.D.')
12
22
  end
13
23
 
14
24
  it 'should format correctly' do
15
- expect(Nomen::Formatters::Full.format(@name)).to eq('Katya Verenice Voelker M.D.')
25
+ expect(Nomen::Formatters::Full.format(@name)).to eq('Katya Verenice Voelker M.D.')
26
+ expect(Nomen::Formatters::Full.format(nils(@name))).to eq(Nomen::Formatters::Full.format(@name))
27
+ expect(Nomen::Formatters::Full.format(blanks(@name))).to eq(Nomen::Formatters::Full.format(@name))
16
28
  end
17
29
  end
18
30
 
19
31
  context 'with [:first, :middle, :last]' do
20
32
  before do
21
- @name = Nomen::Name.new(first: 'Katya', middle: 'Verenice', last: 'Voelker')
33
+ @name = Nomen.new(first: 'Katya', middle: 'Verenice', last: 'Voelker')
22
34
  end
23
35
 
24
36
  it 'should format correctly' do
25
- expect(Nomen::Formatters::Full.format(@name)).to eq('Katya Verenice Voelker')
37
+ expect(Nomen::Formatters::Full.format(@name)).to eq('Katya Verenice Voelker')
38
+ expect(Nomen::Formatters::Full.format(nils(@name))).to eq(Nomen::Formatters::Full.format(@name))
39
+ expect(Nomen::Formatters::Full.format(blanks(@name))).to eq(Nomen::Formatters::Full.format(@name))
26
40
  end
27
41
  end
28
42
 
29
43
  context 'with [:first, :middle, :suffix]' do
30
44
  before do
31
- @name = Nomen::Name.new(first: 'Katya', middle: 'Verenice', suffix: 'M.D.')
45
+ @name = Nomen.new(first: 'Katya', middle: 'Verenice', suffix: 'M.D.')
32
46
  end
33
47
 
34
48
  it 'should format correctly' do
35
- expect(Nomen::Formatters::Full.format(@name)).to eq('Katya Verenice M.D.')
49
+ expect(Nomen::Formatters::Full.format(@name)).to eq('Katya Verenice M.D.')
50
+ expect(Nomen::Formatters::Full.format(nils(@name))).to eq(Nomen::Formatters::Full.format(@name))
51
+ expect(Nomen::Formatters::Full.format(blanks(@name))).to eq(Nomen::Formatters::Full.format(@name))
36
52
  end
37
53
  end
38
54
 
39
55
  context 'with [:first, :last, :suffix]' do
40
56
  before do
41
- @name = Nomen::Name.new(first: 'Katya', last: 'Voelker', suffix: 'M.D.')
57
+ @name = Nomen.new(first: 'Katya', last: 'Voelker', suffix: 'M.D.')
42
58
  end
43
59
 
44
60
  it 'should format correctly' do
45
- expect(Nomen::Formatters::Full.format(@name)).to eq('Katya Voelker M.D.')
61
+ expect(Nomen::Formatters::Full.format(@name)).to eq('Katya Voelker M.D.')
62
+ expect(Nomen::Formatters::Full.format(nils(@name))).to eq(Nomen::Formatters::Full.format(@name))
63
+ expect(Nomen::Formatters::Full.format(blanks(@name))).to eq(Nomen::Formatters::Full.format(@name))
46
64
  end
47
65
  end
48
66
 
49
67
  context 'with [:middle, :last, :suffix]' do
50
68
  before do
51
- @name = Nomen::Name.new(middle: 'Verenice', last: 'Voelker', suffix: 'M.D.')
69
+ @name = Nomen.new(middle: 'Verenice', last: 'Voelker', suffix: 'M.D.')
52
70
  end
53
71
 
54
72
  it 'should format correctly' do
55
- expect(Nomen::Formatters::Full.format(@name)).to eq('Verenice Voelker M.D.')
73
+ expect(Nomen::Formatters::Full.format(@name)).to eq('Verenice Voelker M.D.')
74
+ expect(Nomen::Formatters::Full.format(nils(@name))).to eq(Nomen::Formatters::Full.format(@name))
75
+ expect(Nomen::Formatters::Full.format(blanks(@name))).to eq(Nomen::Formatters::Full.format(@name))
56
76
  end
57
77
  end
58
78
 
59
79
  context 'with [:first, :middle]' do
60
80
  before do
61
- @name = Nomen::Name.new(first: 'Katya', middle: 'Verenice')
81
+ @name = Nomen.new(first: 'Katya', middle: 'Verenice')
62
82
  end
63
83
 
64
84
  it 'should format correctly' do
65
- expect(Nomen::Formatters::Full.format(@name)).to eq('Katya Verenice')
85
+ expect(Nomen::Formatters::Full.format(@name)).to eq('Katya Verenice')
86
+ expect(Nomen::Formatters::Full.format(nils(@name))).to eq(Nomen::Formatters::Full.format(@name))
87
+ expect(Nomen::Formatters::Full.format(blanks(@name))).to eq(Nomen::Formatters::Full.format(@name))
66
88
  end
67
89
  end
68
90
 
69
91
  context 'with [:first, :last]' do
70
92
  before do
71
- @name = Nomen::Name.new(first: 'Katya', last: 'Voelker')
93
+ @name = Nomen.new(first: 'Katya', last: 'Voelker')
72
94
  end
73
95
 
74
96
  it 'should format correctly' do
75
- expect(Nomen::Formatters::Full.format(@name)).to eq('Katya Voelker')
97
+ expect(Nomen::Formatters::Full.format(@name)).to eq('Katya Voelker')
98
+ expect(Nomen::Formatters::Full.format(nils(@name))).to eq(Nomen::Formatters::Full.format(@name))
99
+ expect(Nomen::Formatters::Full.format(blanks(@name))).to eq(Nomen::Formatters::Full.format(@name))
76
100
  end
77
101
  end
78
102
 
79
103
  context 'with [:first, :suffix]' do
80
104
  before do
81
- @name = Nomen::Name.new(first: 'Katya', suffix: 'M.D.')
105
+ @name = Nomen.new(first: 'Katya', suffix: 'M.D.')
82
106
  end
83
107
 
84
108
  it 'should format correctly' do
85
- expect(Nomen::Formatters::Full.format(@name)).to eq('Katya M.D.')
109
+ expect(Nomen::Formatters::Full.format(@name)).to eq('Katya M.D.')
110
+ expect(Nomen::Formatters::Full.format(nils(@name))).to eq(Nomen::Formatters::Full.format(@name))
111
+ expect(Nomen::Formatters::Full.format(blanks(@name))).to eq(Nomen::Formatters::Full.format(@name))
86
112
  end
87
113
  end
88
114
 
89
115
  context 'with [:middle, :last]' do
90
116
  before do
91
- @name = Nomen::Name.new(middle: 'Verenice', last: 'Voelker')
117
+ @name = Nomen.new(middle: 'Verenice', last: 'Voelker')
92
118
  end
93
119
 
94
120
  it 'should format correctly' do
95
- expect(Nomen::Formatters::Full.format(@name)).to eq('Verenice Voelker')
121
+ expect(Nomen::Formatters::Full.format(@name)).to eq('Verenice Voelker')
122
+ expect(Nomen::Formatters::Full.format(nils(@name))).to eq(Nomen::Formatters::Full.format(@name))
123
+ expect(Nomen::Formatters::Full.format(blanks(@name))).to eq(Nomen::Formatters::Full.format(@name))
96
124
  end
97
125
  end
98
126
 
99
127
  context 'with [:middle, :suffix]' do
100
128
  before do
101
- @name = Nomen::Name.new(middle: 'Verenice', suffix: 'M.D.')
129
+ @name = Nomen.new(middle: 'Verenice', suffix: 'M.D.')
102
130
  end
103
131
 
104
132
  it 'should format correctly' do
105
- expect(Nomen::Formatters::Full.format(@name)).to eq('Verenice M.D.')
133
+ expect(Nomen::Formatters::Full.format(@name)).to eq('Verenice M.D.')
134
+ expect(Nomen::Formatters::Full.format(nils(@name))).to eq(Nomen::Formatters::Full.format(@name))
135
+ expect(Nomen::Formatters::Full.format(blanks(@name))).to eq(Nomen::Formatters::Full.format(@name))
106
136
  end
107
137
  end
108
138
 
109
139
  context 'with [:last, :suffix]' do
110
140
  before do
111
- @name = Nomen::Name.new(last: 'Voelker', suffix: 'M.D.')
141
+ @name = Nomen.new(last: 'Voelker', suffix: 'M.D.')
112
142
  end
113
143
 
114
144
  it 'should format correctly' do
115
- expect(Nomen::Formatters::Full.format(@name)).to eq('Voelker M.D.')
145
+ expect(Nomen::Formatters::Full.format(@name)).to eq('Voelker M.D.')
146
+ expect(Nomen::Formatters::Full.format(nils(@name))).to eq(Nomen::Formatters::Full.format(@name))
147
+ expect(Nomen::Formatters::Full.format(blanks(@name))).to eq(Nomen::Formatters::Full.format(@name))
116
148
  end
117
149
  end
118
150
 
119
151
  context 'with [:first]' do
120
152
  before do
121
- @name = Nomen::Name.new(first: 'Katya')
153
+ @name = Nomen.new(first: 'Katya')
122
154
  end
123
155
 
124
156
  it 'should format correctly' do
125
- expect(Nomen::Formatters::Full.format(@name)).to eq('Katya')
157
+ expect(Nomen::Formatters::Full.format(@name)).to eq('Katya')
158
+ expect(Nomen::Formatters::Full.format(nils(@name))).to eq(Nomen::Formatters::Full.format(@name))
159
+ expect(Nomen::Formatters::Full.format(blanks(@name))).to eq(Nomen::Formatters::Full.format(@name))
126
160
  end
127
161
  end
128
162
 
129
163
  context 'with [:middle]' do
130
164
  before do
131
- @name = Nomen::Name.new(middle: 'Verenice')
165
+ @name = Nomen.new(middle: 'Verenice')
132
166
  end
133
167
 
134
168
  it 'should format correctly' do
135
- expect(Nomen::Formatters::Full.format(@name)).to eq('Verenice')
169
+ expect(Nomen::Formatters::Full.format(@name)).to eq('Verenice')
170
+ expect(Nomen::Formatters::Full.format(nils(@name))).to eq(Nomen::Formatters::Full.format(@name))
171
+ expect(Nomen::Formatters::Full.format(blanks(@name))).to eq(Nomen::Formatters::Full.format(@name))
136
172
  end
137
173
  end
138
174
 
139
175
  context 'with [:last]' do
140
176
  before do
141
- @name = Nomen::Name.new(last: 'Voelker')
177
+ @name = Nomen.new(last: 'Voelker')
142
178
  end
143
179
 
144
180
  it 'should format correctly' do
145
- expect(Nomen::Formatters::Full.format(@name)).to eq('Voelker')
181
+ expect(Nomen::Formatters::Full.format(@name)).to eq('Voelker')
182
+ expect(Nomen::Formatters::Full.format(nils(@name))).to eq(Nomen::Formatters::Full.format(@name))
183
+ expect(Nomen::Formatters::Full.format(blanks(@name))).to eq(Nomen::Formatters::Full.format(@name))
146
184
  end
147
185
  end
148
186
 
149
187
  context 'with [:suffix]' do
150
188
  before do
151
- @name = Nomen::Name.new(suffix: 'M.D.')
189
+ @name = Nomen.new(suffix: 'M.D.')
152
190
  end
153
191
 
154
192
  it 'should format correctly' do
155
- expect(Nomen::Formatters::Full.format(@name)).to eq('M.D.')
193
+ expect(Nomen::Formatters::Full.format(@name)).to eq('M.D.')
194
+ expect(Nomen::Formatters::Full.format(nils(@name))).to eq(Nomen::Formatters::Full.format(@name))
195
+ expect(Nomen::Formatters::Full.format(blanks(@name))).to eq(Nomen::Formatters::Full.format(@name))
156
196
  end
157
197
  end
158
198
  end
@@ -3,156 +3,196 @@ require File.dirname(__FILE__) + '/formatters_helper'
3
3
  describe Nomen::Formatters::Inverted do
4
4
  context 'formatting a name' do
5
5
 
6
+ # transforms #<Nomen @first="Bob"> into #<Nomen @first="Bob", @middle=nil, @last=nil, suffix=nil>
7
+ def nils(nomen)
8
+ Nomen.new(nomen.to_h)
9
+ end
10
+
11
+ # transforms #<Nomen @first="Bob"> into #<Nomen @first="Bob", @middle="", @last="", suffix="">
12
+ def blanks(nomen)
13
+ Nomen.new(nomen.to_h.inject({}){|a,(k,v)| a[k] = (v.nil? ? '' : v); a })
14
+ end
15
+
6
16
  # name segment combinations were generated with
7
- # s = [:first, :middle, :last, :suffix]; s.size.downto(1).map{|i| s.combination(i).to_a}.flatten(1)
17
+ # f = Nomen::FRAGMENTS; f.size.downto(1).map{|i| f.combination(i).to_a}.flatten(1)
8
18
 
9
19
  context 'with [:first, :middle, :last, :suffix]' do
10
20
  before do
11
- @name = Nomen::Name.new(first: 'Katya', middle: 'Verenice', last: 'Voelker', suffix: 'M.D.')
21
+ @name = Nomen.new(first: 'Katya', middle: 'Verenice', last: 'Voelker', suffix: 'M.D.')
12
22
  end
13
23
 
14
24
  it 'should format correctly' do
15
- expect(Nomen::Formatters::Inverted.format(@name)).to eq('Voelker, Katya Verenice M.D.')
25
+ expect(Nomen::Formatters::Inverted.format(@name)).to eq('Voelker, Katya Verenice M.D.')
26
+ expect(Nomen::Formatters::Inverted.format(nils(@name))).to eq(Nomen::Formatters::Inverted.format(@name))
27
+ expect(Nomen::Formatters::Inverted.format(blanks(@name))).to eq(Nomen::Formatters::Inverted.format(@name))
16
28
  end
17
29
  end
18
30
 
19
31
  context 'with [:first, :middle, :last]' do
20
32
  before do
21
- @name = Nomen::Name.new(first: 'Katya', middle: 'Verenice', last: 'Voelker')
33
+ @name = Nomen.new(first: 'Katya', middle: 'Verenice', last: 'Voelker')
22
34
  end
23
35
 
24
36
  it 'should format correctly' do
25
- expect(Nomen::Formatters::Inverted.format(@name)).to eq('Voelker, Katya Verenice')
37
+ expect(Nomen::Formatters::Inverted.format(@name)).to eq('Voelker, Katya Verenice')
38
+ expect(Nomen::Formatters::Inverted.format(nils(@name))).to eq(Nomen::Formatters::Inverted.format(@name))
39
+ expect(Nomen::Formatters::Inverted.format(blanks(@name))).to eq(Nomen::Formatters::Inverted.format(@name))
26
40
  end
27
41
  end
28
42
 
29
43
  context 'with [:first, :middle, :suffix]' do
30
44
  before do
31
- @name = Nomen::Name.new(first: 'Katya', middle: 'Verenice', suffix: 'M.D.')
45
+ @name = Nomen.new(first: 'Katya', middle: 'Verenice', suffix: 'M.D.')
32
46
  end
33
47
 
34
48
  it 'should format correctly' do
35
- expect(Nomen::Formatters::Inverted.format(@name)).to eq('Katya Verenice M.D.')
49
+ expect(Nomen::Formatters::Inverted.format(@name)).to eq('Katya Verenice M.D.')
50
+ expect(Nomen::Formatters::Inverted.format(nils(@name))).to eq(Nomen::Formatters::Inverted.format(@name))
51
+ expect(Nomen::Formatters::Inverted.format(blanks(@name))).to eq(Nomen::Formatters::Inverted.format(@name))
36
52
  end
37
53
  end
38
54
 
39
55
  context 'with [:first, :last, :suffix]' do
40
56
  before do
41
- @name = Nomen::Name.new(first: 'Katya', last: 'Voelker', suffix: 'M.D.')
57
+ @name = Nomen.new(first: 'Katya', last: 'Voelker', suffix: 'M.D.')
42
58
  end
43
59
 
44
60
  it 'should format correctly' do
45
- expect(Nomen::Formatters::Inverted.format(@name)).to eq('Voelker, Katya M.D.')
61
+ expect(Nomen::Formatters::Inverted.format(@name)).to eq('Voelker, Katya M.D.')
62
+ expect(Nomen::Formatters::Inverted.format(nils(@name))).to eq(Nomen::Formatters::Inverted.format(@name))
63
+ expect(Nomen::Formatters::Inverted.format(blanks(@name))).to eq(Nomen::Formatters::Inverted.format(@name))
46
64
  end
47
65
  end
48
66
 
49
67
  context 'with [:middle, :last, :suffix]' do
50
68
  before do
51
- @name = Nomen::Name.new(middle: 'Verenice', last: 'Voelker', suffix: 'M.D.')
69
+ @name = Nomen.new(middle: 'Verenice', last: 'Voelker', suffix: 'M.D.')
52
70
  end
53
71
 
54
72
  it 'should format correctly' do
55
- expect(Nomen::Formatters::Inverted.format(@name)).to eq('Voelker, Verenice M.D.')
73
+ expect(Nomen::Formatters::Inverted.format(@name)).to eq('Voelker, Verenice M.D.')
74
+ expect(Nomen::Formatters::Inverted.format(nils(@name))).to eq(Nomen::Formatters::Inverted.format(@name))
75
+ expect(Nomen::Formatters::Inverted.format(blanks(@name))).to eq(Nomen::Formatters::Inverted.format(@name))
56
76
  end
57
77
  end
58
78
 
59
79
  context 'with [:first, :middle]' do
60
80
  before do
61
- @name = Nomen::Name.new(first: 'Katya', middle: 'Verenice')
81
+ @name = Nomen.new(first: 'Katya', middle: 'Verenice')
62
82
  end
63
83
 
64
84
  it 'should format correctly' do
65
- expect(Nomen::Formatters::Inverted.format(@name)).to eq('Katya Verenice')
85
+ expect(Nomen::Formatters::Inverted.format(@name)).to eq('Katya Verenice')
86
+ expect(Nomen::Formatters::Inverted.format(nils(@name))).to eq(Nomen::Formatters::Inverted.format(@name))
87
+ expect(Nomen::Formatters::Inverted.format(blanks(@name))).to eq(Nomen::Formatters::Inverted.format(@name))
66
88
  end
67
89
  end
68
90
 
69
91
  context 'with [:first, :last]' do
70
92
  before do
71
- @name = Nomen::Name.new(first: 'Katya', last: 'Voelker')
93
+ @name = Nomen.new(first: 'Katya', last: 'Voelker')
72
94
  end
73
95
 
74
96
  it 'should format correctly' do
75
- expect(Nomen::Formatters::Inverted.format(@name)).to eq('Voelker, Katya')
97
+ expect(Nomen::Formatters::Inverted.format(@name)).to eq('Voelker, Katya')
98
+ expect(Nomen::Formatters::Inverted.format(nils(@name))).to eq(Nomen::Formatters::Inverted.format(@name))
99
+ expect(Nomen::Formatters::Inverted.format(blanks(@name))).to eq(Nomen::Formatters::Inverted.format(@name))
76
100
  end
77
101
  end
78
102
 
79
103
  context 'with [:first, :suffix]' do
80
104
  before do
81
- @name = Nomen::Name.new(first: 'Katya', suffix: 'M.D.')
105
+ @name = Nomen.new(first: 'Katya', suffix: 'M.D.')
82
106
  end
83
107
 
84
108
  it 'should format correctly' do
85
- expect(Nomen::Formatters::Inverted.format(@name)).to eq('Katya M.D.')
109
+ expect(Nomen::Formatters::Inverted.format(@name)).to eq('Katya M.D.')
110
+ expect(Nomen::Formatters::Inverted.format(nils(@name))).to eq(Nomen::Formatters::Inverted.format(@name))
111
+ expect(Nomen::Formatters::Inverted.format(blanks(@name))).to eq(Nomen::Formatters::Inverted.format(@name))
86
112
  end
87
113
  end
88
114
 
89
115
  context 'with [:middle, :last]' do
90
116
  before do
91
- @name = Nomen::Name.new(middle: 'Verenice', last: 'Voelker')
117
+ @name = Nomen.new(middle: 'Verenice', last: 'Voelker')
92
118
  end
93
119
 
94
120
  it 'should format correctly' do
95
- expect(Nomen::Formatters::Inverted.format(@name)).to eq('Voelker, Verenice')
121
+ expect(Nomen::Formatters::Inverted.format(@name)).to eq('Voelker, Verenice')
122
+ expect(Nomen::Formatters::Inverted.format(nils(@name))).to eq(Nomen::Formatters::Inverted.format(@name))
123
+ expect(Nomen::Formatters::Inverted.format(blanks(@name))).to eq(Nomen::Formatters::Inverted.format(@name))
96
124
  end
97
125
  end
98
126
 
99
127
  context 'with [:middle, :suffix]' do
100
128
  before do
101
- @name = Nomen::Name.new(middle: 'Verenice', suffix: 'M.D.')
129
+ @name = Nomen.new(middle: 'Verenice', suffix: 'M.D.')
102
130
  end
103
131
 
104
132
  it 'should format correctly' do
105
- expect(Nomen::Formatters::Inverted.format(@name)).to eq('Verenice M.D.')
133
+ expect(Nomen::Formatters::Inverted.format(@name)).to eq('Verenice M.D.')
134
+ expect(Nomen::Formatters::Inverted.format(nils(@name))).to eq(Nomen::Formatters::Inverted.format(@name))
135
+ expect(Nomen::Formatters::Inverted.format(blanks(@name))).to eq(Nomen::Formatters::Inverted.format(@name))
106
136
  end
107
137
  end
108
138
 
109
139
  context 'with [:last, :suffix]' do
110
140
  before do
111
- @name = Nomen::Name.new(last: 'Voelker', suffix: 'M.D.')
141
+ @name = Nomen.new(last: 'Voelker', suffix: 'M.D.')
112
142
  end
113
143
 
114
144
  it 'should format correctly' do
115
- expect(Nomen::Formatters::Inverted.format(@name)).to eq('Voelker, M.D.')
145
+ expect(Nomen::Formatters::Inverted.format(@name)).to eq('Voelker, M.D.')
146
+ expect(Nomen::Formatters::Inverted.format(nils(@name))).to eq(Nomen::Formatters::Inverted.format(@name))
147
+ expect(Nomen::Formatters::Inverted.format(blanks(@name))).to eq(Nomen::Formatters::Inverted.format(@name))
116
148
  end
117
149
  end
118
150
 
119
151
  context 'with [:first]' do
120
152
  before do
121
- @name = Nomen::Name.new(first: 'Katya')
153
+ @name = Nomen.new(first: 'Katya')
122
154
  end
123
155
 
124
156
  it 'should format correctly' do
125
- expect(Nomen::Formatters::Inverted.format(@name)).to eq('Katya')
157
+ expect(Nomen::Formatters::Inverted.format(@name)).to eq('Katya')
158
+ expect(Nomen::Formatters::Inverted.format(nils(@name))).to eq(Nomen::Formatters::Inverted.format(@name))
159
+ expect(Nomen::Formatters::Inverted.format(blanks(@name))).to eq(Nomen::Formatters::Inverted.format(@name))
126
160
  end
127
161
  end
128
162
 
129
163
  context 'with [:middle]' do
130
164
  before do
131
- @name = Nomen::Name.new(middle: 'Verenice')
165
+ @name = Nomen.new(middle: 'Verenice')
132
166
  end
133
167
 
134
168
  it 'should format correctly' do
135
- expect(Nomen::Formatters::Inverted.format(@name)).to eq('Verenice')
169
+ expect(Nomen::Formatters::Inverted.format(@name)).to eq('Verenice')
170
+ expect(Nomen::Formatters::Inverted.format(nils(@name))).to eq(Nomen::Formatters::Inverted.format(@name))
171
+ expect(Nomen::Formatters::Inverted.format(blanks(@name))).to eq(Nomen::Formatters::Inverted.format(@name))
136
172
  end
137
173
  end
138
174
 
139
175
  context 'with [:last]' do
140
176
  before do
141
- @name = Nomen::Name.new(last: 'Voelker')
177
+ @name = Nomen.new(last: 'Voelker')
142
178
  end
143
179
 
144
180
  it 'should format correctly' do
145
- expect(Nomen::Formatters::Inverted.format(@name)).to eq('Voelker')
181
+ expect(Nomen::Formatters::Inverted.format(@name)).to eq('Voelker')
182
+ expect(Nomen::Formatters::Inverted.format(nils(@name))).to eq(Nomen::Formatters::Inverted.format(@name))
183
+ expect(Nomen::Formatters::Inverted.format(blanks(@name))).to eq(Nomen::Formatters::Inverted.format(@name))
146
184
  end
147
185
  end
148
186
 
149
187
  context 'with [:suffix]' do
150
188
  before do
151
- @name = Nomen::Name.new(suffix: 'M.D.')
189
+ @name = Nomen.new(suffix: 'M.D.')
152
190
  end
153
191
 
154
192
  it 'should format correctly' do
155
- expect(Nomen::Formatters::Inverted.format(@name)).to eq('M.D.')
193
+ expect(Nomen::Formatters::Inverted.format(@name)).to eq('M.D.')
194
+ expect(Nomen::Formatters::Inverted.format(nils(@name))).to eq(Nomen::Formatters::Inverted.format(@name))
195
+ expect(Nomen::Formatters::Inverted.format(blanks(@name))).to eq(Nomen::Formatters::Inverted.format(@name))
156
196
  end
157
197
  end
158
198
  end
@@ -0,0 +1,54 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe Nomen do
4
+ context 'initialization' do
5
+ it 'should accept no parameters' do
6
+ expect{Nomen.new}.not_to raise_error
7
+ end
8
+
9
+ it 'should ignore non-name segment hash parameters' do
10
+ name = Nomen.new(first: 'Katya', foo: 'bar')
11
+ expect(name).to eq(Nomen.new(first: 'Katya'))
12
+ end
13
+
14
+ it 'should only accept one parameter' do
15
+ expect{Nomen.new({last: 'Voelker'}, 'foo')}.to raise_error
16
+ end
17
+ end
18
+
19
+ context 'equality' do
20
+ it 'should match equality based on name segment matching' do
21
+ a = Nomen.new(first: 'Katya', middle: 'Verenice', last: 'Voelker')
22
+ b = Nomen.new(last: 'Voelker', middle: 'Verenice', first: 'Katya')
23
+ expect(a).to eq(b)
24
+ expect(b).to eq(a)
25
+ a.suffix = "M.D."
26
+ expect(a).not_to eq(b)
27
+ expect(b).not_to eq(a)
28
+ end
29
+ end
30
+
31
+ context 'formatting' do
32
+ it 'should defer formatting to the proper format object' do
33
+ a = Nomen.new(first: 'Katya', middle: 'Verenice', last: 'Voelker', suffix: 'M.D.')
34
+ expect(a.format(:inverted)).to eq(Nomen::Formatters::Inverted.format(a))
35
+ end
36
+
37
+ it 'should default to the :full formatter' do
38
+ a = Nomen.new(first: 'Katya', middle: 'Verenice', last: 'Voelker', suffix: 'M.D.')
39
+ expect(a.format).to eq(a.format(:full))
40
+ end
41
+ end
42
+
43
+ context 'to_h' do
44
+ it 'should convert to hash using FRAGMENTS' do
45
+ full = Nomen.new(first: 'Katya', middle: 'Verenice', last: 'Voelker', suffix: 'M.D.')
46
+ expect(full.to_h).to eq({first: 'Katya', middle: 'Verenice', last: 'Voelker', suffix: 'M.D.'})
47
+ end
48
+
49
+ it 'should save empty fragments as null values' do
50
+ first = Nomen.new(first: 'Katya')
51
+ expect(first.to_h).to eq({first: 'Katya', middle: nil, last: nil, suffix: nil})
52
+ end
53
+ end
54
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nomen
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Abe Voelker
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-07 00:00:00.000000000 Z
11
+ date: 2013-08-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -69,14 +69,13 @@ files:
69
69
  - lib/nomen/formatters.rb
70
70
  - lib/nomen/formatters/full.rb
71
71
  - lib/nomen/formatters/inverted.rb
72
- - lib/nomen/name.rb
73
72
  - lib/nomen/version.rb
74
73
  - nomen.gemspec
75
74
  - spec/formatters/formatters_helper.rb
76
75
  - spec/formatters/full_spec.rb
77
76
  - spec/formatters/inverted_spec.rb
78
77
  - spec/formatters_spec.rb
79
- - spec/name_spec.rb
78
+ - spec/nomen_spec.rb
80
79
  - spec/spec_helper.rb
81
80
  homepage: https://github.com/abevoelker/nomen
82
81
  licenses:
@@ -88,12 +87,12 @@ require_paths:
88
87
  - lib
89
88
  required_ruby_version: !ruby/object:Gem::Requirement
90
89
  requirements:
91
- - - ! '>='
90
+ - - '>='
92
91
  - !ruby/object:Gem::Version
93
92
  version: '0'
94
93
  required_rubygems_version: !ruby/object:Gem::Requirement
95
94
  requirements:
96
- - - ! '>='
95
+ - - '>='
97
96
  - !ruby/object:Gem::Version
98
97
  version: '0'
99
98
  requirements: []
@@ -107,5 +106,5 @@ test_files:
107
106
  - spec/formatters/full_spec.rb
108
107
  - spec/formatters/inverted_spec.rb
109
108
  - spec/formatters_spec.rb
110
- - spec/name_spec.rb
109
+ - spec/nomen_spec.rb
111
110
  - spec/spec_helper.rb
@@ -1,23 +0,0 @@
1
- module Nomen
2
- class Name
3
- attr_accessor :first, :middle, :last, :suffix
4
-
5
- def initialize(opts={})
6
- name_opts = opts.select{|k,v| [:first, :middle, :last, :suffix].include?(k)}
7
- name_opts.each{|k,v| send("#{k}=".to_sym, v)}
8
- self
9
- end
10
-
11
- def format(type=:full)
12
- Nomen::Formatters.lookup(type).format(self)
13
- end
14
-
15
- def ==(other)
16
- [:first, :middle, :last, :suffix].each do |m|
17
- return false if self.send(m) != other.send(m)
18
- end
19
- true
20
- end
21
-
22
- end
23
- end
@@ -1,42 +0,0 @@
1
- require File.dirname(__FILE__) + '/spec_helper'
2
-
3
- describe Nomen::Name do
4
- context 'initialization' do
5
- it 'should accept no parameters' do
6
- expect{Nomen::Name.new}.not_to raise_error
7
- end
8
-
9
- it 'should ignore non-name segment hash parameters' do
10
- name = Nomen::Name.new(first: 'Katya', foo: 'bar')
11
- expect(name).to eq(Nomen::Name.new(first: 'Katya'))
12
- end
13
-
14
- it 'should only accept one parameter' do
15
- expect{Nomen::Name.new({last: 'Voelker'}, 'foo')}.to raise_error
16
- end
17
- end
18
-
19
- context 'equality' do
20
- it 'should match equality based on name segment matching' do
21
- a = Nomen::Name.new(first: 'Katya', middle: 'Verenice', last: 'Voelker')
22
- b = Nomen::Name.new(last: 'Voelker', middle: 'Verenice', first: 'Katya')
23
- expect(a).to eq(b)
24
- expect(b).to eq(a)
25
- a.suffix = "M.D."
26
- expect(a).not_to eq(b)
27
- expect(b).not_to eq(a)
28
- end
29
- end
30
-
31
- context 'formatting' do
32
- it 'should defer formatting to the proper format object' do
33
- a = Nomen::Name.new(first: 'Katya', middle: 'Verenice', last: 'Voelker', suffix: 'M.D.')
34
- expect(a.format(:inverted)).to eq(Nomen::Formatters::Inverted.format(a))
35
- end
36
-
37
- it 'should default to the :full formatter' do
38
- a = Nomen::Name.new(first: 'Katya', middle: 'Verenice', last: 'Voelker', suffix: 'M.D.')
39
- expect(a.format).to eq(a.format(:full))
40
- end
41
- end
42
- end