person-name 0.2.8 → 0.2.9

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.8
1
+ 0.2.9
@@ -111,11 +111,13 @@ module PersonName
111
111
 
112
112
  existing_part_fields = []
113
113
  part_values = []
114
+ part_hash = {}
114
115
  PersonName::NameSplitter::NAME_PARTS.each do |name_part|
115
116
  test_field = "#{name_base}_#{name_part}"
116
117
  if attributes.has_key? test_field
117
118
  existing_part_fields << test_field
118
119
  part_values << attributes[test_field]
120
+ part_hash[name_part.to_sym] = attributes[test_field]
119
121
  else
120
122
  part_values << send(test_field.to_sym)
121
123
  end
@@ -123,8 +125,27 @@ module PersonName
123
125
  if part_values.compact.join(" ") == full
124
126
  attributes.delete name_base
125
127
  else
126
- existing_part_fields.each do |part_field|
127
- attributes.delete part_field
128
+ # try to use existing fields as editing values of full name
129
+ new_part_values = PersonName::NameSplitter.split(attributes[name_base], part_hash)
130
+ assignments_valid = nil
131
+
132
+ # test if there is no conflict
133
+ PersonName::NameSplitter::NAME_PARTS.each do |name_part|
134
+ test_field = "#{name_base}_#{name_part}"
135
+ if attributes.has_key? test_field
136
+ attributes[test_field] = new_part_values[name_part.to_sym]
137
+ assignments_valid = true if assignments_valid.nil?
138
+ else
139
+ assignments_valid = false unless new_part_values[name_part.to_sym].nil?
140
+ end
141
+ end
142
+
143
+ if assignments_valid
144
+ attributes.delete name_base
145
+ else
146
+ existing_part_fields.each do |part_field|
147
+ attributes.delete part_field
148
+ end
128
149
  end
129
150
  end
130
151
  end
@@ -148,6 +148,30 @@ describe "Has Person Name" do
148
148
 
149
149
  end
150
150
 
151
+ it "should use the individual fields as edit post attributes match almost" do
152
+ @person = NamePerson.new
153
+ @person.attributes = {
154
+ :name => "Yolanthe Truuske Cabau van Kasbergen",
155
+ :name_first_name => "Yolanthe",
156
+ :name_middle_name => nil,
157
+ :name_last_name => "Cabau van Kasbergen"
158
+ }
159
+ @person.name.to_s.should == "Yolanthe Truuske Cabau van Kasbergen"
160
+ @person.name.last_name.should == "Cabau van Kasbergen"
161
+
162
+ end
163
+
164
+ it "should use the aggregated field if the posted attributes are not all available" do
165
+ @person = NamePerson.new
166
+ @person.attributes = {
167
+ :name => "Henk de Slager",
168
+ :name_first_name => "Henk",
169
+ :name_last_name => "Zanger"
170
+ }
171
+ @person.name.to_s.should == "Henk de Slager"
172
+ @person.name.full_last_name.should == "de Slager"
173
+
174
+ end
151
175
 
152
176
  end
153
177
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: person-name
3
3
  version: !ruby/object:Gem::Version
4
- hash: 7
4
+ hash: 5
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 8
10
- version: 0.2.8
9
+ - 9
10
+ version: 0.2.9
11
11
  platform: ruby
12
12
  authors:
13
13
  - Matthijs Groen