osm 0.4.2 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +1 -0
- data/CHANGELOG.md +21 -1
- data/README.md +10 -2
- data/lib/osm/badges.rb +30 -21
- data/lib/osm/event.rb +28 -8
- data/lib/osm/register.rb +31 -7
- data/lib/osm/section.rb +6 -1
- data/spec/osm/badges_spec.rb +5 -5
- data/spec/osm/event_spec.rb +227 -94
- data/spec/osm/register_spec.rb +29 -8
- data/spec/osm/section_spec.rb +4 -1
- data/version.rb +1 -1
- metadata +2 -2
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,26 @@
|
|
1
|
+
## Version 0.5.0
|
2
|
+
|
3
|
+
* Code breaking changes to DueBadges:
|
4
|
+
* The by\_member attribute now uses scout\_id as the key
|
5
|
+
* Addition of member\_names attribute to allow fetching of members names (the old key for the by\_member attribute)
|
6
|
+
* descriptions attribute has been renamed to badge\_names for consistency
|
7
|
+
* Code breaking changes to Register and subclasses:
|
8
|
+
* Register:
|
9
|
+
* update\_attendance - :attendance option is now a Symbol not String (:yes, :unadvised\_absent or :advised\_absent)
|
10
|
+
* Register::Attendance:
|
11
|
+
* attendance attribute is now a Hash of Date to Symbol (instead of to String)
|
12
|
+
* Register::Attendance gains two helper methods:
|
13
|
+
* present\_on?(date)
|
14
|
+
* absent\_on?(date)
|
15
|
+
* Add allow\_booking attribute to Event
|
16
|
+
* Add myscout\_programme\_times attribute to Section
|
17
|
+
* Cost attribute of Event is now checked to be either "TBC" or formatted to /\\A\\d+\\.\\d{2}\\Z/
|
18
|
+
* Add cost\_tbc? method to Event
|
19
|
+
* Add cost\_free? method to Event
|
20
|
+
|
1
21
|
## Version 0.4.2
|
2
22
|
|
3
|
-
* Fix undefined variable "
|
23
|
+
* Fix undefined variable "section\_id" when fetching notepad from cache
|
4
24
|
|
5
25
|
## Version 0.4.1
|
6
26
|
|
data/README.md
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
|
4
4
|
|
5
5
|
##Build State
|
6
|
-
This project uses continuous integration to help ensure that a quality product is delivered.
|
6
|
+
This project uses continuous integration to help ensure that a quality product is delivered.
|
7
7
|
Travis CI monitors two branches (versions) of the code - Master (which is what gets released)
|
8
8
|
and Staging (which is what is currently being debugged ready for moving to master).
|
9
9
|
|
@@ -12,6 +12,14 @@ Master [![Build Status](https://secure.travis-ci.org/robertgauld/osm.png?branch=
|
|
12
12
|
Staging [![Build Status](https://secure.travis-ci.org/robertgauld/osm.png?branch=staging)](http://travis-ci.org/robertgauld/osm)
|
13
13
|
|
14
14
|
|
15
|
+
## Ruby Versions
|
16
|
+
This gem supports the following versions of ruby, it may work on other versions but is not tested against them so don't rely on it.
|
17
|
+
|
18
|
+
* 1.9.2
|
19
|
+
* 1.9.3
|
20
|
+
* 2.0.0
|
21
|
+
|
22
|
+
|
15
23
|
## OSM
|
16
24
|
|
17
25
|
Use the [Online Scout Manager](https://www.onlinescoutmanager.co.uk) API.
|
@@ -24,7 +32,7 @@ Use the [Online Scout Manager](https://www.onlinescoutmanager.co.uk) API.
|
|
24
32
|
Add to your Gemfile and run the `bundle` command to install it.
|
25
33
|
|
26
34
|
```ruby
|
27
|
-
gem 'osm', '~> 0.
|
35
|
+
gem 'osm', '~> 0.5.0'
|
28
36
|
```
|
29
37
|
|
30
38
|
Configure the gem during the initalization of the app (e.g. if using rails then config/initializers/osm.rb would look like):
|
data/lib/osm/badges.rb
CHANGED
@@ -69,57 +69,66 @@ module Osm
|
|
69
69
|
pending_raw = data['pending'] || {}
|
70
70
|
descriptions_raw = data['description'] || {}
|
71
71
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
}
|
76
|
-
|
72
|
+
by_member = {}
|
73
|
+
member_names = {}
|
74
|
+
badge_names = {}
|
77
75
|
pending_raw.each do |key, members|
|
78
76
|
members.each do |member|
|
79
|
-
|
77
|
+
id = Osm.to_i_or_nil(member['scoutid'])
|
80
78
|
description = descriptions_raw[key]['name'] + (descriptions_raw[key]['section'].eql?('staged') ? " (Level #{member['level']})" : '')
|
81
79
|
description_key = key + (descriptions_raw[key]['section'].eql?('staged') ? "_#{member['level']}" : '_1')
|
82
|
-
|
83
|
-
|
84
|
-
|
80
|
+
badge_names[description_key] = description
|
81
|
+
by_member[id] ||= []
|
82
|
+
by_member[id].push(description_key)
|
83
|
+
member_names[id] = "#{member['firstname']} #{member['lastname']}"
|
85
84
|
end
|
86
85
|
end
|
87
86
|
|
88
|
-
due_badges = Osm::Badges::DueBadges.new(
|
87
|
+
due_badges = Osm::Badges::DueBadges.new(
|
88
|
+
:by_member => by_member,
|
89
|
+
:member_names => member_names,
|
90
|
+
:badge_names => badge_names,
|
91
|
+
)
|
89
92
|
Osm::Model.cache_write(api, cache_key, due_badges)
|
90
93
|
return due_badges
|
91
94
|
end
|
92
95
|
|
93
96
|
|
94
97
|
class DueBadges < Osm::Model
|
95
|
-
# @!attribute [rw]
|
96
|
-
# @return [Hash]
|
98
|
+
# @!attribute [rw] badge_names
|
99
|
+
# @return [Hash] name to display for each of the badges
|
97
100
|
# @!attribute [rw] by_member
|
98
101
|
# @return [Hash] the due badges grouped by member
|
102
|
+
# @!attribute [rw] member_names
|
103
|
+
# @return [Hash] the name to display for each member
|
99
104
|
|
100
|
-
attribute :
|
105
|
+
attribute :badge_names, :default => {}
|
101
106
|
attribute :by_member, :default => {}
|
107
|
+
attribute :member_names, :default => {}
|
102
108
|
|
103
|
-
attr_accessible :
|
109
|
+
attr_accessible :badge_names, :by_member, :member_names
|
104
110
|
|
105
|
-
validates :
|
111
|
+
validates :badge_names, :hash => {:key_type => String, :value_type => String}
|
112
|
+
validates :member_names, :hash => {:key_type => Fixnum, :value_type => String}
|
106
113
|
|
107
114
|
validates_each :by_member do |record, attr, value|
|
108
|
-
|
115
|
+
badge_names_keys = record.badge_names.keys
|
116
|
+
member_names_keys = record.member_names.keys
|
109
117
|
record.errors.add(attr, 'must be a Hash') unless value.is_a?(Hash)
|
110
118
|
value.each do |k, v|
|
111
|
-
record.errors.add(attr, 'keys must be
|
119
|
+
record.errors.add(attr, 'keys must be Fixnum') unless k.is_a?(Fixnum)
|
120
|
+
record.errors.add(attr, 'keys must exist as a key in :member_names') unless member_names_keys.include?(k)
|
112
121
|
record.errors.add(attr, 'values must be Arrays') unless v.is_a?(Array)
|
113
122
|
v.each do |vv|
|
114
123
|
record.errors.add(attr, 'internal values must be Strings') unless vv.is_a?(String)
|
115
|
-
record.errors.add(attr, 'internal values must exist as a key in :
|
124
|
+
record.errors.add(attr, 'internal values must exist as a key in :badge_names') unless badge_names_keys.include?(vv)
|
116
125
|
end
|
117
126
|
end
|
118
127
|
end
|
119
128
|
|
120
129
|
|
121
130
|
# @!method initialize
|
122
|
-
# Initialize a new
|
131
|
+
# Initialize a new DueBadges
|
123
132
|
# @param [Hash] attributes The hash of attributes (see attributes for descriptions, use Symbol of attribute name as the key)
|
124
133
|
|
125
134
|
|
@@ -133,8 +142,8 @@ module Osm
|
|
133
142
|
# @return [Hash] the total number of each badge which is due
|
134
143
|
def totals()
|
135
144
|
totals = {}
|
136
|
-
by_member.
|
137
|
-
|
145
|
+
by_member.each do |member_name, badges|
|
146
|
+
badges.each do |badge|
|
138
147
|
totals[badge] ||= 0
|
139
148
|
totals[badge] += 1
|
140
149
|
end
|
data/lib/osm/event.rb
CHANGED
@@ -14,7 +14,7 @@ module Osm
|
|
14
14
|
# @!attribute [rw] finish
|
15
15
|
# @return [DateTime] when the event ends
|
16
16
|
# @!attribute [rw] cost
|
17
|
-
# @return [String] the cost of the event
|
17
|
+
# @return [String] the cost of the event (formatted to \d+\.\d{2}) or "TBC"
|
18
18
|
# @!attribute [rw] location
|
19
19
|
# @return [String] where the event is
|
20
20
|
# @!attribute [rw] notes
|
@@ -37,13 +37,15 @@ module Osm
|
|
37
37
|
# @return [Fixnum] the maximum number of people who can attend the event (0 = no limit)
|
38
38
|
# @!attendance [rw] attendance_limit_includes_leaders
|
39
39
|
# @return [Boolean] whether the attendance limit includes leaders
|
40
|
+
# @!attribute [rw] allow_booking
|
41
|
+
# @return [Boolean] whether booking is allowed through My.SCOUT
|
40
42
|
|
41
43
|
attribute :id, :type => Integer
|
42
44
|
attribute :section_id, :type => Integer
|
43
45
|
attribute :name, :type => String
|
44
46
|
attribute :start, :type => DateTime
|
45
47
|
attribute :finish, :type => DateTime
|
46
|
-
attribute :cost, :type => String, :default => ''
|
48
|
+
attribute :cost, :type => String, :default => 'TBC'
|
47
49
|
attribute :location, :type => String, :default => ''
|
48
50
|
attribute :notes, :type => String, :default => ''
|
49
51
|
attribute :archived, :type => Boolean, :default => false
|
@@ -55,10 +57,11 @@ module Osm
|
|
55
57
|
attribute :reminders, :type => Boolean, :default => true
|
56
58
|
attribute :attendance_limit, :type => Integer, :default => 0
|
57
59
|
attribute :attendance_limit_includes_leaders, :type => Boolean, :default => false
|
60
|
+
attribute :allow_booking, :type => Boolean, :default => true
|
58
61
|
|
59
62
|
attr_accessible :id, :section_id, :name, :start, :finish, :cost, :location, :notes, :archived,
|
60
63
|
:fields, :columns, :notepad, :public_notepad, :confirm_by_date, :allow_changes,
|
61
|
-
:reminders, :attendance_limit, :attendance_limit_includes_leaders
|
64
|
+
:reminders, :attendance_limit, :attendance_limit_includes_leaders, :allow_booking
|
62
65
|
|
63
66
|
validates_numericality_of :id, :only_integer=>true, :greater_than=>0, :allow_nil => true
|
64
67
|
validates_numericality_of :section_id, :only_integer=>true, :greater_than=>0
|
@@ -68,6 +71,8 @@ module Osm
|
|
68
71
|
validates_inclusion_of :allow_changes, :in => [true, false]
|
69
72
|
validates_inclusion_of :reminders, :in => [true, false]
|
70
73
|
validates_inclusion_of :attendance_limit_includes_leaders, :in => [true, false]
|
74
|
+
validates_inclusion_of :allow_booking, :in => [true, false]
|
75
|
+
validates_format_of :cost, :with => /\A(?:\d+\.\d{2}|TBC)\Z/
|
71
76
|
|
72
77
|
|
73
78
|
# @!method initialize
|
@@ -149,7 +154,7 @@ module Osm
|
|
149
154
|
'location' => event.location,
|
150
155
|
'startdate' => event.start? ? event.start.strftime(Osm::OSM_DATE_FORMAT) : '',
|
151
156
|
'enddate' => event.finish? ? event.finish.strftime(Osm::OSM_DATE_FORMAT) : '',
|
152
|
-
'cost' => event.cost,
|
157
|
+
'cost' => event.cost_tbc? ? '-1' : event.cost,
|
153
158
|
'notes' => event.notes,
|
154
159
|
'starttime' => event.start? ? event.start.strftime(Osm::OSM_TIME_FORMAT) : '',
|
155
160
|
'endtime' => event.finish? ? event.finish.strftime(Osm::OSM_TIME_FORMAT) : '',
|
@@ -157,7 +162,8 @@ module Osm
|
|
157
162
|
'allowChanges' => event.allow_changes ? 'true' : 'false',
|
158
163
|
'disablereminders' => !event.reminders ? 'true' : 'false',
|
159
164
|
'attendancelimit' => event.attendance_limit,
|
160
|
-
'limitincludesleaders' => event.attendance_limit_includes_leaders,
|
165
|
+
'limitincludesleaders' => event.attendance_limit_includes_leaders ? 'true' : 'false',
|
166
|
+
'allowbooking' => event.allow_booking ? 'true' : 'false',
|
161
167
|
})
|
162
168
|
|
163
169
|
# The cached events for the section will be out of date - remove them
|
@@ -186,7 +192,7 @@ module Osm
|
|
186
192
|
'location' => location,
|
187
193
|
'startdate' => start? ? start.strftime(Osm::OSM_DATE_FORMAT) : '',
|
188
194
|
'enddate' => finish? ? finish.strftime(Osm::OSM_DATE_FORMAT) : '',
|
189
|
-
'cost' => cost,
|
195
|
+
'cost' => cost_tbc? ? '-1' : cost,
|
190
196
|
'notes' => notes,
|
191
197
|
'starttime' => start? ? start.strftime(Osm::OSM_TIME_FORMAT) : '',
|
192
198
|
'endtime' => finish? ? finish.strftime(Osm::OSM_TIME_FORMAT) : '',
|
@@ -194,7 +200,8 @@ module Osm
|
|
194
200
|
'allowChanges' => allow_changes ? 'true' : 'false',
|
195
201
|
'disablereminders' => !reminders ? 'true' : 'false',
|
196
202
|
'attendancelimit' => attendance_limit,
|
197
|
-
'limitincludesleaders' => attendance_limit_includes_leaders,
|
203
|
+
'limitincludesleaders' => attendance_limit_includes_leaders ? 'true' : 'false',
|
204
|
+
'allowbooking' => allow_booking ? 'true' : 'false',
|
198
205
|
})
|
199
206
|
|
200
207
|
api.perform_query("events.php?action=saveNotepad§ionid=#{section_id}", {
|
@@ -333,6 +340,18 @@ module Osm
|
|
333
340
|
return attendance_limit - attendees(api)
|
334
341
|
end
|
335
342
|
|
343
|
+
# Whether the cost is to be confirmed
|
344
|
+
# @return [Boolean] whether the cost is TBC
|
345
|
+
def cost_tbc?
|
346
|
+
cost.eql?('TBC')
|
347
|
+
end
|
348
|
+
|
349
|
+
# Whether the cost is zero
|
350
|
+
# @return [Boolean] whether the cost is zero
|
351
|
+
def cost_free?
|
352
|
+
cost.eql?('0.00')
|
353
|
+
end
|
354
|
+
|
336
355
|
# Compare Event based on start, name then id
|
337
356
|
def <=>(another)
|
338
357
|
return 0 if self.id == another.try(:id)
|
@@ -359,7 +378,7 @@ module Osm
|
|
359
378
|
:name => event_data['name'],
|
360
379
|
:start => Osm::make_datetime(event_data['startdate'], event_data['starttime']),
|
361
380
|
:finish => Osm::make_datetime(event_data['enddate'], event_data['endtime']),
|
362
|
-
:cost => event_data['cost'],
|
381
|
+
:cost => event_data['cost'].eql?('-1') ? 'TBC' : event_data['cost'],
|
363
382
|
:location => event_data['location'],
|
364
383
|
:notes => event_data['notes'],
|
365
384
|
:archived => event_data['archived'].eql?('1'),
|
@@ -370,6 +389,7 @@ module Osm
|
|
370
389
|
:reminders => !event_data['disablereminders'].eql?('1'),
|
371
390
|
:attendance_limit => event_data['attendancelimit'].to_i,
|
372
391
|
:attendance_limit_includes_leaders => event_data['limitincludesleaders'].eql?('1'),
|
392
|
+
:allow_booking => event_data['allowbooking'].eql?('1'),
|
373
393
|
)
|
374
394
|
|
375
395
|
columns = []
|
data/lib/osm/register.rb
CHANGED
@@ -56,6 +56,7 @@ module Osm
|
|
56
56
|
end
|
57
57
|
|
58
58
|
data = api.perform_query("users.php?action=register§ionid=#{section_id}&termid=#{term_id}")
|
59
|
+
dates = get_structure(api, section, term, options).map{ |f| f.id }.select{ |f| f.match(Osm::OSM_DATE_REGEX) }
|
59
60
|
|
60
61
|
to_return = []
|
61
62
|
if data.is_a?(Hash) && data['items'].is_a?(Array)
|
@@ -63,6 +64,15 @@ module Osm
|
|
63
64
|
data.each do |item|
|
64
65
|
if item.is_a?(Hash)
|
65
66
|
unless item['scoutid'].to_i < 0 # It's a total row
|
67
|
+
attendance = {}
|
68
|
+
dates.each do |date|
|
69
|
+
item_attendance = item[date]
|
70
|
+
date = Date.strptime(date, Osm::OSM_DATE_FORMAT)
|
71
|
+
attendance[date] = :unadvised_absent
|
72
|
+
attendance[date] = :yes if item_attendance.eql?('Yes')
|
73
|
+
attendance[date] = :advised_absent if item_attendance.eql?('No')
|
74
|
+
end
|
75
|
+
item.select{}
|
66
76
|
to_return.push Osm::Register::Attendance.new(
|
67
77
|
:member_id => Osm::to_i_or_nil(item['scoutid']),
|
68
78
|
:grouping_id => Osm::to_i_or_nil(item ['patrolid']),
|
@@ -70,8 +80,7 @@ module Osm
|
|
70
80
|
:first_name => item['firstname'],
|
71
81
|
:last_name => item['lastname'],
|
72
82
|
:total => item['total'].to_i,
|
73
|
-
:attendance =>
|
74
|
-
inject({}){ |new_hash,(date, attendance)| new_hash[Date.strptime(date, Osm::OSM_DATE_FORMAT)] = attendance; new_hash },
|
83
|
+
:attendance => attendance,
|
75
84
|
)
|
76
85
|
end
|
77
86
|
end
|
@@ -87,7 +96,7 @@ module Osm
|
|
87
96
|
# @option data [Osm::Section] :section the section to update the register for
|
88
97
|
# @option data [Osm::Term, #to_i, nil] :term The term (or its ID) to get the register for, passing nil causes the current term to be used
|
89
98
|
# @option data [Osm::Evening, DateTime, Date] :evening the evening to update the register on
|
90
|
-
# @option data [
|
99
|
+
# @option data [Symbol] :attendance what to mark the attendance as, one of :yes, :unadvised_absent or :advised_absent
|
91
100
|
# @option data [Fixnum, Array<Fixnum>, Osm::Member, Array<Osm::Member>] :members the members (or their ids) to update
|
92
101
|
# @option data [Array<Hash>] :completed_badge_requirements (optional) the badge requirements to mark as completed, selected from the Hash returned by the get_badge_requirements_for_evening method
|
93
102
|
# @return [Boolean] whether the update succedded
|
@@ -97,7 +106,7 @@ module Osm
|
|
97
106
|
# @raise [Osm::ArgumentIsInvalid] If data[:members] is missing
|
98
107
|
# @raise [Osm::ArgumentIsInvalid] If data[:api] is missing
|
99
108
|
def self.update_attendance(data={})
|
100
|
-
raise Osm::ArgumentIsInvalid, ':attendance is invalid' unless [
|
109
|
+
raise Osm::ArgumentIsInvalid, ':attendance is invalid' unless [:yes, :unadvised_absent, :advised_absent].include?(data[:attendance])
|
101
110
|
raise Osm::ArgumentIsInvalid, ':section is missing' if data[:section].nil?
|
102
111
|
raise Osm::ArgumentIsInvalid, ':evening is missing' if data[:evening].nil?
|
103
112
|
raise Osm::ArgumentIsInvalid, ':members is missing' if data[:members].nil?
|
@@ -112,7 +121,7 @@ module Osm
|
|
112
121
|
response = api.perform_query("users.php?action=registerUpdate§ionid=#{data[:section].id}&termid=#{term_id}", {
|
113
122
|
'scouts' => data[:members].inspect,
|
114
123
|
'selectedDate' => data[:evening].strftime(Osm::OSM_DATE_FORMAT),
|
115
|
-
'present' => data[:attendance],
|
124
|
+
'present' => {:yes => 'Yes', :unadvised_absent => nil, :advised_absent => 'No'}[data[:attendance]],
|
116
125
|
'section' => data[:section].type,
|
117
126
|
'sectionid' => data[:section].id,
|
118
127
|
'completedBadges' => (data[:completed_badge_requirements] || []).to_json
|
@@ -171,7 +180,7 @@ module Osm
|
|
171
180
|
# @!attribute [rw] total
|
172
181
|
# @return [FixNum] Total
|
173
182
|
# @!attribute [rw] attendance
|
174
|
-
# @return [Hash] The data for each field - keys are the date, values one of
|
183
|
+
# @return [Hash] The data for each field - keys are the date, values one of :yes, :unadvised_absent or :advised_absent
|
175
184
|
|
176
185
|
attribute :member_id, :type => Integer
|
177
186
|
attribute :grouping_id, :type => Integer
|
@@ -190,7 +199,7 @@ module Osm
|
|
190
199
|
validates_presence_of :first_name
|
191
200
|
validates_presence_of :last_name
|
192
201
|
|
193
|
-
validates :attendance, :hash => {:key_type => Date, :value_in => [
|
202
|
+
validates :attendance, :hash => {:key_type => Date, :value_in => [:yes, :unadvised_absent, :advised_absent]}
|
194
203
|
|
195
204
|
|
196
205
|
# @!method initialize
|
@@ -198,6 +207,21 @@ module Osm
|
|
198
207
|
# @param [Hash] attributes The hash of attributes (see attributes for descriptions, use Symbol of attribute name as the key)
|
199
208
|
|
200
209
|
|
210
|
+
# Find out if the member was present on a date
|
211
|
+
# @param [Date] date The date to check attendance for
|
212
|
+
# @return [Boolean] whether the member was presnt on the given date
|
213
|
+
def present_on?(date)
|
214
|
+
attendance[date] == :yes
|
215
|
+
end
|
216
|
+
|
217
|
+
# Find out if the member was absent on a date
|
218
|
+
# @param [Date] date The date to check attendance for
|
219
|
+
# @return [Boolean] whether the member was absent on the given date
|
220
|
+
def absent_on?(date)
|
221
|
+
attendance[date] != :yes
|
222
|
+
end
|
223
|
+
|
224
|
+
|
201
225
|
# Compare Attendance based on section_id, grouping_id, last_name then first_name
|
202
226
|
def <=>(another)
|
203
227
|
result = self.section_id <=> another.try(:section_id)
|
data/lib/osm/section.rb
CHANGED
@@ -51,6 +51,8 @@ module Osm
|
|
51
51
|
# @return [Boolean] Wether parents can see partially completed badges
|
52
52
|
# @!attribute [rw] myscout_programme_summary
|
53
53
|
# @return [Boolean] Wether parents can see summary of programme items
|
54
|
+
# @!attribute [rw] myscout_programme_times
|
55
|
+
# @return [Boolean] Wether parents can see times of programme items
|
54
56
|
# @!attribute [rw] myscout_event_reminder_count
|
55
57
|
# @return [Fixnum] How many event reminders to send to parents who haven't responded
|
56
58
|
# @!attribute [rw] myscout_event_reminder_frequency
|
@@ -85,6 +87,7 @@ module Osm
|
|
85
87
|
attribute :myscout_email_address_copy, :type => String, :default => ''
|
86
88
|
attribute :myscout_badges_partial, :type => Boolean
|
87
89
|
attribute :myscout_programme_summary, :type => Boolean
|
90
|
+
attribute :myscout_programme_times, :type => Boolean
|
88
91
|
attribute :myscout_event_reminder_count, :type => Integer
|
89
92
|
attribute :myscout_event_reminder_frequency, :type => Integer
|
90
93
|
attribute :myscout_payment_reminder_count, :type => Integer
|
@@ -96,7 +99,7 @@ module Osm
|
|
96
99
|
:myscout_programme_expires, :myscout_events, :myscout_badges,
|
97
100
|
:myscout_programme, :myscout_payments, :myscout_emails,
|
98
101
|
:myscout_email_address_from, :myscout_email_address_copy,
|
99
|
-
:myscout_badges_partial, :myscout_programme_summary,
|
102
|
+
:myscout_badges_partial, :myscout_programme_summary, :myscout_programme_times,
|
100
103
|
:myscout_event_reminder_count, :myscout_event_reminder_frequency,
|
101
104
|
:myscout_payment_reminder_count, :myscout_payment_reminder_frequency
|
102
105
|
|
@@ -126,6 +129,7 @@ module Osm
|
|
126
129
|
validates_inclusion_of :myscout_payments, :in => [true, false]
|
127
130
|
validates_inclusion_of :myscout_badges_partial, :in => [true, false]
|
128
131
|
validates_inclusion_of :myscout_programme_summary, :in => [true, false]
|
132
|
+
validates_inclusion_of :myscout_programme_times, :in => [true, false]
|
129
133
|
|
130
134
|
validates :column_names, :hash => {:key_type => Symbol, :value_type => String}
|
131
135
|
validates :fields, :hash => {:key_type => Symbol, :value_in => [true, false]}
|
@@ -207,6 +211,7 @@ module Osm
|
|
207
211
|
:myscout_email_address_copy => myscout_data['emailAddressCopy'] ? myscout_data['emailAddressCopy'] : '',
|
208
212
|
:myscout_badges_partial => myscout_data['badgesPartial'] == 1,
|
209
213
|
:myscout_programme_summary => myscout_data['programmeSummary'] == 1,
|
214
|
+
:myscout_programme_times => myscout_data['programmeTimes'] == 1,
|
210
215
|
:myscout_event_reminder_count => myscout_data['eventRemindCount'].to_i,
|
211
216
|
:myscout_event_reminder_frequency => myscout_data['eventRemindFrequency'].to_i,
|
212
217
|
:myscout_payment_reminder_count => myscout_data['paymentRemindCount'].to_i,
|
data/spec/osm/badges_spec.rb
CHANGED
@@ -19,13 +19,13 @@ describe "Badges" do
|
|
19
19
|
}
|
20
20
|
],
|
21
21
|
'staged_staged_participation' => [{
|
22
|
-
'
|
22
|
+
'scoutid' => '2',
|
23
23
|
'firstname' => 'Jane',
|
24
24
|
'lastname' => 'Doe',
|
25
25
|
'level' => '2',
|
26
26
|
'extra' => 'Lvl 2'
|
27
27
|
}, {
|
28
|
-
'
|
28
|
+
'scoutid' => '1',
|
29
29
|
'firstname' => 'John',
|
30
30
|
'lastname' => 'Doe',
|
31
31
|
'level' => '2',
|
@@ -33,7 +33,6 @@ describe "Badges" do
|
|
33
33
|
}
|
34
34
|
]
|
35
35
|
},
|
36
|
-
|
37
36
|
'description' => {
|
38
37
|
'badge_name' => {
|
39
38
|
'name' => 'Badge Name',
|
@@ -53,8 +52,9 @@ describe "Badges" do
|
|
53
52
|
|
54
53
|
db = Osm::Badges.get_due_badges(@api, Osm::Section.new(:id => 1, :type => :cubs), 2)
|
55
54
|
db.empty?.should == false
|
56
|
-
db.
|
57
|
-
db.by_member.should == {
|
55
|
+
db.badge_names.should == {'badge_name_1'=>'Badge Name', 'staged_staged_participation_2'=>'Participation (Level 2)'}
|
56
|
+
db.by_member.should == {1=>['badge_name_1', 'staged_staged_participation_2'], 2=>['staged_staged_participation_2']}
|
57
|
+
db.member_names.should == {1 => 'John Doe', 2 => 'Jane Doe'}
|
58
58
|
db.totals.should == {'staged_staged_participation_2'=>2, 'badge_name_1'=>1}
|
59
59
|
db.valid?.should be_true
|
60
60
|
end
|
data/spec/osm/event_spec.rb
CHANGED
@@ -11,7 +11,7 @@ describe "Event" do
|
|
11
11
|
:name => 'Event name',
|
12
12
|
:start => DateTime.new(2001, 1, 2, 12 ,0 ,0),
|
13
13
|
:finish => nil,
|
14
|
-
:cost => '
|
14
|
+
:cost => '1.23',
|
15
15
|
:location => 'Somewhere',
|
16
16
|
:notes => 'None',
|
17
17
|
:archived => '0',
|
@@ -23,6 +23,7 @@ describe "Event" do
|
|
23
23
|
:reminders => false,
|
24
24
|
:attendance_limit => 3,
|
25
25
|
:attendance_limit_includes_leaders => true,
|
26
|
+
:allow_booking => false,
|
26
27
|
}
|
27
28
|
event = Osm::Event.new(data)
|
28
29
|
|
@@ -31,7 +32,7 @@ describe "Event" do
|
|
31
32
|
event.name.should == 'Event name'
|
32
33
|
event.start.should == DateTime.new(2001, 1, 2, 12, 0, 0)
|
33
34
|
event.finish.should == nil
|
34
|
-
event.cost.should == '
|
35
|
+
event.cost.should == '1.23'
|
35
36
|
event.location.should == 'Somewhere'
|
36
37
|
event.notes.should == 'None'
|
37
38
|
event.archived.should be_false
|
@@ -43,14 +44,26 @@ describe "Event" do
|
|
43
44
|
event.reminders.should == false
|
44
45
|
event.attendance_limit.should == 3
|
45
46
|
event.attendance_limit_includes_leaders.should == true
|
47
|
+
event.allow_booking.should be_false
|
46
48
|
event.valid?.should be_true
|
47
49
|
end
|
48
50
|
|
49
|
-
it "
|
51
|
+
it "Tells if attendance is limited" do
|
50
52
|
Osm::Event.new(:attendance_limit => 0).limited_attendance?.should be_false
|
51
53
|
Osm::Event.new(:attendance_limit => 1).limited_attendance?.should be_true
|
52
54
|
end
|
53
55
|
|
56
|
+
it "Tells if the cost is TBC" do
|
57
|
+
Osm::Event.new(:cost => 'TBC').cost_tbc?.should be_true
|
58
|
+
Osm::Event.new(:cost => '1.23').cost_tbc?.should be_false
|
59
|
+
end
|
60
|
+
|
61
|
+
it "Tells if the cost is free" do
|
62
|
+
Osm::Event.new(:cost => 'TBC').cost_free?.should be_false
|
63
|
+
Osm::Event.new(:cost => '1.23').cost_free?.should be_false
|
64
|
+
Osm::Event.new(:cost => '0.00').cost_free?.should be_true
|
65
|
+
end
|
66
|
+
|
54
67
|
it "Sorts by start, name then ID (unless IDs are equal)" do
|
55
68
|
e1 = Osm::Event.new(:start => '2000-01-01 01:00:00', :name => 'An event', :id => 1)
|
56
69
|
e2 = Osm::Event.new(:start => '2000-01-02 01:00:00', :name => 'An event', :id => 2)
|
@@ -105,7 +118,7 @@ describe "Event" do
|
|
105
118
|
describe "Using the API" do
|
106
119
|
|
107
120
|
before :each do
|
108
|
-
events_body = {
|
121
|
+
@events_body = {
|
109
122
|
'identifier' => 'eventid',
|
110
123
|
'label' => 'name',
|
111
124
|
'items' => [{
|
@@ -126,10 +139,11 @@ describe "Event" do
|
|
126
139
|
'disablereminders' => '1',
|
127
140
|
'attendancelimit' => '3',
|
128
141
|
'limitincludesleaders' => '1',
|
142
|
+
'allowbooking' => '1',
|
129
143
|
}]
|
130
144
|
}
|
131
145
|
|
132
|
-
event_body = {
|
146
|
+
@event_body = {
|
133
147
|
'eventid' => '2',
|
134
148
|
'name' => 'An Event',
|
135
149
|
'startdate' => '2001-01-02',
|
@@ -152,10 +166,11 @@ describe "Event" do
|
|
152
166
|
'structure' => [],
|
153
167
|
'attendancelimit' => '3',
|
154
168
|
'limitincludesleaders' => '1',
|
169
|
+
'allowbooking' => '1',
|
155
170
|
}
|
156
171
|
|
157
|
-
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/events.php?action=getEvents§ionid=1&showArchived=true", :body => events_body.to_json)
|
158
|
-
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/events.php?action=getEvent§ionid=1&eventid=2", :body => event_body.to_json)
|
172
|
+
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/events.php?action=getEvents§ionid=1&showArchived=true", :body => @events_body.to_json)
|
173
|
+
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/events.php?action=getEvent§ionid=1&eventid=2", :body => @event_body.to_json)
|
159
174
|
|
160
175
|
Osm::Model.stub(:get_user_permissions) { {:events => [:read, :write]} }
|
161
176
|
end
|
@@ -181,12 +196,22 @@ describe "Event" do
|
|
181
196
|
event.reminders.should == false
|
182
197
|
event.attendance_limit.should == 3
|
183
198
|
event.attendance_limit_includes_leaders.should == true
|
199
|
+
event.allow_booking.should == true
|
184
200
|
event.columns[0].id.should == 'f_1'
|
185
201
|
event.columns[0].name.should == 'Name'
|
186
202
|
event.columns[0].label.should == 'Label'
|
187
203
|
event.valid?.should be_true
|
188
204
|
end
|
189
205
|
|
206
|
+
it 'Handles cost of "-1" for TBC' do
|
207
|
+
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/events.php?action=getEvent§ionid=1&eventid=2", :body => @event_body.merge({'cost' => '-1'}).to_json)
|
208
|
+
|
209
|
+
events = Osm::Event.get_for_section(@api, 1)
|
210
|
+
event = events[0]
|
211
|
+
event.cost.should == 'TBC'
|
212
|
+
event.valid?.should be_true
|
213
|
+
end
|
214
|
+
|
190
215
|
it "From cache" do
|
191
216
|
events = Osm::Event.get_for_section(@api, 1)
|
192
217
|
HTTParty.should_not_receive(:post)
|
@@ -349,50 +374,104 @@ describe "Event" do
|
|
349
374
|
|
350
375
|
end
|
351
376
|
|
352
|
-
|
353
|
-
url = 'https://www.onlinescoutmanager.co.uk/events.php?action=addEvent§ionid=1'
|
354
|
-
post_data = {
|
355
|
-
'apiid' => @CONFIGURATION[:api][:osm][:id],
|
356
|
-
'token' => @CONFIGURATION[:api][:osm][:token],
|
357
|
-
'userid' => 'user_id',
|
358
|
-
'secret' => 'secret',
|
359
|
-
'name' => 'Test event',
|
360
|
-
'startdate' => '2000-01-02',
|
361
|
-
'enddate' => '2001-02-03',
|
362
|
-
'starttime' => '03:04:05',
|
363
|
-
'endtime' => '04:05:06',
|
364
|
-
'cost' => '1.23',
|
365
|
-
'location' => 'Somewhere',
|
366
|
-
'notes' => 'none',
|
367
|
-
'confdate' => '2000-01-01',
|
368
|
-
'allowChanges' => 'true',
|
369
|
-
'disablereminders' => 'false',
|
370
|
-
'attendancelimit' => 3,
|
371
|
-
'limitincludesleaders' => true,
|
372
|
-
}
|
377
|
+
describe "Create (succeded)" do
|
373
378
|
|
374
|
-
|
375
|
-
|
379
|
+
it "Normal" do
|
380
|
+
url = 'https://www.onlinescoutmanager.co.uk/events.php?action=addEvent§ionid=1'
|
381
|
+
post_data = {
|
382
|
+
'apiid' => @CONFIGURATION[:api][:osm][:id],
|
383
|
+
'token' => @CONFIGURATION[:api][:osm][:token],
|
384
|
+
'userid' => 'user_id',
|
385
|
+
'secret' => 'secret',
|
386
|
+
'name' => 'Test event',
|
387
|
+
'startdate' => '2000-01-02',
|
388
|
+
'enddate' => '2001-02-03',
|
389
|
+
'starttime' => '03:04:05',
|
390
|
+
'endtime' => '04:05:06',
|
391
|
+
'cost' => '1.23',
|
392
|
+
'location' => 'Somewhere',
|
393
|
+
'notes' => 'none',
|
394
|
+
'confdate' => '2000-01-01',
|
395
|
+
'allowChanges' => 'true',
|
396
|
+
'disablereminders' => 'false',
|
397
|
+
'attendancelimit' => 3,
|
398
|
+
'limitincludesleaders' => 'true',
|
399
|
+
'allowbooking' => 'true',
|
400
|
+
}
|
401
|
+
|
402
|
+
Osm::Event.stub(:get_for_section) { [] }
|
403
|
+
HTTParty.should_receive(:post).with(url, {:body => post_data}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>'{"id":2}'}) }
|
404
|
+
|
405
|
+
event = Osm::Event.create(@api, {
|
406
|
+
:section_id => 1,
|
407
|
+
:name => 'Test event',
|
408
|
+
:start => DateTime.new(2000, 1, 2, 3, 4, 5),
|
409
|
+
:finish => DateTime.new(2001, 2, 3, 4, 5, 6),
|
410
|
+
:cost => '1.23',
|
411
|
+
:location => 'Somewhere',
|
412
|
+
:notes => 'none',
|
413
|
+
:columns => [],
|
414
|
+
:notepad => '',
|
415
|
+
:public_notepad => '',
|
416
|
+
:confirm_by_date => Date.new(2000, 1, 1),
|
417
|
+
:allow_changes => true,
|
418
|
+
:reminders => true,
|
419
|
+
:attendance_limit => 3,
|
420
|
+
:attendance_limit_includes_leaders => true,
|
421
|
+
:allow_booking => true,
|
422
|
+
})
|
423
|
+
event.should_not be_nil
|
424
|
+
event.id.should == 2
|
425
|
+
end
|
426
|
+
|
427
|
+
it "TBC cost" do
|
428
|
+
url = 'https://www.onlinescoutmanager.co.uk/events.php?action=addEvent§ionid=1'
|
429
|
+
post_data = {
|
430
|
+
'apiid' => @CONFIGURATION[:api][:osm][:id],
|
431
|
+
'token' => @CONFIGURATION[:api][:osm][:token],
|
432
|
+
'userid' => 'user_id',
|
433
|
+
'secret' => 'secret',
|
434
|
+
'name' => 'Test event',
|
435
|
+
'startdate' => '2000-01-02',
|
436
|
+
'enddate' => '2001-02-03',
|
437
|
+
'starttime' => '03:04:05',
|
438
|
+
'endtime' => '04:05:06',
|
439
|
+
'cost' => '-1',
|
440
|
+
'location' => 'Somewhere',
|
441
|
+
'notes' => 'none',
|
442
|
+
'confdate' => '2000-01-01',
|
443
|
+
'allowChanges' => 'true',
|
444
|
+
'disablereminders' => 'false',
|
445
|
+
'attendancelimit' => 3,
|
446
|
+
'limitincludesleaders' => 'true',
|
447
|
+
'allowbooking' => 'true',
|
448
|
+
}
|
449
|
+
|
450
|
+
Osm::Event.stub(:get_for_section) { [] }
|
451
|
+
HTTParty.should_receive(:post).with(url, {:body => post_data}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>'{"id":2}'}) }
|
452
|
+
|
453
|
+
event = Osm::Event.create(@api, {
|
454
|
+
:section_id => 1,
|
455
|
+
:name => 'Test event',
|
456
|
+
:start => DateTime.new(2000, 1, 2, 3, 4, 5),
|
457
|
+
:finish => DateTime.new(2001, 2, 3, 4, 5, 6),
|
458
|
+
:cost => 'TBC',
|
459
|
+
:location => 'Somewhere',
|
460
|
+
:notes => 'none',
|
461
|
+
:columns => [],
|
462
|
+
:notepad => '',
|
463
|
+
:public_notepad => '',
|
464
|
+
:confirm_by_date => Date.new(2000, 1, 1),
|
465
|
+
:allow_changes => true,
|
466
|
+
:reminders => true,
|
467
|
+
:attendance_limit => 3,
|
468
|
+
:attendance_limit_includes_leaders => true,
|
469
|
+
:allow_booking => true,
|
470
|
+
})
|
471
|
+
event.should_not be_nil
|
472
|
+
event.id.should == 2
|
473
|
+
end
|
376
474
|
|
377
|
-
event = Osm::Event.create(@api, {
|
378
|
-
:section_id => 1,
|
379
|
-
:name => 'Test event',
|
380
|
-
:start => DateTime.new(2000, 1, 2, 3, 4, 5),
|
381
|
-
:finish => DateTime.new(2001, 2, 3, 4, 5, 6),
|
382
|
-
:cost => '1.23',
|
383
|
-
:location => 'Somewhere',
|
384
|
-
:notes => 'none',
|
385
|
-
:columns => [],
|
386
|
-
:notepad => '',
|
387
|
-
:public_notepad => '',
|
388
|
-
:confirm_by_date => Date.new(2000, 1, 1),
|
389
|
-
:allow_changes => true,
|
390
|
-
:reminders => true,
|
391
|
-
:attendance_limit => 3,
|
392
|
-
:attendance_limit_includes_leaders => true,
|
393
|
-
})
|
394
|
-
event.should_not be_nil
|
395
|
-
event.id.should == 2
|
396
475
|
end
|
397
476
|
|
398
477
|
it "Create (failed)" do
|
@@ -418,53 +497,107 @@ describe "Event" do
|
|
418
497
|
end
|
419
498
|
|
420
499
|
|
421
|
-
|
422
|
-
url = 'https://www.onlinescoutmanager.co.uk/events.php?action=addEvent§ionid=1'
|
423
|
-
post_data = {
|
424
|
-
'apiid' => @CONFIGURATION[:api][:osm][:id],
|
425
|
-
'token' => @CONFIGURATION[:api][:osm][:token],
|
426
|
-
'userid' => 'user_id',
|
427
|
-
'secret' => 'secret',
|
428
|
-
'name' => 'Test event',
|
429
|
-
'startdate' => '2000-01-02',
|
430
|
-
'enddate' => '2001-02-03',
|
431
|
-
'starttime' => '03:04:05',
|
432
|
-
'endtime' => '04:05:06',
|
433
|
-
'cost' => '1.23',
|
434
|
-
'location' => 'Somewhere',
|
435
|
-
'notes' => 'none',
|
436
|
-
'eventid' => 2,
|
437
|
-
'confdate' => '',
|
438
|
-
'allowChanges' => 'true',
|
439
|
-
'disablereminders' => 'false',
|
440
|
-
'attendancelimit' => 3,
|
441
|
-
'limitincludesleaders' => true,
|
442
|
-
}
|
500
|
+
describe "Update (succeded)" do
|
443
501
|
|
444
|
-
|
445
|
-
|
446
|
-
|
502
|
+
it "Normal" do
|
503
|
+
url = 'https://www.onlinescoutmanager.co.uk/events.php?action=addEvent§ionid=1'
|
504
|
+
post_data = {
|
505
|
+
'apiid' => @CONFIGURATION[:api][:osm][:id],
|
506
|
+
'token' => @CONFIGURATION[:api][:osm][:token],
|
507
|
+
'userid' => 'user_id',
|
508
|
+
'secret' => 'secret',
|
509
|
+
'name' => 'Test event',
|
510
|
+
'startdate' => '2000-01-02',
|
511
|
+
'enddate' => '2001-02-03',
|
512
|
+
'starttime' => '03:04:05',
|
513
|
+
'endtime' => '04:05:06',
|
514
|
+
'cost' => '1.23',
|
515
|
+
'location' => 'Somewhere',
|
516
|
+
'notes' => 'none',
|
517
|
+
'eventid' => 2,
|
518
|
+
'confdate' => '',
|
519
|
+
'allowChanges' => 'true',
|
520
|
+
'disablereminders' => 'false',
|
521
|
+
'attendancelimit' => 3,
|
522
|
+
'limitincludesleaders' => 'true',
|
523
|
+
'allowbooking' => 'true',
|
524
|
+
}
|
525
|
+
|
526
|
+
HTTParty.should_receive(:post).with(url, {:body => post_data}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>'{"id":2}'}) }
|
527
|
+
HTTParty.should_receive(:post).with('https://www.onlinescoutmanager.co.uk/events.php?action=saveNotepad§ionid=1', {:body=>{"eventid"=>2, "notepad"=>"notepad", "userid"=>"user_id", "secret"=>"secret", "apiid"=>"1", "token"=>"API TOKEN"}}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>'{}'}) }
|
528
|
+
HTTParty.should_receive(:post).with('https://www.onlinescoutmanager.co.uk/events.php?action=saveNotepad§ionid=1', {:body=>{"eventid"=>2, "pnnotepad"=>"public notepad", "userid"=>"user_id", "secret"=>"secret", "apiid"=>"1", "token"=>"API TOKEN"}}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>'{}'}) }
|
529
|
+
|
530
|
+
event = Osm::Event.new(
|
531
|
+
:section_id => 1,
|
532
|
+
:name => 'Test event',
|
533
|
+
:start => DateTime.new(2000, 01, 02, 03, 04, 05),
|
534
|
+
:finish => DateTime.new(2001, 02, 03, 04, 05, 06),
|
535
|
+
:cost => '1.23',
|
536
|
+
:location => 'Somewhere',
|
537
|
+
:notes => 'none',
|
538
|
+
:id => 2,
|
539
|
+
:confirm_by_date => nil,
|
540
|
+
:allow_changes => true,
|
541
|
+
:reminders => true,
|
542
|
+
:notepad => '',
|
543
|
+
:public_notepad => '',
|
544
|
+
:attendance_limit => 3,
|
545
|
+
:attendance_limit_includes_leaders => true,
|
546
|
+
:allow_booking => true,
|
547
|
+
)
|
548
|
+
event.notepad = 'notepad'
|
549
|
+
event.public_notepad = 'public notepad'
|
550
|
+
event.update(@api).should be_true
|
551
|
+
end
|
552
|
+
|
553
|
+
it "TBC cost" do
|
554
|
+
url = 'https://www.onlinescoutmanager.co.uk/events.php?action=addEvent§ionid=1'
|
555
|
+
post_data = {
|
556
|
+
'apiid' => @CONFIGURATION[:api][:osm][:id],
|
557
|
+
'token' => @CONFIGURATION[:api][:osm][:token],
|
558
|
+
'userid' => 'user_id',
|
559
|
+
'secret' => 'secret',
|
560
|
+
'name' => 'Test event',
|
561
|
+
'startdate' => '2000-01-02',
|
562
|
+
'enddate' => '2001-02-03',
|
563
|
+
'starttime' => '03:04:05',
|
564
|
+
'endtime' => '04:05:06',
|
565
|
+
'cost' => '-1',
|
566
|
+
'location' => 'Somewhere',
|
567
|
+
'notes' => 'none',
|
568
|
+
'eventid' => 2,
|
569
|
+
'confdate' => '',
|
570
|
+
'allowChanges' => 'true',
|
571
|
+
'disablereminders' => 'false',
|
572
|
+
'attendancelimit' => 3,
|
573
|
+
'limitincludesleaders' => 'true',
|
574
|
+
'allowbooking' => 'true',
|
575
|
+
}
|
576
|
+
|
577
|
+
HTTParty.should_receive(:post).with(url, {:body => post_data}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>'{"id":2}'}) }
|
578
|
+
|
579
|
+
event = Osm::Event.new(
|
580
|
+
:section_id => 1,
|
581
|
+
:name => 'Test event',
|
582
|
+
:start => DateTime.new(2000, 01, 02, 03, 04, 05),
|
583
|
+
:finish => DateTime.new(2001, 02, 03, 04, 05, 06),
|
584
|
+
:cost => '1.23',
|
585
|
+
:location => 'Somewhere',
|
586
|
+
:notes => 'none',
|
587
|
+
:id => 2,
|
588
|
+
:confirm_by_date => nil,
|
589
|
+
:allow_changes => true,
|
590
|
+
:reminders => true,
|
591
|
+
:notepad => '',
|
592
|
+
:public_notepad => '',
|
593
|
+
:attendance_limit => 3,
|
594
|
+
:attendance_limit_includes_leaders => true,
|
595
|
+
:allow_booking => true,
|
596
|
+
)
|
597
|
+
event.cost = 'TBC'
|
598
|
+
event.update(@api).should be_true
|
599
|
+
end
|
447
600
|
|
448
|
-
event = Osm::Event.new(
|
449
|
-
:section_id => 1,
|
450
|
-
:name => 'Test event',
|
451
|
-
:start => DateTime.new(2000, 01, 02, 03, 04, 05),
|
452
|
-
:finish => DateTime.new(2001, 02, 03, 04, 05, 06),
|
453
|
-
:cost => '1.23',
|
454
|
-
:location => 'Somewhere',
|
455
|
-
:notes => 'none',
|
456
|
-
:id => 2,
|
457
|
-
:confirm_by_date => nil,
|
458
|
-
:allow_changes => true,
|
459
|
-
:reminders => true,
|
460
|
-
:notepad => '',
|
461
|
-
:public_notepad => '',
|
462
|
-
:attendance_limit => 3,
|
463
|
-
:attendance_limit_includes_leaders => true,
|
464
|
-
)
|
465
|
-
event.notepad = 'notepad'
|
466
|
-
event.public_notepad = 'public notepad'
|
467
|
-
event.update(@api).should be_true
|
468
601
|
end
|
469
602
|
|
470
603
|
it "Update (failed)" do
|
data/spec/osm/register_spec.rb
CHANGED
@@ -36,8 +36,8 @@ describe "Register" do
|
|
36
36
|
:grouping_id => '3',
|
37
37
|
:total => 4,
|
38
38
|
:attendance => {
|
39
|
-
Date.new(2012, 1, 10) =>
|
40
|
-
Date.new(2012, 1, 24) =>
|
39
|
+
Date.new(2012, 1, 10) => :yes,
|
40
|
+
Date.new(2012, 1, 24) => :unadvised_absent,
|
41
41
|
}
|
42
42
|
)
|
43
43
|
|
@@ -48,8 +48,8 @@ describe "Register" do
|
|
48
48
|
rd.last_name.should == 'B'
|
49
49
|
rd.total.should == 4
|
50
50
|
rd.attendance.should == {
|
51
|
-
Date.new(2012, 01, 10) =>
|
52
|
-
Date.new(2012, 01, 24) =>
|
51
|
+
Date.new(2012, 01, 10) => :yes,
|
52
|
+
Date.new(2012, 01, 24) => :unadvised_absent
|
53
53
|
}
|
54
54
|
rd.valid?.should be_true
|
55
55
|
end
|
@@ -65,6 +65,20 @@ describe "Register" do
|
|
65
65
|
data.sort.should == [d1, d2, d3, d4, d5]
|
66
66
|
end
|
67
67
|
|
68
|
+
it "Reports if a member was present on a date" do
|
69
|
+
date = Date.new(2000, 1, 1)
|
70
|
+
Osm::Register::Attendance.new(:attendance => {date => :yes}).present_on?(date).should be_true
|
71
|
+
Osm::Register::Attendance.new(:attendance => {date => :known_absent}).present_on?(date).should be_false
|
72
|
+
Osm::Register::Attendance.new(:attendance => {date => :unknown_absent}).present_on?(date).should be_false
|
73
|
+
end
|
74
|
+
|
75
|
+
it "Reports if a member was absent on a date" do
|
76
|
+
date = Date.new(2000, 1, 1)
|
77
|
+
Osm::Register::Attendance.new(:attendance => {date => :yes}).absent_on?(date).should be_false
|
78
|
+
Osm::Register::Attendance.new(:attendance => {date => :known_absent}).absent_on?(date).should be_true
|
79
|
+
Osm::Register::Attendance.new(:attendance => {date => :unknown_absent}).absent_on?(date).should be_true
|
80
|
+
end
|
81
|
+
|
68
82
|
|
69
83
|
describe "Using the API" do
|
70
84
|
|
@@ -96,14 +110,20 @@ describe "Register" do
|
|
96
110
|
]
|
97
111
|
}
|
98
112
|
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/users.php?action=register§ionid=1&termid=2", :body => data.to_json)
|
113
|
+
Osm::Register.stub(:get_structure) { [
|
114
|
+
Osm::Register::Field.new(:id => '2000-01-01', :name => 'Name', :tooltip => 'Tooltip'),
|
115
|
+
Osm::Register::Field.new(:id => '2000-01-02', :name => 'Name', :tooltip => 'Tooltip'),
|
116
|
+
Osm::Register::Field.new(:id => '2000-01-03', :name => 'Name', :tooltip => 'Tooltip'),
|
117
|
+
] }
|
99
118
|
|
100
119
|
register = Osm::Register.get_attendance(@api, 1, 2)
|
101
120
|
register.is_a?(Array).should be_true
|
102
121
|
register.size.should == 1
|
103
122
|
reg = register[0]
|
104
123
|
reg.attendance.should == {
|
105
|
-
Date.new(2000, 1, 1) =>
|
106
|
-
Date.new(2000, 1, 2) =>
|
124
|
+
Date.new(2000, 1, 1) => :yes,
|
125
|
+
Date.new(2000, 1, 2) => :advised_absent,
|
126
|
+
Date.new(2000, 1, 3) => :unadvised_absent,
|
107
127
|
}
|
108
128
|
reg.first_name.should == 'First'
|
109
129
|
reg.last_name.should == 'Last'
|
@@ -135,7 +155,7 @@ describe "Register" do
|
|
135
155
|
:section => Osm::Section.new(:id=>1, :type=>:cubs),
|
136
156
|
:term => 2,
|
137
157
|
:evening => Date.new(2000, 1, 2),
|
138
|
-
:attendance =>
|
158
|
+
:attendance => :yes,
|
139
159
|
:members => 3,
|
140
160
|
:completed_badge_requirements => [{'a'=>'A'}, {'b'=>'B'}]
|
141
161
|
}).should be_true
|
@@ -163,6 +183,7 @@ describe "Register" do
|
|
163
183
|
]
|
164
184
|
}
|
165
185
|
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/users.php?action=register§ionid=1&termid=2", :body => data.to_json)
|
186
|
+
Osm::Register.stub(:get_structure) { [] }
|
166
187
|
|
167
188
|
register = Osm::Register.get_attendance(@api, 1, 2)
|
168
189
|
register.is_a?(Array).should be_true
|
@@ -172,7 +193,7 @@ describe "Register" do
|
|
172
193
|
reg.last_name.should == 'Last'
|
173
194
|
end
|
174
195
|
|
175
|
-
it "Handles no data" do
|
196
|
+
it "Handles no data getting structure" do
|
176
197
|
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/users.php?action=registerStructure§ionid=1&termid=2", :body => '')
|
177
198
|
register_structure = Osm::Register.get_structure(@api, 1, 2)
|
178
199
|
register_structure.is_a?(Array).should be_true
|
data/spec/osm/section_spec.rb
CHANGED
@@ -33,6 +33,7 @@ describe "Section" do
|
|
33
33
|
:myscout_email_address_copy => '',
|
34
34
|
:myscout_badges_partial => true,
|
35
35
|
:myscout_programme_summary => true,
|
36
|
+
:myscout_programme_times => true,
|
36
37
|
:myscout_event_reminder_count => 4,
|
37
38
|
:myscout_event_reminder_frequency => 5,
|
38
39
|
:myscout_payment_reminder_count => 6,
|
@@ -69,6 +70,7 @@ describe "Section" do
|
|
69
70
|
section.myscout_email_address_copy.should == ''
|
70
71
|
section.myscout_badges_partial.should == true
|
71
72
|
section.myscout_programme_summary.should == true
|
73
|
+
section.myscout_programme_times.should == true
|
72
74
|
section.myscout_event_reminder_count.should == 4
|
73
75
|
section.myscout_event_reminder_frequency.should == 5
|
74
76
|
section.myscout_payment_reminder_count.should == 6
|
@@ -97,7 +99,7 @@ describe "Section" do
|
|
97
99
|
|
98
100
|
before :each do
|
99
101
|
body = [
|
100
|
-
{"sectionConfig"=>"{\"subscription_level\":1,\"subscription_expires\":\"2013-01-05\",\"sectionType\":\"beavers\",\"columnNames\":{\"column_names\":\"names\"},\"numscouts\":10,\"hasUsedBadgeRecords\":true,\"hasProgramme\":true,\"extraRecords\":[{\"name\":\"Flexi Record 1\",\"extraid\":\"111\"}],\"wizard\":\"false\",\"fields\":{\"fields\":true},\"intouch\":{\"intouch_fields\":true},\"mobFields\":{\"mobile_fields\":true},\"gocardless\":\"true\",\"portal\":{\"paymentRemindFrequency\":\"7\",\"paymentRemindCount\":\"6\",\"eventRemindFrequency\":\"5\",\"eventRemindCount\":\"4\",\"badgesPartial\":1,\"programmeSummary\":1,\"emailAddress\":\"send_from@example.com\",\"emailAddressCopy\":null,\"payments\":1,\"badges\":1,\"emails\":{\"email1\":\"true\",\"email2\":\"false\"},\"events\":1,\"programme\":1},\"portalExpires\":{\"events\":\"2013-01-06\",\"eventsA\":1,\"badges\":\"2013-01-07\",\"badgesA\":1,\"programme\":\"2013-01-08\",\"programmeA\":1}}", "groupname"=>"3rd Somewhere", "groupid"=>"3", "groupNormalised"=>"1", "sectionid"=>"1", "sectionname"=>"Section 1", "section"=>"beavers", "isDefault"=>"1", "permissions"=>{"badge"=>10, "member"=>20, "user"=>100, "register"=>100, "contact"=>100, "programme"=>100, "originator"=>1, "events"=>100, "finance"=>100, "flexi"=>100}},
|
102
|
+
{"sectionConfig"=>"{\"subscription_level\":1,\"subscription_expires\":\"2013-01-05\",\"sectionType\":\"beavers\",\"columnNames\":{\"column_names\":\"names\"},\"numscouts\":10,\"hasUsedBadgeRecords\":true,\"hasProgramme\":true,\"extraRecords\":[{\"name\":\"Flexi Record 1\",\"extraid\":\"111\"}],\"wizard\":\"false\",\"fields\":{\"fields\":true},\"intouch\":{\"intouch_fields\":true},\"mobFields\":{\"mobile_fields\":true},\"gocardless\":\"true\",\"portal\":{\"paymentRemindFrequency\":\"7\",\"paymentRemindCount\":\"6\",\"eventRemindFrequency\":\"5\",\"eventRemindCount\":\"4\",\"badgesPartial\":1,\"programmeTimes\":1,\"programmeSummary\":1,\"emailAddress\":\"send_from@example.com\",\"emailAddressCopy\":null,\"payments\":1,\"badges\":1,\"emails\":{\"email1\":\"true\",\"email2\":\"false\"},\"events\":1,\"programme\":1},\"portalExpires\":{\"events\":\"2013-01-06\",\"eventsA\":1,\"badges\":\"2013-01-07\",\"badgesA\":1,\"programme\":\"2013-01-08\",\"programmeA\":1}}", "groupname"=>"3rd Somewhere", "groupid"=>"3", "groupNormalised"=>"1", "sectionid"=>"1", "sectionname"=>"Section 1", "section"=>"beavers", "isDefault"=>"1", "permissions"=>{"badge"=>10, "member"=>20, "user"=>100, "register"=>100, "contact"=>100, "programme"=>100, "originator"=>1, "events"=>100, "finance"=>100, "flexi"=>100}},
|
101
103
|
{"sectionConfig"=>"{\"subscription_level\":3,\"subscription_expires\":\"2013-01-05\",\"sectionType\":\"cubs\",\"columnNames\":{\"phone1\":\"Home Phone\",\"phone2\":\"Parent 1 Phone\",\"address\":\"Member's Address\",\"phone3\":\"Parent 2 Phone\",\"address2\":\"Address 2\",\"phone4\":\"Alternate Contact Phone\",\"subs\":\"Gender\",\"email1\":\"Parent 1 Email\",\"medical\":\"Medical / Dietary\",\"email2\":\"Parent 2 Email\",\"ethnicity\":\"Gift Aid\",\"email3\":\"Member's Email\",\"religion\":\"Religion\",\"email4\":\"Email 4\",\"school\":\"School\"},\"numscouts\":10,\"hasUsedBadgeRecords\":true,\"hasProgramme\":true,\"extraRecords\":[],\"wizard\":\"false\",\"fields\":{\"email1\":true,\"email2\":true,\"email3\":true,\"email4\":false,\"address\":true,\"address2\":false,\"phone1\":true,\"phone2\":true,\"phone3\":true,\"phone4\":true,\"school\":false,\"religion\":true,\"ethnicity\":true,\"medical\":true,\"patrol\":true,\"subs\":true,\"saved\":true},\"intouch\":{\"address\":true,\"address2\":false,\"email1\":false,\"email2\":false,\"email3\":false,\"email4\":false,\"phone1\":true,\"phone2\":true,\"phone3\":true,\"phone4\":true,\"medical\":false},\"mobFields\":{\"email1\":false,\"email2\":false,\"email3\":false,\"email4\":false,\"address\":true,\"address2\":false,\"phone1\":true,\"phone2\":true,\"phone3\":true,\"phone4\":true,\"school\":false,\"religion\":false,\"ethnicity\":true,\"medical\":true,\"patrol\":true,\"subs\":false}}", "groupname"=>"1st Somewhere", "groupid"=>"1", "groupNormalised"=>"1", "sectionid"=>"2", "sectionname"=>"Section 2", "section"=>"cubs", "isDefault"=>"0", "permissions"=>{"badge"=>100, "member"=>100, "user"=>100, "register"=>100, "contact"=>100, "programme"=>100, "originator"=>1, "events"=>100, "finance"=>100, "flexi"=>100}}
|
102
104
|
]
|
103
105
|
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/api.php?action=getUserRoles", :body => body.to_json)
|
@@ -136,6 +138,7 @@ describe "Section" do
|
|
136
138
|
section.myscout_email_address_copy.should == ''
|
137
139
|
section.myscout_badges_partial.should == true
|
138
140
|
section.myscout_programme_summary.should == true
|
141
|
+
section.myscout_programme_times.should == true
|
139
142
|
section.myscout_event_reminder_count.should == 4
|
140
143
|
section.myscout_event_reminder_frequency.should == 5
|
141
144
|
section.myscout_payment_reminder_count.should == 6
|
data/version.rb
CHANGED
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: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-03-
|
12
|
+
date: 2013-03-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|