CHANGELOG.md
## Version 1.3.7
*
## Version 1.3.6
* OSM gem is no longer supported. See UNSUPPORTED.md for more details.
## Version 1.3.5
* Fix to fetching members - not correctly interpreting enabledness of phone numbers and emails.
## Version 1.3.4
* Update dependancies to allow using with a rails 5 app (rails 4 & rails 3 are still tested against by travis)
## Version 1.3.3
* Fix due to OSM's API changing data returned when getting a section's notepad.
## Version 1.3.2
* Add travis testing against new ruby versions (CVE-2017-17405)
* Add more information to exceptions raised when badge requirement modules can't be found
## Version 1.3.1
* Fix "undefined method '<=' for nil:NilClass" when testing if member is current
* Update httparty gem (CVE 2013-1801)
## Version 1.3.0
* Add fetching of file names for events (unable to download)
* Add fetching of payment schedules - Osm::OnlinePayment::Schedule
* Add fetching of member's payments for a schedule
* Add updating a member's payment status
## Version 1.2.25
* Add fetching My.SCOUT parent login history - Osm::Myscout::ParentLoginHistory.get_for_section
* Add fetching and updating of My.SCOUT templates
* Add fetching of email delivery reports -> Osm::Email::Delivery class and subclasses
* Send an email through OSM (use Osm::Email.get_emails_for_contacts method to get the value for Osm::Email.send_email method's send_to parameter).
## Version 1.2.24
* Fix detection of no roles in api.get_user_roles!
## Version 1.2.23
* Geting list of user roles for getting sections and permissions now done using the get_user_roles method of api instances
* When user has no roles in OSM:
* get_user_roles will return an empty Array
* get_user_roles! (new method) will raise an Osm::NoActiveRoles exception
* Fix 'undefined local method or variable fetch_from_osm' when retrieving badges
## Version 1.2.22
* Fix marking badge as due when not passing a level
## Version 1.2.21
* Fix updating requirement data of a Osm::Badge::Data to a blank string incorrectly returns false when the update was made into OSM
* Fix updating additional details for a Osm::Member to a blank string incorrectly returns false when the update was made into OSM
## Version 1.2.20
* Fix to OSM changing the URL to get API permissions from
## Version 1.2.19
* Fix validity checks for member in rails 3
## Version 1.2.18
* Add gem version into the cache key
* Osm::Section - removal of column_names, fields, intouch_fields, mobile_fields and sms_* attributes
* Osm::Member - lots of changes to reflect OSM's new structure for member's details (main ones listed below):
* Removal of type attribute (I never could work out what it represented)
* Removal of data attributes except:
* id
* section_id
* first_name
* last_name
* date_of_birth
* grouping_id
* grouping_leader
* age
* Addition of attibutes:
* gender (Symbol - :male, :female, :other or :unspecified)
* finished_section (Date, nil)
* additional_information (DirtyHashy) - The customisable data part from OSM
* additional_information_labels (DirtyHashy) - The labels which belong to the data in custom
* primary_contact, secondary_contact, emergency_contact and doctor - the relevant parts from OSM
* grouping_label
* grouping_leader_label
* Renamed attributes:
* started becomes joined_movement
* joined becomes started_section
* New helper methods:
* male?
* female?
* current?(date=Date.today) - is the member a member of the section on the passed date
* all_emails, all_emails_with_name, enabled_emails, enabled_emails_with_name
* all_phones, enabled_phones
* Validation changes:
* age should now be in the format 'yy / mm' not 'yy/mm'
* Osm::Sms:
* send_sms method losses mobile_numbers argumant (OSM now sends to all enabled numbers for all contacts for the member)
* send_sms method now just returns a boolean to indicate success/failure
* Addition of remaining_credits(api, section, options={}) method
* Addition of number_selected(api, section, members, options={}) method to tell how many numbers a message would be sent to
* Add :migration as an API target
## Version 1.2.17
* Update to match how OSM now lists activities within meetings.
## Version 1.2.16
* Osm::Section gains instance methods:
* bronze?
* silver?
* gold?
* gold_plus?
* subscription_at_least?(level)
* Osm::SUBSCRIPTION_LEVEL_NAMES is now a Hash not an Array
## Version 1.2.15
* Add support for census and giftaid link generation for members
* Add :osm_staging as a site to point the gem at. Really only useful for gem development.
* Update to match OSM's new badge system:
* Retrieving badge stock
* Updating badge stock
* Fetching badge data
* Fetching due badges (added stock_levels attribute, since OSM now gives it)
* Fetching & updating badge links for Events
* Fetching & updating badge links for Activities
* Fetching & updating badge links for Meetings
* Summary now returns all started/completed/awarded badges (it can't filter by type) so can only be called from Osm::Badge
* Osm::Badge
* osm_key, osm_long_key and competion criteria attributes are gone
* id, version, identifier, group_name, latest, user_id, levels, sharing attributes added
* min_modules_required, min_requirements_required, add_columns_to_module, level_requirement, other_requirements_required, badges_required, show_level_letters, requires_modules and modules attributes added
* OSM Changed how completion criteria are retrieved (this gem now uses a special peice of OSM's API just for this purpose) so:
* attributes sections_needed, total_needed and needed_from_section are gone
* New methods modules, module_letters, module_ids and add_columns?
* Osm::Badge::Data
* mark_awarded method now only marks as awarded (the optional mark_as parameter is gone)
* mark_not_awarded method added
* mark_due and mark_not_due methods added
* completed attribute renamed to due
* sections_gained method renamed to modules_gained, now returns an array of letters
* gained_in_sections renamed to gained_in_modules
* Osm::Badge::Requirement gains a mod attribute to hold the Osm::Badge::RequirementModule
* Osm::Badge::RequirementModule added
* Osm::Event::BadgeLink
* Attributes added: badge_name, badge_id, badge_version, requirement_id
* Attributes removed: badge_label, badge_key, requirement_key
* Attributes untouched: badge_type, badge_section, data, requirement_label
* Osm::Activity::Badge attributes now match Osm::Event::BadgeLink
* Osm::Meeting::BadgeLink attributes now match Osm::Event::badgeLink
* Osm::Badges.get_badge_stock returns a Hash, keys are now "#{badge_id}_#{level}"
* Osm::Badge::Data instance method requirement_met?(field_id) method made public
## Version 1.2.14
* Fix fetching sections when user doesn't have access to any
## Version 1.2.13
* Fix event.get_attendance ignoring term in building the cache key
## Version 1.2.12
* Add leader? method to member (true if member is in the leaders grouping)
* Add youth? method to member (true if member is in a non-leaders grouping)
* Adjust Osm::Event::BadgeLink attributes (label becomes requirement_label, add badge_label)
## Version 1.2.11
* Fix handling blank event config from OSM (JSON parse error)
* Add retrieving of badge links to events
* When creating an event in OSM badge links are also added
* When updating an event in OSM badge links are also updated
* Add get_list method to Event (get basic event details, should cutout the need to get all events all the time)
## Version 1.2.10
* Update levels for Hikes and Nights away staged badges (released April 2014)
* Add levels for new Time on the water staged badge (released April 2014)
## Version 1.2.9
* Add osm_long_key to badges to make getting badge stock easier
## Version 1.2.8
* api.get_user_permissions now includes the quartermaster permission
* Fix administer permission level excluded from ApiAccess
## Version 1.2.7
* Fix can't compare exception when a FlexiRecord has a nil name.
## Version 1.2.6
* Update dependancies to allow using with a rails 4 app (rails 3 is still tested against by travis)
## Version 1.2.5
* Fix undefined local variable or method 'section_id' in Osm::Model require_permission
## Version 1.2.4
* Remove support for ruby 1.9.2 (listen gem requires >= 1.9.3)
* Activity's get_badge_requirements method now will iterate through activities if there's no permission to use the existing one OSM query trick
* Fix exception when OSM returns a number (instead of a string) for total/completed columns of a flexi record
## Version 1.2.3
* Fix bug determining if a badge has been earnt (-1 sections required = all required)
## Version 1.2.2
* Add base_url method to Api class and instances
* Add get_photo method to member
* Add earnt and earnt? methods to Osm::Badge::Data to get the stage which has been earnt (based on the requirements hash)
## Version 1.2.1
* Add section_id read-only attribute to Osm::Error::NoCurrentTerm
## Version 1.2.0
* Trying to fetch the currrent Term for a Section which doesn;t have one now raises an Osm::Error::NoCurrentTerm instead of an Osm::Error
* Add personal details options to Section:
* myscout_details attribute [Boolean] for whether personal details are enabled
* myscout_details_expires attribute [Date] for expiry date of subscription
* myscout_details_email_changes_to attribute [String] where to send update emails to
* Osm::Member
* myscout_link method now accepts :details to get a link to the "Perosnal details" page
* myscout_link method can now link to a specific event by also passing in the id (optional 3rd parameter)
* Addition of myscout_link_key method to get the member's unique key for use in myscout links
* Osm::Section
* subscription_level_name method is marked as depricated, ready for removal in version 2.0 -> replace with Osm::SUBSCRIPTION_LEVEL_NAMES[section.subscription_level]
* myscout_programme_show attribute added - how much of the programme do parents see?
* Addition of two new constants:
* Osm::SUBSCRIPTION_LEVEL_NAMES - an Array of Strings containing the human name of each subscription level (starts with "Unknown" to make indexing work nicely)
* Osm::SUBSCRIPTION_LEVELS - an Array of Symbols for each level (starts with nil to make indexing work nicely)
* Register - get_structure now only includes dates
* Addition of attendance_reminder attribute to event
* Abillity to send Sms messages to multiple numbers
* Add Gift Aid:
* Get Payments
* Update Payments
* Get Payment/Member Data
* Update Payment/Member Data
* Add Finances:
* Budget (Get, Add, Update, Delete)
* Invoices (Get, Add, Update, Delete)
* Invoice Items (Get, Add, Update, Delete)
## Version 1.0.6
* Add badge_links to Meeting
* Event.add_column method gains a required attirbute (default false) to control whether parents are required to enter something
* Event::Column gains parent_required attribute (default false)
* Event::Attendance gains get_audit_trail(api) method
## Version 1.0.5
* Fix undefined method youth_section? within Model.require_ability_to
## Version 1.0.4
* Add notice board option to getting My.SCOUT link for a member (pass :notice as the parameter)
* Model.require_ability_to now only checks subscription level for youth sections
## Version 1.0.3
* Fix "undefined method 'downcase' for 0:Fixnum" caused by some badge requirement data being a Fixnum when a String contains just numbers.
* Update to use ActiveAttr gem version 0.8
## Version 1.0.2
* Fix Regex for checking dates from OSM
* Don't use ActiveAttr >= 0.8 (incompatabillity to be fixed)
## Version 1.0.1
* Fix Osm::Term date helping methods when term contains nil dates
* Fix fetching event attendance when no attendance has been set for any members
* Osm::Api exposes the debug option as a psudo class attribute
## Version 1.0.0
* SMS text messages:
* Section gains sms_sent_test, sms_messages_sent and sms_messages_remaining attributes
* Add Sms class:
* With send_sms(api, section_id, member_ids, all_or_one, source_address, message) method
* With DeliveryReport Model subclass
* With get_for_section(api, section) class method
## Version 0.6.3
* Fix started? and started methods for badges with a combination of custom and normal requirements
## Version 0.6.2
* Fix items not relevant to API appearing in permissions for a Section
* Fix started and started? methods for staged badges which have been completly done
## Version 0.6.1
* Fixes to adventure badges
## Version 0.6.0
* Badge::Data
* completed attribute is now a Fixnum not Boolean (fixes staged badges)
* Add awarded attribute (the last level awarded)
* Add due? method to tell if the badge is due
* Add started? method to tell if the badge has been started
* Add started method to tell which stage has been started
* Add first_name and last_name attributes
* Add mark_awarded method
* Add mark_due method
* Badge
* Make get_badge_data_for_section an instance not class method (called get_data_for_section)
* Add get_summary_for_section(api, section, term=nil, options={}) method
* Add optional section_type parameter to get_badges_for_section method
## Version 0.5.0
* Code breaking changes to DueBadges:
* The by_member attribute now uses scout_id as the key
* Addition of member_names attribute to allow fetching of members names (the old key for the by_member attribute)
* descriptions attribute has been renamed to badge_names for consistency
* Code breaking changes to Register and subclasses:
* Register:
* update_attendance - :attendance option is now a Symbol not String (:yes, :unadvised_absent or :advised_absent)
* Register::Attendance:
* attendance attribute is now a Hash of Date to Symbol (instead of to String)
* Register::Attendance gains two helper methods:
* present_on?(date)
* absent_on?(date)
* Add allow_booking attribute to Event
* Add myscout_programme_times attribute to Section
* Cost attribute of Event is now checked to be either "TBC" or formatted to /\\A\\d+\\.\\d{2}\\Z/
* Add cost_tbc? method to Event
* Add cost_free? method to Event
## Version 0.4.2
* Fix undefined variable "section_id" when fetching notepad from cache
## Version 0.4.1
* Fix not handling of Event's config not being an Array of Hash
* Fix undefined 'Osm::FlexiRecord' from within Section (intermittent bug)
## Version 0.4.0
* Event::Attendance
* Move fields['firstname'] to first_name attribute
* Move fields['lastname'] to last_name attribute
* Move fields['dob'] to date_of_birth attribute
* Move fields['attending'] to attending attribute
* The keys for fields are now Fixnums not Strings
* Addition of payment_control and payments attributes
* Addition of automatic_payments? and manual_payments? methods
* Addition of is_attending?, is_not_attending?, is_invited? and is_shown? methods
* update(api, field_id) method now updates only changed fields, becoming update(api)
* Add :network Section type
* Add custom inspect methods for:
* Event::Attendance (replace event with event.id if present)
* Event::Column (replace event with event.id if present)
* FlexiRecord::Column (replace flexi_record with flexi_record.id)
* FlexiRecord::Data (replace flexi_record with flexi_record.id)
* Badge::Requirement (replace badge with badge.osm_key)
* Badge::Data (replace badge with badge.osm_key)
## Version 0.3.0
* Removal of DueBadges
* Removal of get_badge_stock method from sections
* Addition of Badges model:
* With get_due_badges(api, section, options={}) method
* With get_stock(api, section, options={}) method
* With update_stock(api, section, badge_key, stock_level) method
* Addition of Badge models:
* CoreBadge
* ChallengeBadge
* StagedBadge
* ActivityBadge
* All:
* Inherit from Badge (do not use this class directly)
* With get_badges_for_section(api, section, options={}) method
* With get_badge_data_for_section(api, section, badge, term=nil, options={}) method
* Addition of Badge::Requirements class
* Addition of Badge::Data class
* With update(api) method
* With total_gained method
* With sections_gained method
* With gained_in_sections method
* FlexiRecord::Data now updates only changed fields
## Version 0.2.2
* Add comparing and sorting (using <=>, <, <=, >, >= and between?) to each model
* Activity - id then version
* Activity::File - activity_id then name
* Activity::Version - activity_id then version
* ApiAccess - id
* Event - start, name then id (shortcuts, returning 0 if ids are equal)
* Event::Column - event then id
* Event::Attendance - event then row
* FlexiRecord - section_id then name
* FlexiRecord::Column - flexi_record then id (system ones first then user ones)
* FlexiRecord::Data - flexi_record, grouping_id then member_id
* Grouping - section_id then name
* Meeting - section_id, date, start_time then id
* Meeting::Activity - title then activity_id
* Member - section_id, grouping_id, grouping_leader (descending), last_name then first_name
* Register::Field - id
* Register::Attendance - section_id, grouping_id, last_name then first_name
* Section - group_name, type (by age) then name
* Term - section_id, start then id
## Version 0.2.0
* Raises Forbidden exception if:
* You try to use a feature which requires an OSM subscription above your current one
* You try to access a feature which you don't have the correct permissions for
* You try to access a Section (or it's Grouping) you shouldn't be accessing
* All Model classes:
* Addition of changed_attributes method to get a list of attributes which have changed
* Addition of reset_changed_attributes method to reset the list of attributes which have changed
* Activity
* Check user has permission to view before returning from cache
* Addition of osm_link method to get the URL for viewing in OSM
* Add updating of Grouping
* Evening:
* Rename to Meeting
* Rename meeting_date attribute to date
* Rename get_programme method to get_for_section
* Event:
* Removal of add_field method (use add_column instead)
* Removal of fields attribute (use columns instead)
* FlexiRecord:
* Addition of id, section_id and name attributes (these no longer need to be passed to methods)
* FlexiRecord::Field renamed to FlexiRecord::Column
* The following methods are now instance not class methods:
* get_fields (also renamed to get_columns)
* add_field (also renamed to add_column)
* get_data
* The following methods have bceome instance methods of a subclasses:
* update_field (moved to column.update)
* delete_field (moved to column.delete)
* update_data (moved to data.update)
* Member:
* Removal of grouping attribute
* Removal of grouping_label attribute
* Addition of myscout_link method (used to get the link to the member's My.SCOUT page)
* Section:
* subscription_level attribute is now a Fixnum not Symbol
* Addition of subscription_level_name method to get the name of the subscription level for the section
* flexi_records attribute now contains an Array of Osm::FlexiRecord
* "Under the hood" changes:
* Instead of caching individual items and a list of items the gem now caches a list of IDs. This should reduce the cache size.
* When updating items requires multiple OSM requests, now only updates what changed
* Updating of cached data when deleting/updating items from OSM
>>>>>>> dev_v_0.2.0
## Version 0.1.17
* Add comparison to Evening
* Passing a Term to the get_programme method of Evening is now optional
## Version 0.1.16
* Member's grouping attribute:
* Renamed to grouping_label
* Virtual attribute grouping added (maps to grouping_label currently) marked as depricated as it will use a Grouping object not a String in the future
* Fix exception when OSM returns empty string when requesting groupings for a section
* Fix exception when OSM returns empty string when requesting register structure for a section
* Fix updating of grouping for Member
* Fix validation error for Member - a leader's joining_in_years is -1
* Add spaces and spaces? methods to Event
## Version 0.1.15
* Rename grouping_name attribute of Member to grouping
## Version 0.1.14
* Fix grouping_name attribute of Member not being set when getting data from OSM
## Version 0.1.13
* Add attendance limit attributes to Event:
* attendance_limit - Fixnum, 0 = no limit
* attendance_limit_includes_leaders Boolean
* Add limited_attendance? method to Event
* Add setting of a section's notepad
* Add updating of Activity
* Add grouping_name attribute to Member
## Version 0.1.12
* Attribute Section.myscout_email_address_send defaults to an empty String
* Attribute Section.myscout_email_address_copy defaults to an empty String
* Attribute Section.myscout_email_address_send renamed to myscout_email_address_from
* Osm::Event::Column
* Rename parent_label attribute to label
* Add update method to update OSM
* Add delete method to update OSM
* Osm::Evening
* Add delete method to update OSM
* Changes to create method:
* Now takes arguments of (api, parameters)
* Now returns an Osm::Evening on success, nil on failure
* Will now pass start time, finish time and title to OSM
* Add activity to programme
* Evening.add_activity(api, activity, notes="")
* Activity.add_to_programme(api, section, date, notes="")
* Osm::Member
* Add create method to update OSM
* Add update method to update OSM
* Osm::FlexiRecord
* Add add_field method to add a field to the record in OSM
* Add update_field method to rename a field in OSM
* Add delete_field method to delete a field from OSM
* Add update_data method to update the data in OSM
## Version 0.1.11
* Fix "can't convert Hash into String" occuring when some section's config is a Hash not a JSON encoded Hash
* Remove num_scouts attribute from Section (OSM always sets this to 999)
* Add My.SCOUT related attributes to Section:
* gocardless (Boolean) - does the section use gocardless
* myscout_events_expires (Date) - when the subscription to Events in My.SCOUT expires
* myscout_badges_expires (Date) - when the subscription to Badges in My.SCOUT expires
* myscout_programme_expires (Date) - when the subscription to Badges in My.SCOUT expires
* myscout_events (Boolean) - whether the section uses the Events part of My.SCOUT
* myscout_badges (Boolean) - whether the section uses the Badges part of My.SCOUT
* myscout_programme (Boolean) - whether the section uses the Programme part of My.SCOUT
* myscout_payments (Boolean) - whether the section uses the Payments part of My.SCOUT
* myscout_emails (Hash of Symbol to Boolean) - which email addresses are linked to MyScout for each Member
* myscout_email_address_send (String, blank OK) - which email address to send My.SCOUT emails as
* myscout_email_address_copy (String, blank OK) - which email address to send copys of My.SCOUT emails to
* myscout_badges_partial (Boolean) - Whether parents can see partially completed badges
* myscout_programme_summary (Boolean) - Whether parents can see the summary of programme items
* myscout_event_reminder_count (Integer) - How many event reminders to send to parents who haven't responded
* myscout_event_reminder_frequency (Integer) - How many days to leave between event reminder emails
* myscout_payment_reminder_count (Integer) - How many payment reminders to send to parents who haven't paid yet
* myscout_payment_reminder_frequency (Integer) - How many days to leave between payment reminder emails
* Add new OSM attributes to Event:
* notepad - the notepad shown in OSM
* public_notepad - the notepad shown on My.SCOUT
* confirm_by_date - the last day that parents can change their child's attendance details
* allow_changes - whether parents can change their child's attendance details
* reminders - whether reminder emails are sent
* Osm::Event
* Mark fields attribute as depricated
* Add columns attribute returning an array of column details
## Version 0.1.10
* Fix 'undefined variable' when getting an event's attendance without passing a term.
## Version 0.1.9
* Fix fetching of members for a waiting list
* Fix 'undefuned method' when creating an event without a start or finish datetime
## Version 0.1.8
* Fix 'undefined local variable' when getting a section's notepad from the cache
## Version 0.1.7
* Ignore sections of type discount - assuming they're a strange symtom of how OSM handles discount codes
## Version 0.1.6
* Internal changes due to OSM adding total rows in register and fexi record data (the total rows are ignored)
## Version 0.1.5
* Bug fixes.
## Version 0.1.4
* Osm::Model has new class method get_user_permission(api, section_id, permission)
* API may return permissions value as a string not integer
## Version 0.1.3
* Add get_badge_stock(api) to section
## Version 0.1.2
* Bug fixes
## Version 0.1.1
* Add get_options Hash to Model.get_user_permissions
* Bug fixes
## Version 0.1.0
* Configuration is through Osm::configure not Osm::Api.configure and it takes a different Hash
* Api.authorize returns a different Hash
* Removal of Osm::Api methods:
* get_*
* update_*
* create_*
* EventAttendance is now Event::Attendance
* Removal of Osm::Role
* Osm::Section now has two new required attributes group_id and group_name
* long_name and full_name methods should be replaced with something similar to "#{section.name} (#{section.group_name})" in your own code
* Section has a class method fetch_user_permissions(api) which returns a Hash (section_id to permissions Hash)
* Activity now has class method get(api, activity_id)
* ApiAccess: now has class methods
* get_all(api, section)
* get(api, section, for_api)
* get_ours(api, section) -> actually just calls get(api, section, api)
* DueBadges now has a class method get(api, section)
* Evening now has class methods:
* get_programme(api, section_id, term_id)
* create(api, parameters)
* Evening now has instance methods:
* update(api)
* get_badge_requirements(api, evening)
* Event now has class methods:
* get_for_section(api, section)
* get(api, section, event_id)
* create(api)
* Event now has instance methods:
* update(api)
* delete(api)
* get_attendance(api)
* add_field(api, label)
* Event now has a fields attribute
* Event::Attendance has instance method update(api, field_id)
* FlexiRecord has class methods:
* get_fields(api, section, flexi_record_id)
* get_data(api, section, flexi_record_id, term)
* Grouping now has a class method get_for_section(api, section)
* Member now has a class method to get_for_section(api, section_id, term_id)
* Register now has class methods:
* get_structure(api, section)
* get_attendance(api, section)
* update_attendance(data)
* Section now has class methods:
* get_all(api)
* get(api, section_id)
* Section now has instance method get_notepad(api)
* Term now has class methods:
* get_all(api)
* get(api, term_id)
* get_for_section(api, section_id)
* get_current_term_for_section(api, section_id)
* create(api, parameters)
* Term now has instance method update(api)
## Version 0.0.26
* Register - Update attendance
* Add api.get_badge_requirements_for_evening
* Add api.update_register
* Event:
* Add api.ceate_event
* Add api.update_event
* Add api.delete_event
* Add api.add_event_field
* Event attendance:
* Add api.get_event
* Add api.get_event_fields
* Add api.get_event_attendance
* Add api.update_event_attendance
* Fix "uninitialized constant Osm::Api::HTTParty"
## Version 0.0.25
* FlexiRecordData, move these attributes to the fields hash:
* first_name => 'firstname'
* last_name => 'lastname'
* age => 'age'
* date_of_birth => 'dob'
* completed => 'completed'
* total => 'total'
## Version 0.0.24
* Make Section::FlexiRecord sortable
## Version 0.0.23
* get_badge_stock_levels now returns a hash whoose values are Fixnum not String
## Version 0.0.22
* Adjustments so DueBadge is similar enough to badge_stock data to be useful:
* by_member Hash -> Keys are member's name (String), values are the badge key (String)
* descriptions Hash -> keys are the badge key (String), values are the badge name (String)
* totals Hash -> keys are the badge key (String), values are the number required (Fixnum)
* Badge keys are the same as are used in getting badge stock levels
* Add ability to get badge stock levels
* Add ability to Create a term
* Add ability to Update a term
## Version 0.0.21
* Fix getting section_id and grouping_id for api.get_members
## Version 0.0.20
* Deprecation of api_data option in api methods (raise a warning if used and adjust documentation)
* Hide sesitive information when printing data sent to OSM in debug mode
* Add archived attribute to Event
* Add :include_archived option to api.get_events method
* Add retreival of Flexi Records
* Make set_user method of Api public
## Version 0.0.19
* Fix caching error in api.get_register_data
## Version 0.0.18
* Term's end attribute is now finish
* Event's end attribute is now finish
* Evening's evening_id attribute is now id
* DueBadge's totals attribute is now a method (totals are calculated each time rather than during initialization)
* Added exception ArgumentIsInvalid (raised when argument.valid? is false when updating through the API)
* The following models now use active_attr:
* Activity, Activity::File, Activity::Badge and Activity::Version
* ApiAccess
* DueBadges
* Evening and Evening::Activity
* Event
* Grouping
* Member
* RegisterData
* RegisterField
* Role
* Section and Section::FlexiRecord
* Term
## Version 0.0.17
* Fix try method is undefined
* Since 1/1/1970 is the epoch used by the OSM API, this date will be treated as nil (except member's date of birth)
* DueBadges now calculates the totals in the initialize method (no need to pass it in anymore)
## Version 0.0.16
* -2 is a valid grouping_id value (corrected in Grouping)
## Version 0.0.15
* Add :debug option to Api.configure
* -2 is a valid grouping_id value
* Fix check of :section_id in Member.initalize (apparently 0 is allowd in the API return data)
* Fix role's section not being set from API data
## Version 0.0.14
* Fix api.get_register_data\ returning wrong object
* Fix check of :num_scouts in Section.initalize
## Version 0.0.13
* Fix bug - invalid grouping_leader in member incorrectly risen for -1
## Version 0.0.12
* EveningActivity class renamed to Evening::Activity
* Change of method return types
* Activity.badges now returns an array of Osm::Activity::Badge objects
* Activity.files now returns an array of Osm::Activity::File objects
* Activity.versions now returns an array of Osm::Activity::Version objects
* Section.flexi_records now returns an array of Osm::Section::FlexiRecord objects
* api.get_register_structure now returns an array of RegisterField objects
* api.get_register becomes api.get_register_data and now returns an array of RegisterData objects
* Attribute name changes:
* Activity::Badge.section becomes section_type
* Activity::File.file_id becomes id
* Section.extra_records becomes flexi_records
* Member.joined_in_years attribute becomes joining_in_years
* from_api method added to:
* Activity and sub classes
* ApiAccess
* DueBadges
* Evening and Evening::Activity
* Event
* Grouping
* Member
* RegisterData
* RegisterField
* Role
* Section
* Term
## Version 0.0.11
* Fix undefined variable in id_for_term
## Version 0.0.10
* Fix handling an empty array being returned from OSM for fields (presumably if not allowed to view)
* Fix undefined variable in id_for_term
## Version 0.0.9
* Allow passing of Osm::Term objects as well as term IDs
* Allow passing of Osm::Section objects as well as section IDs
* Allow configuration of text prepended to keys used in the cache (:cache_prepend_to_key option to configure method)
* Require setting of cache class to use caching (:cache option to configure method)
## version 0.0.8
* Fix unknown variable when updating evening
## version 0.0.7
* Work on documentation:
* Clarify use of 'mystery' attributes
* Rename ProgrammeItem to Evening (and move ProgrammeActivity to Evening->EveningActivity)
## Version 0.0.6
* Usage changes:
* When calling an api.get_\* method api_data is now passed as an additional paramter not as part of the options
* Work on documentation:
* Tidy up params
* Tidy up returns
* Add class attributes
* Update README file:
* Improve installation instructions
* Add use section
* Add versioning section
## Version 0.0.5
* Bug fix
## Version 0.0.4
* Bug fix
## Version 0.0.3
* Retrieve grouping points from OSM
* Respond to OSM chaninging how it returns member's groupings
## Version 0.0.2
* Bug fixes
## Version 0.0.1
* Initial release.