osm 0.1.10 → 0.1.11

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -1,3 +1,35 @@
1
+ ## Version 0.0.11
2
+
3
+ * Fix "can't convert Hash into String" occuring when some section's config is a Hash not a JSON encoded Hash
4
+ * Remove num\_scouts attribute from Section (OSM always sets this to 999)
5
+ * Add My.SCOUT related attributes to Section:
6
+ * gocardless (Boolean) - does the section use gocardless
7
+ * myscout\_events\_expires (Date) - when the subscription to Events in My.SCOUT expires
8
+ * myscout\_badges\_expires (Date) - when the subscription to Badges in My.SCOUT expires
9
+ * myscout\_programme\_expires (Date) - when the subscription to Badges in My.SCOUT expires
10
+ * myscout\_events (Boolean) - whether the section uses the Events part of My.SCOUT
11
+ * myscout\_badges (Boolean) - whether the section uses the Badges part of My.SCOUT
12
+ * myscout\_programme (Boolean) - whether the section uses the Programme part of My.SCOUT
13
+ * myscout\_payments (Boolean) - whether the section uses the Payments part of My.SCOUT
14
+ * myscout\_emails (Hash of Symbol to Boolean) - which email addresses are linked to MyScout for each Member
15
+ * myscout\_email\_address\_send (String, blank OK) - which email address to send My.SCOUT emails as
16
+ * myscout\_email\_address\_copy (String, blank OK) - which email address to send copys of My.SCOUT emails to
17
+ * myscout\_badges\_partial (Boolean) - Wether parents can see partially completed badges
18
+ * myscout\_programme\_summary (Boolean) - Wether parents can see the summary of programme items
19
+ * myscout\_event\_reminder\_count (Integer) - How many event reminders to send to parents who haven't responded
20
+ * myscout\_event\_reminder\_frequency (Integer) - How many days to leave between event reminder emails
21
+ * myscout\_payment\_reminder\_count (Integer) - How many payment reminders to send to parents who haven't paid yet
22
+ * myscout\_payment\_reminder\_frequency (Integer) - How many days to leave between payment reminder emails
23
+ * Add new OSM attributes to Event:
24
+ * notepad - the notepad shown in OSM
25
+ * public\_notepad - the notepad shown on My.SCOUT
26
+ * confirm\_by\_date - the last day that parents can change their child's attendance details
27
+ * allow\_changes - wether parents can change their child's attendance details
28
+ * reminders - wether reminder emails are sent
29
+ * Osm::Event
30
+ * Mark fields attribute as depricated
31
+ * Add columns attribute returning an array of column details
32
+
1
33
  ## Version 0.1.10
2
34
 
3
35
  * Fix 'undefined variable' when getting an event's attendance without passing a term.
data/README.md CHANGED
@@ -118,6 +118,9 @@ however it should be noted that when the OSM API adds a feature it can be diffic
118
118
 
119
119
  ## Parts of the OSM API currently NOT supported:
120
120
 
121
+ * Event Fields:
122
+ * Delete [issue 45]
123
+ * Rename [issue 46]
121
124
  * Badges:
122
125
  * Which requirements each member has met:
123
126
  * Retreive [issue 21]
@@ -137,3 +140,4 @@ however it should be noted that when the OSM API adds a feature it can be diffic
137
140
  * SMS:
138
141
  * Retreival of delivery reports
139
142
  * Sending a message
143
+ * MyScout
data/lib/osm/event.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  module Osm
2
2
 
3
3
  class Event < Osm::Model
4
+ class Column; end # Ensure the constant exists for the validators
4
5
 
5
6
  # @!attribute [rw] id
6
7
  # @return [Fixnum] the id for the event
@@ -21,7 +22,20 @@ module Osm
21
22
  # @!attribute [rw] archived
22
23
  # @return [Boolean] if the event has been archived
23
24
  # @!attribute [rw] fields
25
+ # @deprecated use columns instead
24
26
  # @return [Hash] Keys are the field's id, values are the field names
27
+ # @!attribute [rw] columns
28
+ # @return [Array<Osm::Event::Column>] the custom columns for the event
29
+ # @!attribute [rw] notepad
30
+ # @return [String] notepad for the event
31
+ # @!attribute [rw] public_notepad
32
+ # @return [String] public notepad (shown in My.SCOUT) for the event
33
+ # @!attribute [rw] confirm_by_date
34
+ # @return [Date] the date parents can no longer add/change their child's details
35
+ # @!attribute [rw] allow_changes
36
+ # @return [Boolean] wether parent's can change their child's details
37
+ # @!attribute [rw] reminders
38
+ # @return [Boolean] wether email reminders are sent for the event
25
39
 
26
40
  attribute :id, :type => Integer
27
41
  attribute :section_id, :type => Integer
@@ -32,18 +46,27 @@ module Osm
32
46
  attribute :location, :type => String, :default => ''
33
47
  attribute :notes, :type => String, :default => ''
34
48
  attribute :archived, :type => Boolean, :default => false
35
- attribute :fields, :default => {}
49
+ attribute :columns, :default => []
50
+ attribute :notepad, :type => String, :default => ''
51
+ attribute :public_notepad, :type => String, :default => ''
52
+ attribute :confirm_by_date, :type => Date
53
+ attribute :allow_changes, :type => Boolean, :default => false
54
+ attribute :reminders, :type => Boolean, :default => true
36
55
 
37
- attr_accessible :id, :section_id, :name, :start, :finish, :cost, :location, :notes, :archived, :fields
56
+ attr_accessible :id, :section_id, :name, :start, :finish, :cost, :location, :notes, :archived,
57
+ :fields, :columns, :notepad, :public_notepad,
58
+ :confirm_by_date, :allow_changes, :reminders
38
59
 
39
60
  validates_numericality_of :id, :only_integer=>true, :greater_than=>0, :allow_nil => true
40
61
  validates_numericality_of :section_id, :only_integer=>true, :greater_than=>0
41
62
  validates_presence_of :name
42
- validates :fields, :hash => {:key_type => String, :value_type => String}
63
+ validates :columns, :array_of => {:item_type => Osm::Event::Column, :item_valid => true}
64
+ validates_inclusion_of :allow_changes, :in => [true, false]
65
+ validates_inclusion_of :reminders, :in => [true, false]
43
66
 
44
67
 
45
68
  # @!method initialize
46
- # Initialize a new Term
69
+ # Initialize a new Event
47
70
  # @param [Hash] attributes the hash of attributes (see attributes for descriptions, use Symbol of attribute name as the key)
48
71
 
49
72
 
@@ -66,26 +89,9 @@ module Osm
66
89
 
67
90
  events = Array.new
68
91
  unless data['items'].nil?
69
- data['items'].each do |item|
70
- event_id = Osm::to_i_or_nil(item['eventid'])
71
- fields_data = api.perform_query("events.php?action=getEvent&sectionid=#{section_id}&eventid=#{event_id}")
72
- fields = {}
73
- ActiveSupport::JSON.decode(fields_data['config']).each do |field|
74
- fields[field['id']] = field['name']
75
- end
76
-
77
- event = Osm::Event.new(
78
- :id => event_id,
79
- :section_id => Osm::to_i_or_nil(item['sectionid']),
80
- :name => item['name'],
81
- :start => Osm::make_datetime(item['startdate'], item['starttime']),
82
- :finish => Osm::make_datetime(item['enddate'], item['endtime']),
83
- :cost => item['cost'],
84
- :location => item['location'],
85
- :notes => item['notes'],
86
- :archived => item['archived'].eql?('1'),
87
- :fields => fields,
88
- )
92
+ data['items'].map { |i| i['eventid'].to_i }.each do |event_id|
93
+ event_data = api.perform_query("events.php?action=getEvent&sectionid=#{section_id}&eventid=#{event_id}")
94
+ event = self.new_event_from_data(event_data)
89
95
  events.push event
90
96
  cache_write(api, ['event', event.id], event)
91
97
  end
@@ -113,14 +119,8 @@ module Osm
113
119
  return cache_read(api, cache_key)
114
120
  end
115
121
 
116
- events = get_for_section(api, section, options)
117
- return nil unless events.is_a? Array
118
-
119
- events.each do |event|
120
- return event if event.id == event_id
121
- end
122
-
123
- return nil
122
+ event_data = api.perform_query("events.php?action=getEvent&sectionid=#{section_id}&eventid=#{event_id}")
123
+ return self.new_event_from_data(event_data)
124
124
  end
125
125
 
126
126
 
@@ -141,6 +141,9 @@ module Osm
141
141
  'notes' => event.notes,
142
142
  'starttime' => event.start? ? event.start.strftime(Osm::OSM_TIME_FORMAT) : '',
143
143
  'endtime' => event.finish? ? event.finish.strftime(Osm::OSM_TIME_FORMAT) : '',
144
+ 'confdate' => event.confirm_by_date? ? event.confirm_by_date.strftime(Osm::OSM_DATE_FORMAT) : '',
145
+ 'allowChanges' => event.allow_changes ? 'true' : 'false',
146
+ 'disablereminders' => !event.reminders ? 'true' : 'false',
144
147
  })
145
148
 
146
149
  # The cached events for the section will be out of date - remove them
@@ -171,6 +174,17 @@ module Osm
171
174
  'notes' => notes,
172
175
  'starttime' => start? ? start.strftime(Osm::OSM_TIME_FORMAT) : '',
173
176
  'endtime' => finish? ? finish.strftime(Osm::OSM_TIME_FORMAT) : '',
177
+ 'confdate' => confirm_by_date? ? confirm_by_date.strftime(Osm::OSM_DATE_FORMAT) : '',
178
+ 'allowChanges' => allow_changes ? 'true' : 'false',
179
+ 'disablereminders' => !reminders ? 'true' : 'false',
180
+ })
181
+ api.perform_query("events.php?action=saveNotepad&sectionid=#{section_id}", {
182
+ 'eventid' => id,
183
+ 'notepad' => notepad,
184
+ })
185
+ api.perform_query("events.php?action=saveNotepad&sectionid=#{section_id}", {
186
+ 'eventid' => id,
187
+ 'pnnotepad' => public_notepad,
174
188
  })
175
189
 
176
190
  # The cached events for the section will be out of date - remove them
@@ -236,16 +250,44 @@ module Osm
236
250
  end
237
251
 
238
252
 
253
+ # Add a column to the event in OSM
254
+ # @param [Osm::Api] api The api to use to make the request
255
+ # @param [String] label the label for the field in OSM
256
+ # @param [String] name the label for the field in My.SCOUT (if this is blank then parents can't edit it)
257
+ # @return [Boolean] wether the update succedded
258
+ def add_column(api, name, label='')
259
+ raise ArgumentIsInvalid, 'name is invalid' if name.blank?
260
+ raise Forbidden, 'you do not have permission to write to events for this section' unless get_user_permission(api, section_id, :events).include?(:write)
261
+
262
+ data = api.perform_query("events.php?action=addColumn&sectionid=#{section_id}&eventid=#{id}", {
263
+ 'columnName' => name,
264
+ 'parentLabel' => label
265
+ })
266
+
267
+ # The cached events for the section will be out of date - remove them
268
+ cache_delete(api, ['events', section_id])
269
+ cache_delete(api, ['event', id])
270
+ cache_delete(api, ['event_attendance', id])
271
+
272
+ self.columns = self.class.new_event_from_data(data).columns
273
+
274
+ return data.is_a?(Hash) && (data['eventid'].to_i == id)
275
+ end
276
+
239
277
  # Add a field in OSM
278
+ # @deprecated use add_column instead
240
279
  # @param [Osm::Api] api The api to use to make the request
241
280
  # @param [String] field_label the label for the field to add
242
281
  # @return [Boolean] wether the update succedded
282
+ # TODO - Remove this method when upping the version
243
283
  def add_field(api, label)
284
+ warn "[DEPRECATION OF METHOD] this method is being depreiated, use add_column instead"
244
285
  raise ArgumentIsInvalid, 'label is invalid' if label.blank?
245
286
  raise Forbidden, 'you do not have permission to write to events for this section' unless get_user_permission(api, section_id, :events).include?(:write)
246
287
 
247
288
  data = api.perform_query("events.php?action=addColumn&sectionid=#{section_id}&eventid=#{id}", {
248
- 'columnName' => label
289
+ 'columnName' => label,
290
+ 'parentLabel' => ''
249
291
  })
250
292
 
251
293
  # The cached events for the section will be out of date - remove them
@@ -257,6 +299,70 @@ module Osm
257
299
  end
258
300
 
259
301
 
302
+ # TODO - Remove this attribute when upping the version
303
+ def fields
304
+ warn "[DEPRECATION OF ATTRIBUTE] this attribute is being depreiated, in favor of returning an array of Field objects."
305
+ return columns.inject({}){ |h,(c)| h[c.id] = c.name; h}
306
+ end
307
+ def fields=(value)
308
+ raise "[DEPRECATION OF ATTRIBUTE] this attribute is being depreiated, in favor of returning an array of Field objects."
309
+ end
310
+
311
+
312
+ private
313
+ def self.new_event_from_data(event_data)
314
+ columns = []
315
+ ActiveSupport::JSON.decode(event_data['config']).each do |field|
316
+ columns.push Column.new(:id => field['id'], :name => field['name'], :parent_label => field['pL'])
317
+ end
318
+
319
+ event = Osm::Event.new(
320
+ :id => Osm::to_i_or_nil(event_data['eventid']),
321
+ :section_id => Osm::to_i_or_nil(event_data['sectionid']),
322
+ :name => event_data['name'],
323
+ :start => Osm::make_datetime(event_data['startdate'], event_data['starttime']),
324
+ :finish => Osm::make_datetime(event_data['enddate'], event_data['endtime']),
325
+ :cost => event_data['cost'],
326
+ :location => event_data['location'],
327
+ :notes => event_data['notes'],
328
+ :archived => event_data['archived'].eql?('1'),
329
+ :columns => columns,
330
+ :notepad => event_data['notepad'],
331
+ :public_notepad => event_data['publicnotes'],
332
+ :confirm_by_date => Osm::parse_date(event_data['confdate']),
333
+ :allow_changes => event_data['allowchanges'].eql?('1'),
334
+ :reminders => !event_data['disablereminders'].eql?('1'),
335
+ )
336
+ end
337
+
338
+
339
+ class Column
340
+ include ::ActiveAttr::MassAssignmentSecurity
341
+ include ::ActiveAttr::Model
342
+
343
+ # @!attribute [rw] id
344
+ # @return [String] OSM id for the column
345
+ # @!attribute [rw] name
346
+ # @return [String] name for the column (displayed in OSM)
347
+ # @!attribute [rw] parent_label
348
+ # @return [String] label to display in My.SCOUT ("" prevents display in My.SCOUT)
349
+
350
+ attribute :id, :type => String
351
+ attribute :name, :type => String
352
+ attribute :parent_label, :type => String, :default => ''
353
+
354
+ attr_accessible :id, :name, :parent_label
355
+
356
+ validates_presence_of :id
357
+ validates_presence_of :name
358
+
359
+
360
+ # @!method initialize
361
+ # Initialize a new Column
362
+ # @param [Hash] attributes the hash of attributes (see attributes for descriptions, use Symbol of attribute name as the key)
363
+
364
+ end # class Column
365
+
260
366
 
261
367
  class Attendance
262
368
  include ::ActiveAttr::MassAssignmentSecurity
@@ -289,7 +395,7 @@ module Osm
289
395
 
290
396
 
291
397
  # @!method initialize
292
- # Initialize a new FlexiRecordData
398
+ # Initialize a new Attendance
293
399
  # @param [Hash] attributes the hash of attributes (see attributes for descriptions, use Symbol of attribute name as the key)
294
400
 
295
401
 
data/lib/osm/section.rb CHANGED
@@ -17,8 +17,6 @@ module Osm
17
17
  # @return [Date] when the section's subscription to OSM expires
18
18
  # @!attribute [rw] type
19
19
  # @return [Symbol] the section type (:beavers, :cubs, :scouts, :exporers, :adults, :waiting, :unknown)
20
- # @!attribute [rw] num_scouts
21
- # @return [Fixnum] how many members the section has
22
20
  # @!attribute [rw] column_names
23
21
  # @return [Hash] custom names to use for the data columns
24
22
  # @!attribute [rw] fields
@@ -29,6 +27,40 @@ module Osm
29
27
  # @return [Hash] which columns are shown in the OSM mobile app
30
28
  # @!attribute [rw] flexi_records
31
29
  # @return [Array<FlexiRecord>] list of the extra records the section has
30
+ # @!attribute [rw] gocardless
31
+ # @return [Boolean] does the section use gocardless
32
+ # @!attribute [rw] myscout_events_expires
33
+ # @return [Date] when the subscription to Events in My.SCOUT expires
34
+ # @!attribute [rw] myscout_badges_expires
35
+ # @return [Date] when the subscription to Badges in My.SCOUT expires
36
+ # @!attribute [rw] myscout_programme_expires
37
+ # @return [Date] when the subscription to Badges in My.SCOUT expires
38
+ # @!attribute [rw] myscout_events
39
+ # @return [Boolean] whether the section uses the Events part of My.SCOUT
40
+ # @!attribute [rw] myscout_badges
41
+ # @return [Boolean] whether the section uses the Badges part of My.SCOUT
42
+ # @!attribute [rw] myscout_programme
43
+ # @return [Boolean] whether the section uses the Programme part of My.SCOUT
44
+ # @!attribute [rw] myscout_payments
45
+ # @return [Boolean] whether the section uses the Payments part of My.SCOUT
46
+ # @!attribute [rw] myscout_emails
47
+ # @return [Hash of Symbol to Boolean] which email addresses are linked to MyScout for each Member
48
+ # @!attribute [rw] myscout_email_address_send
49
+ # @return [String] which email address to send My.SCOUT emails as
50
+ # @!attribute [rw] myscout_email_address_copy
51
+ # @return [String] which email address to send copys of My.SCOUT emails to
52
+ # @!attribute [rw] myscout_badges_partial
53
+ # @return [Boolean] Wether parents can see partially completed badges
54
+ # @!attribute [rw] myscout_programme_summary
55
+ # @return [Boolean] Wether parents can see summary of programme items
56
+ # @!attribute [rw] myscout_event_reminder_count
57
+ # @return [Fixnum] How many event reminders to send to parents who haven't responded
58
+ # @!attribute [rw] myscout_event_reminder_frequency
59
+ # @return [Fixnum] How many days to leave between event reminder emails
60
+ # @!attribute [rw] myscout_payment_reminder_count
61
+ # @return [Fixnum] How many payment reminders to send to parents who haven't paid yet
62
+ # @!attribute [rw] myscout_payment_reminder_frequency
63
+ # @return [Fixnum] How many days to leave between payment reminder emails
32
64
 
33
65
  attribute :id, :type => Integer
34
66
  attribute :name, :type => String
@@ -37,19 +69,46 @@ module Osm
37
69
  attribute :subscription_level, :default => :unknown
38
70
  attribute :subscription_expires, :type => Date
39
71
  attribute :type, :default => :unknown
40
- attribute :num_scouts, :type => Integer
41
72
  attribute :column_names, :default => {}
42
73
  attribute :fields, :default => {}
43
74
  attribute :intouch_fields, :default => {}
44
75
  attribute :mobile_fields, :default => {}
45
76
  attribute :flexi_records, :default => []
46
-
47
- attr_accessible :id, :name, :group_id, :group_name, :subscription_level, :subscription_expires, :type,
48
- :num_scouts, :column_names, :fields, :intouch_fields, :mobile_fields, :flexi_records
77
+ attribute :gocardless, :type => Boolean
78
+ attribute :myscout_events_expires, :type => Date
79
+ attribute :myscout_badges_expires, :type => Date
80
+ attribute :myscout_programme_expires, :type => Date
81
+ attribute :myscout_events, :type => Boolean
82
+ attribute :myscout_badges, :type => Boolean
83
+ attribute :myscout_programme, :type => Boolean
84
+ attribute :myscout_payments, :type => Boolean
85
+ attribute :myscout_emails, :default => {}# (Hash of Symbol to Boolean)
86
+ attribute :myscout_email_address_send, :type => String#, blank OK)
87
+ attribute :myscout_email_address_copy, :type => String#, blank OK)
88
+ attribute :myscout_badges_partial, :type => Boolean
89
+ attribute :myscout_programme_summary, :type => Boolean
90
+ attribute :myscout_event_reminder_count, :type => Integer
91
+ attribute :myscout_event_reminder_frequency, :type => Integer
92
+ attribute :myscout_payment_reminder_count, :type => Integer
93
+ attribute :myscout_payment_reminder_frequency, :type => Integer
94
+
95
+ attr_accessible :id, :name, :group_id, :group_name, :subscription_level, :subscription_expires,
96
+ :type, :column_names, :fields, :intouch_fields, :mobile_fields, :flexi_records,
97
+ :gocardless, :myscout_events_expires, :myscout_badges_expires,
98
+ :myscout_programme_expires, :myscout_events, :myscout_badges,
99
+ :myscout_programme, :myscout_payments, :myscout_emails,
100
+ :myscout_email_address_send, :myscout_email_address_copy,
101
+ :myscout_badges_partial, :myscout_programme_summary,
102
+ :myscout_event_reminder_count, :myscout_event_reminder_frequency,
103
+ :myscout_payment_reminder_count, :myscout_payment_reminder_frequency
49
104
 
50
105
  validates_numericality_of :id, :only_integer=>true, :greater_than=>0, :allow_nil => true
51
106
  validates_numericality_of :group_id, :only_integer=>true, :greater_than=>0, :allow_nil => true
52
- validates_numericality_of :num_scouts, :only_integer=>true, :greater_than_or_equal_to=>0
107
+ validates_numericality_of :myscout_event_reminder_count, :only_integer=>true, :greater_than_or_equal_to=>-1
108
+ validates_numericality_of :myscout_event_reminder_frequency, :only_integer=>true, :greater_than_or_equal_to=>-1
109
+ validates_numericality_of :myscout_payment_reminder_count, :only_integer=>true, :greater_than_or_equal_to=>-1
110
+ validates_numericality_of :myscout_payment_reminder_frequency, :only_integer=>true, :greater_than_or_equal_to=>-1
111
+
53
112
  validates_presence_of :name
54
113
  validates_presence_of :group_name
55
114
  validates_presence_of :subscription_level
@@ -62,11 +121,19 @@ module Osm
62
121
  validates_presence_of :flexi_records, :unless => Proc.new { |a| a.flexi_records == [] }
63
122
 
64
123
  validates_inclusion_of :subscription_level, :in => [:bronze, :silver, :gold, :unknown], :message => 'is not a valid level'
124
+ validates_inclusion_of :gocardless, :in => [true, false]
125
+ validates_inclusion_of :myscout_events, :in => [true, false]
126
+ validates_inclusion_of :myscout_badges, :in => [true, false]
127
+ validates_inclusion_of :myscout_programme, :in => [true, false]
128
+ validates_inclusion_of :myscout_payments, :in => [true, false]
129
+ validates_inclusion_of :myscout_badges_partial, :in => [true, false]
130
+ validates_inclusion_of :myscout_programme_summary, :in => [true, false]
65
131
 
66
132
  validates :column_names, :hash => {:key_type => Symbol, :value_type => String}
67
133
  validates :fields, :hash => {:key_type => Symbol, :value_in => [true, false]}
68
134
  validates :intouch_fields, :hash => {:key_type => Symbol, :value_in => [true, false]}
69
135
  validates :mobile_fields, :hash => {:key_type => Symbol, :value_in => [true, false]}
136
+ validates :myscout_emails, :hash => {:key_in => [:email1, :email2, :email3, :email4], :value_in => [true, false]}
70
137
 
71
138
 
72
139
  # @!method initialize
@@ -96,7 +163,9 @@ module Osm
96
163
  permissions = Hash.new
97
164
  data.each do |role_data|
98
165
  unless role_data['section'].eql?('discount') # It's not an actual section
99
- section_data = ActiveSupport::JSON.decode(role_data['sectionConfig'])
166
+ section_data = role_data['sectionConfig'].is_a?(String) ? ActiveSupport::JSON.decode(role_data['sectionConfig']) : role_data['sectionConfig']
167
+ myscout_data = section_data['portal'] || {}
168
+ section_data['portalExpires'] ||= {}
100
169
 
101
170
  # Make sense of flexi records
102
171
  fr_data = []
@@ -127,6 +196,23 @@ module Osm
127
196
  :flexi_records => flexi_records.sort,
128
197
  :group_id => role_data['groupid'],
129
198
  :group_name => role_data['groupname'],
199
+ :gocardless => (section_data['gocardless'] || 'false').downcase.eql?('true'),
200
+ :myscout_events_expires => Osm::parse_date(section_data['portalExpires']['events']),
201
+ :myscout_badges_expires => Osm::parse_date(section_data['portalExpires']['badges']),
202
+ :myscout_programme_expires => Osm::parse_date(section_data['portalExpires']['programme']),
203
+ :myscout_events => myscout_data['events'] == 1,
204
+ :myscout_badges => myscout_data['badges'] == 1,
205
+ :myscout_programme => myscout_data['programme'] == 1,
206
+ :myscout_payments => myscout_data['payments'] == 1,
207
+ :myscout_emails => (myscout_data['emails'] || {}).inject({}) { |n,(k,v)| n[k.to_sym] = v.eql?('true'); n},
208
+ :myscout_email_address_send => myscout_data['emailAddress'],
209
+ :myscout_email_address_copy => myscout_data['emailAddressCopy'],
210
+ :myscout_badges_partial => myscout_data['badgesPartial'] == 1,
211
+ :myscout_programme_summary => myscout_data['programmeSummary'] == 1,
212
+ :myscout_event_reminder_count => myscout_data['eventRemindCount'].to_i,
213
+ :myscout_event_reminder_frequency => myscout_data['eventRemindFrequency'].to_i,
214
+ :myscout_payment_reminder_count => myscout_data['paymentRemindCount'].to_i,
215
+ :myscout_payment_reminder_frequency => myscout_data['paymentRemindFrequency'].to_i,
130
216
  )
131
217
 
132
218
  result.push section
@@ -15,7 +15,12 @@ describe "Event" do
15
15
  :location => 'Somewhere',
16
16
  :notes => 'None',
17
17
  :archived => '0',
18
- :fields => {},
18
+ :columns => [],
19
+ :notepad => 'notepad',
20
+ :public_notepad => 'public notepad',
21
+ :confirm_by_date => Date.new(2002, 1, 2),
22
+ :allow_changes => true,
23
+ :reminders => false,
19
24
  }
20
25
  event = Osm::Event.new(data)
21
26
 
@@ -28,7 +33,12 @@ describe "Event" do
28
33
  event.location.should == 'Somewhere'
29
34
  event.notes.should == 'None'
30
35
  event.archived.should be_false
31
- event.fields.should == {}
36
+ event.columns.should == []
37
+ event.notepad.should == 'notepad'
38
+ event.public_notepad.should == 'public notepad'
39
+ event.confirm_by_date.should == Date.new(2002, 1, 2)
40
+ event.allow_changes.should == true
41
+ event.reminders.should == false
32
42
  event.valid?.should be_true
33
43
  end
34
44
 
@@ -37,8 +47,8 @@ describe "Event" do
37
47
  :member_id => 1,
38
48
  :grouping_id => 2,
39
49
  :row => 3,
40
- :fields => {},
41
- :event => Osm::Event.new(:id => 1, :section_id => 1, :name => 'Name', :fields => {})
50
+ :columns => [],
51
+ :event => Osm::Event.new(:id => 1, :section_id => 1, :name => 'Name', :columns => [])
42
52
  }
43
53
 
44
54
  ea = Osm::Event::Attendance.new(data)
@@ -68,16 +78,38 @@ describe "Event" do
68
78
  'notes' => 'Notes',
69
79
  'sectionid' => 1,
70
80
  'googlecalendar' => nil,
71
- 'archived' => '0'
81
+ 'archived' => '0',
82
+ 'confdate' => nil,
83
+ 'allowchanges' => '1',
84
+ 'disablereminders' => '1'
72
85
  }]
73
86
  }
74
87
 
75
- fields_body = {
76
- 'config' => '[{"id":"f_1","name":"Field 1"}]'
88
+ event_body = {
89
+ 'eventid' => '2',
90
+ 'name' => 'An Event',
91
+ 'startdate' => '2001-01-02',
92
+ 'enddate' => '2001-02-05',
93
+ 'starttime' => '00:00:00',
94
+ 'endtime' => '12:00:00',
95
+ 'cost' => '0.00',
96
+ 'location' => 'Somewhere',
97
+ 'notes' => 'Notes',
98
+ 'notepad' => 'notepad',
99
+ 'publicnotes' => 'public notepad',
100
+ 'config' => '[{"id":"f_1","name":"Name","pL":"Label"}]',
101
+ 'sectionid' => '1',
102
+ 'googlecalendar' => nil,
103
+ 'archived' => '0',
104
+ 'confdate' => '2002-01-02',
105
+ 'allowchanges' => '1',
106
+ 'disablereminders' => '1',
107
+ 'pnnotepad' => '',
108
+ 'structure' => []
77
109
  }
78
110
 
79
111
  FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/events.php?action=getEvents&sectionid=1&showArchived=true", :body => events_body.to_json)
80
- FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/events.php?action=getEvent&sectionid=1&eventid=2", :body => fields_body.to_json)
112
+ FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/events.php?action=getEvent&sectionid=1&eventid=2", :body => event_body.to_json)
81
113
 
82
114
  Osm::Model.stub(:get_user_permissions) { {:events => [:read, :write]} }
83
115
  end
@@ -89,12 +121,20 @@ describe "Event" do
89
121
  event.id.should == 2
90
122
  event.section_id.should == 1
91
123
  event.name.should == 'An Event'
92
- event.start.should == Date.new(2001, 2, 3)
124
+ event.start.should == Date.new(2001, 1, 2)
93
125
  event.finish.should == DateTime.new(2001, 2, 5, 12, 0, 0)
94
126
  event.cost.should == '0.00'
95
127
  event.location.should == 'Somewhere'
96
128
  event.notes.should == 'Notes'
97
129
  event.archived.should be_false
130
+ event.notepad.should == 'notepad'
131
+ event.public_notepad.should == 'public notepad'
132
+ event.confirm_by_date.should == Date.new(2002, 1, 2)
133
+ event.allow_changes.should == true
134
+ event.reminders.should == false
135
+ event.columns[0].id.should == 'f_1'
136
+ event.columns[0].name.should == 'Name'
137
+ event.columns[0].parent_label.should == 'Label'
98
138
  event.valid?.should be_true
99
139
  end
100
140
 
@@ -132,10 +172,15 @@ describe "Event" do
132
172
  }
133
173
 
134
174
  FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/events.php?action=getEvents&sectionid=1&showArchived=true", :body => body.to_json)
135
- FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/events.php?action=getEvent&sectionid=1&eventid=1", :body => {'config' => '[]'}.to_json)
136
- FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/events.php?action=getEvent&sectionid=1&eventid=2", :body => {'config' => '[]'}.to_json)
137
- Osm::Event.get_for_section(@api, 1).size.should == 1
138
- Osm::Event.get_for_section(@api, 1, {:include_archived => true}).size.should == 2
175
+ FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/events.php?action=getEvent&sectionid=1&eventid=1", :body => {'config' => '[]', 'archived' => '0', 'eventid' => '1'}.to_json)
176
+ FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/events.php?action=getEvent&sectionid=1&eventid=2", :body => {'config' => '[]', 'archived' => '1', 'eventid' => '2'}.to_json)
177
+
178
+ events = Osm::Event.get_for_section(@api, 1)
179
+ all_events = Osm::Event.get_for_section(@api, 1, {:include_archived => true})
180
+
181
+ events.size.should == 1
182
+ events[0].id == 1
183
+ all_events.size.should == 2
139
184
  end
140
185
 
141
186
  it "Get event" do
@@ -159,7 +204,10 @@ describe "Event" do
159
204
  'endtime' => '04:05:06',
160
205
  'cost' => '1.23',
161
206
  'location' => 'Somewhere',
162
- 'notes' => 'none'
207
+ 'notes' => 'none',
208
+ 'confdate' => '2000-01-01',
209
+ 'allowChanges' => 'true',
210
+ 'disablereminders' => 'false',
163
211
  }
164
212
 
165
213
  Osm::Event.stub(:get_for_section) { [] }
@@ -168,12 +216,17 @@ describe "Event" do
168
216
  event = Osm::Event.create(@api, {
169
217
  :section_id => 1,
170
218
  :name => 'Test event',
171
- :start => DateTime.new(2000, 01, 02, 03, 04, 05),
172
- :finish => DateTime.new(2001, 02, 03, 04, 05, 06),
219
+ :start => DateTime.new(2000, 1, 2, 3, 4, 5),
220
+ :finish => DateTime.new(2001, 2, 3, 4, 5, 6),
173
221
  :cost => '1.23',
174
222
  :location => 'Somewhere',
175
223
  :notes => 'none',
176
- :fields => {},
224
+ :columns => [],
225
+ :notepad => '',
226
+ :public_notepad => '',
227
+ :confirm_by_date => Date.new(2000, 1, 1),
228
+ :allow_changes => true,
229
+ :reminders => true,
177
230
  })
178
231
  event.should_not be_nil
179
232
  event.id.should == 2
@@ -191,7 +244,12 @@ describe "Event" do
191
244
  :cost => '1.23',
192
245
  :location => 'Somewhere',
193
246
  :notes => 'none',
194
- :fields => {},
247
+ :columns => [],
248
+ :notepad => '',
249
+ :public_notepad => '',
250
+ :confirm_by_date => nil,
251
+ :allow_changes => true,
252
+ :reminders => true,
195
253
  })
196
254
  event.should be_nil
197
255
  end
@@ -212,10 +270,15 @@ describe "Event" do
212
270
  'cost' => '1.23',
213
271
  'location' => 'Somewhere',
214
272
  'notes' => 'none',
215
- 'eventid' => 2
273
+ 'eventid' => 2,
274
+ 'confdate' => '',
275
+ 'allowChanges' => 'true',
276
+ 'disablereminders' => 'false',
216
277
  }
217
278
 
218
279
  HTTParty.should_receive(:post).with(url, {:body => post_data}) { DummyHttpResult.new(:response=>{:code=>'200', :body=>'{"id":2}'}) }
280
+ HTTParty.should_receive(:post).with('https://www.onlinescoutmanager.co.uk/events.php?action=saveNotepad&sectionid=1', {:body=>{"eventid"=>2, "notepad"=>"notepad", "userid"=>"user_id", "secret"=>"secret", "apiid"=>"1", "token"=>"API TOKEN"}}) { DummyHttpResult.new(:response=>{:code=>'200', :body=>'{}'}) }
281
+ HTTParty.should_receive(:post).with('https://www.onlinescoutmanager.co.uk/events.php?action=saveNotepad&sectionid=1', {:body=>{"eventid"=>2, "pnnotepad"=>"public notepad", "userid"=>"user_id", "secret"=>"secret", "apiid"=>"1", "token"=>"API TOKEN"}}) { DummyHttpResult.new(:response=>{:code=>'200', :body=>'{}'}) }
219
282
 
220
283
  event = Osm::Event.new(
221
284
  :section_id => 1,
@@ -225,13 +288,18 @@ describe "Event" do
225
288
  :cost => '1.23',
226
289
  :location => 'Somewhere',
227
290
  :notes => 'none',
228
- :id => 2
291
+ :id => 2,
292
+ :confirm_by_date => nil,
293
+ :allow_changes => true,
294
+ :reminders => true,
295
+ :notepad => 'notepad',
296
+ :public_notepad => 'public notepad',
229
297
  )
230
298
  event.update(@api).should be_true
231
299
  end
232
300
 
233
301
  it "Update (failed)" do
234
- HTTParty.should_receive(:post) { DummyHttpResult.new(:response=>{:code=>'200', :body=>'{}'}) }
302
+ HTTParty.should_receive(:post).exactly(3).times { DummyHttpResult.new(:response=>{:code=>'200', :body=>'{}'}) }
235
303
 
236
304
  event = Osm::Event.new(
237
305
  :section_id => 1,
@@ -347,28 +415,34 @@ describe "Event" do
347
415
  end
348
416
 
349
417
 
350
- it "Add field (succeded)" do
418
+ it "Add column (succeded)" do
351
419
  url = 'https://www.onlinescoutmanager.co.uk/events.php?action=addColumn&sectionid=1&eventid=2'
352
420
  post_data = {
353
421
  'apiid' => @CONFIGURATION[:api][:osm][:id],
354
422
  'token' => @CONFIGURATION[:api][:osm][:token],
355
423
  'userid' => 'user_id',
356
424
  'secret' => 'secret',
357
- 'columnName' => 'Test field',
425
+ 'columnName' => 'Test name',
426
+ 'parentLabel' => 'Test label',
358
427
  }
359
- HTTParty.should_receive(:post).with(url, {:body => post_data}) { DummyHttpResult.new(:response=>{:code=>'200', :body=>'{"eventid":"2"}'}) }
428
+ body = {
429
+ 'eventid' => '2',
430
+ 'config' => '[{"id":"f_1","name":"Test name","pL":"Test label"}]'
431
+ }
432
+ HTTParty.should_receive(:post).with(url, {:body => post_data}) { DummyHttpResult.new(:response=>{:code=>'200', :body=>body.to_json}) }
360
433
 
361
434
  event = Osm::Event.new(:id => 2, :section_id => 1)
362
435
  event.should_not be_nil
363
- event.add_field(@api, 'Test field').should be_true
436
+ event.add_column(@api, 'Test name', 'Test label').should be_true
437
+ event.columns.should == [Osm::Event::Column.new(:id=>'f_1', :name=>'Test name', :parent_label=>'Test label')]
364
438
  end
365
439
 
366
- it "Add field (failed)" do
367
- HTTParty.should_receive(:post) { DummyHttpResult.new(:response=>{:code=>'200', :body=>'{}'}) }
440
+ it "Add column (failed)" do
441
+ HTTParty.should_receive(:post) { DummyHttpResult.new(:response=>{:code=>'200', :body=>'{"config":"[]"}'}) }
368
442
 
369
443
  event = Osm::Event.new(:id => 2, :section_id => 1)
370
444
  event.should_not be_nil
371
- event.add_field(@api, 'Test field').should be_false
445
+ event.add_column(@api, 'Test name', 'Test label').should be_false
372
446
  end
373
447
 
374
448
  end
@@ -12,7 +12,6 @@ describe "Section" do
12
12
  :subscription_level => :silver,
13
13
  :subscription_expires => (Date.today + 60).strftime('%Y-%m-%d'),
14
14
  :type => :cubs,
15
- :num_scouts => 10,
16
15
  :wizard => false,
17
16
  :column_names => {:column_names => 'names'},
18
17
  :fields => {:fields => true},
@@ -20,7 +19,24 @@ describe "Section" do
20
19
  :mobile_fields => {:mobile_fields => true},
21
20
  :flexi_records => [],
22
21
  :group_id => 3,
23
- :group_name => '3rd Somewhere'
22
+ :group_name => '3rd Somewhere',
23
+ :gocardless => true,
24
+ :myscout_events_expires => (Date.today + 61).strftime('%Y-%m-%d'),
25
+ :myscout_badges_expires => (Date.today + 62).strftime('%Y-%m-%d'),
26
+ :myscout_programme_expires => (Date.today + 63).strftime('%Y-%m-%d'),
27
+ :myscout_events => true,
28
+ :myscout_badges => true,
29
+ :myscout_programme => true,
30
+ :myscout_payments => true,
31
+ :myscout_emails => {:email1 => true, :email2 => false},
32
+ :myscout_email_address_send => 'send_from@example.com',
33
+ :myscout_email_address_copy => '',
34
+ :myscout_badges_partial => true,
35
+ :myscout_programme_summary => true,
36
+ :myscout_event_reminder_count => 4,
37
+ :myscout_event_reminder_frequency => 5,
38
+ :myscout_payment_reminder_count => 6,
39
+ :myscout_payment_reminder_frequency => 7
24
40
  }
25
41
  end
26
42
 
@@ -33,7 +49,6 @@ describe "Section" do
33
49
  section.subscription_level.should == :silver
34
50
  section.subscription_expires.should == Date.today + 60
35
51
  section.type.should == :cubs
36
- section.num_scouts.should == 10
37
52
  section.column_names.should == {:column_names => 'names'}
38
53
  section.fields.should == {:fields => true}
39
54
  section.intouch_fields.should == {:intouch_fields => true}
@@ -41,6 +56,23 @@ describe "Section" do
41
56
  section.group_id.should == 3
42
57
  section.group_name.should == '3rd Somewhere'
43
58
  section.flexi_records.should == []
59
+ section.gocardless.should == true
60
+ section.myscout_events_expires.should == Date.today + 61
61
+ section.myscout_badges_expires.should == Date.today + 62
62
+ section.myscout_programme_expires.should == Date.today + 63
63
+ section.myscout_events.should == true
64
+ section.myscout_badges.should == true
65
+ section.myscout_programme.should == true
66
+ section.myscout_payments.should == true
67
+ section.myscout_emails.should == {:email1 => true, :email2 => false}
68
+ section.myscout_email_address_send.should == 'send_from@example.com'
69
+ section.myscout_email_address_copy.should == ''
70
+ section.myscout_badges_partial.should == true
71
+ section.myscout_programme_summary.should == true
72
+ section.myscout_event_reminder_count.should == 4
73
+ section.myscout_event_reminder_frequency.should == 5
74
+ section.myscout_payment_reminder_count.should == 6
75
+ section.myscout_payment_reminder_frequency.should == 7
44
76
  section.valid?.should be_true
45
77
  end
46
78
 
@@ -51,7 +83,6 @@ describe "Section" do
51
83
  section.subscription_level.should == :unknown
52
84
  section.subscription_expires.should == nil
53
85
  section.type.should == :unknown
54
- section.num_scouts.should == nil
55
86
  section.column_names.should == {}
56
87
  section.fields.should == {}
57
88
  section.intouch_fields.should == {}
@@ -64,7 +95,7 @@ describe "Section" do
64
95
 
65
96
  before :each do
66
97
  body = [
67
- {"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}}", "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}},
98
+ {"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\":\"\",\"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}},
68
99
  {"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}}
69
100
  ]
70
101
  FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/api.php?action=getUserRoles", :body => body.to_json)
@@ -80,7 +111,6 @@ describe "Section" do
80
111
  section.subscription_level.should == :bronze
81
112
  section.subscription_expires.should == Date.new(2013, 1, 5)
82
113
  section.type.should == :beavers
83
- section.num_scouts.should == 10
84
114
  section.column_names.should == {:column_names => 'names'}
85
115
  section.fields.should == {:fields => true}
86
116
  section.intouch_fields.should == {:intouch_fields => true}
@@ -90,12 +120,30 @@ describe "Section" do
90
120
  section.flexi_records.size.should == 1
91
121
  section.flexi_records[0].id.should == 111
92
122
  section.flexi_records[0].name.should == 'Flexi Record 1'
123
+ section.gocardless.should == true
124
+ section.myscout_events_expires.should == Date.new(2013, 1, 6)
125
+ section.myscout_badges_expires.should == Date.new(2013, 1, 7)
126
+ section.myscout_programme_expires.should == Date.new(2013, 1, 8)
127
+ section.myscout_events.should == true
128
+ section.myscout_badges.should == true
129
+ section.myscout_programme.should == true
130
+ section.myscout_payments.should == true
131
+ section.myscout_emails.should == {:email1 => true, :email2 => false}
132
+ section.myscout_email_address_send.should == 'send_from@example.com'
133
+ section.myscout_email_address_copy.should == ''
134
+ section.myscout_badges_partial.should == true
135
+ section.myscout_programme_summary.should == true
136
+ section.myscout_event_reminder_count.should == 4
137
+ section.myscout_event_reminder_frequency.should == 5
138
+ section.myscout_payment_reminder_count.should == 6
139
+ section.myscout_payment_reminder_frequency.should == 7
93
140
  end
94
141
 
95
142
  it "Gets a section" do
96
143
  section = Osm::Section.get(@api, 1)
97
144
  section.should_not be_nil
98
145
  section.id.should == 1
146
+ section.valid?.should be_true
99
147
  end
100
148
 
101
149
  it "Fetches user's permissions" do
@@ -295,7 +343,7 @@ describe "Online Scout Manager API Strangeness" do
295
343
  section.get_notepad(@api).should == ''
296
344
  end
297
345
 
298
- it "handles skipping of a 'discount' section" do
346
+ it "skips a 'discount' section" do
299
347
  body = [
300
348
  {"sectionConfig"=>"{\"subscription_level\":1,\"subscription_expires\":\"2013-01-05\",\"sectionType\":\"beavers\",\"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"=>"3rd Somewhere", "groupid"=>"3", "groupNormalised"=>"1", "sectionid"=>"1", "sectionname"=>"Section 1", "section"=>"beavers", "isDefault"=>"1", "permissions"=>{"badge"=>100, "member"=>100, "user"=>100, "register"=>100, "contact"=>100, "programme"=>100, "originator"=>1, "events"=>100, "finance"=>100, "flexi"=>100}},
301
349
  {"sectionConfig"=>"{\"code\":1,\"districts\":[\"Loddon\",\"Kennet\"]}","groupname"=>"Berkshire","groupid"=>"2","groupNormalised"=>"1","sectionid"=>"3","sectionname"=>"County Admin","section"=>"discount","isDefault"=>"0","permissions"=>{"districts"=>["Loddon"]}}
@@ -309,4 +357,17 @@ describe "Online Scout Manager API Strangeness" do
309
357
  section.id.should == 1
310
358
  end
311
359
 
360
+ it "handles section config being either a Hash or a JSON encoded Hash" do
361
+ body = [
362
+ {"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}}", "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}},
363
+ {"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}}
364
+ ]
365
+ FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/api.php?action=getUserRoles", :body => body.to_json)
366
+
367
+ sections = Osm::Section.get_all(@api)
368
+ sections.size.should == 2
369
+ sections[0].should_not be_nil
370
+ sections[1].should_not be_nil
371
+ end
372
+
312
373
  end
data/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Osm
2
- VERSION = "0.1.10"
2
+ VERSION = "0.1.11"
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: 0.1.10
4
+ version: 0.1.11
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-19 00:00:00.000000000Z
12
+ date: 2013-01-09 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
16
- requirement: &83131290 !ruby/object:Gem::Requirement
16
+ requirement: &79244120 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '3.2'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *83131290
24
+ version_requirements: *79244120
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: httparty
27
- requirement: &83130640 !ruby/object:Gem::Requirement
27
+ requirement: &79243800 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0.9'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *83130640
35
+ version_requirements: *79243800
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: active_attr
38
- requirement: &83129610 !ruby/object:Gem::Requirement
38
+ requirement: &79243500 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0.6'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *83129610
46
+ version_requirements: *79243500
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: activemodel
49
- requirement: &83129230 !ruby/object:Gem::Requirement
49
+ requirement: &79243020 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '3.2'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *83129230
57
+ version_requirements: *79243020
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rake
60
- requirement: &83128550 !ruby/object:Gem::Requirement
60
+ requirement: &79242470 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '10.0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *83128550
68
+ version_requirements: *79242470
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec
71
- requirement: &83128100 !ruby/object:Gem::Requirement
71
+ requirement: &79242200 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '2.11'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *83128100
79
+ version_requirements: *79242200
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: fakeweb
82
- requirement: &83127500 !ruby/object:Gem::Requirement
82
+ requirement: &79241900 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ~>
@@ -87,7 +87,7 @@ dependencies:
87
87
  version: '1.3'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *83127500
90
+ version_requirements: *79241900
91
91
  description: Use the Online Scout Manager API (https://www.onlinescoutmanager.co.uk)
92
92
  to retrieve and save data.
93
93
  email:
@@ -149,18 +149,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
149
149
  - - ! '>='
150
150
  - !ruby/object:Gem::Version
151
151
  version: '0'
152
- segments:
153
- - 0
154
- hash: 624159517
155
152
  required_rubygems_version: !ruby/object:Gem::Requirement
156
153
  none: false
157
154
  requirements:
158
155
  - - ! '>='
159
156
  - !ruby/object:Gem::Version
160
157
  version: '0'
161
- segments:
162
- - 0
163
- hash: 624159517
164
158
  requirements: []
165
159
  rubyforge_project: osm
166
160
  rubygems_version: 1.8.10
@@ -168,3 +162,4 @@ signing_key:
168
162
  specification_version: 3
169
163
  summary: Use the Online Scout Manager API
170
164
  test_files: []
165
+ has_rdoc: