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

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
- 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