nameable_record 0.2.0 → 1.0.0

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.
@@ -0,0 +1,239 @@
1
+ require 'spec_helper'
2
+
3
+ describe NameableRecord::Name do
4
+
5
+ subject { name }
6
+
7
+ let :name do
8
+ described_class.new *name_parts
9
+ end
10
+
11
+ let :another_name do
12
+ described_class.new *name_parts
13
+ end
14
+
15
+ it 'should be frozen after initialization' do
16
+ subject.should be_frozen
17
+ end
18
+
19
+ it 'should know when it is equal to another Name' do
20
+ subject.eql?( another_name ).should be_true
21
+ subject.==( another_name ).should be_true
22
+ end
23
+
24
+ context 'PREDEFINED_PATTERNS' do
25
+
26
+ subject { described_class::PREDEFINED_PATTERNS }
27
+
28
+ it { should == {
29
+ :full => "%l, %f %s",
30
+ :full_with_middle => "%l, %f %m %s",
31
+ :full_with_prefix => "%l, %p %f %s",
32
+ :full_sentence => "%p %f %l %s",
33
+ :full_sentence_with_middle => "%p %f %m %l %s"
34
+ }
35
+ }
36
+
37
+ end
38
+
39
+ context 'PATTERN_MAP' do
40
+
41
+ subject { described_class::PATTERN_MAP }
42
+
43
+ it { should == {
44
+ /%l/ => :last,
45
+ /%f/ => :first,
46
+ /%m/ => :middle,
47
+ /%p/ => :prefix,
48
+ /%s/ => :suffix
49
+ }
50
+ }
51
+
52
+ end
53
+
54
+ context 'PREFIX_BASE' do
55
+
56
+ subject { described_class::PREFIX_BASE.sort }
57
+
58
+ it { should == %w(Mr Mrs Miss Dr General).sort }
59
+
60
+ end
61
+
62
+ context 'SUFFIX_BASE' do
63
+
64
+ subject { described_class::SUFFIX_BASE.sort }
65
+
66
+ it { should == %w(Jr III IV V Esq).sort }
67
+
68
+ end
69
+
70
+ context 'PREFIXES' do
71
+
72
+ subject { described_class::PREFIXES }
73
+
74
+ it { should == ["DR", "DR.", "Dr", "Dr.", "GENERAL", "GENERAL.", "General", "General.", "MISS", "MISS.", "MR", "MR.", "MRS", "MRS.", "Miss", "Miss.", "Mr", "Mr.", "Mrs", "Mrs.", "dr", "dr.", "general", "general.", "miss", "miss.", "mr", "mr.", "mrs", "mrs."] }
75
+
76
+ end
77
+
78
+ context 'SUFFIXES' do
79
+
80
+ subject { described_class::SUFFIXES }
81
+
82
+ it { should == ["ESQ", "ESQ.", "Esq", "Esq.", "III", "III", "III.", "III.", "IV", "IV", "IV.", "IV.", "JR", "JR.", "Jr", "Jr.", "V", "V", "V.", "V.", "esq", "esq.", "iii", "iii.", "iv", "iv.", "jr", "jr.", "v", "v."] }
83
+
84
+ end
85
+
86
+ context '#to_s' do
87
+
88
+ subject { name.to_s }
89
+
90
+ it { should == 'Smith, John' }
91
+
92
+ context 'when given a default pattern' do
93
+
94
+ context ':full' do
95
+
96
+ subject { name.to_s :full }
97
+
98
+ it { should == 'Smith, John III' }
99
+
100
+ end
101
+
102
+ context ':full' do
103
+
104
+ subject { name.to_s :full_with_middle }
105
+
106
+ it { should == 'Smith, John Jacob III' }
107
+
108
+ end
109
+
110
+ context ':full' do
111
+
112
+ subject { name.to_s :full_with_prefix }
113
+
114
+ it { should == 'Smith, Mr. John III' }
115
+
116
+ end
117
+
118
+ context ':full' do
119
+
120
+ subject { name.to_s :full_sentence }
121
+
122
+ it { should == 'Mr. John Smith III' }
123
+
124
+ end
125
+
126
+ context ':full' do
127
+
128
+ subject { name.to_s :full_sentence_with_middle }
129
+
130
+ it { should == 'Mr. John Jacob Smith III' }
131
+
132
+ end
133
+
134
+ end
135
+
136
+ context 'when given a pattern' do
137
+
138
+ context "'%f %l'" do
139
+
140
+ subject { name.to_s '%f %l' }
141
+
142
+ it { should == 'John Smith' }
143
+
144
+ end
145
+
146
+ context "'%p %f %l'" do
147
+
148
+ subject { name.to_s '%p %f %l' }
149
+
150
+ it { should == 'Mr. John Smith' }
151
+
152
+ end
153
+
154
+ context "'%p %f %l %s'" do
155
+
156
+ subject { name.to_s '%p %f %l %s' }
157
+
158
+ it { should == 'Mr. John Smith III' }
159
+
160
+ end
161
+
162
+ context "'%p %f %m %l %s'" do
163
+
164
+ subject { name.to_s '%p %f %m %l %s' }
165
+
166
+ it { should == 'Mr. John Jacob Smith III' }
167
+
168
+ end
169
+
170
+ end
171
+
172
+ end
173
+
174
+ # context 'parsing' do
175
+
176
+ # context 'a string name' do
177
+
178
+ # context 'John Smith' do
179
+
180
+ # subject { described_class.parse( 'John Smith' ) }
181
+
182
+ # it { should == described_class.new( 'Smith', 'John' ) }
183
+
184
+ # end
185
+
186
+ # context 'John Jacob Smith' do
187
+
188
+ # subject { described_class.parse( 'John Jacob Smith' ) }
189
+
190
+ # it { should == described_class.new( 'Smith', 'John', nil, 'Jacob' ) }
191
+
192
+ # end
193
+
194
+ # context 'Mr. John Smith' do
195
+
196
+ # subject { described_class.parse( 'Mr. John Smith' ) }
197
+
198
+ # it { should == described_class.new( 'Smith', 'John', 'Mr.' ) }
199
+
200
+ # end
201
+
202
+ # context 'Mr. John Jacob Smith' do
203
+
204
+ # subject { described_class.parse( 'Mr. John Jacob Smith' ) }
205
+
206
+ # it { should == described_class.new( 'Smith', 'John', 'Mr.', 'Jacob' ) }
207
+
208
+ # end
209
+
210
+ # context 'John Jacob Smith Jr.' do
211
+
212
+ # subject { described_class.parse( 'John Jacob Smith Jr.' ) }
213
+
214
+ # it { should == described_class.new( 'Smith', 'John', nil, 'Jacob', 'Jr' ) }
215
+
216
+ # end
217
+
218
+ # context 'Mr. John Smith Jr' do
219
+
220
+ # subject { described_class.parse( 'Mr. John Smith Jr' ) }
221
+
222
+ # it { should == described_class.new( 'Smith', 'John', 'Mr.', nil, 'Jr' ) }
223
+
224
+ # end
225
+
226
+ # context 'Mr John Jacob Smith III' do
227
+
228
+ # subject { described_class.parse( 'Mr John Jacob Smith III' ) }
229
+
230
+ # it { should == described_class.new( 'Smith', 'John', 'Mr.', 'Jacob', 'III' ) }
231
+
232
+ # end
233
+
234
+ # end
235
+
236
+ # end
237
+
238
+ end
239
+
@@ -0,0 +1,8 @@
1
+ require 'spec_helper'
2
+
3
+ describe "NameableRecord" do
4
+
5
+
6
+
7
+ end
8
+
@@ -0,0 +1,3 @@
1
+ ActiveRecord::Base.send :include, NameableRecord::ActiveRecordExtensions
2
+ require File.dirname(__FILE__) + '/../script/environment'
3
+
data/spec/spec_helper.rb CHANGED
@@ -1,9 +1,29 @@
1
- $LOAD_PATH.unshift(File.dirname(__FILE__))
2
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
1
+ require 'rubygems'
2
+ require 'active_record'
3
+ require 'rails'
4
+ require 'bundler/setup'
5
+
3
6
  require 'nameable_record'
4
- require 'spec'
5
- require 'spec/autorun'
6
7
 
7
- Spec::Runner.configure do |config|
8
-
8
+ RSpec.configure do |config|
9
+
10
+ config.mock_with :rspec
11
+
12
+ end
13
+
14
+ def name_parts
15
+ %w(Smith John Mr. Jacob III)
9
16
  end
17
+
18
+ class Hash
19
+ # for excluding keys
20
+ def except(*exclusions)
21
+ self.reject { |key, value| exclusions.include? key.to_sym }
22
+ end
23
+
24
+ # for overriding keys
25
+ def with(overrides = {})
26
+ self.merge overrides
27
+ end
28
+ end
29
+
metadata CHANGED
@@ -2,68 +2,110 @@
2
2
  name: nameable_record
3
3
  version: !ruby/object:Gem::Version
4
4
  hash: 23
5
- prerelease: false
5
+ prerelease:
6
6
  segments:
7
+ - 1
7
8
  - 0
8
- - 2
9
9
  - 0
10
- version: 0.2.0
10
+ version: 1.0.0
11
11
  platform: ruby
12
12
  authors:
13
- - C. Jason Harrelson
13
+ - Jason Harrelson
14
14
  autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-10-02 00:00:00 -05:00
18
+ date: 2011-11-08 00:00:00 -06:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- name: rspec
22
+ name: gem-dandy
23
23
  prerelease: false
24
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
25
  none: false
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- hash: 13
29
+ hash: 3
30
30
  segments:
31
- - 1
32
- - 2
33
- - 9
34
- version: 1.2.9
31
+ - 0
32
+ version: "0"
35
33
  type: :development
36
34
  version_requirements: *id001
37
- description: Encapsulates the composed of pattern for names into any easy to use library.
38
- email: jason@lookforwardenterprises.com
35
+ - !ruby/object:Gem::Dependency
36
+ name: rspec
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ hash: 3
44
+ segments:
45
+ - 0
46
+ version: "0"
47
+ type: :development
48
+ version_requirements: *id002
49
+ - !ruby/object:Gem::Dependency
50
+ name: rails
51
+ prerelease: false
52
+ requirement: &id003 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ hash: 3
58
+ segments:
59
+ - 0
60
+ version: "0"
61
+ type: :development
62
+ version_requirements: *id003
63
+ description: Abstracts the ActiveRecord composed_of pattern for names. Also provides other convenience utilieis for working with human names.
64
+ email:
65
+ - jason@lookforwardenterprises.com
39
66
  executables: []
40
67
 
41
68
  extensions: []
42
69
 
43
- extra_rdoc_files:
44
- - LICENSE
45
- - README.rdoc
70
+ extra_rdoc_files: []
71
+
46
72
  files:
47
73
  - .document
48
74
  - .gitignore
49
- - LICENSE
75
+ - .rspec
76
+ - .rvmrc
77
+ - Gemfile
78
+ - Gemfile.lock
79
+ - Guardfile
50
80
  - README.rdoc
51
81
  - Rakefile
52
- - VERSION
53
82
  - lib/nameable_record.rb
54
83
  - lib/nameable_record/active_record_extensions.rb
84
+ - lib/nameable_record/data/given-names.txt
85
+ - lib/nameable_record/data/surnames.txt
55
86
  - lib/nameable_record/name.rb
87
+ - lib/nameable_record/name_recognition.rb
88
+ - lib/nameable_record/name_recognizer.rb
89
+ - lib/nameable_record/railtie.rb
90
+ - lib/nameable_record/version.rb
56
91
  - nameable_record.gemspec
57
- - spec/nameable_record_spec.rb
58
- - spec/spec.opts
92
+ - script/environment.rb
93
+ - spec/database.yml
94
+ - spec/lib/nameable_record/active_record_extensions_spec.rb
95
+ - spec/lib/nameable_record/name_recognition_sharedspec.rb
96
+ - spec/lib/nameable_record/name_recognition_spec.rb
97
+ - spec/lib/nameable_record/name_recognizer_spec.rb
98
+ - spec/lib/nameable_record/name_spec.rb
99
+ - spec/lib/nameable_record_spec.rb
100
+ - spec/rails_spec_helper.rb
59
101
  - spec/spec_helper.rb
60
102
  has_rdoc: true
61
- homepage: http://github.com/midas/nameable_record
103
+ homepage: https://github.com/midas/nameable_record
62
104
  licenses: []
63
105
 
64
106
  post_install_message:
65
- rdoc_options:
66
- - --charset=UTF-8
107
+ rdoc_options: []
108
+
67
109
  require_paths:
68
110
  - lib
69
111
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -86,11 +128,18 @@ required_rubygems_version: !ruby/object:Gem::Requirement
86
128
  version: "0"
87
129
  requirements: []
88
130
 
89
- rubyforge_project:
90
- rubygems_version: 1.3.7
131
+ rubyforge_project: nameable_record
132
+ rubygems_version: 1.6.0
91
133
  signing_key:
92
134
  specification_version: 3
93
- summary: Encapsulates the composed of pattern for names into any easy to use library.
135
+ summary: Abstracts the ActiveRecord composed_of pattern for names.
94
136
  test_files:
95
- - spec/nameable_record_spec.rb
137
+ - spec/database.yml
138
+ - spec/lib/nameable_record/active_record_extensions_spec.rb
139
+ - spec/lib/nameable_record/name_recognition_sharedspec.rb
140
+ - spec/lib/nameable_record/name_recognition_spec.rb
141
+ - spec/lib/nameable_record/name_recognizer_spec.rb
142
+ - spec/lib/nameable_record/name_spec.rb
143
+ - spec/lib/nameable_record_spec.rb
144
+ - spec/rails_spec_helper.rb
96
145
  - spec/spec_helper.rb
data/LICENSE DELETED
@@ -1,20 +0,0 @@
1
- Copyright (c) 2009 Jason Harrelson (midas)
2
-
3
- Permission is hereby granted, free of charge, to any person obtaining
4
- a copy of this software and associated documentation files (the
5
- "Software"), to deal in the Software without restriction, including
6
- without limitation the rights to use, copy, modify, merge, publish,
7
- distribute, sublicense, and/or sell copies of the Software, and to
8
- permit persons to whom the Software is furnished to do so, subject to
9
- the following conditions:
10
-
11
- The above copyright notice and this permission notice shall be
12
- included in all copies or substantial portions of the Software.
13
-
14
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 0.2.0
@@ -1,7 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
-
3
- describe "NameableRecord" do
4
- it "fails" do
5
- fail "hey buddy, you should probably rename this file and start specing for real"
6
- end
7
- end
data/spec/spec.opts DELETED
@@ -1 +0,0 @@
1
- --color