Class: Osm::Section
Instance Attribute Summary collapse
-
#column_names ⇒ Hash
Custom names to use for the data columns.
-
#fields ⇒ Hash
Which columns are shown in OSM.
-
#flexi_records ⇒ Array<FlexiRecord>
List of the extra records the section has.
-
#gocardless ⇒ Boolean
Does the section use gocardless.
-
#group_id ⇒ Fixnum
The id for the group.
-
#group_name ⇒ String
The group name.
-
#id ⇒ Fixnum
The id for the section.
-
#intouch_fields ⇒ Hash
Which columns are shown in OSM’s in touch reports.
-
#mobile_fields ⇒ Hash
Which columns are shown in the OSM mobile app.
-
#myscout_badges ⇒ Boolean
Whether the section uses the Badges part of My.SCOUT.
-
#myscout_badges_expires ⇒ Date
When the subscription to Badges in My.SCOUT expires.
-
#myscout_badges_partial ⇒ Boolean
Wether parents can see partially completed badges.
-
#myscout_details ⇒ Boolean
Whether the section uses the Personal Details part of My.SCOUT.
-
#myscout_details_email_changes_to ⇒ String
Email address to send changes to personal details made through My.SCOUT to.
-
#myscout_details_expires ⇒ Boolean
Whether the section uses the Personal Details part of My.SCOUT.
-
#myscout_email_address_copy ⇒ String
Which email address to send copys of My.SCOUT emails to.
-
#myscout_email_address_from ⇒ String
Which email address to send My.SCOUT emails as coming from.
-
#myscout_emails ⇒ Hash of Symbol to Boolean
Which email addresses are linked to MyScout for each Member.
-
#myscout_event_reminder_count ⇒ Fixnum
How many event reminders to send to parents who haven’t responded.
-
#myscout_event_reminder_frequency ⇒ Fixnum
How many days to leave between event reminder emails.
-
#myscout_events_expires ⇒ Date
When the subscription to Events in My.SCOUT expires.
-
#myscout_payment_reminder_count ⇒ Fixnum
How many payment reminders to send to parents who haven’t paid yet.
-
#myscout_payment_reminder_frequency ⇒ Fixnum
How many days to leave between payment reminder emails.
-
#myscout_payments ⇒ Boolean
Whether the section uses the Payments part of My.SCOUT.
-
#myscout_programme ⇒ Boolean
Whether the section uses the Programme part of My.SCOUT.
-
#myscout_programme_expires ⇒ Date
When the subscription to Badges in My.SCOUT expires.
-
#myscout_programme_show ⇒ Fixnum
How many programme itemms parents can see (the next 5, 10, 15, 20 meetings, -1 (whole term), 0 (remaining this term) or -2 (all future)).
-
#myscout_programme_summary ⇒ Boolean
Wether parents can see summary of programme items.
-
#myscout_programme_times ⇒ Boolean
Whether parents can see times of programme items.
-
#name ⇒ String
The section name.
-
#sms_messages_remaining ⇒ Fixnum
How many SMS messages the section can send before needing to topup.
-
#sms_messages_sent ⇒ Fixnum
How many SMS messages have been sent by the section.
-
#sms_sent_test ⇒ Boolean
Whether the section has sent their test SMS message.
-
#subscription_expires ⇒ Date
When the section’s subscription to OSM expires.
-
#subscription_level ⇒ Fixnum
What subscription the section has to OSM (1-bronze, 2-silver, 3-gold, 4-gold+).
-
#type ⇒ Symbol
The section type (:beavers, :cubs, :scouts, :exporers, :network, :adults, :waiting, :unknown).
Class Method Summary collapse
-
.get(api, section_id, options = {}) ⇒ Object
Get a section.
-
.get_all(api, options = {}) ⇒ Array<Osm::Section>
Get the user’s sections.
Instance Method Summary collapse
-
#<=>(another) ⇒ Object
Compare Section based on group_name type (age order), then name.
-
#adults? ⇒ Boolean
Check if this is an Adults section.
-
#beavers? ⇒ Boolean
Check if this is a Beavers section.
-
#cubs? ⇒ Boolean
Check if this is a Cubs section.
-
#explorers? ⇒ Boolean
Check if this is an Explorers section.
-
#get_notepad(api, options = {}) ⇒ String
Get the section’s notepad from OSM.
-
#initialize ⇒ Object
constructor
Initialize a new Section.
-
#network? ⇒ Boolean
Check if this is a Network section.
-
#scouts? ⇒ Boolean
Check if this is a Scouts section.
-
#set_notepad(api, content) ⇒ Boolean
Set the section’s notepad in OSM.
-
#subscription_level_name ⇒ String?
deprecated
Deprecated.
Please use Osm::SUBSCRIPTION_LEVEL_NAMES[section.subscription_level instead
-
#waiting? ⇒ Boolean
Check if this is a waiting list.
-
#youth_section? ⇒ Boolean
Check if this section is one of the youth sections.
Methods inherited from Model
#<, #<=, #>, #>=, #between?, #changed_attributes, configure, #reset_changed_attributes, #to_i
Constructor Details
#initialize ⇒ Object
Initialize a new Section
|
# File 'lib/osm/section.rb', line 170
|
Instance Attribute Details
#column_names ⇒ Hash
Returns custom names to use for the data columns.
79 |
# File 'lib/osm/section.rb', line 79 attribute :id, :type => Integer |
#fields ⇒ Hash
Returns which columns are shown in OSM.
79 |
# File 'lib/osm/section.rb', line 79 attribute :id, :type => Integer |
#flexi_records ⇒ Array<FlexiRecord>
Returns list of the extra records the section has.
79 |
# File 'lib/osm/section.rb', line 79 attribute :id, :type => Integer |
#gocardless ⇒ Boolean
Returns does the section use gocardless.
79 |
# File 'lib/osm/section.rb', line 79 attribute :id, :type => Integer |
#group_id ⇒ Fixnum
Returns the id for the group.
79 |
# File 'lib/osm/section.rb', line 79 attribute :id, :type => Integer |
#group_name ⇒ String
Returns the group name.
79 |
# File 'lib/osm/section.rb', line 79 attribute :id, :type => Integer |
#id ⇒ Fixnum
Returns the id for the section.
79 |
# File 'lib/osm/section.rb', line 79 attribute :id, :type => Integer |
#intouch_fields ⇒ Hash
Returns which columns are shown in OSM’s in touch reports.
79 |
# File 'lib/osm/section.rb', line 79 attribute :id, :type => Integer |
#mobile_fields ⇒ Hash
Returns which columns are shown in the OSM mobile app.
79 |
# File 'lib/osm/section.rb', line 79 attribute :id, :type => Integer |
#myscout_badges ⇒ Boolean
Returns whether the section uses the Badges part of My.SCOUT.
79 |
# File 'lib/osm/section.rb', line 79 attribute :id, :type => Integer |
#myscout_badges_expires ⇒ Date
Returns when the subscription to Badges in My.SCOUT expires.
79 |
# File 'lib/osm/section.rb', line 79 attribute :id, :type => Integer |
#myscout_badges_partial ⇒ Boolean
Returns Wether parents can see partially completed badges.
79 |
# File 'lib/osm/section.rb', line 79 attribute :id, :type => Integer |
#myscout_details ⇒ Boolean
Returns whether the section uses the Personal Details part of My.SCOUT.
79 |
# File 'lib/osm/section.rb', line 79 attribute :id, :type => Integer |
#myscout_details_email_changes_to ⇒ String
Returns email address to send changes to personal details made through My.SCOUT to.
79 |
# File 'lib/osm/section.rb', line 79 attribute :id, :type => Integer |
#myscout_details_expires ⇒ Boolean
Returns whether the section uses the Personal Details part of My.SCOUT.
79 |
# File 'lib/osm/section.rb', line 79 attribute :id, :type => Integer |
#myscout_email_address_copy ⇒ String
Returns which email address to send copys of My.SCOUT emails to.
79 |
# File 'lib/osm/section.rb', line 79 attribute :id, :type => Integer |
#myscout_email_address_from ⇒ String
Returns which email address to send My.SCOUT emails as coming from.
79 |
# File 'lib/osm/section.rb', line 79 attribute :id, :type => Integer |
#myscout_emails ⇒ Hash of Symbol to Boolean
Returns which email addresses are linked to MyScout for each Member.
79 |
# File 'lib/osm/section.rb', line 79 attribute :id, :type => Integer |
#myscout_event_reminder_count ⇒ Fixnum
Returns How many event reminders to send to parents who haven’t responded.
79 |
# File 'lib/osm/section.rb', line 79 attribute :id, :type => Integer |
#myscout_event_reminder_frequency ⇒ Fixnum
Returns How many days to leave between event reminder emails.
79 |
# File 'lib/osm/section.rb', line 79 attribute :id, :type => Integer |
#myscout_events_expires ⇒ Date
Returns when the subscription to Events in My.SCOUT expires.
79 |
# File 'lib/osm/section.rb', line 79 attribute :id, :type => Integer |
#myscout_payment_reminder_count ⇒ Fixnum
Returns How many payment reminders to send to parents who haven’t paid yet.
79 |
# File 'lib/osm/section.rb', line 79 attribute :id, :type => Integer |
#myscout_payment_reminder_frequency ⇒ Fixnum
Returns How many days to leave between payment reminder emails.
79 |
# File 'lib/osm/section.rb', line 79 attribute :id, :type => Integer |
#myscout_payments ⇒ Boolean
Returns whether the section uses the Payments part of My.SCOUT.
79 |
# File 'lib/osm/section.rb', line 79 attribute :id, :type => Integer |
#myscout_programme ⇒ Boolean
Returns whether the section uses the Programme part of My.SCOUT.
79 |
# File 'lib/osm/section.rb', line 79 attribute :id, :type => Integer |
#myscout_programme_expires ⇒ Date
Returns when the subscription to Badges in My.SCOUT expires.
79 |
# File 'lib/osm/section.rb', line 79 attribute :id, :type => Integer |
#myscout_programme_show ⇒ Fixnum
Returns How many programme itemms parents can see (the next 5, 10, 15, 20 meetings, -1 (whole term), 0 (remaining this term) or -2 (all future)).
79 |
# File 'lib/osm/section.rb', line 79 attribute :id, :type => Integer |
#myscout_programme_summary ⇒ Boolean
Returns Wether parents can see summary of programme items.
79 |
# File 'lib/osm/section.rb', line 79 attribute :id, :type => Integer |
#myscout_programme_times ⇒ Boolean
Returns Whether parents can see times of programme items.
79 |
# File 'lib/osm/section.rb', line 79 attribute :id, :type => Integer |
#name ⇒ String
Returns the section name.
79 |
# File 'lib/osm/section.rb', line 79 attribute :id, :type => Integer |
#sms_messages_remaining ⇒ Fixnum
Returns How many SMS messages the section can send before needing to topup.
79 |
# File 'lib/osm/section.rb', line 79 attribute :id, :type => Integer |
#sms_messages_sent ⇒ Fixnum
Returns How many SMS messages have been sent by the section.
79 |
# File 'lib/osm/section.rb', line 79 attribute :id, :type => Integer |
#sms_sent_test ⇒ Boolean
Returns Whether the section has sent their test SMS message.
79 |
# File 'lib/osm/section.rb', line 79 attribute :id, :type => Integer |
#subscription_expires ⇒ Date
Returns when the section’s subscription to OSM expires.
79 |
# File 'lib/osm/section.rb', line 79 attribute :id, :type => Integer |
#subscription_level ⇒ Fixnum
Returns what subscription the section has to OSM (1-bronze, 2-silver, 3-gold, 4-gold+).
79 |
# File 'lib/osm/section.rb', line 79 attribute :id, :type => Integer |
#type ⇒ Symbol
Returns the section type (:beavers, :cubs, :scouts, :exporers, :network, :adults, :waiting, :unknown).
79 |
# File 'lib/osm/section.rb', line 79 attribute :id, :type => Integer |
Class Method Details
.get(api, section_id, options = {}) ⇒ Object
Get a section
277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 |
# File 'lib/osm/section.rb', line 277 def self.get(api, section_id, ={}) cache_key = ['section', section_id] if ![:no_cache] && cache_exist?(api, cache_key) && can_access_section?(api, section_id) return cache_read(api, cache_key) end sections = get_all(api, ) return nil unless sections.is_a? Array sections.each do |section| return section if section.id == section_id end return nil end |
.get_all(api, options = {}) ⇒ Array<Osm::Section>
Get the user’s sections
179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 |
# File 'lib/osm/section.rb', line 179 def self.get_all(api, ={}) cache_key = ['sections', api.user_id] if ![:no_cache] && cache_exist?(api, cache_key) ids = cache_read(api, cache_key) return get_from_ids(api, ids, 'section', , :get_all) end data = api.perform_query('api.php?action=getUserRoles') result = Array.new ids = Array.new = Hash.new data.each do |role_data| unless role_data['section'].eql?('discount') # It's not an actual section section_data = role_data['sectionConfig'].is_a?(String) ? ActiveSupport::JSON.decode(role_data['sectionConfig']) : role_data['sectionConfig'] myscout_data = section_data['portal'] || {} section_data['portalExpires'] ||= {} section_id = Osm::to_i_or_nil(role_data['sectionid']) # Make sense of flexi records fr_data = [] flexi_records = [] fr_data = section_data['extraRecords'] if section_data['extraRecords'].is_a?(Array) fr_data = section_data['extraRecords'].values if section_data['extraRecords'].is_a?(Hash) fr_data.each do |record_data| # Expect item to be: {:name=>String, :extraid=>Fixnum} # Sometimes get item as: [String, {"name"=>String, "extraid"=>Fixnum}] record_data = record_data[1] if record_data.is_a?(Array) flexi_records.push Osm::FlexiRecord.new( :id => Osm::to_i_or_nil(record_data['extraid']), :name => record_data['name'], :section_id => section_id, ) end section = new( :id => section_id, :name => role_data['sectionname'], :subscription_level => Osm::to_i_or_nil(section_data['subscription_level']), :subscription_expires => Osm::parse_date(section_data['subscription_expires']), :type => !section_data['sectionType'].nil? ? section_data['sectionType'].to_sym : (!section_data['section'].nil? ? section_data['section'].to_sym : :unknown), :num_scouts => section_data['numscouts'], :column_names => section_data['columnNames'].is_a?(Hash) ? Osm::symbolize_hash(section_data['columnNames']) : {}, :fields => section_data['fields'].is_a?(Hash) ? Osm::symbolize_hash(section_data['fields']) : {}, :intouch_fields => section_data['intouch'].is_a?(Hash) ? Osm::symbolize_hash(section_data['intouch']) : {}, :mobile_fields => section_data['mobFields'].is_a?(Hash) ? Osm::symbolize_hash(section_data['mobFields']) : {}, :flexi_records => flexi_records.sort, :group_id => role_data['groupid'], :group_name => role_data['groupname'], :gocardless => (section_data['gocardless'] || 'false').downcase.eql?('true'), :myscout_events_expires => Osm::parse_date(section_data['portalExpires']['events']), :myscout_badges_expires => Osm::parse_date(section_data['portalExpires']['badges']), :myscout_programme_expires => Osm::parse_date(section_data['portalExpires']['programme']), :myscout_details_expires => Osm::parse_date(section_data['portalExpires']['details']), :myscout_events => myscout_data['events'] == 1, :myscout_badges => myscout_data['badges'] == 1, :myscout_programme => myscout_data['programme'] == 1, :myscout_payments => myscout_data['payments'] == 1, :myscout_details => myscout_data['details'] == 1, :myscout_emails => (myscout_data['emails'] || {}).inject({}) { |n,(k,v)| n[k.to_sym] = v.eql?('true'); n}, :myscout_email_address_from => myscout_data['emailAddress'] ? myscout_data['emailAddress'] : '', :myscout_email_address_copy => myscout_data['emailAddressCopy'] ? myscout_data['emailAddressCopy'] : '', :myscout_badges_partial => myscout_data['badgesPartial'] == 1, :myscout_programme_summary => myscout_data['programmeSummary'] == 1, :myscout_programme_times => myscout_data['programmeTimes'] == 1, :myscout_programme_show => myscout_data['programmeShow'].to_i, :myscout_event_reminder_count => myscout_data['eventRemindCount'].to_i, :myscout_event_reminder_frequency => myscout_data['eventRemindFrequency'].to_i, :myscout_payment_reminder_count => myscout_data['paymentRemindCount'].to_i, :myscout_payment_reminder_frequency => myscout_data['paymentRemindFrequency'].to_i, :myscout_details_email_changes_to => myscout_data['contactNotificationEmail'], :sms_sent_test => section_data['hasSentTestSMS'], :sms_messages_sent => section_data['sms_sent'], :sms_messages_remaining => section_data['sms_remaining'], ) result.push section ids.push section.id cache_write(api, ['section', section.id], section) .merge!(section.id => Osm.(role_data['permissions'])) end end .each do |s_id, perms| api.(s_id, perms) end cache_write(api, cache_key, ids) return result end |
Instance Method Details
#<=>(another) ⇒ Object
Compare Section based on group_name type (age order), then name
377 378 379 380 381 382 383 384 385 386 387 388 |
# File 'lib/osm/section.rb', line 377 def <=>(another) result = self.group_name <=> another.try(:group_name) result = 0 if self.type == another.try(:type) && result == 0 [:beavers, :cubs, :scouts, :explorers, :network, :adults, :waiting].each do |type| if result == 0 result = -1 if self.type == type result = 1 if another.try(:type) == type end end result = self.name <=> another.try(:name) if result == 0 return result end |
#adults? ⇒ Boolean
Check if this is an Adults section
362 363 364 365 366 |
# File 'lib/osm/section.rb', line 362 [:beavers, :cubs, :scouts, :explorers, :network, :adults, :waiting].each do |attribute| define_method "#{attribute}?" do type == attribute end end |
#beavers? ⇒ Boolean
Check if this is a Beavers section
362 363 364 365 366 |
# File 'lib/osm/section.rb', line 362 [:beavers, :cubs, :scouts, :explorers, :network, :adults, :waiting].each do |attribute| define_method "#{attribute}?" do type == attribute end end |
#cubs? ⇒ Boolean
Check if this is a Cubs section
362 363 364 365 366 |
# File 'lib/osm/section.rb', line 362 [:beavers, :cubs, :scouts, :explorers, :network, :adults, :waiting].each do |attribute| define_method "#{attribute}?" do type == attribute end end |
#explorers? ⇒ Boolean
Check if this is an Explorers section
362 363 364 365 366 |
# File 'lib/osm/section.rb', line 362 [:beavers, :cubs, :scouts, :explorers, :network, :adults, :waiting].each do |attribute| define_method "#{attribute}?" do type == attribute end end |
#get_notepad(api, options = {}) ⇒ String
Get the section’s notepad from OSM
298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 |
# File 'lib/osm/section.rb', line 298 def get_notepad(api, ={}) require_access_to_section(api, self, ) cache_key = ['notepad', id] if ![:no_cache] && cache_exist?(api, cache_key) && can_access_section?(api, self.id) return cache_read(api, cache_key) end notepads = api.perform_query('api.php?action=getNotepads') return '' unless notepads.is_a?(Hash) notepad = '' notepads.each do |key, value| cache_write(api, ['notepad', key.to_i], value) notepad = value if key.to_i == id end return notepad end |
#network? ⇒ Boolean
Check if this is a Network section
362 363 364 365 366 |
# File 'lib/osm/section.rb', line 362 [:beavers, :cubs, :scouts, :explorers, :network, :adults, :waiting].each do |attribute| define_method "#{attribute}?" do type == attribute end end |
#scouts? ⇒ Boolean
Check if this is a Scouts section
362 363 364 365 366 |
# File 'lib/osm/section.rb', line 362 [:beavers, :cubs, :scouts, :explorers, :network, :adults, :waiting].each do |attribute| define_method "#{attribute}?" do type == attribute end end |
#set_notepad(api, content) ⇒ Boolean
Set the section’s notepad in OSM
322 323 324 325 326 327 328 329 330 331 |
# File 'lib/osm/section.rb', line 322 def set_notepad(api, content) require_access_to_section(api, self) data = api.perform_query("users.php?action=updateNotepad§ionid=#{id}", {'value' => content}) if data.is_a?(Hash) && data['ok'] # Success cache_write(api, ['notepad', id], content) return true end return false end |
#subscription_level_name ⇒ String?
Please use Osm::SUBSCRIPTION_LEVEL_NAMES[section.subscription_level instead
Get the name for the section’s subscription level
371 372 373 374 |
# File 'lib/osm/section.rb', line 371 def subscription_level_name warn "[DEPRECATION] `subscription_level_name` is deprecated. Please use `Osm::SUBSCRIPTION_LEVEL_NAMES[section.subscription_level` instead." Osm::SUBSCRIPTION_LEVEL_NAMES[subscription_level] end |
#waiting? ⇒ Boolean
Check if this is a waiting list
362 363 364 365 366 |
# File 'lib/osm/section.rb', line 362 [:beavers, :cubs, :scouts, :explorers, :network, :adults, :waiting].each do |attribute| define_method "#{attribute}?" do type == attribute end end |
#youth_section? ⇒ Boolean
Check if this section is one of the youth sections
336 337 338 |
# File 'lib/osm/section.rb', line 336 def youth_section? [:beavers, :cubs, :scouts, :explorers].include?(type) end |