osm 1.2.18.dev.2 → 1.2.18.dev.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- YzQ3YWVlNzUzYTIzZjUyYWZjMzM0YmE2MWI1NTUzNTk3NjEyZmVmZg==
4
+ ZDIwNmY3MDkyY2IxNWFkMmY5MGE2YTY1MjdhOTY3YjY2M2I2ZGYyMw==
5
5
  data.tar.gz: !binary |-
6
- NGNmNGM3YjVhYWM2NWViNTAzOWVmNDczMjhkYzEyODRjODUxZjQ4Ng==
6
+ NjAyMWUwMGU4ZmQ1ODc3MmQ2MTQyN2RmZjA5OGE5NDNhZjk2NDE1ZQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZjQ2YmRiMzI5NmUyNjliOTcxMzE4OTY2OTE4MzZiNWZkYjgzNGUzODVjNjY5
10
- N2I4NTk2NTM0MTUzYTZkNWY5YjQ3MmM1NDFhZDk4NDVkZmY4NzVmYWE5NzUx
11
- NjM2M2ViMjFjNDI5ZDQ5YjAzMmIwMWU0ZGZmODM2NTJhMjg3NDE=
9
+ ZGU5OGEyYzgyZDM3NDJmM2Y1ZjM3ZDk3MTdkZjg4Yzk4MGE1YzdlZDAzZmU2
10
+ MTBhNzMwNTUzMzYzMjdjNjcxNWJiOGJhMTEwZDlmYjUwMDY5OWE4NzE4ODcy
11
+ MGNkNzFlN2Q3NjUwM2M5ZmE5NmViMzdjOTM4NTA3NTlhN2RiMmU=
12
12
  data.tar.gz: !binary |-
13
- NThkMTIyMTk1MDQ3NGYxZjI0MDgzZmMyZTZjNTUzOTViMzE4NzcwYzJiZWEw
14
- ZTIyZDk4OWIwOTE5ZTQwOWY2YTcxYTIxNWNmMDJiMDQ0OTI4ZjE0NGI3YTJh
15
- NWE5NGRmMGQ5NjdmMjdkN2I5MzhjNDZhNzlmODU3YzU2ZDAxM2Q=
13
+ M2FkMWEyODQxZDFmZWYzYWZiNDEyMDUwNTlkNjlhNGE5NTc5NDc0NTFiZjIw
14
+ YjkyMGE0MTRlNmU0ZjM1OWEwNzMwNjFhMjBhMmNmNzk5MWE2ZDVlMGJmZWI1
15
+ MGVhNTZhNGMyNmJiNGY5MGQ4NGZlOWUxMDYyYTFhNjFjN2ZlNjI=
data/lib/osm/member.rb CHANGED
@@ -65,15 +65,15 @@ module Osm
65
65
  # @!attribute [rw] custom_labels
66
66
  # @return [DirtyHashy] the labels for the custom data (key is OSM's variable name, value is the label)
67
67
  # @!attribute [rw] contact
68
- # @return [Osm::Member::MemberContact] the member's contact details
68
+ # @return [Osm::Member::MemberContact, nil] the member's contact details (nil if hidden in OSM)
69
69
  # @!attribute [rw] primary_contact
70
- # @return [Osm::Member::PrimaryContact] the member's primary contact (primary contact 1 in OSM)
70
+ # @return [Osm::Member::PrimaryContact, nil] the member's primary contact (primary contact 1 in OSM) (nil if hidden in OSM)
71
71
  # @!attribute [rw] secondary_contact
72
- # @return [Osm::Member::PrimaryContact] the member's secondary contact (primary contact 2 in OSM)
72
+ # @return [Osm::Member::PrimaryContact, nil] the member's secondary contact (primary contact 2 in OSM) (nil if hidden in OSM)
73
73
  # @!attribute [rw] emergency_contact
74
- # @return [Osm::Member::EmergencyContact] the member's emergency contact
74
+ # @return [Osm::Member::EmergencyContact, nil] the member's emergency contact (nil if hidden in OSM)
75
75
  # @!attribute [rw] doctor
76
- # @return [Osm::Member::DoctorContact] the member's doctor
76
+ # @return [Osm::Member::DoctorContact, nil] the member's doctor (nil if hidden in OSM)
77
77
 
78
78
  attribute :id, :type => Integer
79
79
  attribute :section_id, :type => Integer
@@ -120,11 +120,11 @@ module Osm
120
120
  validates_presence_of :joined_movement
121
121
  validates_format_of :age, :with => /\A[0-9]{1,3} \/ (?:0?[0-9]|1[012])\Z/, :message => 'age is not in the correct format (yy / mm)', :allow_blank => true
122
122
  validates_inclusion_of :gender, :in => [:male, :female, :other, :unspecified], :allow_nil => true
123
- validates :contact, :validity=>true
124
- validates :primary_contact, :validity=>true
125
- validates :secondary_contact, :validity=>true
126
- validates :emergency_contact, :validity=>true
127
- validates :doctor, :validity=>true
123
+ validates :contact, :validity=>{allow_nil: true}
124
+ validates :primary_contact, :validity=>{allow_nil: true}
125
+ validates :secondary_contact, :validity=>{allow_nil: true}
126
+ validates :emergency_contact, :validity=>{allow_nil: true}
127
+ validates :doctor, :validity=>{allow_nil: true}
128
128
 
129
129
 
130
130
  # Get members for a section
@@ -167,11 +167,11 @@ module Osm
167
167
 
168
168
  data.each do |item|
169
169
  item_data = Hash[ item['custom_data'].map{ |k,v| [k.to_i, v] } ]
170
- member_contact = Hash[ item_data[GID_MEMBER_CONTACT].map{ |k,v| [k.to_i, v] }.select{ |i| i[0] < CUSTOM_FIELD_IDS_START_AT } ]
171
- primary_contact = Hash[ item_data[GID_PRIMARY_CONTACT].map{ |k,v| [k.to_i, v] }.select{ |i| i[0] < CUSTOM_FIELD_IDS_START_AT } ]
172
- secondary_contact = Hash[ item_data[GID_SECONDARY_CONTACT].map{ |k,v| [k.to_i, v] }.select{ |i| i[0] < CUSTOM_FIELD_IDS_START_AT } ]
173
- emergency_contact = Hash[ item_data[GID_EMERGENCY_CONTACT].map{ |k,v| [k.to_i, v] }.select{ |i| i[0] < CUSTOM_FIELD_IDS_START_AT } ]
174
- doctor_contact = Hash[ item_data[GID_DOCTOR_CONTACT].map{ |k,v| [k.to_i, v] }.select{ |i| i[0] < CUSTOM_FIELD_IDS_START_AT } ]
170
+ member_contact = item_data[GID_MEMBER_CONTACT].nil? ? nil : Hash[ item_data[GID_MEMBER_CONTACT].map{ |k,v| [k.to_i, v] }.select{ |i| i[0] < CUSTOM_FIELD_IDS_START_AT } ]
171
+ primary_contact = item_data[GID_PRIMARY_CONTACT].nil? ? nil : Hash[ item_data[GID_PRIMARY_CONTACT].map{ |k,v| [k.to_i, v] }.select{ |i| i[0] < CUSTOM_FIELD_IDS_START_AT } ]
172
+ secondary_contact = item_data[GID_SECONDARY_CONTACT].nil? ? nil : Hash[ item_data[GID_SECONDARY_CONTACT].map{ |k,v| [k.to_i, v] }.select{ |i| i[0] < CUSTOM_FIELD_IDS_START_AT } ]
173
+ emergency_contact = item_data[GID_EMERGENCY_CONTACT].nil? ? nil : Hash[ item_data[GID_EMERGENCY_CONTACT].map{ |k,v| [k.to_i, v] }.select{ |i| i[0] < CUSTOM_FIELD_IDS_START_AT } ]
174
+ doctor_contact = item_data[GID_DOCTOR_CONTACT].nil? ? nil : Hash[ item_data[GID_DOCTOR_CONTACT].map{ |k,v| [k.to_i, v] }.select{ |i| i[0] < CUSTOM_FIELD_IDS_START_AT } ]
175
175
  floating_data = Hash[ item_data[GID_FLOATING].map{ |k,v| [k.to_i, v] }.select{ |i| i[0] < CUSTOM_FIELD_IDS_START_AT } ]
176
176
 
177
177
  result.push Osm::Member.new(
@@ -189,7 +189,7 @@ module Osm
189
189
  :finished_section => Osm::parse_date(item['end_date']),
190
190
  :joined_movement => Osm::parse_date(item['started']),
191
191
  :gender => {'male'=>:male, 'female'=>:female, 'other'=>:other, 'unspecified'=>:unspecified}[(floating_data[CID_GENDER] || '').downcase],
192
- :contact => MemberContact.new(
192
+ :contact => member_contact.nil? ? nil : MemberContact.new(
193
193
  first_name: item['first_name'],
194
194
  last_name: item['last_name'],
195
195
  address_1: member_contact[CID_ADDRESS_1],
@@ -208,7 +208,7 @@ module Osm
208
208
  custom: DirtyHashy[ item_data[GID_MEMBER_CONTACT].map{ |k,v| [k.to_i, v] }.select{ |i| i[0] > CORE_FIELD_IDS_FINISH_AT } ],
209
209
  custom_labels: custom_labels[GID_MEMBER_CONTACT] || DirtyHashy.new,
210
210
  ),
211
- :primary_contact => PrimaryContact.new(
211
+ :primary_contact => primary_contact.nil? ? nil : PrimaryContact.new(
212
212
  first_name: primary_contact[CID_FIRST_NAME],
213
213
  last_name: primary_contact[CID_LAST_NAME],
214
214
  address_1: primary_contact[CID_ADDRESS_1],
@@ -227,7 +227,7 @@ module Osm
227
227
  custom: DirtyHashy[ item_data[GID_PRIMARY_CONTACT].map{ |k,v| [k.to_i, v] }.select{ |i| i[0] > CORE_FIELD_IDS_FINISH_AT } ],
228
228
  custom_labels: custom_labels[GID_PRIMARY_CONTACT] || DirtyHashy.new,
229
229
  ),
230
- :secondary_contact => PrimaryContact.new(
230
+ :secondary_contact => secondary_contact.nil? ? nil : PrimaryContact.new(
231
231
  first_name: secondary_contact[CID_FIRST_NAME],
232
232
  last_name: secondary_contact[CID_LAST_NAME],
233
233
  address_1: secondary_contact[CID_ADDRESS_1],
@@ -246,7 +246,7 @@ module Osm
246
246
  custom: DirtyHashy[ item_data[GID_SECONDARY_CONTACT].map{ |k,v| [k.to_i, v] }.select{ |i| i[0] > CORE_FIELD_IDS_FINISH_AT } ],
247
247
  custom_labels: custom_labels[GID_SECONDARY_CONTACT] || DirtyHashy.new,
248
248
  ),
249
- :emergency_contact => EmergencyContact.new(
249
+ :emergency_contact => emergency_contact.nil? ? nil : EmergencyContact.new(
250
250
  first_name: emergency_contact[CID_FIRST_NAME],
251
251
  last_name: emergency_contact[CID_LAST_NAME],
252
252
  address_1: emergency_contact[CID_ADDRESS_1],
@@ -261,7 +261,7 @@ module Osm
261
261
  custom: DirtyHashy[ item_data[GID_EMERGENCY_CONTACT].map{ |k,v| [k.to_i, v] }.select{ |i| i[0] > CORE_FIELD_IDS_FINISH_AT } ],
262
262
  custom_labels: custom_labels[GID_EMERGENCY_CONTACT] || DirtyHashy.new,
263
263
  ),
264
- :doctor => DoctorContact.new(
264
+ :doctor => doctor_contact.nil? ? nil : DoctorContact.new(
265
265
  first_name: doctor_contact[CID_FIRST_NAME],
266
266
  last_name: doctor_contact[CID_LAST_NAME],
267
267
  surgery: doctor_contact[CID_SURGERY],
@@ -103,6 +103,7 @@ describe "Member" do
103
103
  Osm::Member.new(gender: nil).female?.should == false
104
104
  end
105
105
 
106
+
106
107
  describe "Tells if the member is currently in the section" do
107
108
  it "Today" do
108
109
  Osm::Member.new(started_section: Date.yesterday).current?.should == true
@@ -149,7 +150,7 @@ describe "Member" do
149
150
  'error' => nil,
150
151
  'data' => {
151
152
  '123' => {
152
- 'acive' => true,
153
+ 'active' => true,
153
154
  'age' => '12 / 00',
154
155
  'date_of_birth' => '2000-03-08',
155
156
  'end_date' => '2010-06-03',
@@ -357,6 +358,60 @@ describe "Member" do
357
358
  member.valid?.should == true
358
359
  end
359
360
 
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,
390
+ '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
414
+
360
415
  it "Get from OSM (handles an empty data array)" do
361
416
  body = {
362
417
  'status' => true,
@@ -13,6 +13,16 @@ class TestModel
13
13
  attribute :item
14
14
  validates :item, :validity => true
15
15
  end
16
+ class TestModelAllowNil
17
+ include ActiveAttr::Model
18
+ attribute :item
19
+ validates :item, :validity => {allow_nil: true}
20
+ end
21
+ class TestModelDisallowNil
22
+ include ActiveAttr::Model
23
+ attribute :item
24
+ validates :item, :validity => {allow_nil: false}
25
+ end
16
26
 
17
27
  describe "validity validator" do
18
28
 
@@ -29,4 +39,20 @@ describe "validity validator" do
29
39
  model.errors.messages.should == {:item => ['must be valid', 'validity attribute is invalid: is not included in the list']}
30
40
  end
31
41
 
42
+ describe "Allow nil" do
43
+
44
+ it "Is true" do
45
+ TestModelAllowNil.new(item: TestItem.new(validity: true)).valid?.should == true
46
+ TestModelAllowNil.new(item: TestItem.new(validity: false)).valid?.should == false
47
+ TestModelAllowNil.new(item: nil).valid?.should == true
48
+ end
49
+
50
+ it "Is false" do
51
+ TestModelDisallowNil.new(item: TestItem.new(validity: true)).valid?.should == true
52
+ TestModelDisallowNil.new(item: TestItem.new(validity: false)).valid?.should == false
53
+ TestModelDisallowNil.new(item: nil).valid?.should == false
54
+ end
55
+
56
+ end
57
+
32
58
  end
data/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Osm
2
- VERSION = "1.2.18.dev.2"
2
+ VERSION = "1.2.18.dev.3"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: osm
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.18.dev.2
4
+ version: 1.2.18.dev.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Gauld