osm 1.2.18.dev.8 → 1.2.18.dev.9

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,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ZDk0YzM4NThhMzM4ZGE0NmVkN2E2NjMyNmQwYjE0NTliZDBkZjU5OQ==
4
+ YWZhOTg0ZjAwNzk1YjE3ZmY0YTJlNjI0ZWRjZmFiMWFkMTc5YTk1OQ==
5
5
  data.tar.gz: !binary |-
6
- NjYxMjZiOTI3MzJkYzY2Mzc0MjJhMWM0ZTU0M2U4MDkyZjRjMTZiZQ==
6
+ MGQ3M2MyNTk0MWRlNjNkMmYwNWU2OTc4MjBhYjAxMmQ4OGUxZjE1Nw==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- MjA2YzhlNWQ1OWMzZDNlNWM5ZDM2NzViZDRmZGY1ZGNhYzRkZjNkYzdlNzg4
10
- OTBiMDljNmEyYjk0NWMyMmQ3NmExYjRiYjE0ODU0NGRmZWJkNGM1NjhmYjEw
11
- YTVhNzg3YzVmZTRlNDU2OWIxMjFkZWIxYWU5ZGI0NTkxMTBkM2M=
9
+ ZDkwMjA5NTYyYTRiMTEzMGNiMzNhNzFiM2E2MTEwZmQwNDc1NjE3NDcyYjM2
10
+ ZTcxNGQwOTE5YjFhMTU5ZmMyMWQxODNmMTExN2MyNDNjMWIwY2ExMjYxNDdh
11
+ OTM3ZmQ3NWEyOWJlMmUxMGMyM2QzMmE4MmE1M2FhNjc1NDIzYzM=
12
12
  data.tar.gz: !binary |-
13
- MmIxZjgzOTJmMzM3YWYwMmQ0MmNmN2Y3ZTBkZTU5YWZhZmE5NjU0MjgzNTgw
14
- YTkzYmM2Y2MzYzVmZGQyODVjZDNjMmRlNmE1ZTRlYjQ4N2EwNjcwMjY4ZWRm
15
- ZTk3NTM0Y2E4YTQwMmJiNmU4ZmY3MjY5MjkzYzhkNzA0ZTE1ODE=
13
+ YzhjNDRkZWVlNjdlZjljYWU2ODkyNDZjODliODllYzcyZmI4Y2RiYTBhNTQx
14
+ MGRiZWM5YzMyMWI4NzJmYTJhYzc1YzgzNTMxZWMwZmIxM2MzNTcwNGNiNGFk
15
+ MDc2OWMzMDFiNTIxNmUwYjE3YTQzMGM4ODQ2YTc4MWUwZmI1ZDc=
data/CHANGELOG.md CHANGED
@@ -16,8 +16,8 @@
16
16
  * Addition of attibutes:
17
17
  * gender (Symbol - :male, :female, :other or :unspecified)
18
18
  * finished_section (Date, nil)
19
- * custom (DirtyHashy) - The customisable data part from OSM
20
- * custom_labels (DirtyHashy) - The labels which belong to the data in custom
19
+ * additional_information (DirtyHashy) - The customisable data part from OSM
20
+ * additional_information_labels (DirtyHashy) - The labels which belong to the data in custom
21
21
  * primary_contact, secondary_contact, emergency_contact and doctor - the relevant parts from OSM
22
22
  * grouping_label
23
23
  * grouping_leader_label
data/lib/osm/member.rb CHANGED
@@ -61,10 +61,10 @@ module Osm
61
61
  # @return [Date] when the member finished the section they were retrieved for
62
62
  # @!attribute [rw] joined_movement
63
63
  # @return [Date] when the member joined the movement
64
- # @!attribute [rw] custom
65
- # @return [DirtyHashy] the custom data (key is OSM's variable name, value is the data)
66
- # @!attribute [rw] custom_labels
67
- # @return [DirtyHashy] the labels for the custom data (key is OSM's variable name, value is the label)
64
+ # @!attribute [rw] additional_information
65
+ # @return [DirtyHashy] the Additional Information (key is OSM's variable name, value is the data)
66
+ # @!attribute [rw] additional_information_labels
67
+ # @return [DirtyHashy] the labels for the additional information (key is OSM's variable name, value is the label)
68
68
  # @!attribute [rw] contact
69
69
  # @return [Osm::Member::MemberContact, nil] the member's contact details (nil if hidden in OSM)
70
70
  # @!attribute [rw] primary_contact
@@ -90,8 +90,8 @@ module Osm
90
90
  attribute :finished_section, :type => Date
91
91
  attribute :joined_movement, :type => Date
92
92
  attribute :gender, :type => Object
93
- attribute :custom, :type => Object, :default => DirtyHashy.new
94
- attribute :custom_labels, :type => Object, :default => DirtyHashy.new
93
+ attribute :additional_information, :type => Object, :default => DirtyHashy.new
94
+ attribute :additional_information_labels, :type => Object, :default => DirtyHashy.new
95
95
  attribute :contact, :type => Object
96
96
  attribute :primary_contact, :type => Object
97
97
  attribute :secondary_contact, :type => Object
@@ -101,7 +101,8 @@ module Osm
101
101
  if ActiveModel::VERSION::MAJOR < 4
102
102
  attr_accessible :id, :section_id, :first_name, :last_name, :grouping_id, :grouping_leader,
103
103
  :date_of_birth, :started_section, :finished_section, :joined_movement, :age,
104
- :grouping_label, :grouping_leader_label, :gender, :custom, :custom_labels,
104
+ :grouping_label, :grouping_leader_label, :gender,
105
+ :additional_information, :additional_information_labels,
105
106
  :contact, :primary_contact, :secondary_contact, :emergency_contact, :doctor
106
107
  end
107
108
 
@@ -113,8 +114,8 @@ module Osm
113
114
  validates_presence_of :last_name
114
115
  validates_presence_of :grouping_label, :allow_blank => true
115
116
  validates_presence_of :grouping_leader_label, :allow_blank => true
116
- validates_presence_of :custom, :allow_blank => true
117
- validates_presence_of :custom_labels, :allow_blank => true
117
+ validates_presence_of :additional_information, :allow_blank => true
118
+ validates_presence_of :additional_information_labels, :allow_blank => true
118
119
  validates_presence_of :date_of_birth
119
120
  validates_presence_of :started_section
120
121
  validates_presence_of :finished_section, :allow_nil=>true
@@ -212,8 +213,8 @@ module Osm
212
213
  receive_phone_2: member_contact[CID_RECIEVE_PHONE_2],
213
214
  receive_email_1: member_contact[CID_RECIEVE_EMAIL_1],
214
215
  receive_email_2: member_contact[CID_RECIEVE_EMAIL_2],
215
- custom: member_custom,
216
- custom_labels: custom_labels[GID_MEMBER_CONTACT],
216
+ additional_information: member_custom,
217
+ additional_information_labels: custom_labels[GID_MEMBER_CONTACT],
217
218
  ),
218
219
  :primary_contact => primary_contact.nil? ? nil : PrimaryContact.new(
219
220
  first_name: primary_contact[CID_FIRST_NAME],
@@ -231,8 +232,8 @@ module Osm
231
232
  receive_phone_2: primary_contact[CID_RECIEVE_PHONE_2],
232
233
  receive_email_1: primary_contact[CID_RECIEVE_EMAIL_1],
233
234
  receive_email_2: primary_contact[CID_RECIEVE_EMAIL_2],
234
- custom: primary_custom,
235
- custom_labels: custom_labels[GID_PRIMARY_CONTACT],
235
+ additional_information: primary_custom,
236
+ additional_information_labels: custom_labels[GID_PRIMARY_CONTACT],
236
237
  ),
237
238
  :secondary_contact => secondary_contact.nil? ? nil : SecondaryContact.new(
238
239
  first_name: secondary_contact[CID_FIRST_NAME],
@@ -250,8 +251,8 @@ module Osm
250
251
  receive_phone_2: secondary_contact[CID_RECIEVE_PHONE_2],
251
252
  receive_email_1: secondary_contact[CID_RECIEVE_EMAIL_1],
252
253
  receive_email_2: secondary_contact[CID_RECIEVE_EMAIL_2],
253
- custom: secondary_custom,
254
- custom_labels: custom_labels[GID_SECONDARY_CONTACT],
254
+ additional_information: secondary_custom,
255
+ additional_information_labels: custom_labels[GID_SECONDARY_CONTACT],
255
256
  ),
256
257
  :emergency_contact => emergency_contact.nil? ? nil : EmergencyContact.new(
257
258
  first_name: emergency_contact[CID_FIRST_NAME],
@@ -265,8 +266,8 @@ module Osm
265
266
  phone_2: emergency_contact[CID_PHONE_2],
266
267
  email_1: emergency_contact[CID_EMAIL_1],
267
268
  email_2: emergency_contact[CID_EMAIL_2],
268
- custom: emergency_custom,
269
- custom_labels: custom_labels[GID_EMERGENCY_CONTACT],
269
+ additional_information: emergency_custom,
270
+ additional_information_labels: custom_labels[GID_EMERGENCY_CONTACT],
270
271
  ),
271
272
  :doctor => doctor_contact.nil? ? nil : DoctorContact.new(
272
273
  first_name: doctor_contact[CID_FIRST_NAME],
@@ -279,11 +280,11 @@ module Osm
279
280
  postcode: doctor_contact[CID_POSTCODE],
280
281
  phone_1: doctor_contact[CID_PHONE_1],
281
282
  phone_2: doctor_contact[CID_PHONE_2],
282
- custom:doctor_custom,
283
- custom_labels: custom_labels[GID_DOCTOR_CONTACT],
283
+ additional_information:doctor_custom,
284
+ additional_information_labels: custom_labels[GID_DOCTOR_CONTACT],
284
285
  ),
285
- custom: custom_data,
286
- custom_labels: custom_labels[GID_CUSTOM],
286
+ additional_information: custom_data,
287
+ additional_information_labels: custom_labels[GID_CUSTOM],
287
288
  )
288
289
  end
289
290
 
@@ -376,8 +377,8 @@ module Osm
376
377
  end
377
378
 
378
379
  # Do custom attributes
379
- custom.keys.select{ |a| force || custom.changes.keys.include?(a) }.each do |attr|
380
- new_value = custom[attr]
380
+ additional_information.keys.select{ |a| force || additional_information.changes.keys.include?(a) }.each do |attr|
381
+ new_value = additional_information[attr]
381
382
  data = api.perform_query("ext/customdata/?action=updateColumn&section_id=#{section_id}", {
382
383
  'associated_id' => self.id,
383
384
  'associated_type' => 'member',
@@ -399,7 +400,7 @@ module Osm
399
400
  # Finish off
400
401
  if updated
401
402
  reset_changed_attributes
402
- custom.clean_up!
403
+ additional_information.clean_up!
403
404
  # The cached columns for the members will be out of date - remove them
404
405
  Osm::Term.get_for_section(api, section_id).each do |term|
405
406
  Osm::Model.cache_delete(api, ['members', section_id, term.id])
@@ -630,10 +631,10 @@ module Osm
630
631
  # @return [String] the primary phone number
631
632
  # @!attribute [rw] phone_2
632
633
  # @return [String] the secondary phone number
633
- # @!attribute [rw] custom
634
- # @return [DirtyHashy] the custom data (key is OSM's variable name, value is the data)
635
- # @!attribute [rw] custom_labels
636
- # @return [DirtyHashy] the labels for the custom data (key is OSM's variable name, value is the label)
634
+ # @!attribute [rw] additional_information
635
+ # @return [DirtyHashy] the additional information (key is OSM's variable name, value is the data)
636
+ # @!attribute [rw] additional_information_labels
637
+ # @return [DirtyHashy] the labels for the additional information (key is OSM's variable name, value is the label)
637
638
 
638
639
  attribute :first_name, :type => String
639
640
  attribute :last_name, :type => String
@@ -644,12 +645,13 @@ module Osm
644
645
  attribute :postcode, :type => String
645
646
  attribute :phone_1, :type => String
646
647
  attribute :phone_2, :type => String
647
- attribute :custom, :type => Object, :default => DirtyHashy.new
648
- attribute :custom_labels, :type => Object, :default => DirtyHashy.new
648
+ attribute :additional_information, :type => Object, :default => DirtyHashy.new
649
+ attribute :additional_information_labels, :type => Object, :default => DirtyHashy.new
649
650
 
650
651
  if ActiveModel::VERSION::MAJOR < 4
651
652
  attr_accessible :first_name, :last_name, :address_1, :address_2, :address_3, :address_4,
652
- :postcode, :phone_1, :phone_2, :custom, :custom_labels
653
+ :postcode, :phone_1, :phone_2,
654
+ :additional_information, :additional_information_labels
653
655
  end
654
656
 
655
657
  # @!method initialize
@@ -699,13 +701,13 @@ module Osm
699
701
  } # our name => OSM name
700
702
 
701
703
  data = {}
702
- attributes.keys.select{ |a| !['custom', 'custom_labels'].include?(a) }.select{ |a| force || changed_attributes.include?(a) }.each do |attr|
704
+ attributes.keys.select{ |a| !['additional_information', 'additional_information_labels'].include?(a) }.select{ |a| force || changed_attributes.include?(a) }.each do |attr|
703
705
  value = send(attr)
704
706
  value = 'yes' if value.eql?(true)
705
707
  data[attribute_map[attr]] = value
706
708
  end
707
- custom.keys.select{ |a| force || custom.changes.keys.include?(a) }.each do |attr|
708
- data["data[#{attr}]"] = custom[attr]
709
+ additional_information.keys.select{ |a| force || additional_information.changes.keys.include?(a) }.each do |attr|
710
+ data["data[#{attr}]"] = additional_information[attr]
709
711
  end
710
712
 
711
713
  updated = false
@@ -722,7 +724,7 @@ module Osm
722
724
  # Finish off
723
725
  if updated
724
726
  reset_changed_attributes
725
- custom.clean_up!
727
+ additional_information.clean_up!
726
728
  end
727
729
  return updated
728
730
  end
@@ -19,8 +19,8 @@ describe "Member" do
19
19
  :joined_movement => '2006-01-02',
20
20
  :started_section => '2006-01-07',
21
21
  :finished_section => '2007-12-31',
22
- :custom => {'12_3' => '123'},
23
- :custom_labels => {'12_3' => 'Label for 123'},
22
+ :additional_information => {'12_3' => '123'},
23
+ :additional_information_labels => {'12_3' => 'Label for 123'},
24
24
  :contact => Osm::Member::MemberContact.new(postcode: 'A'),
25
25
  :primary_contact => Osm::Member::PrimaryContact.new(postcode: 'B'),
26
26
  :secondary_contact => Osm::Member::PrimaryContact.new(postcode: 'C'),
@@ -43,8 +43,8 @@ describe "Member" do
43
43
  member.joined_movement.should == Date.new(2006, 1, 2)
44
44
  member.started_section.should == Date.new(2006, 1, 7)
45
45
  member.finished_section.should == Date.new(2007, 12, 31)
46
- member.custom.should == {'12_3' => '123'}
47
- member.custom_labels.should == {'12_3' => 'Label for 123'}
46
+ member.additional_information.should == {'12_3' => '123'}
47
+ member.additional_information_labels.should == {'12_3' => 'Label for 123'}
48
48
  member.contact.postcode.should == 'A'
49
49
  member.primary_contact.postcode.should == 'B'
50
50
  member.secondary_contact.postcode.should == 'C'
@@ -144,383 +144,386 @@ describe "Member" do
144
144
 
145
145
  describe "Using the API" do
146
146
 
147
- it "Get from OSM" do
148
- body = {
149
- 'status' => true,
150
- 'error' => nil,
151
- 'data' => {
152
- '123' => {
153
- 'active' => true,
154
- 'age' => '12 / 00',
155
- 'date_of_birth' => '2000-03-08',
156
- 'end_date' => '2010-06-03',
157
- 'first_name' => 'John',
158
- 'joined' => '2008-07-12',
159
- 'last_name' => 'Smith',
160
- 'member_id' => 123,
161
- 'patrol' => 'Leaders',
162
- 'patrol_id' => -2,
163
- 'patrol_role_level' => 1,
164
- 'patrol_role_level_label' => 'Assistant leader',
165
- 'section_id' => 1,
166
- 'started' => '2006-07-17',
167
- 'custom_data' => {
168
- '1' => {'2' => 'Primary', '3' => 'Contact', '7' => 'Address 1', '8' => 'Address 2', '9' => 'Address 3', '10' => 'Address 4', '11' => 'Postcode', '12' => 'primary@example.com', '13' => 'yes', '14' => '', '15' => '', '18' => '01234 567890', '19' => 'yes', '20' => '0987 654321', '21' => '', '8441' => 'Data for 8441'},
169
- '2' => {'2' => 'Secondary', '3' => 'Contact', '7' => 'Address 1', '8' => 'Address 2', '9' => 'Address 3', '10' => 'Address 4', '11' => 'Postcode', '12' => 'secondary@example.com', '13' => 'yes', '14' => '', '15' => '', '18' => '01234 567890', '19' => 'yes', '20' => '0987 654321', '21' => '', '8442' => 'Data for 8442'},
170
- '3' => {'2' => 'Emergency', '3' => 'Contact', '7' => 'Address 1', '8' => 'Address 2', '9' => 'Address 3', '10' => 'Address 4', '11' => 'Postcode', '12' => 'emergency@example.com', '14' => '', '18' => '01234 567890', '20' => '0987 654321', '21' => '', '8443' => 'Data for 8443'},
171
- '4' => {'2' => 'Doctor', '3' => 'Contact', '7' => 'Address 1', '8' => 'Address 2', '9' => 'Address 3', '10' => 'Address 4', '11' => 'Postcode', '18' => '01234 567890', '20' => '0987 654321', '21' => '', '54' => 'Surgery', '8444' => 'Data for 8444'},
172
- '5' => {'4848' => 'Data for 4848'},
173
- '6' => {'7' => 'Address 1', '8' => 'Address 2', '9' => 'Address 3', '10' => 'Address 4', '11' => 'Postcode', '12' => 'member@example.com', '13' => 'yes', '14' => '', '15' => '', '18' => '01234 567890', '19' => 'yes', '20' => '0987 654321', '21' => '', '8446' => 'Data for 8446'},
174
- '7' => {'34' => 'Unspecified'},
175
- },
176
- }
177
- },
178
- 'meta' => {
179
- 'leader_count' => 20,
180
- 'member_count' => 30,
147
+ describe "Get from OSM" do
148
+
149
+ it "Normal data returned from OSM" do
150
+ body = {
181
151
  'status' => true,
182
- 'structure' => [
183
- {'group_id' => 1, 'description' => '', 'identifier' => 'contact_primary_1', 'name' => 'Primary Contact 1', 'columns' => [
184
- {'column_id' => 2, 'group_column_id' => '1_2', 'label' => 'First Name', 'varname' => 'firstname', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
185
- {'column_id' => 3, 'group_column_id' => '1_3', 'label' => 'Last Name', 'varname' => 'lastname', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
186
- {'column_id' => 7, 'group_column_id' => '1_7', 'label' => 'Address 1', 'varname' => 'address1', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
187
- {'column_id' => 8, 'group_column_id' => '1_8', 'label' => 'Address 2', 'varname' => 'address2', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
188
- {'column_id' => 9, 'group_column_id' => '1_9', 'label' => 'Address 3', 'varname' => 'address3', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
189
- {'column_id' => 10, 'group_column_id' => '1_10', 'label' => 'Address 4', 'varname' => 'address4', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
190
- {'column_id' => 11, 'group_column_id' => '1_11', 'label' => 'Postcode', 'varname' => 'postcode', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
191
- {'column_id' => 12, 'group_column_id' => '1_12', 'label' => 'Email 1', 'varname' => 'email1', 'read_only' => 'no', 'required' => 'no', 'type' => 'email', 'width' => 120},
192
- {'column_id' => 14, 'group_column_id' => '1_14', 'label' => 'Email 2', 'varname' => 'email2', 'read_only' => 'no', 'required' => 'no', 'type' => 'email', 'width' => 120},
193
- {'column_id' => 18, 'group_column_id' => '1_18', 'label' => 'Phone 1', 'varname' => 'phone1', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
194
- {'column_id' => 20, 'group_column_id' => '1_20', 'label' => 'Phone 2', 'varname' => 'phone2', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
195
- {'column_id' => 8441, 'group_column_id' => '1_8441', 'label' => 'Label for 8441', 'varname' => 'label_for_8441', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
196
- ]},
197
- {'group_id' => 2, 'description' => '', 'identifier' => 'contact_primary_2', 'name' => 'Primary Contact 2', 'columns' => [
198
- {'column_id' => 2, 'group_column_id' => '2_2', 'label' => 'First Name', 'varname' => 'firstname', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
199
- {'column_id' => 3, 'group_column_id' => '2_3', 'label' => 'Last Name', 'varname' => 'lastname', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
200
- {'column_id' => 7, 'group_column_id' => '2_7', 'label' => 'Address 1', 'varname' => 'address1', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
201
- {'column_id' => 8, 'group_column_id' => '2_8', 'label' => 'Address 2', 'varname' => 'address2', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
202
- {'column_id' => 9, 'group_column_id' => '2_9', 'label' => 'Address 3', 'varname' => 'address3', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
203
- {'column_id' => 10, 'group_column_id' => '2_10', 'label' => 'Address 4', 'varname' => 'address4', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
204
- {'column_id' => 11, 'group_column_id' => '2_11', 'label' => 'Postcode', 'varname' => 'postcode', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
205
- {'column_id' => 12, 'group_column_id' => '2_12', 'label' => 'Email 1', 'varname' => 'email1', 'read_only' => 'no', 'required' => 'no', 'type' => 'email', 'width' => 120},
206
- {'column_id' => 14, 'group_column_id' => '2_14', 'label' => 'Email 2', 'varname' => 'email2', 'read_only' => 'no', 'required' => 'no', 'type' => 'email', 'width' => 120},
207
- {'column_id' => 18, 'group_column_id' => '2_18', 'label' => 'Phone 1', 'varname' => 'phone1', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
208
- {'column_id' => 20, 'group_column_id' => '2_20', 'label' => 'Phone 2', 'varname' => 'phone2', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
209
- {'column_id' => 8442, 'group_column_id' => '2_8442', 'label' => 'Label for 8442', 'varname' => 'label_for_8442', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
210
- ]},
211
- {'group_id' => 3, 'description' => '', 'identifier' => 'emergency', 'name' => 'Emergency Contact', 'columns' => [
212
- {'column_id' => 2, 'group_column_id' => '3_2', 'label' => 'First Name', 'varname' => 'firstname', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
213
- {'column_id' => 3, 'group_column_id' => '3_3', 'label' => 'Last Name', 'varname' => 'lastname', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
214
- {'column_id' => 7, 'group_column_id' => '3_7', 'label' => 'Address 1', 'varname' => 'address1', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
215
- {'column_id' => 8, 'group_column_id' => '3_8', 'label' => 'Address 2', 'varname' => 'address2', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
216
- {'column_id' => 9, 'group_column_id' => '3_9', 'label' => 'Address 3', 'varname' => 'address3', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
217
- {'column_id' => 10, 'group_column_id' => '3_10', 'label' => 'Address 4', 'varname' => 'address4', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
218
- {'column_id' => 11, 'group_column_id' => '3_11', 'label' => 'Postcode', 'varname' => 'postcode', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
219
- {'column_id' => 12, 'group_column_id' => '3_12', 'label' => 'Email 1', 'varname' => 'email1', 'read_only' => 'no', 'required' => 'no', 'type' => 'email', 'width' => 120},
220
- {'column_id' => 14, 'group_column_id' => '3_14', 'label' => 'Email 2', 'varname' => 'email2', 'read_only' => 'no', 'required' => 'no', 'type' => 'email', 'width' => 120},
221
- {'column_id' => 18, 'group_column_id' => '3_18', 'label' => 'Phone 1', 'varname' => 'phone1', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
222
- {'column_id' => 20, 'group_column_id' => '3_20', 'label' => 'Phone 2', 'varname' => 'phone2', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
223
- {'column_id' => 8443, 'group_column_id' => '3_8443', 'label' => 'Label for 8443', 'varname' => 'label_for_8443', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
224
- ]},
225
- {'group_id' => 4, 'description' => '', 'identifier' => 'doctor', 'name' => "Doctor's Surgery", 'columns' => [
226
- {'column_id' => 2, 'group_column_id' => '4_2', 'label' => 'First Name', 'varname' => 'firstname', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
227
- {'column_id' => 3, 'group_column_id' => '4_3', 'label' => 'Last Name', 'varname' => 'lastname', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
228
- {'column_id' => 54, 'group_column_id' => '4_54', 'label' => 'Surgery', 'varname' => 'surgery', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
229
- {'column_id' => 7, 'group_column_id' => '4_7', 'label' => 'Address 1', 'varname' => 'address1', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
230
- {'column_id' => 8, 'group_column_id' => '4_8', 'label' => 'Address 2', 'varname' => 'address2', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
231
- {'column_id' => 9, 'group_column_id' => '4_9', 'label' => 'Address 3', 'varname' => 'address3', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
232
- {'column_id' => 10, 'group_column_id' => '4_10', 'label' => 'Address 4', 'varname' => 'address4', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
233
- {'column_id' => 11, 'group_column_id' => '4_11', 'label' => 'Postcode', 'varname' => 'postcode', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
234
- {'column_id' => 18, 'group_column_id' => '4_18', 'label' => 'Phone 1', 'varname' => 'phone1', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
235
- {'column_id' => 20, 'group_column_id' => '4_20', 'label' => 'Phone 2', 'varname' => 'phone2', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
236
- {'column_id' => 8444, 'group_column_id' => '4_8444', 'label' => 'Label for 8444', 'varname' => 'label_for_8444', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
237
- ]},
238
- {'group_id' => 6, 'description' => '', 'identifier' => 'contact_member', 'name' => 'Member', 'columns' => [
239
- {'column_id' => 2, 'group_column_id' => '6_2', 'label' => 'First Name', 'varname' => 'firstname', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
240
- {'column_id' => 3, 'group_column_id' => '6_3', 'label' => 'Last Name', 'varname' => 'lastname', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
241
- {'column_id' => 7, 'group_column_id' => '6_7', 'label' => 'Address 1', 'varname' => 'address1', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
242
- {'column_id' => 8, 'group_column_id' => '6_8', 'label' => 'Address 2', 'varname' => 'address2', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
243
- {'column_id' => 9, 'group_column_id' => '6_9', 'label' => 'Address 3', 'varname' => 'address3', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
244
- {'column_id' => 10, 'group_column_id' => '6_10', 'label' => 'Address 4', 'varname' => 'address4', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
245
- {'column_id' => 11, 'group_column_id' => '6_11', 'label' => 'Postcode', 'varname' => 'postcode', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
246
- {'column_id' => 12, 'group_column_id' => '6_12', 'label' => 'Email 1', 'varname' => 'email1', 'read_only' => 'no', 'required' => 'no', 'type' => 'email', 'width' => 120},
247
- {'column_id' => 14, 'group_column_id' => '6_14', 'label' => 'Email 2', 'varname' => 'email2', 'read_only' => 'no', 'required' => 'no', 'type' => 'email', 'width' => 120},
248
- {'column_id' => 18, 'group_column_id' => '6_18', 'label' => 'Phone 1', 'varname' => 'phone1', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
249
- {'column_id' => 20, 'group_column_id' => '6_20', 'label' => 'Phone 2', 'varname' => 'phone2', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
250
- {'column_id' => 8446, 'group_column_id' => '6_8446', 'label' => 'Label for 8446', 'varname' => 'label_for_8446', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
251
- ]},
252
- {'group_id' => 5, 'description' => 'This allows you to add extra information for your members.', 'identifier' => 'customisable_data', 'name' => 'Customisable Data', 'columns' => [
253
- {'column_id' => 4848, 'group_column_id' => '5_4848', 'label' => 'Label for 4848', 'varname' => 'label_for_4848', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
254
- ]},
255
- {'group_id' => 7, 'description' => '', 'identifier' => 'floating', 'name' => 'Floating', 'columns' => [
256
- {'column_id' => 34, 'group_column_id' => '7_34', 'label' => 'Gender', 'varname' => 'gender', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
257
- ]},
258
- ],
259
- },
260
- }
261
- FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/ext/members/contact/grid/?action=getMembers", :body => body.to_json, :content_type => 'application/json')
262
-
263
- members = Osm::Member.get_for_section(@api, 1, 2)
264
- members.size.should == 1
265
- member = members[0]
266
- member.id.should == 123
267
- member.section_id.should == 1
268
- member.first_name.should == 'John'
269
- member.last_name.should == 'Smith'
270
- member.date_of_birth.should == Date.new(2000, 3, 8)
271
- member.grouping_id.should == -2
272
- member.grouping_leader.should == 1
273
- member.grouping_label.should == 'Leaders'
274
- member.grouping_leader_label.should == 'Assistant leader'
275
- member.age.should == '12 / 00'
276
- member.gender.should == :unspecified
277
- member.joined_movement.should == Date.new(2006, 7, 17)
278
- member.started_section.should == Date.new(2008, 7, 12)
279
- member.finished_section.should == Date.new(2010, 6, 3)
280
- member.custom.should == {"label_for_4848" => "Data for 4848"}
281
- member.custom_labels.should == {"label_for_4848" => 'Label for 4848'}
282
- member.contact.first_name.should == 'John'
283
- member.contact.last_name.should == 'Smith'
284
- member.contact.address_1.should == 'Address 1'
285
- member.contact.address_2.should == 'Address 2'
286
- member.contact.address_3.should == 'Address 3'
287
- member.contact.address_4.should == 'Address 4'
288
- member.contact.postcode.should == 'Postcode'
289
- member.contact.phone_1.should == '01234 567890'
290
- member.contact.receive_phone_1.should == true
291
- member.contact.phone_2.should == '0987 654321'
292
- member.contact.receive_phone_2.should == false
293
- member.contact.email_1.should == 'member@example.com'
294
- member.contact.receive_email_1.should == true
295
- member.contact.email_2.should == ''
296
- member.contact.receive_email_2.should == false
297
- member.contact.custom.should == {"label_for_8446"=>"Data for 8446"}
298
- member.contact.custom_labels.should == {"label_for_8446"=>"Label for 8446"}
299
- member.primary_contact.first_name.should == 'Primary'
300
- member.primary_contact.last_name.should == 'Contact'
301
- member.primary_contact.address_1.should == 'Address 1'
302
- member.primary_contact.address_2.should == 'Address 2'
303
- member.primary_contact.address_3.should == 'Address 3'
304
- member.primary_contact.address_4.should == 'Address 4'
305
- member.primary_contact.postcode.should == 'Postcode'
306
- member.primary_contact.phone_1.should == '01234 567890'
307
- member.primary_contact.receive_phone_1.should == true
308
- member.primary_contact.phone_2.should == '0987 654321'
309
- member.primary_contact.receive_phone_2.should == false
310
- member.primary_contact.email_1.should == 'primary@example.com'
311
- member.primary_contact.receive_email_1.should == true
312
- member.primary_contact.email_2.should == ''
313
- member.primary_contact.receive_email_2.should == false
314
- member.primary_contact.custom.should == {"label_for_8441"=>"Data for 8441"}
315
- member.primary_contact.custom_labels.should == {"label_for_8441"=>"Label for 8441"}
316
- member.secondary_contact.first_name.should == 'Secondary'
317
- member.secondary_contact.last_name.should == 'Contact'
318
- member.secondary_contact.address_1.should == 'Address 1'
319
- member.secondary_contact.address_2.should == 'Address 2'
320
- member.secondary_contact.address_3.should == 'Address 3'
321
- member.secondary_contact.address_4.should == 'Address 4'
322
- member.secondary_contact.postcode.should == 'Postcode'
323
- member.secondary_contact.phone_1.should == '01234 567890'
324
- member.secondary_contact.receive_phone_1.should == true
325
- member.secondary_contact.phone_2.should == '0987 654321'
326
- member.secondary_contact.receive_phone_2.should == false
327
- member.secondary_contact.email_1.should == 'secondary@example.com'
328
- member.secondary_contact.receive_email_1.should == true
329
- member.secondary_contact.email_2.should == ''
330
- member.secondary_contact.receive_email_2.should == false
331
- member.secondary_contact.custom.should == {"label_for_8442"=>"Data for 8442"}
332
- member.secondary_contact.custom_labels.should == {"label_for_8442"=>"Label for 8442"}
333
- member.emergency_contact.first_name.should == 'Emergency'
334
- member.emergency_contact.last_name.should == 'Contact'
335
- member.emergency_contact.address_1.should == 'Address 1'
336
- member.emergency_contact.address_2.should == 'Address 2'
337
- member.emergency_contact.address_3.should == 'Address 3'
338
- member.emergency_contact.address_4.should == 'Address 4'
339
- member.emergency_contact.postcode.should == 'Postcode'
340
- member.emergency_contact.phone_1.should == '01234 567890'
341
- member.emergency_contact.phone_2.should == '0987 654321'
342
- member.emergency_contact.email_1.should == 'emergency@example.com'
343
- member.emergency_contact.email_2.should == ''
344
- member.emergency_contact.custom.should == {"label_for_8443"=>"Data for 8443"}
345
- member.emergency_contact.custom_labels.should == {"label_for_8443"=>"Label for 8443"}
346
- member.doctor.first_name.should == 'Doctor'
347
- member.doctor.last_name.should == 'Contact'
348
- member.doctor.surgery.should == 'Surgery'
349
- member.doctor.address_1.should == 'Address 1'
350
- member.doctor.address_2.should == 'Address 2'
351
- member.doctor.address_3.should == 'Address 3'
352
- member.doctor.address_4.should == 'Address 4'
353
- member.doctor.postcode.should == 'Postcode'
354
- member.doctor.phone_1.should == '01234 567890'
355
- member.doctor.phone_2.should == '0987 654321'
356
- member.doctor.custom.should == {"label_for_8444"=>"Data for 8444"}
357
- member.doctor.custom_labels.should == {"label_for_8444"=>"Label for 8444"}
358
- member.valid?.should == true
359
- end
152
+ 'error' => nil,
153
+ 'data' => {
154
+ '123' => {
155
+ 'active' => true,
156
+ 'age' => '12 / 00',
157
+ 'date_of_birth' => '2000-03-08',
158
+ 'end_date' => '2010-06-03',
159
+ 'first_name' => 'John',
160
+ 'joined' => '2008-07-12',
161
+ 'last_name' => 'Smith',
162
+ 'member_id' => 123,
163
+ 'patrol' => 'Leaders',
164
+ 'patrol_id' => -2,
165
+ 'patrol_role_level' => 1,
166
+ 'patrol_role_level_label' => 'Assistant leader',
167
+ 'section_id' => 1,
168
+ 'started' => '2006-07-17',
169
+ 'custom_data' => {
170
+ '1' => {'2' => 'Primary', '3' => 'Contact', '7' => 'Address 1', '8' => 'Address 2', '9' => 'Address 3', '10' => 'Address 4', '11' => 'Postcode', '12' => 'primary@example.com', '13' => 'yes', '14' => '', '15' => '', '18' => '01234 567890', '19' => 'yes', '20' => '0987 654321', '21' => '', '8441' => 'Data for 8441'},
171
+ '2' => {'2' => 'Secondary', '3' => 'Contact', '7' => 'Address 1', '8' => 'Address 2', '9' => 'Address 3', '10' => 'Address 4', '11' => 'Postcode', '12' => 'secondary@example.com', '13' => 'yes', '14' => '', '15' => '', '18' => '01234 567890', '19' => 'yes', '20' => '0987 654321', '21' => '', '8442' => 'Data for 8442'},
172
+ '3' => {'2' => 'Emergency', '3' => 'Contact', '7' => 'Address 1', '8' => 'Address 2', '9' => 'Address 3', '10' => 'Address 4', '11' => 'Postcode', '12' => 'emergency@example.com', '14' => '', '18' => '01234 567890', '20' => '0987 654321', '21' => '', '8443' => 'Data for 8443'},
173
+ '4' => {'2' => 'Doctor', '3' => 'Contact', '7' => 'Address 1', '8' => 'Address 2', '9' => 'Address 3', '10' => 'Address 4', '11' => 'Postcode', '18' => '01234 567890', '20' => '0987 654321', '21' => '', '54' => 'Surgery', '8444' => 'Data for 8444'},
174
+ '5' => {'4848' => 'Data for 4848'},
175
+ '6' => {'7' => 'Address 1', '8' => 'Address 2', '9' => 'Address 3', '10' => 'Address 4', '11' => 'Postcode', '12' => 'member@example.com', '13' => 'yes', '14' => '', '15' => '', '18' => '01234 567890', '19' => 'yes', '20' => '0987 654321', '21' => '', '8446' => 'Data for 8446'},
176
+ '7' => {'34' => 'Unspecified'},
177
+ },
178
+ }
179
+ },
180
+ 'meta' => {
181
+ 'leader_count' => 20,
182
+ 'member_count' => 30,
183
+ 'status' => true,
184
+ 'structure' => [
185
+ {'group_id' => 1, 'description' => '', 'identifier' => 'contact_primary_1', 'name' => 'Primary Contact 1', 'columns' => [
186
+ {'column_id' => 2, 'group_column_id' => '1_2', 'label' => 'First Name', 'varname' => 'firstname', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
187
+ {'column_id' => 3, 'group_column_id' => '1_3', 'label' => 'Last Name', 'varname' => 'lastname', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
188
+ {'column_id' => 7, 'group_column_id' => '1_7', 'label' => 'Address 1', 'varname' => 'address1', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
189
+ {'column_id' => 8, 'group_column_id' => '1_8', 'label' => 'Address 2', 'varname' => 'address2', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
190
+ {'column_id' => 9, 'group_column_id' => '1_9', 'label' => 'Address 3', 'varname' => 'address3', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
191
+ {'column_id' => 10, 'group_column_id' => '1_10', 'label' => 'Address 4', 'varname' => 'address4', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
192
+ {'column_id' => 11, 'group_column_id' => '1_11', 'label' => 'Postcode', 'varname' => 'postcode', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
193
+ {'column_id' => 12, 'group_column_id' => '1_12', 'label' => 'Email 1', 'varname' => 'email1', 'read_only' => 'no', 'required' => 'no', 'type' => 'email', 'width' => 120},
194
+ {'column_id' => 14, 'group_column_id' => '1_14', 'label' => 'Email 2', 'varname' => 'email2', 'read_only' => 'no', 'required' => 'no', 'type' => 'email', 'width' => 120},
195
+ {'column_id' => 18, 'group_column_id' => '1_18', 'label' => 'Phone 1', 'varname' => 'phone1', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
196
+ {'column_id' => 20, 'group_column_id' => '1_20', 'label' => 'Phone 2', 'varname' => 'phone2', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
197
+ {'column_id' => 8441, 'group_column_id' => '1_8441', 'label' => 'Label for 8441', 'varname' => 'label_for_8441', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
198
+ ]},
199
+ {'group_id' => 2, 'description' => '', 'identifier' => 'contact_primary_2', 'name' => 'Primary Contact 2', 'columns' => [
200
+ {'column_id' => 2, 'group_column_id' => '2_2', 'label' => 'First Name', 'varname' => 'firstname', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
201
+ {'column_id' => 3, 'group_column_id' => '2_3', 'label' => 'Last Name', 'varname' => 'lastname', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
202
+ {'column_id' => 7, 'group_column_id' => '2_7', 'label' => 'Address 1', 'varname' => 'address1', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
203
+ {'column_id' => 8, 'group_column_id' => '2_8', 'label' => 'Address 2', 'varname' => 'address2', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
204
+ {'column_id' => 9, 'group_column_id' => '2_9', 'label' => 'Address 3', 'varname' => 'address3', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
205
+ {'column_id' => 10, 'group_column_id' => '2_10', 'label' => 'Address 4', 'varname' => 'address4', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
206
+ {'column_id' => 11, 'group_column_id' => '2_11', 'label' => 'Postcode', 'varname' => 'postcode', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
207
+ {'column_id' => 12, 'group_column_id' => '2_12', 'label' => 'Email 1', 'varname' => 'email1', 'read_only' => 'no', 'required' => 'no', 'type' => 'email', 'width' => 120},
208
+ {'column_id' => 14, 'group_column_id' => '2_14', 'label' => 'Email 2', 'varname' => 'email2', 'read_only' => 'no', 'required' => 'no', 'type' => 'email', 'width' => 120},
209
+ {'column_id' => 18, 'group_column_id' => '2_18', 'label' => 'Phone 1', 'varname' => 'phone1', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
210
+ {'column_id' => 20, 'group_column_id' => '2_20', 'label' => 'Phone 2', 'varname' => 'phone2', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
211
+ {'column_id' => 8442, 'group_column_id' => '2_8442', 'label' => 'Label for 8442', 'varname' => 'label_for_8442', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
212
+ ]},
213
+ {'group_id' => 3, 'description' => '', 'identifier' => 'emergency', 'name' => 'Emergency Contact', 'columns' => [
214
+ {'column_id' => 2, 'group_column_id' => '3_2', 'label' => 'First Name', 'varname' => 'firstname', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
215
+ {'column_id' => 3, 'group_column_id' => '3_3', 'label' => 'Last Name', 'varname' => 'lastname', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
216
+ {'column_id' => 7, 'group_column_id' => '3_7', 'label' => 'Address 1', 'varname' => 'address1', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
217
+ {'column_id' => 8, 'group_column_id' => '3_8', 'label' => 'Address 2', 'varname' => 'address2', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
218
+ {'column_id' => 9, 'group_column_id' => '3_9', 'label' => 'Address 3', 'varname' => 'address3', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
219
+ {'column_id' => 10, 'group_column_id' => '3_10', 'label' => 'Address 4', 'varname' => 'address4', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
220
+ {'column_id' => 11, 'group_column_id' => '3_11', 'label' => 'Postcode', 'varname' => 'postcode', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
221
+ {'column_id' => 12, 'group_column_id' => '3_12', 'label' => 'Email 1', 'varname' => 'email1', 'read_only' => 'no', 'required' => 'no', 'type' => 'email', 'width' => 120},
222
+ {'column_id' => 14, 'group_column_id' => '3_14', 'label' => 'Email 2', 'varname' => 'email2', 'read_only' => 'no', 'required' => 'no', 'type' => 'email', 'width' => 120},
223
+ {'column_id' => 18, 'group_column_id' => '3_18', 'label' => 'Phone 1', 'varname' => 'phone1', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
224
+ {'column_id' => 20, 'group_column_id' => '3_20', 'label' => 'Phone 2', 'varname' => 'phone2', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
225
+ {'column_id' => 8443, 'group_column_id' => '3_8443', 'label' => 'Label for 8443', 'varname' => 'label_for_8443', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
226
+ ]},
227
+ {'group_id' => 4, 'description' => '', 'identifier' => 'doctor', 'name' => "Doctor's Surgery", 'columns' => [
228
+ {'column_id' => 2, 'group_column_id' => '4_2', 'label' => 'First Name', 'varname' => 'firstname', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
229
+ {'column_id' => 3, 'group_column_id' => '4_3', 'label' => 'Last Name', 'varname' => 'lastname', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
230
+ {'column_id' => 54, 'group_column_id' => '4_54', 'label' => 'Surgery', 'varname' => 'surgery', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
231
+ {'column_id' => 7, 'group_column_id' => '4_7', 'label' => 'Address 1', 'varname' => 'address1', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
232
+ {'column_id' => 8, 'group_column_id' => '4_8', 'label' => 'Address 2', 'varname' => 'address2', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
233
+ {'column_id' => 9, 'group_column_id' => '4_9', 'label' => 'Address 3', 'varname' => 'address3', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
234
+ {'column_id' => 10, 'group_column_id' => '4_10', 'label' => 'Address 4', 'varname' => 'address4', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
235
+ {'column_id' => 11, 'group_column_id' => '4_11', 'label' => 'Postcode', 'varname' => 'postcode', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
236
+ {'column_id' => 18, 'group_column_id' => '4_18', 'label' => 'Phone 1', 'varname' => 'phone1', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
237
+ {'column_id' => 20, 'group_column_id' => '4_20', 'label' => 'Phone 2', 'varname' => 'phone2', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
238
+ {'column_id' => 8444, 'group_column_id' => '4_8444', 'label' => 'Label for 8444', 'varname' => 'label_for_8444', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
239
+ ]},
240
+ {'group_id' => 6, 'description' => '', 'identifier' => 'contact_member', 'name' => 'Member', 'columns' => [
241
+ {'column_id' => 2, 'group_column_id' => '6_2', 'label' => 'First Name', 'varname' => 'firstname', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
242
+ {'column_id' => 3, 'group_column_id' => '6_3', 'label' => 'Last Name', 'varname' => 'lastname', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
243
+ {'column_id' => 7, 'group_column_id' => '6_7', 'label' => 'Address 1', 'varname' => 'address1', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
244
+ {'column_id' => 8, 'group_column_id' => '6_8', 'label' => 'Address 2', 'varname' => 'address2', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
245
+ {'column_id' => 9, 'group_column_id' => '6_9', 'label' => 'Address 3', 'varname' => 'address3', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
246
+ {'column_id' => 10, 'group_column_id' => '6_10', 'label' => 'Address 4', 'varname' => 'address4', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
247
+ {'column_id' => 11, 'group_column_id' => '6_11', 'label' => 'Postcode', 'varname' => 'postcode', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
248
+ {'column_id' => 12, 'group_column_id' => '6_12', 'label' => 'Email 1', 'varname' => 'email1', 'read_only' => 'no', 'required' => 'no', 'type' => 'email', 'width' => 120},
249
+ {'column_id' => 14, 'group_column_id' => '6_14', 'label' => 'Email 2', 'varname' => 'email2', 'read_only' => 'no', 'required' => 'no', 'type' => 'email', 'width' => 120},
250
+ {'column_id' => 18, 'group_column_id' => '6_18', 'label' => 'Phone 1', 'varname' => 'phone1', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
251
+ {'column_id' => 20, 'group_column_id' => '6_20', 'label' => 'Phone 2', 'varname' => 'phone2', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
252
+ {'column_id' => 8446, 'group_column_id' => '6_8446', 'label' => 'Label for 8446', 'varname' => 'label_for_8446', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
253
+ ]},
254
+ {'group_id' => 5, 'description' => 'This allows you to add extra information for your members.', 'identifier' => 'customisable_data', 'name' => 'Customisable Data', 'columns' => [
255
+ {'column_id' => 4848, 'group_column_id' => '5_4848', 'label' => 'Label for 4848', 'varname' => 'label_for_4848', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
256
+ ]},
257
+ {'group_id' => 7, 'description' => '', 'identifier' => 'floating', 'name' => 'Floating', 'columns' => [
258
+ {'column_id' => 34, 'group_column_id' => '7_34', 'label' => 'Gender', 'varname' => 'gender', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
259
+ ]},
260
+ ],
261
+ },
262
+ }
263
+ FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/ext/members/contact/grid/?action=getMembers", :body => body.to_json, :content_type => 'application/json')
264
+
265
+ members = Osm::Member.get_for_section(@api, 1, 2)
266
+ members.size.should == 1
267
+ member = members[0]
268
+ member.id.should == 123
269
+ member.section_id.should == 1
270
+ member.first_name.should == 'John'
271
+ member.last_name.should == 'Smith'
272
+ member.date_of_birth.should == Date.new(2000, 3, 8)
273
+ member.grouping_id.should == -2
274
+ member.grouping_leader.should == 1
275
+ member.grouping_label.should == 'Leaders'
276
+ member.grouping_leader_label.should == 'Assistant leader'
277
+ member.age.should == '12 / 00'
278
+ member.gender.should == :unspecified
279
+ member.joined_movement.should == Date.new(2006, 7, 17)
280
+ member.started_section.should == Date.new(2008, 7, 12)
281
+ member.finished_section.should == Date.new(2010, 6, 3)
282
+ member.additional_information.should == {"label_for_4848" => "Data for 4848"}
283
+ member.additional_information_labels.should == {"label_for_4848" => 'Label for 4848'}
284
+ member.contact.first_name.should == 'John'
285
+ member.contact.last_name.should == 'Smith'
286
+ member.contact.address_1.should == 'Address 1'
287
+ member.contact.address_2.should == 'Address 2'
288
+ member.contact.address_3.should == 'Address 3'
289
+ member.contact.address_4.should == 'Address 4'
290
+ member.contact.postcode.should == 'Postcode'
291
+ member.contact.phone_1.should == '01234 567890'
292
+ member.contact.receive_phone_1.should == true
293
+ member.contact.phone_2.should == '0987 654321'
294
+ member.contact.receive_phone_2.should == false
295
+ member.contact.email_1.should == 'member@example.com'
296
+ member.contact.receive_email_1.should == true
297
+ member.contact.email_2.should == ''
298
+ member.contact.receive_email_2.should == false
299
+ member.contact.additional_information.should == {"label_for_8446"=>"Data for 8446"}
300
+ member.contact.additional_information_labels.should == {"label_for_8446"=>"Label for 8446"}
301
+ member.primary_contact.first_name.should == 'Primary'
302
+ member.primary_contact.last_name.should == 'Contact'
303
+ member.primary_contact.address_1.should == 'Address 1'
304
+ member.primary_contact.address_2.should == 'Address 2'
305
+ member.primary_contact.address_3.should == 'Address 3'
306
+ member.primary_contact.address_4.should == 'Address 4'
307
+ member.primary_contact.postcode.should == 'Postcode'
308
+ member.primary_contact.phone_1.should == '01234 567890'
309
+ member.primary_contact.receive_phone_1.should == true
310
+ member.primary_contact.phone_2.should == '0987 654321'
311
+ member.primary_contact.receive_phone_2.should == false
312
+ member.primary_contact.email_1.should == 'primary@example.com'
313
+ member.primary_contact.receive_email_1.should == true
314
+ member.primary_contact.email_2.should == ''
315
+ member.primary_contact.receive_email_2.should == false
316
+ member.primary_contact.additional_information.should == {"label_for_8441"=>"Data for 8441"}
317
+ member.primary_contact.additional_information_labels.should == {"label_for_8441"=>"Label for 8441"}
318
+ member.secondary_contact.first_name.should == 'Secondary'
319
+ member.secondary_contact.last_name.should == 'Contact'
320
+ member.secondary_contact.address_1.should == 'Address 1'
321
+ member.secondary_contact.address_2.should == 'Address 2'
322
+ member.secondary_contact.address_3.should == 'Address 3'
323
+ member.secondary_contact.address_4.should == 'Address 4'
324
+ member.secondary_contact.postcode.should == 'Postcode'
325
+ member.secondary_contact.phone_1.should == '01234 567890'
326
+ member.secondary_contact.receive_phone_1.should == true
327
+ member.secondary_contact.phone_2.should == '0987 654321'
328
+ member.secondary_contact.receive_phone_2.should == false
329
+ member.secondary_contact.email_1.should == 'secondary@example.com'
330
+ member.secondary_contact.receive_email_1.should == true
331
+ member.secondary_contact.email_2.should == ''
332
+ member.secondary_contact.receive_email_2.should == false
333
+ member.secondary_contact.additional_information.should == {"label_for_8442"=>"Data for 8442"}
334
+ member.secondary_contact.additional_information_labels.should == {"label_for_8442"=>"Label for 8442"}
335
+ member.emergency_contact.first_name.should == 'Emergency'
336
+ member.emergency_contact.last_name.should == 'Contact'
337
+ member.emergency_contact.address_1.should == 'Address 1'
338
+ member.emergency_contact.address_2.should == 'Address 2'
339
+ member.emergency_contact.address_3.should == 'Address 3'
340
+ member.emergency_contact.address_4.should == 'Address 4'
341
+ member.emergency_contact.postcode.should == 'Postcode'
342
+ member.emergency_contact.phone_1.should == '01234 567890'
343
+ member.emergency_contact.phone_2.should == '0987 654321'
344
+ member.emergency_contact.email_1.should == 'emergency@example.com'
345
+ member.emergency_contact.email_2.should == ''
346
+ member.emergency_contact.additional_information.should == {"label_for_8443"=>"Data for 8443"}
347
+ member.emergency_contact.additional_information_labels.should == {"label_for_8443"=>"Label for 8443"}
348
+ member.doctor.first_name.should == 'Doctor'
349
+ member.doctor.last_name.should == 'Contact'
350
+ member.doctor.surgery.should == 'Surgery'
351
+ member.doctor.address_1.should == 'Address 1'
352
+ member.doctor.address_2.should == 'Address 2'
353
+ member.doctor.address_3.should == 'Address 3'
354
+ member.doctor.address_4.should == 'Address 4'
355
+ member.doctor.postcode.should == 'Postcode'
356
+ member.doctor.phone_1.should == '01234 567890'
357
+ member.doctor.phone_2.should == '0987 654321'
358
+ member.doctor.additional_information.should == {"label_for_8444"=>"Data for 8444"}
359
+ member.doctor.additional_information_labels.should == {"label_for_8444"=>"Label for 8444"}
360
+ member.valid?.should == true
361
+ end
360
362
 
361
- it "Get from OSM (handles disabled contacts)" do
362
- body = {
363
- 'status' => true,
364
- 'error' => nil,
365
- 'data' => {
366
- '123' => {
367
- 'active' => true,
368
- 'age' => '12 / 00',
369
- 'date_of_birth' => '2000-03-08',
370
- 'end_date' => '2010-06-03',
371
- 'first_name' => 'John',
372
- 'joined' => '2008-07-12',
373
- 'last_name' => 'Smith',
374
- 'member_id' => 123,
375
- 'patrol' => 'Leaders',
376
- 'patrol_id' => -2,
377
- 'patrol_role_level' => 1,
378
- 'patrol_role_level_label' => 'Assistant leader',
379
- 'section_id' => 1,
380
- 'started' => '2006-07-17',
381
- 'custom_data' => {
382
- '5' => {'4848' => 'Data for 4848'},
383
- '7' => {'34' => 'Unspecified'},
384
- },
385
- }
386
- },
387
- 'meta' => {
388
- 'leader_count' => 20,
389
- 'member_count' => 30,
363
+ it "Handles disabled contacts" do
364
+ body = {
390
365
  'status' => true,
391
- 'structure' => [
392
- {'group_id' => 5, 'description' => 'This allows you to add extra information for your members.', 'identifier' => 'customisable_data', 'name' => 'Customisable Data', 'columns' => [
393
- {'column_id' => 4848, 'group_column_id' => '5_4848', 'label' => 'Label for 4848', 'varname' => 'label_for_4848', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
394
- ]},
395
- {'group_id' => 7, 'description' => '', 'identifier' => 'floating', 'name' => 'Floating', 'columns' => [
396
- {'column_id' => 34, 'group_column_id' => '7_34', 'label' => 'Gender', 'varname' => 'gender', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
397
- ]},
398
- ],
399
- },
400
- }
401
- FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/ext/members/contact/grid/?action=getMembers", :body => body.to_json, :content_type => 'application/json')
402
-
403
- members = Osm::Member.get_for_section(@api, 1, 2)
404
- members.size.should == 1
405
- member = members[0]
406
- member.id.should == 123
407
- member.contact.should == nil
408
- member.primary_contact.should == nil
409
- member.secondary_contact.should == nil
410
- member.emergency_contact.should == nil
411
- member.doctor.should == nil
412
- member.valid?.should == true
413
- end
366
+ 'error' => nil,
367
+ 'data' => {
368
+ '123' => {
369
+ 'active' => true,
370
+ 'age' => '12 / 00',
371
+ 'date_of_birth' => '2000-03-08',
372
+ 'end_date' => '2010-06-03',
373
+ 'first_name' => 'John',
374
+ 'joined' => '2008-07-12',
375
+ 'last_name' => 'Smith',
376
+ 'member_id' => 123,
377
+ 'patrol' => 'Leaders',
378
+ 'patrol_id' => -2,
379
+ 'patrol_role_level' => 1,
380
+ 'patrol_role_level_label' => 'Assistant leader',
381
+ 'section_id' => 1,
382
+ 'started' => '2006-07-17',
383
+ 'custom_data' => {
384
+ '5' => {'4848' => 'Data for 4848'},
385
+ '7' => {'34' => 'Unspecified'},
386
+ },
387
+ }
388
+ },
389
+ 'meta' => {
390
+ 'leader_count' => 20,
391
+ 'member_count' => 30,
392
+ 'status' => true,
393
+ 'structure' => [
394
+ {'group_id' => 5, 'description' => 'This allows you to add extra information for your members.', 'identifier' => 'customisable_data', 'name' => 'Customisable Data', 'columns' => [
395
+ {'column_id' => 4848, 'group_column_id' => '5_4848', 'label' => 'Label for 4848', 'varname' => 'label_for_4848', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
396
+ ]},
397
+ {'group_id' => 7, 'description' => '', 'identifier' => 'floating', 'name' => 'Floating', 'columns' => [
398
+ {'column_id' => 34, 'group_column_id' => '7_34', 'label' => 'Gender', 'varname' => 'gender', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
399
+ ]},
400
+ ],
401
+ },
402
+ }
403
+ FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/ext/members/contact/grid/?action=getMembers", :body => body.to_json, :content_type => 'application/json')
404
+
405
+ members = Osm::Member.get_for_section(@api, 1, 2)
406
+ members.size.should == 1
407
+ member = members[0]
408
+ member.id.should == 123
409
+ member.contact.should == nil
410
+ member.primary_contact.should == nil
411
+ member.secondary_contact.should == nil
412
+ member.emergency_contact.should == nil
413
+ member.doctor.should == nil
414
+ member.valid?.should == true
415
+ end
414
416
 
415
- it "Get from OSM (handles no custom data)" do
416
- body = {
417
- 'status' => true,
418
- 'error' => nil,
419
- 'data' => {
420
- '123' => {
421
- 'active' => true,
422
- 'age' => '12 / 00',
423
- 'date_of_birth' => '2000-03-08',
424
- 'end_date' => '2010-06-03',
425
- 'first_name' => 'John',
426
- 'joined' => '2008-07-12',
427
- 'last_name' => 'Smith',
428
- 'member_id' => 123,
429
- 'patrol' => 'Leaders',
430
- 'patrol_id' => -2,
431
- 'patrol_role_level' => 1,
432
- 'patrol_role_level_label' => 'Assistant leader',
433
- 'section_id' => 1,
434
- 'started' => '2006-07-17',
435
- 'custom_data' => {
436
- '7' => {'34' => 'Unspecified'},
437
- },
438
- }
439
- },
440
- 'meta' => {
441
- 'leader_count' => 20,
442
- 'member_count' => 30,
417
+ it "Handles no custom data" do
418
+ body = {
443
419
  'status' => true,
444
- 'structure' => [
445
- {'group_id' => 5, 'description' => 'This allows you to add extra information for your members.', 'identifier' => 'customisable_data', 'name' => 'Customisable Data', 'columns' => [
446
- {'column_id' => 4848, 'group_column_id' => '5_4848', 'label' => 'Label for 4848', 'varname' => 'label_for_4848', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
447
- ]},
448
- {'group_id' => 7, 'description' => '', 'identifier' => 'floating', 'name' => 'Floating', 'columns' => [
449
- {'column_id' => 34, 'group_column_id' => '7_34', 'label' => 'Gender', 'varname' => 'gender', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
450
- ]},
451
- ],
452
- },
453
- }
454
- FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/ext/members/contact/grid/?action=getMembers", :body => body.to_json, :content_type => 'application/json')
455
-
456
- members = Osm::Member.get_for_section(@api, 1, 2)
457
- members.size.should == 1
458
- member = members[0]
459
- member.id.should == 123
460
- member.custom.should == {}
461
- member.valid?.should == true
462
- end
420
+ 'error' => nil,
421
+ 'data' => {
422
+ '123' => {
423
+ 'active' => true,
424
+ 'age' => '12 / 00',
425
+ 'date_of_birth' => '2000-03-08',
426
+ 'end_date' => '2010-06-03',
427
+ 'first_name' => 'John',
428
+ 'joined' => '2008-07-12',
429
+ 'last_name' => 'Smith',
430
+ 'member_id' => 123,
431
+ 'patrol' => 'Leaders',
432
+ 'patrol_id' => -2,
433
+ 'patrol_role_level' => 1,
434
+ 'patrol_role_level_label' => 'Assistant leader',
435
+ 'section_id' => 1,
436
+ 'started' => '2006-07-17',
437
+ 'custom_data' => {
438
+ '7' => {'34' => 'Unspecified'},
439
+ },
440
+ }
441
+ },
442
+ 'meta' => {
443
+ 'leader_count' => 20,
444
+ 'member_count' => 30,
445
+ 'status' => true,
446
+ 'structure' => [
447
+ {'group_id' => 5, 'description' => 'This allows you to add extra information for your members.', 'identifier' => 'customisable_data', 'name' => 'Customisable Data', 'columns' => [
448
+ {'column_id' => 4848, 'group_column_id' => '5_4848', 'label' => 'Label for 4848', 'varname' => 'label_for_4848', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
449
+ ]},
450
+ {'group_id' => 7, 'description' => '', 'identifier' => 'floating', 'name' => 'Floating', 'columns' => [
451
+ {'column_id' => 34, 'group_column_id' => '7_34', 'label' => 'Gender', 'varname' => 'gender', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
452
+ ]},
453
+ ],
454
+ },
455
+ }
456
+ FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/ext/members/contact/grid/?action=getMembers", :body => body.to_json, :content_type => 'application/json')
457
+
458
+ members = Osm::Member.get_for_section(@api, 1, 2)
459
+ members.size.should == 1
460
+ member = members[0]
461
+ member.id.should == 123
462
+ member.additional_information.should == {}
463
+ member.valid?.should == true
464
+ end
463
465
 
464
- it "Get from OSM (handles missing floating data)" do
465
- body = {
466
- 'status' => true,
467
- 'error' => nil,
468
- 'data' => {
469
- '123' => {
470
- 'active' => true,
471
- 'age' => '12 / 00',
472
- 'date_of_birth' => '2000-03-08',
473
- 'end_date' => '2010-06-03',
474
- 'first_name' => 'John',
475
- 'joined' => '2008-07-12',
476
- 'last_name' => 'Smith',
477
- 'member_id' => 123,
478
- 'patrol' => 'Leaders',
479
- 'patrol_id' => -2,
480
- 'patrol_role_level' => 1,
481
- 'patrol_role_level_label' => 'Assistant leader',
482
- 'section_id' => 1,
483
- 'started' => '2006-07-17',
484
- 'custom_data' => {
485
- '5' => {'4848' => 'Data for 4848'},
486
- },
487
- }
488
- },
489
- 'meta' => {
490
- 'leader_count' => 20,
491
- 'member_count' => 30,
466
+ it "Handles missing floating data" do
467
+ body = {
492
468
  'status' => true,
493
- 'structure' => [
494
- {'group_id' => 5, 'description' => 'This allows you to add extra information for your members.', 'identifier' => 'customisable_data', 'name' => 'Customisable Data', 'columns' => [
495
- {'column_id' => 4848, 'group_column_id' => '5_4848', 'label' => 'Label for 4848', 'varname' => 'label_for_4848', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
496
- ]},
497
- {'group_id' => 7, 'description' => '', 'identifier' => 'floating', 'name' => 'Floating', 'columns' => [
498
- {'column_id' => 34, 'group_column_id' => '7_34', 'label' => 'Gender', 'varname' => 'gender', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
499
- ]},
500
- ],
501
- },
502
- }
503
- FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/ext/members/contact/grid/?action=getMembers", :body => body.to_json, :content_type => 'application/json')
504
-
505
- members = Osm::Member.get_for_section(@api, 1, 2)
506
- members.size.should == 1
507
- member = members[0]
508
- member.id.should == 123
509
- member.gender.should == nil
510
- member.valid?.should == true
511
- end
469
+ 'error' => nil,
470
+ 'data' => {
471
+ '123' => {
472
+ 'active' => true,
473
+ 'age' => '12 / 00',
474
+ 'date_of_birth' => '2000-03-08',
475
+ 'end_date' => '2010-06-03',
476
+ 'first_name' => 'John',
477
+ 'joined' => '2008-07-12',
478
+ 'last_name' => 'Smith',
479
+ 'member_id' => 123,
480
+ 'patrol' => 'Leaders',
481
+ 'patrol_id' => -2,
482
+ 'patrol_role_level' => 1,
483
+ 'patrol_role_level_label' => 'Assistant leader',
484
+ 'section_id' => 1,
485
+ 'started' => '2006-07-17',
486
+ 'custom_data' => {
487
+ '5' => {'4848' => 'Data for 4848'},
488
+ },
489
+ }
490
+ },
491
+ 'meta' => {
492
+ 'leader_count' => 20,
493
+ 'member_count' => 30,
494
+ 'status' => true,
495
+ 'structure' => [
496
+ {'group_id' => 5, 'description' => 'This allows you to add extra information for your members.', 'identifier' => 'customisable_data', 'name' => 'Customisable Data', 'columns' => [
497
+ {'column_id' => 4848, 'group_column_id' => '5_4848', 'label' => 'Label for 4848', 'varname' => 'label_for_4848', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
498
+ ]},
499
+ {'group_id' => 7, 'description' => '', 'identifier' => 'floating', 'name' => 'Floating', 'columns' => [
500
+ {'column_id' => 34, 'group_column_id' => '7_34', 'label' => 'Gender', 'varname' => 'gender', 'read_only' => 'no', 'required' => 'no', 'type' => 'text', 'width' => 120},
501
+ ]},
502
+ ],
503
+ },
504
+ }
505
+ FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/ext/members/contact/grid/?action=getMembers", :body => body.to_json, :content_type => 'application/json')
506
+
507
+ members = Osm::Member.get_for_section(@api, 1, 2)
508
+ members.size.should == 1
509
+ member = members[0]
510
+ member.id.should == 123
511
+ member.gender.should == nil
512
+ member.valid?.should == true
513
+ end
512
514
 
515
+ it "Handles an empty data array" do
516
+ body = {
517
+ 'status' => true,
518
+ 'error' => nil,
519
+ 'data' => [],
520
+ 'meta' => {},
521
+ }
522
+ FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/ext/members/contact/grid/?action=getMembers", :body => body.to_json, :content_type => 'application/json')
513
523
 
514
- it "Get from OSM (handles an empty data array)" do
515
- body = {
516
- 'status' => true,
517
- 'error' => nil,
518
- 'data' => [],
519
- 'meta' => {},
520
- }
521
- FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/ext/members/contact/grid/?action=getMembers", :body => body.to_json, :content_type => 'application/json')
524
+ Osm::Member.get_for_section(@api, 1, 2).should == []
525
+ end
522
526
 
523
- Osm::Member.get_for_section(@api, 1, 2).should == []
524
527
  end
525
528
 
526
529
 
@@ -541,8 +544,8 @@ describe "Member" do
541
544
  :joined_movement => '2006-01-02',
542
545
  :started_section => '2006-01-07',
543
546
  :finished_section => '2007-12-31',
544
- :custom => {'12_3' => '123'},
545
- :custom_labels => {'12_3' => 'Label for 123'},
547
+ :additional_information => {'12_3' => '123'},
548
+ :additional_information_labels => {'12_3' => 'Label for 123'},
546
549
  :contact => Osm::Member::MemberContact.new(postcode: 'A'),
547
550
  :primary_contact => Osm::Member::PrimaryContact.new(postcode: 'B'),
548
551
  :secondary_contact => Osm::Member::PrimaryContact.new(postcode: 'C'),
@@ -628,13 +631,13 @@ describe "Member" do
628
631
  :joined_movement => '2006-01-02',
629
632
  :started_section => '2006-01-07',
630
633
  :finished_section => '2007-12-31',
631
- :custom => DirtyHashy[ '12_3' => '123' ],
632
- :custom_labels => {'12_3' => 'Label for 123'},
634
+ :additional_information => DirtyHashy[ '12_3', '123' ],
635
+ :additional_information_labels => {'12_3' => 'Label for 123'},
633
636
  :contact => Osm::Member::MemberContact.new(postcode: 'A'),
634
637
  :primary_contact => Osm::Member::PrimaryContact.new(postcode: 'B'),
635
638
  :secondary_contact => Osm::Member::SecondaryContact.new(postcode: 'C'),
636
639
  :emergency_contact => Osm::Member::EmergencyContact.new(postcode: 'D'),
637
- :doctor => Osm::Member::DoctorContact.new(postcode: 'E'),
640
+ :doctor => Osm::Member::DoctorContact.new(postcode: 'E', additional_information: DirtyHashy['test_var', 'This is a test']),
638
641
  }
639
642
  @member = Osm::Member.new(attributes)
640
643
  end
@@ -722,17 +725,33 @@ describe "Member" do
722
725
  "associated_id" => 1,
723
726
  "group_id" => 4,
724
727
  "data[surgery]" => "Surgery",
728
+ "data[test_var]" => "This is still a test",
725
729
  }}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>'{"status":true}'}) }
726
730
 
731
+ HTTParty.should_receive(:post).with('https://www.onlinescoutmanager.co.uk/ext/customdata/?action=updateColumn&section_id=2', {:body => {
732
+ "apiid" => "1",
733
+ "token" => "API TOKEN",
734
+ "userid" => "user_id",
735
+ "secret" => "secret",
736
+ "context" => "members",
737
+ "associated_type" => "member",
738
+ "associated_id" => 1,
739
+ "group_id" => 5,
740
+ "column_id" => "12_3",
741
+ "value" => "321",
742
+ }}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>'{"data":{"value":"321"}}'}) }
743
+
727
744
  Osm::Term.stub(:get_for_section) { [] }
728
745
 
729
746
  @member.first_name = 'John'
730
747
  @member.gender = :unspecified
748
+ @member.additional_information['12_3'] = '321'
731
749
  @member.contact.address_1 = 'Address 1'
732
750
  @member.primary_contact.address_2 = 'Address 2'
733
751
  @member.secondary_contact.address_3 = 'Address 3'
734
752
  @member.emergency_contact.address_4 = 'Address 4'
735
753
  @member.doctor.surgery = 'Surgery'
754
+ @member.doctor.additional_information['test_var'] = 'This is still a test'
736
755
  @member.update(@api).should == true
737
756
  end
738
757
 
@@ -845,6 +864,7 @@ describe "Member" do
845
864
  "data[postcode]" => "E",
846
865
  "data[phone1]" => nil,
847
866
  "data[phone2]" => nil,
867
+ "data[test_var]" => "This is a test",
848
868
  }}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>'{"status":true}'}) }
849
869
 
850
870
  Osm::Term.stub(:get_for_section) { [] }
@@ -862,6 +882,16 @@ describe "Member" do
862
882
  expect{ Osm::Member.new.create(@api) }.to raise_error(Osm::ObjectIsInvalid, 'member is invalid')
863
883
  end
864
884
 
885
+ it "Handles disabled contacts" do
886
+ @member.contact = nil
887
+ @member.primary_contact = nil
888
+ @member.secondary_contact = nil
889
+ @member.emergency_contact = nil
890
+ @member.doctor = nil
891
+ HTTParty.stub(:post) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>'{}'}) }
892
+ @member.update(@api).should == true
893
+ end
894
+
865
895
  end
866
896
 
867
897
  it "Get Photo link" do
@@ -877,8 +907,8 @@ describe "Member" do
877
907
  :grouping_leader => 0,
878
908
  :grouping_label => 'Grouping',
879
909
  :grouping_leader_label => '',
880
- :custom => {},
881
- :custom_labels => {},
910
+ :additional_information => {},
911
+ :additional_information_labels => {},
882
912
  :contact => Osm::Member::MemberContact.new(),
883
913
  :primary_contact => Osm::Member::PrimaryContact.new(),
884
914
  :secondary_contact => Osm::Member::PrimaryContact.new(),
@@ -906,8 +936,8 @@ describe "Member" do
906
936
  :grouping_leader => 0,
907
937
  :grouping_label => 'Grouping',
908
938
  :grouping_leader_label => '',
909
- :custom => {},
910
- :custom_labels => {},
939
+ :additional_information => {},
940
+ :additional_information_labels => {},
911
941
  :contact => Osm::Member::MemberContact.new(),
912
942
  :primary_contact => Osm::Member::PrimaryContact.new(),
913
943
  :secondary_contact => Osm::Member::PrimaryContact.new(),