osm 1.2.14 → 1.2.15.dev
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 +8 -8
- data/CHANGELOG.md +32 -0
- data/lib/osm/activity.rb +66 -35
- data/lib/osm/api.rb +7 -5
- data/lib/osm/badge.rb +371 -182
- data/lib/osm/badges.rb +28 -20
- data/lib/osm/event.rb +63 -55
- data/lib/osm/meeting.rb +56 -43
- data/lib/osm/member.rb +2 -2
- data/lib/osm/model.rb +1 -1
- data/spec/osm/activity_spec.rb +33 -17
- data/spec/osm/api_spec.rb +1 -1
- data/spec/osm/badge_spec.rb +562 -642
- data/spec/osm/badges_spec.rb +92 -51
- data/spec/osm/event_spec.rb +95 -75
- data/spec/osm/meeting_spec.rb +53 -50
- data/spec/osm/member_spec.rb +10 -0
- data/version.rb +1 -1
- metadata +4 -4
data/lib/osm/badges.rb
CHANGED
@@ -17,9 +17,10 @@ module Osm
|
|
17
17
|
return Osm::Model.cache_read(api, cache_key)
|
18
18
|
end
|
19
19
|
|
20
|
-
data = api.perform_query("
|
21
|
-
data = (data['
|
22
|
-
|
20
|
+
data = api.perform_query("ext/badges/stock/?action=getBadgeStock§ion=#{section.type}§ion_id=#{section.id}&term_id=#{term_id}")
|
21
|
+
data = (data['items'] || [])
|
22
|
+
data.map!{ |i| [i['shortname'], i['stock']] }
|
23
|
+
data = Hash[data]
|
23
24
|
|
24
25
|
Osm::Model.cache_write(api, cache_key, data)
|
25
26
|
return data
|
@@ -28,22 +29,25 @@ module Osm
|
|
28
29
|
# Update badge stock levels
|
29
30
|
# @param [Osm::Api] api The api to use to make the request
|
30
31
|
# @param [Osm::Section, Fixnum, #to_i] section The section (or its ID) to update ther badge stock for
|
31
|
-
# @param [
|
32
|
+
# @param [Fixnum, #to_i] badge_id The badge to set the stock level for
|
33
|
+
# @param [Fixnum, #to_i] badge_level The level of a staged badge to set the stock for (default 1)
|
32
34
|
# @param [Fixnum, #to_i] stock_level How many of the provided badge there are
|
33
35
|
# @return [Boolan] whether the update was successfull or not
|
34
|
-
def self.update_stock(api, section,
|
36
|
+
def self.update_stock(api, section, badge_id, badge_level=1, stock_level)
|
35
37
|
Osm::Model.require_ability_to(api, :write, :badge, section)
|
36
38
|
section = Osm::Section.get(api, section) unless section.is_a?(Osm::Section)
|
37
39
|
|
38
40
|
Osm::Model.cache_delete(api, ['badge_stock', section.id])
|
39
41
|
|
40
|
-
data = api.perform_query("
|
42
|
+
data = api.perform_query("ext/badges.php?action=updateStock", {
|
41
43
|
'stock' => stock_level,
|
42
|
-
'table' => badge_key,
|
43
44
|
'sectionid' => section.id,
|
44
45
|
'section' => section.type,
|
46
|
+
'type' => 'current',
|
47
|
+
'level' => badge_level.to_i,
|
48
|
+
'badge_id' => badge_id.to_i,
|
45
49
|
})
|
46
|
-
return data.is_a?(Hash) &&
|
50
|
+
return data.is_a?(Hash) && data['ok']
|
47
51
|
end
|
48
52
|
|
49
53
|
|
@@ -63,24 +67,25 @@ module Osm
|
|
63
67
|
return Osm::Model.cache_read(api, cache_key)
|
64
68
|
end
|
65
69
|
|
66
|
-
data = api.perform_query("
|
70
|
+
data = api.perform_query("ext/badges/due/?action=get§ion=#{section.type}§ionid=#{section.id}&termid=#{term_id}")
|
67
71
|
|
68
72
|
data = {} unless data.is_a?(Hash) # OSM/OGM returns an empty array to represent no badges
|
69
|
-
|
70
|
-
descriptions_raw = data['description'] || {}
|
73
|
+
pending = data['pending'] || {}
|
71
74
|
|
72
75
|
by_member = {}
|
73
76
|
member_names = {}
|
74
77
|
badge_names = {}
|
75
|
-
|
78
|
+
badge_stock = {}
|
79
|
+
|
80
|
+
pending.each do |badge_identifier, members|
|
76
81
|
members.each do |member|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
by_member[
|
82
|
-
by_member[
|
83
|
-
member_names[
|
82
|
+
badge_level_identifier = badge_identifier + "_#{member['completed']}"
|
83
|
+
member_id = Osm.to_i_or_nil(member['scout_id'])
|
84
|
+
badge_names[badge_level_identifier] = "#{member['label']} - #{member['name']}" + (!member['extra'].nil? ? " (#{member['extra']})" : '')
|
85
|
+
badge_stock[badge_level_identifier] = member['current_stock'].to_i
|
86
|
+
by_member[member_id] ||= []
|
87
|
+
by_member[member_id].push(badge_level_identifier)
|
88
|
+
member_names[member_id] = "#{member['firstname']} #{member['lastname']}"
|
84
89
|
end
|
85
90
|
end
|
86
91
|
|
@@ -88,6 +93,7 @@ module Osm
|
|
88
93
|
:by_member => by_member,
|
89
94
|
:member_names => member_names,
|
90
95
|
:badge_names => badge_names,
|
96
|
+
:badge_stock => badge_stock,
|
91
97
|
)
|
92
98
|
Osm::Model.cache_write(api, cache_key, due_badges)
|
93
99
|
return due_badges
|
@@ -105,13 +111,15 @@ module Osm
|
|
105
111
|
attribute :badge_names, :default => {}
|
106
112
|
attribute :by_member, :default => {}
|
107
113
|
attribute :member_names, :default => {}
|
114
|
+
attribute :badge_stock, :default => {}
|
108
115
|
|
109
116
|
if ActiveModel::VERSION::MAJOR < 4
|
110
|
-
attr_accessible :badge_names, :by_member, :member_names
|
117
|
+
attr_accessible :badge_names, :by_member, :member_names, :badge_stock
|
111
118
|
end
|
112
119
|
|
113
120
|
validates :badge_names, :hash => {:key_type => String, :value_type => String}
|
114
121
|
validates :member_names, :hash => {:key_type => Fixnum, :value_type => String}
|
122
|
+
validates :badge_stock, :hash => {:key_type => String, :value_type => Fixnum}
|
115
123
|
|
116
124
|
validates_each :by_member do |record, attr, value|
|
117
125
|
badge_names_keys = record.badge_names.keys
|
data/lib/osm/event.rb
CHANGED
@@ -234,23 +234,15 @@ module Osm
|
|
234
234
|
|
235
235
|
# The cached events for the section will be out of date - remove them
|
236
236
|
cache_delete(api, ['events', event.section_id])
|
237
|
-
cache_write(api, ['event', event.id], event)
|
238
237
|
|
239
238
|
# Add badge links to OSM
|
240
239
|
badges_created = true
|
241
240
|
event.badges.each do |badge|
|
242
|
-
|
243
|
-
'section' => badge.badge_section,
|
244
|
-
'badgetype' => badge.badge_type,
|
245
|
-
'badge' => badge.badge_key,
|
246
|
-
'columnname' => badge.requirement_key,
|
247
|
-
'data' => badge.data,
|
248
|
-
'newcolumnname' => badge.requirement_label,
|
249
|
-
})
|
250
|
-
badges_created = false unless badge_data.is_a?(Hash) && badge_data['ok']
|
241
|
+
badges_created &= event.add_badge_link(api, badge)
|
251
242
|
end
|
252
243
|
|
253
244
|
if badges_created
|
245
|
+
cache_write(api, ['event', event.id], event)
|
254
246
|
return event
|
255
247
|
else
|
256
248
|
# Someting went wrong adding badges so return what OSM has
|
@@ -324,43 +316,28 @@ module Osm
|
|
324
316
|
badges_to_delete = []
|
325
317
|
original_badges.each do |badge|
|
326
318
|
unless badges.include?(badge)
|
327
|
-
badges_to_delete.push
|
328
|
-
'section' => badge.badge_section,
|
329
|
-
'badge' => badge.badge_key,
|
330
|
-
'columnname' => badge.requirement_key,
|
331
|
-
'data' => badge.data,
|
332
|
-
'newcolumnname' => badge.requirement_label,
|
333
|
-
'badgetype' => badge.badge_type,
|
334
|
-
})
|
319
|
+
badges_to_delete.push badge
|
335
320
|
end
|
336
321
|
end
|
337
|
-
|
338
|
-
data = api.perform_query("ext/
|
339
|
-
'
|
322
|
+
badges_to_delete.each do |badge|
|
323
|
+
data = api.perform_query("ext/badges/records/index.php?action=deleteBadgeLink§ionid=#{section_id}", {
|
324
|
+
'section' => badge.badge_section,
|
325
|
+
'sectionid' => section_id,
|
326
|
+
'type' => 'event',
|
327
|
+
'id' => id,
|
328
|
+
'badge_id' => badge.badge_id,
|
329
|
+
'badge_version' => badge.badge_version,
|
330
|
+
'column_id' => badge.requirement_id,
|
340
331
|
})
|
341
|
-
updated &= data.is_a?(Hash) && data['
|
332
|
+
updated &= data.is_a?(Hash) && data['status']
|
342
333
|
end
|
343
334
|
|
344
335
|
# Added badges
|
345
|
-
badges_to_add = []
|
346
336
|
badges.each do |badge|
|
347
337
|
unless original_badges.include?(badge)
|
348
|
-
|
349
|
-
'section' => badge.badge_section,
|
350
|
-
'badge' => badge.badge_key,
|
351
|
-
'columnname' => badge.requirement_key,
|
352
|
-
'data' => badge.data,
|
353
|
-
'newcolumnname' => badge.requirement_label,
|
354
|
-
'badgetype' => badge.badge_type,
|
355
|
-
})
|
338
|
+
updated &= add_badge_link(api, badge)
|
356
339
|
end
|
357
340
|
end
|
358
|
-
unless badges_to_add.empty?
|
359
|
-
data = api.perform_query("ext/events/event/index.php?action=badgeAddToEvent§ionid=#{section_id}&eventid=#{id}", {
|
360
|
-
'badgelinks' => badges_to_add,
|
361
|
-
})
|
362
|
-
updated &= data.is_a?(Hash) && data['ok']
|
363
|
-
end
|
364
341
|
end # includes badges
|
365
342
|
|
366
343
|
if updated
|
@@ -442,6 +419,26 @@ module Osm
|
|
442
419
|
return attendance
|
443
420
|
end
|
444
421
|
|
422
|
+
# Add a badge link to the event in OSM
|
423
|
+
# @param [Osm::Api] api The api to use to make the request
|
424
|
+
# @param [Osm::Event::BadgeLink] link The badge link to add, if column_id is nil then a new column is created with requirement_label as the name
|
425
|
+
# @return [Boolean] whether the update succedded
|
426
|
+
def add_badge_link(api, link)
|
427
|
+
raise Osm::ObjectIsInvalid, 'link is invalid' unless link.valid?
|
428
|
+
|
429
|
+
data = api.perform_query("ext/badges/records/index.php?action=linkBadgeToItem§ionid=#{section_id}", {
|
430
|
+
'section' => link.badge_section,
|
431
|
+
'sectionid' => section_id,
|
432
|
+
'type' => 'event',
|
433
|
+
'id' => id,
|
434
|
+
'badge_id' => link.badge_id,
|
435
|
+
'badge_version' => link.badge_version,
|
436
|
+
'column_id' => link.requirement_id.to_i.eql?(0) ? -2 : link.requirement_id,
|
437
|
+
'column_data' => link.data,
|
438
|
+
'new_column_name' => link.requirement_id.to_i.eql?(0) ? link.requirement_label : '',
|
439
|
+
})
|
440
|
+
return (data.is_a?(Hash) && data['status'])
|
441
|
+
end
|
445
442
|
|
446
443
|
# Add a column to the event in OSM
|
447
444
|
# @param [Osm::Api] api The api to use to make the request
|
@@ -563,7 +560,16 @@ module Osm
|
|
563
560
|
badges_data = event_data['badgelinks']
|
564
561
|
badges_data = [] unless badges_data.is_a?(Array)
|
565
562
|
badges_data.each do |field|
|
566
|
-
badges.push BadgeLink.new(
|
563
|
+
badges.push BadgeLink.new(
|
564
|
+
badge_type: field['badgetype'].to_sym,
|
565
|
+
badge_section: field['section'].to_sym,
|
566
|
+
requirement_id: field['column_id'],
|
567
|
+
badge_name: field['badgeLongName'],
|
568
|
+
requirement_label: field['columnnameLongName'],
|
569
|
+
data: field['data'],
|
570
|
+
badge_id: field['badge_id'],
|
571
|
+
badge_version: field['badge_version'],
|
572
|
+
)
|
567
573
|
end
|
568
574
|
event.badges = badges
|
569
575
|
|
@@ -571,52 +577,54 @@ module Osm
|
|
571
577
|
end
|
572
578
|
|
573
579
|
|
574
|
-
# When creating a BadgeLink for an existing column in a hikes/nights badge the requirement_label is optional
|
575
|
-
# When creating a BadgeLink for a new column in a hikes/nights badge the requirement_key MUST be blank
|
576
|
-
# TODO : Add validation for above statements
|
577
580
|
class BadgeLink
|
578
581
|
include ActiveModel::MassAssignmentSecurity if ActiveModel::VERSION::MAJOR < 4
|
579
582
|
include ActiveAttr::Model
|
580
583
|
|
581
|
-
# @!attribute [rw] badge_key
|
582
|
-
# @return [String] the badge being done
|
583
584
|
# @!attribute [rw] badge_type
|
584
585
|
# @return [Symbol] the type of badge
|
585
|
-
# @!attribute [rw] badge_label
|
586
|
-
# @return [String] human friendly badge name
|
587
|
-
# @!attribute [rw] requirement_key
|
588
|
-
# @return [String] the requirement being done
|
589
586
|
# @!attribute [rw] badge_section
|
590
587
|
# @return [Symbol] the section type that the badge belongs to
|
591
588
|
# @!attribute [rw] requirement_label
|
592
589
|
# @return [String] human firendly requirement label
|
593
590
|
# @!attribute [rw] data
|
594
591
|
# @return [String] what to put in the column when the badge records are updated
|
592
|
+
# @!attribute [rw] badge_name
|
593
|
+
# @return [String] the badge's name
|
594
|
+
# @!attribute [rw] badge_id
|
595
|
+
# @return [Fixnum] the badge's ID in OSM
|
596
|
+
# @!attribute [rw] badge_version
|
597
|
+
# @return [Fixnum] the version of the badge
|
598
|
+
# @!attribute [rw] requirement_id
|
599
|
+
# @return [Fixnum] the requirement's ID in OSM
|
595
600
|
|
596
|
-
attribute :badge_key, :type => String
|
597
601
|
attribute :badge_type, :type => Object
|
598
|
-
attribute :requirement_key, :type => String
|
599
602
|
attribute :badge_section, :type => Object
|
600
|
-
attribute :badge_label, :type => String
|
601
603
|
attribute :requirement_label, :type => String
|
602
604
|
attribute :data, :type => String
|
605
|
+
attribute :badge_name, :type => String
|
606
|
+
attribute :badge_id, :type => Integer
|
607
|
+
attribute :badge_version, :type => Integer
|
608
|
+
attribute :requirement_id, :type => Integer
|
603
609
|
|
604
610
|
if ActiveModel::VERSION::MAJOR < 4
|
605
|
-
attr_accessible :
|
611
|
+
attr_accessible :badge_type, :badge_section, :requirement_label, :data, :badge_name, :badge_id, :badge_version, :requirement_id
|
606
612
|
end
|
607
613
|
|
608
|
-
validates_presence_of :
|
609
|
-
validates_format_of :requirement_key, :with => /\A(?:[a-z]_\d{2})|(?:custom_\d+)\Z/, :allow_blank => true, :message => 'is not in the correct format (e.g. "a_01")'
|
614
|
+
validates_presence_of :badge_name
|
610
615
|
validates_inclusion_of :badge_section, :in => [:beavers, :cubs, :scouts, :explorers, :staged]
|
611
616
|
validates_inclusion_of :badge_type, :in => [:core, :staged, :activity, :challenge]
|
617
|
+
validates_numericality_of :badge_id, :only_integer=>true, :greater_than=>0
|
618
|
+
validates_numericality_of :badge_version, :only_integer=>true, :greater_than_or_equal_to=>0
|
619
|
+
validates_numericality_of :requirement_id, :only_integer=>true, :greater_than=>0, :allow_nil=>true
|
612
620
|
|
613
621
|
# @!method initialize
|
614
622
|
# Initialize a new Meeting::Activity
|
615
623
|
# @param [Hash] attributes The hash of attributes (see attributes for descriptions, use Symbol of attribute name as the key)
|
616
624
|
|
617
|
-
# Compare BadgeLink based on section, type,
|
625
|
+
# Compare BadgeLink based on section, type, badge_name, requirement_label, data
|
618
626
|
def <=>(another)
|
619
|
-
[:badge_section, :badge_type, :
|
627
|
+
[:badge_section, :badge_type, :badge_name, :requirement_label].each do |attribute|
|
620
628
|
result = self.try(:data) <=> another.try(:data)
|
621
629
|
return result unless result == 0
|
622
630
|
end
|
data/lib/osm/meeting.rb
CHANGED
@@ -116,13 +116,16 @@ module Osm
|
|
116
116
|
our_badge_links = badge_links[item['eveningid']]
|
117
117
|
attributes[:badge_links] = Array.new
|
118
118
|
unless our_badge_links.nil?
|
119
|
-
our_badge_links.each do |
|
119
|
+
our_badge_links.each do |badge_data|
|
120
120
|
attributes[:badge_links].push Osm::Meeting::BadgeLink.new(
|
121
|
-
:
|
122
|
-
:
|
123
|
-
:
|
124
|
-
:
|
125
|
-
:
|
121
|
+
:badge_type => badge_data['badgetype'].to_sym,
|
122
|
+
:badge_section => badge_data['section'].to_sym,
|
123
|
+
:badge_name => badge_data['badgeLongName'],
|
124
|
+
:badge_id => Osm::to_i_or_nil(badge_data['badge_id']),
|
125
|
+
:badge_version => Osm::to_i_or_nil(badge_data['badge_version']),
|
126
|
+
:requirement_id => Osm::to_i_or_nil(badge_data['column_id']),
|
127
|
+
:requirement_label => badge_data['columnnameLongName'],
|
128
|
+
:data => badge_data['data'],
|
126
129
|
)
|
127
130
|
end
|
128
131
|
end
|
@@ -178,17 +181,6 @@ module Osm
|
|
178
181
|
activities_data.push this_activity
|
179
182
|
end
|
180
183
|
|
181
|
-
badge_links_data = Array.new
|
182
|
-
badge_links.each do |badge_link|
|
183
|
-
this_badge_link = {
|
184
|
-
'section' => badge_link.badge_section,
|
185
|
-
'badge' => badge_link.badge_key,
|
186
|
-
'columnname' => badge_link.requirement_key,
|
187
|
-
'badgetype' => badge_link.badge_type,
|
188
|
-
}
|
189
|
-
badge_links_data.push this_badge_link
|
190
|
-
end
|
191
|
-
|
192
184
|
api_data = {
|
193
185
|
'eveningid' => id,
|
194
186
|
'sectionid' => section_id,
|
@@ -202,7 +194,22 @@ module Osm
|
|
202
194
|
'games' => games,
|
203
195
|
'leaders' => leaders,
|
204
196
|
'activity' => ActiveSupport::JSON.encode(activities_data),
|
205
|
-
'badgelinks' => ActiveSupport::JSON.encode(
|
197
|
+
'badgelinks' => ActiveSupport::JSON.encode(badge_links.map{ |b|
|
198
|
+
{
|
199
|
+
'badge_id' => b.badge_id.to_s,
|
200
|
+
'badge_version' => b.badge_version.to_s,
|
201
|
+
'column_id' => b.requirement_id.to_s,
|
202
|
+
'badge' => nil,
|
203
|
+
'badgeLongName' => b.badge_name,
|
204
|
+
'columnname' => nil,
|
205
|
+
'columnnameLongName' => b.requirement_label,
|
206
|
+
'data' => b.data,
|
207
|
+
'section' => b.badge_section,
|
208
|
+
'sectionLongName' => nil,
|
209
|
+
'badgetype' => b.badge_type.to_s,
|
210
|
+
'badgetypeLongName' => nil,
|
211
|
+
}
|
212
|
+
})
|
206
213
|
}
|
207
214
|
response = api.perform_query("programme.php?action=editEvening", api_data)
|
208
215
|
|
@@ -276,20 +283,11 @@ module Osm
|
|
276
283
|
else
|
277
284
|
# We'll have to iterate through the activities
|
278
285
|
require_ability_to(api, :read, :programme, section_id, options)
|
279
|
-
badges =
|
286
|
+
badges = badge_links
|
280
287
|
activities.each do |activity|
|
281
288
|
activity = Osm::Activity.get(api, activity.activity_id, nil, options)
|
282
289
|
activity.badges.each do |badge|
|
283
|
-
badges.push
|
284
|
-
'name' => badge.label,
|
285
|
-
'badgeName' => badge.badge,
|
286
|
-
'sectionid' => section_id.to_s,
|
287
|
-
'eveningid' => id.to_s,
|
288
|
-
'section' => badge.section_type,
|
289
|
-
'badgetype' => badge.type,
|
290
|
-
'badge' => badge.badge,
|
291
|
-
'columnname' => badge.requirement,
|
292
|
-
})
|
290
|
+
badges.push badge
|
293
291
|
end
|
294
292
|
end
|
295
293
|
end
|
@@ -354,39 +352,54 @@ module Osm
|
|
354
352
|
include ActiveModel::MassAssignmentSecurity if ActiveModel::VERSION::MAJOR < 4
|
355
353
|
include ActiveAttr::Model
|
356
354
|
|
357
|
-
# @!attribute [rw] badge_key
|
358
|
-
# @return [String] the badge being done
|
359
355
|
# @!attribute [rw] badge_type
|
360
356
|
# @return [Symbol] the type of badge
|
361
|
-
# @!attribute [rw] requirement_key
|
362
|
-
# @return [String] the requirement being done
|
363
357
|
# @!attribute [rw] badge_section
|
364
358
|
# @return [Symbol] the section type that the badge belongs to
|
365
|
-
# @!attribute [rw]
|
366
|
-
# @return [String] human firendly label
|
359
|
+
# @!attribute [rw] requirement_label
|
360
|
+
# @return [String] human firendly requirement label
|
361
|
+
# @!attribute [rw] data
|
362
|
+
# @return [String] what to put in the column when the badge records are updated
|
363
|
+
# @!attribute [rw] badge_name
|
364
|
+
# @return [String] the badge's name
|
365
|
+
# @!attribute [rw] badge_id
|
366
|
+
# @return [Fixnum] the badge's ID in OSM
|
367
|
+
# @!attribute [rw] badge_version
|
368
|
+
# @return [Fixnum] the version of the badge
|
369
|
+
# @!attribute [rw] requirement_id
|
370
|
+
# @return [Fixnum] the requirement's ID in OSM
|
367
371
|
|
368
|
-
attribute :badge_key, :type => String
|
369
372
|
attribute :badge_type, :type => Object
|
370
|
-
attribute :requirement_key, :type => String
|
371
373
|
attribute :badge_section, :type => Object
|
372
|
-
attribute :
|
374
|
+
attribute :requirement_label, :type => String
|
375
|
+
attribute :data, :type => String
|
376
|
+
attribute :badge_name, :type => String
|
377
|
+
attribute :badge_id, :type => Integer
|
378
|
+
attribute :badge_version, :type => Integer
|
379
|
+
attribute :requirement_id, :type => Integer
|
373
380
|
|
374
381
|
if ActiveModel::VERSION::MAJOR < 4
|
375
|
-
attr_accessible :
|
382
|
+
attr_accessible :badge_type, :badge_section, :requirement_label, :data, :badge_name, :badge_id, :badge_version, :requirement_id
|
376
383
|
end
|
377
384
|
|
378
|
-
validates_presence_of :
|
379
|
-
validates_format_of :requirement_key, :with => /\A[a-z]_\d{2}\Z/, :message => 'is not in the correct format (e.g. "a_01")'
|
385
|
+
validates_presence_of :badge_name
|
380
386
|
validates_inclusion_of :badge_section, :in => [:beavers, :cubs, :scouts, :explorers, :staged]
|
381
387
|
validates_inclusion_of :badge_type, :in => [:core, :staged, :activity, :challenge]
|
388
|
+
validates_numericality_of :badge_id, :only_integer=>true, :greater_than=>0
|
389
|
+
validates_numericality_of :badge_version, :only_integer=>true, :greater_than_or_equal_to=>0
|
390
|
+
validates_numericality_of :requirement_id, :only_integer=>true, :greater_than=>0, :allow_nil=>true
|
382
391
|
|
383
392
|
# @!method initialize
|
384
393
|
# Initialize a new Meeting::Activity
|
385
394
|
# @param [Hash] attributes The hash of attributes (see attributes for descriptions, use Symbol of attribute name as the key)
|
386
395
|
|
387
|
-
# Compare BadgeLink based on
|
396
|
+
# Compare BadgeLink based on section, type, badge_name, requirement_label, data
|
388
397
|
def <=>(another)
|
389
|
-
|
398
|
+
[:badge_section, :badge_type, :badge_name, :requirement_label].each do |attribute|
|
399
|
+
result = self.try(:data) <=> another.try(:data)
|
400
|
+
return result unless result == 0
|
401
|
+
end
|
402
|
+
return self.try(:data) <=> another.try(:data)
|
390
403
|
end
|
391
404
|
|
392
405
|
end # Class Meeting::BadgeLink
|