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_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 ⇒ Boolean
Whether the section uses the Events part of My.SCOUT.
-
#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_summary ⇒ Boolean
Wether parents can see summary of programme items.
-
#myscout_programme_times ⇒ Boolean
Wether 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).
-
#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?
Get the name for the section’s subscription level.
-
#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 155
|
Instance Attribute Details
#column_names ⇒ Hash
Returns custom names to use for the data columns.
71 |
# File 'lib/osm/section.rb', line 71 attribute :id, :type => Integer |
#fields ⇒ Hash
Returns which columns are shown in OSM.
71 |
# File 'lib/osm/section.rb', line 71 attribute :id, :type => Integer |
#flexi_records ⇒ Array<FlexiRecord>
Returns list of the extra records the section has.
71 |
# File 'lib/osm/section.rb', line 71 attribute :id, :type => Integer |
#gocardless ⇒ Boolean
Returns does the section use gocardless.
71 |
# File 'lib/osm/section.rb', line 71 attribute :id, :type => Integer |
#group_id ⇒ Fixnum
Returns the id for the group.
71 |
# File 'lib/osm/section.rb', line 71 attribute :id, :type => Integer |
#group_name ⇒ String
Returns the group name.
71 |
# File 'lib/osm/section.rb', line 71 attribute :id, :type => Integer |
#id ⇒ Fixnum
Returns the id for the section.
71 |
# File 'lib/osm/section.rb', line 71 attribute :id, :type => Integer |
#intouch_fields ⇒ Hash
Returns which columns are shown in OSM’s in touch reports.
71 |
# File 'lib/osm/section.rb', line 71 attribute :id, :type => Integer |
#mobile_fields ⇒ Hash
Returns which columns are shown in the OSM mobile app.
71 |
# File 'lib/osm/section.rb', line 71 attribute :id, :type => Integer |
#myscout_badges ⇒ Boolean
Returns whether the section uses the Badges part of My.SCOUT.
71 |
# File 'lib/osm/section.rb', line 71 attribute :id, :type => Integer |
#myscout_badges_expires ⇒ Date
Returns when the subscription to Badges in My.SCOUT expires.
71 |
# File 'lib/osm/section.rb', line 71 attribute :id, :type => Integer |
#myscout_badges_partial ⇒ Boolean
Returns Wether parents can see partially completed badges.
71 |
# File 'lib/osm/section.rb', line 71 attribute :id, :type => Integer |
#myscout_email_address_copy ⇒ String
Returns which email address to send copys of My.SCOUT emails to.
71 |
# File 'lib/osm/section.rb', line 71 attribute :id, :type => Integer |
#myscout_email_address_from ⇒ String
Returns which email address to send My.SCOUT emails as coming from.
71 |
# File 'lib/osm/section.rb', line 71 attribute :id, :type => Integer |
#myscout_emails ⇒ Hash of Symbol to Boolean
Returns which email addresses are linked to MyScout for each Member.
71 |
# File 'lib/osm/section.rb', line 71 attribute :id, :type => Integer |
#myscout_event_reminder_count ⇒ Fixnum
Returns How many event reminders to send to parents who haven’t responded.
71 |
# File 'lib/osm/section.rb', line 71 attribute :id, :type => Integer |
#myscout_event_reminder_frequency ⇒ Fixnum
Returns How many days to leave between event reminder emails.
71 |
# File 'lib/osm/section.rb', line 71 attribute :id, :type => Integer |
#myscout_events ⇒ Boolean
Returns whether the section uses the Events part of My.SCOUT.
71 |
# File 'lib/osm/section.rb', line 71 attribute :id, :type => Integer |
#myscout_events_expires ⇒ Date
Returns when the subscription to Events in My.SCOUT expires.
71 |
# File 'lib/osm/section.rb', line 71 attribute :id, :type => Integer |
#myscout_payment_reminder_count ⇒ Fixnum
Returns How many payment reminders to send to parents who haven’t paid yet.
71 |
# File 'lib/osm/section.rb', line 71 attribute :id, :type => Integer |
#myscout_payment_reminder_frequency ⇒ Fixnum
Returns How many days to leave between payment reminder emails.
71 |
# File 'lib/osm/section.rb', line 71 attribute :id, :type => Integer |
#myscout_payments ⇒ Boolean
Returns whether the section uses the Payments part of My.SCOUT.
71 |
# File 'lib/osm/section.rb', line 71 attribute :id, :type => Integer |
#myscout_programme ⇒ Boolean
Returns whether the section uses the Programme part of My.SCOUT.
71 |
# File 'lib/osm/section.rb', line 71 attribute :id, :type => Integer |
#myscout_programme_expires ⇒ Date
Returns when the subscription to Badges in My.SCOUT expires.
71 |
# File 'lib/osm/section.rb', line 71 attribute :id, :type => Integer |
#myscout_programme_summary ⇒ Boolean
Returns Wether parents can see summary of programme items.
71 |
# File 'lib/osm/section.rb', line 71 attribute :id, :type => Integer |
#myscout_programme_times ⇒ Boolean
Returns Wether parents can see times of programme items.
71 |
# File 'lib/osm/section.rb', line 71 attribute :id, :type => Integer |
#name ⇒ String
Returns the section name.
71 |
# File 'lib/osm/section.rb', line 71 attribute :id, :type => Integer |
#sms_messages_remaining ⇒ Fixnum
Returns How many SMS messages the section can send before needing to topup.
71 |
# File 'lib/osm/section.rb', line 71 attribute :id, :type => Integer |
#sms_messages_sent ⇒ Fixnum
Returns How many SMS messages have been sent by the section.
71 |
# File 'lib/osm/section.rb', line 71 attribute :id, :type => Integer |
#sms_sent_test ⇒ Boolean
Returns Whether the section has sent their test SMS message.
71 |
# File 'lib/osm/section.rb', line 71 attribute :id, :type => Integer |
#subscription_expires ⇒ Date
Returns when the section’s subscription to OSM expires.
71 |
# File 'lib/osm/section.rb', line 71 attribute :id, :type => Integer |
#subscription_level ⇒ Fixnum
Returns what subscription the section has to OSM (1-bronze, 2-silver, 3-gold).
71 |
# File 'lib/osm/section.rb', line 71 attribute :id, :type => Integer |
#type ⇒ Symbol
Returns the section type (:beavers, :cubs, :scouts, :exporers, :network, :adults, :waiting, :unknown).
71 |
# File 'lib/osm/section.rb', line 71 attribute :id, :type => Integer |
Class Method Details
.get(api, section_id, options = {}) ⇒ Object
Get a section
258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 |
# File 'lib/osm/section.rb', line 258 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
164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 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 |
# File 'lib/osm/section.rb', line 164 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_events => myscout_data['events'] == 1, :myscout_badges => myscout_data['badges'] == 1, :myscout_programme => myscout_data['programme'] == 1, :myscout_payments => myscout_data['payments'] == 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_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, :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
360 361 362 363 364 365 366 367 368 369 370 371 |
# File 'lib/osm/section.rb', line 360 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
343 344 345 346 347 |
# File 'lib/osm/section.rb', line 343 [: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
343 344 345 346 347 |
# File 'lib/osm/section.rb', line 343 [: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
343 344 345 346 347 |
# File 'lib/osm/section.rb', line 343 [: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
343 344 345 346 347 |
# File 'lib/osm/section.rb', line 343 [: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
279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 |
# File 'lib/osm/section.rb', line 279 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
343 344 345 346 347 |
# File 'lib/osm/section.rb', line 343 [: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
343 344 345 346 347 |
# File 'lib/osm/section.rb', line 343 [: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
303 304 305 306 307 308 309 310 311 312 |
# File 'lib/osm/section.rb', line 303 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?
Get the name for the section’s subscription level
351 352 353 354 355 356 357 |
# File 'lib/osm/section.rb', line 351 def subscription_level_name return { 1 => 'Bronze', 2 => 'Silver', 3 => 'Gold', }[subscription_level] end |
#waiting? ⇒ Boolean
Check if this is a waiting list
343 344 345 346 347 |
# File 'lib/osm/section.rb', line 343 [: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
317 318 319 |
# File 'lib/osm/section.rb', line 317 def youth_section? [:beavers, :cubs, :scouts, :explorers].include?(type) end |