osm 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.md +21 -0
 - data/README.md +2 -0
 - data/lib/osm.rb +10 -0
 - data/lib/osm/badge.rb +8 -0
 - data/lib/osm/event.rb +149 -34
 - data/lib/osm/flexi_record.rb +8 -0
 - data/lib/osm/section.rb +6 -3
 - data/spec/osm/event_spec.rb +59 -9
 - data/spec/osm/osm_spec.rb +28 -0
 - data/spec/osm/section_spec.rb +5 -3
 - data/version.rb +1 -1
 - metadata +22 -22
 
    
        data/CHANGELOG.md
    CHANGED
    
    | 
         @@ -1,3 +1,24 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            ## Version 0.4.0
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
              * Event::Attendance
         
     | 
| 
      
 4 
     | 
    
         
            +
                * Move fields['firstname'] to first\_name attribute
         
     | 
| 
      
 5 
     | 
    
         
            +
                * Move fields['lastname'] to last\_name attribute
         
     | 
| 
      
 6 
     | 
    
         
            +
                * Move fields['dob'] to date\_of\_birth attribute
         
     | 
| 
      
 7 
     | 
    
         
            +
                * Move fields['attending'] to attending attribute
         
     | 
| 
      
 8 
     | 
    
         
            +
                * The keys for fields are now Fixnums not Strings
         
     | 
| 
      
 9 
     | 
    
         
            +
                * Addition of payment\_control and payments attributes
         
     | 
| 
      
 10 
     | 
    
         
            +
                * Addition of automatic\_payments? and manual\_payments? methods
         
     | 
| 
      
 11 
     | 
    
         
            +
                * Addition of is\_attending?, is\_not\_attending?, is\_invited? and is\_shown? methods
         
     | 
| 
      
 12 
     | 
    
         
            +
                * update(api, field\_id) method now updates only changed fields, becoming update(api)
         
     | 
| 
      
 13 
     | 
    
         
            +
              * Add :network Section type
         
     | 
| 
      
 14 
     | 
    
         
            +
              * Add custom inspect methods for:
         
     | 
| 
      
 15 
     | 
    
         
            +
                * Event::Attendance (replace event with event.id if present)
         
     | 
| 
      
 16 
     | 
    
         
            +
                * Event::Column (replace event with event.id if present)
         
     | 
| 
      
 17 
     | 
    
         
            +
                * FlexiRecord::Column (replace flexi\_record with flexi\_record.id)
         
     | 
| 
      
 18 
     | 
    
         
            +
                * FlexiRecord::Data (replace flexi\_record with flexi\_record.id)
         
     | 
| 
      
 19 
     | 
    
         
            +
                * Badge::Requirement (replace badge with badge.osm\_key)
         
     | 
| 
      
 20 
     | 
    
         
            +
                * Badge::Data (replace badge with badge.osm\_key)
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
       1 
22 
     | 
    
         
             
            ## Version 0.3.0
         
     | 
| 
       2 
23 
     | 
    
         | 
| 
       3 
24 
     | 
    
         
             
              * Removal of DueBadges
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -137,6 +137,8 @@ however it should be noted that when the OSM API adds a feature it can be diffic 
     | 
|
| 
       137 
137 
     | 
    
         | 
| 
       138 
138 
     | 
    
         
             
            ## Parts of the OSM API currently NOT supported (may not be an exhaustive list):
         
     | 
| 
       139 
139 
     | 
    
         | 
| 
      
 140 
     | 
    
         
            +
            See the [Roadmap page in the wiki](https://github.com/robertgauld/osm/wiki/Roadmap) for more details.
         
     | 
| 
      
 141 
     | 
    
         
            +
             
     | 
| 
       140 
142 
     | 
    
         
             
              * SMS:
         
     | 
| 
       141 
143 
     | 
    
         
             
                * Retrieval of delivery reports [issue 54]
         
     | 
| 
       142 
144 
     | 
    
         
             
                * Sending a message [issue 54]
         
     | 
    
        data/lib/osm.rb
    CHANGED
    
    | 
         @@ -142,4 +142,14 @@ module Osm 
     | 
|
| 
       142 
142 
     | 
    
         
             
                [OSM_EPOCH, OSM_EPOCH_HUMAN].include?(date)
         
     | 
| 
       143 
143 
     | 
    
         
             
              end
         
     | 
| 
       144 
144 
     | 
    
         | 
| 
      
 145 
     | 
    
         
            +
              def self.inspect_instance(instance, options={})
         
     | 
| 
      
 146 
     | 
    
         
            +
                replace_with = options[:replace_with] || {}
         
     | 
| 
      
 147 
     | 
    
         
            +
             
     | 
| 
      
 148 
     | 
    
         
            +
                values = instance.attributes.sort.map{ |(k,v)|
         
     | 
| 
      
 149 
     | 
    
         
            +
                  (replace_with.keys.include?(k) && !v.nil?) ? "#{k}.#{replace_with[k]}: #{v.try(replace_with[k])}" : "#{k}: #{v.inspect}"
         
     | 
| 
      
 150 
     | 
    
         
            +
                }
         
     | 
| 
      
 151 
     | 
    
         
            +
             
     | 
| 
      
 152 
     | 
    
         
            +
                return "#<#{instance.class.name} #{values.join(', ')} >"
         
     | 
| 
      
 153 
     | 
    
         
            +
              end
         
     | 
| 
      
 154 
     | 
    
         
            +
             
     | 
| 
       145 
155 
     | 
    
         
             
            end # Module
         
     | 
    
        data/lib/osm/badge.rb
    CHANGED
    
    | 
         @@ -189,6 +189,10 @@ module Osm 
     | 
|
| 
       189 
189 
     | 
    
         
             
                    return result
         
     | 
| 
       190 
190 
     | 
    
         
             
                  end
         
     | 
| 
       191 
191 
     | 
    
         | 
| 
      
 192 
     | 
    
         
            +
                  def inspect
         
     | 
| 
      
 193 
     | 
    
         
            +
                    Osm.inspect_instance(self, options={:replace_with => {'badge' => :osm_key}})
         
     | 
| 
      
 194 
     | 
    
         
            +
                  end
         
     | 
| 
      
 195 
     | 
    
         
            +
             
     | 
| 
       192 
196 
     | 
    
         
             
                end # Class Requirement
         
     | 
| 
       193 
197 
     | 
    
         | 
| 
       194 
198 
     | 
    
         | 
| 
         @@ -318,6 +322,10 @@ module Osm 
     | 
|
| 
       318 
322 
     | 
    
         
             
                    return result
         
     | 
| 
       319 
323 
     | 
    
         
             
                  end
         
     | 
| 
       320 
324 
     | 
    
         | 
| 
      
 325 
     | 
    
         
            +
                  def inspect
         
     | 
| 
      
 326 
     | 
    
         
            +
                    Osm.inspect_instance(self, options={:replace_with => {'badge' => :osm_key}})
         
     | 
| 
      
 327 
     | 
    
         
            +
                  end
         
     | 
| 
      
 328 
     | 
    
         
            +
             
     | 
| 
       321 
329 
     | 
    
         
             
                end # Class Data
         
     | 
| 
       322 
330 
     | 
    
         | 
| 
       323 
331 
     | 
    
         
             
              end # Class Badge
         
     | 
    
        data/lib/osm/event.rb
    CHANGED
    
    | 
         @@ -251,20 +251,32 @@ module Osm 
     | 
|
| 
       251 
251 
     | 
    
         
             
                  data = api.perform_query("events.php?action=getEventAttendance&eventid=#{id}§ionid=#{section_id}&termid=#{term_id}")
         
     | 
| 
       252 
252 
     | 
    
         
             
                  data = data['items']
         
     | 
| 
       253 
253 
     | 
    
         | 
| 
      
 254 
     | 
    
         
            +
                  payment_values = {
         
     | 
| 
      
 255 
     | 
    
         
            +
                    'Manual' => :manual,
         
     | 
| 
      
 256 
     | 
    
         
            +
                    'Automatic' => :automatic,
         
     | 
| 
      
 257 
     | 
    
         
            +
                  }
         
     | 
| 
      
 258 
     | 
    
         
            +
                  attending_values = {
         
     | 
| 
      
 259 
     | 
    
         
            +
                    'Yes' => :yes,
         
     | 
| 
      
 260 
     | 
    
         
            +
                    'No' => :no,
         
     | 
| 
      
 261 
     | 
    
         
            +
                    'Invited' => :invited,
         
     | 
| 
      
 262 
     | 
    
         
            +
                    'Show in My.SCOUT' => :shown,
         
     | 
| 
      
 263 
     | 
    
         
            +
                  }
         
     | 
| 
      
 264 
     | 
    
         
            +
             
     | 
| 
       254 
265 
     | 
    
         
             
                  attendance = []
         
     | 
| 
       255 
266 
     | 
    
         
             
                  data.each_with_index do |item, index|
         
     | 
| 
       256 
     | 
    
         
            -
                    item.merge!({
         
     | 
| 
       257 
     | 
    
         
            -
                      'dob' => item['dob'].nil? ? nil : Osm::parse_date(item['dob'], :ignore_epoch => true),
         
     | 
| 
       258 
     | 
    
         
            -
                      'attending' => item['attending'].eql?('Yes'),
         
     | 
| 
       259 
     | 
    
         
            -
                    })
         
     | 
| 
       260 
     | 
    
         
            -
             
     | 
| 
       261 
267 
     | 
    
         
             
                    attendance.push Osm::Event::Attendance.new(
         
     | 
| 
       262 
268 
     | 
    
         
             
                      :event => self,
         
     | 
| 
       263 
269 
     | 
    
         
             
                      :member_id => Osm::to_i_or_nil(item['scoutid']),
         
     | 
| 
       264 
270 
     | 
    
         
             
                      :grouping_id => Osm::to_i_or_nil(item['patrolid'].eql?('') ? nil : item['patrolid']),
         
     | 
| 
       265 
     | 
    
         
            -
                      : 
     | 
| 
       266 
     | 
    
         
            -
             
     | 
| 
       267 
     | 
    
         
            -
                       
     | 
| 
      
 271 
     | 
    
         
            +
                      :first_name => item['firstname'],
         
     | 
| 
      
 272 
     | 
    
         
            +
                      :last_name => item['lastname'],
         
     | 
| 
      
 273 
     | 
    
         
            +
                      :date_of_birth => item['dob'].nil? ? nil : Osm::parse_date(item['dob'], :ignore_epoch => true),
         
     | 
| 
      
 274 
     | 
    
         
            +
                      :attending => attending_values[item['attending']],
         
     | 
| 
      
 275 
     | 
    
         
            +
                      :payment_control => payment_values[item['payment']],
         
     | 
| 
      
 276 
     | 
    
         
            +
                      :fields => item.select { |key, value| key.to_s.match(/\Af_\d+\Z/) }
         
     | 
| 
      
 277 
     | 
    
         
            +
                                     .inject({}){ |h,(k,v)| h[k[2..-1].to_i] = v; h },
         
     | 
| 
      
 278 
     | 
    
         
            +
                      :payments => item.select { |key, value| key.to_s.match(/\Ap\d+\Z/) }
         
     | 
| 
      
 279 
     | 
    
         
            +
                                       .inject({}){ |h,(k,v)| h[k[1..-1].to_i] = v; h },
         
     | 
| 
       268 
280 
     | 
    
         
             
                      :row => index,
         
     | 
| 
       269 
281 
     | 
    
         
             
                    )
         
     | 
| 
       270 
282 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -454,10 +466,14 @@ module Osm 
     | 
|
| 
       454 
466 
     | 
    
         
             
                    return result
         
     | 
| 
       455 
467 
     | 
    
         
             
                  end
         
     | 
| 
       456 
468 
     | 
    
         | 
| 
      
 469 
     | 
    
         
            +
                  def inspect
         
     | 
| 
      
 470 
     | 
    
         
            +
                    Osm.inspect_instance(self, options={:replace_with => {'event' => :id}})
         
     | 
| 
      
 471 
     | 
    
         
            +
                  end
         
     | 
| 
      
 472 
     | 
    
         
            +
             
     | 
| 
       457 
473 
     | 
    
         
             
                end # class Column
         
     | 
| 
       458 
474 
     | 
    
         | 
| 
       459 
475 
     | 
    
         | 
| 
       460 
     | 
    
         
            -
                class Attendance < Osm::Model 
     | 
| 
      
 476 
     | 
    
         
            +
                class Attendance < Osm::Model
         
     | 
| 
       461 
477 
     | 
    
         
             
                  # @!attribute [rw] member_id
         
     | 
| 
       462 
478 
     | 
    
         
             
                  #   @return [Fixnum] OSM id for the member
         
     | 
| 
       463 
479 
     | 
    
         
             
                  # @!attribute [rw] grouping__id
         
     | 
| 
         @@ -468,64 +484,163 @@ module Osm 
     | 
|
| 
       468 
484 
     | 
    
         
             
                  #   @return [Fixnum] part of the OSM API
         
     | 
| 
       469 
485 
     | 
    
         
             
                  # @!attriute [rw] event
         
     | 
| 
       470 
486 
     | 
    
         
             
                  #   @return [Osm::Event] the event that this attendance applies to
         
     | 
| 
      
 487 
     | 
    
         
            +
                  # @!attribute [rw] first_name
         
     | 
| 
      
 488 
     | 
    
         
            +
                  #   @return [String] the member's first name
         
     | 
| 
      
 489 
     | 
    
         
            +
                  # @!attribute [rw] last_name
         
     | 
| 
      
 490 
     | 
    
         
            +
                  #   @return [String] the member's last name
         
     | 
| 
      
 491 
     | 
    
         
            +
                  # @!attribute [rw] date_of_birth
         
     | 
| 
      
 492 
     | 
    
         
            +
                  #   @return [Date] the member's date of birth
         
     | 
| 
      
 493 
     | 
    
         
            +
                  # @!attribute [rw] attending
         
     | 
| 
      
 494 
     | 
    
         
            +
                  #   @return [Symbol] whether the member is attending (either :yes, :no, :invited, :shown or nil)
         
     | 
| 
      
 495 
     | 
    
         
            +
                  # @!attribute [rw] payments
         
     | 
| 
      
 496 
     | 
    
         
            +
                  #   @return [Hash] keys are the payment's id, values are the payment state
         
     | 
| 
      
 497 
     | 
    
         
            +
                  # @!attribute [rw] payment_control
         
     | 
| 
      
 498 
     | 
    
         
            +
                  #   @return [Symbol] whether payments are done manually or automatically (either :manual, :automatic or nil)
         
     | 
| 
       471 
499 
     | 
    
         | 
| 
       472 
500 
     | 
    
         
             
                  attribute :row, :type => Integer
         
     | 
| 
       473 
501 
     | 
    
         
             
                  attribute :member_id, :type => Integer
         
     | 
| 
       474 
502 
     | 
    
         
             
                  attribute :grouping_id, :type => Integer
         
     | 
| 
       475 
503 
     | 
    
         
             
                  attribute :fields, :default => {}
         
     | 
| 
       476 
504 
     | 
    
         
             
                  attribute :event
         
     | 
| 
       477 
     | 
    
         
            -
             
     | 
| 
       478 
     | 
    
         
            -
                   
     | 
| 
       479 
     | 
    
         
            -
             
     | 
| 
      
 505 
     | 
    
         
            +
                  attribute :first_name, :type => String
         
     | 
| 
      
 506 
     | 
    
         
            +
                  attribute :last_name, :type => String
         
     | 
| 
      
 507 
     | 
    
         
            +
                  attribute :date_of_birth, :type => Date
         
     | 
| 
      
 508 
     | 
    
         
            +
                  attribute :attending
         
     | 
| 
      
 509 
     | 
    
         
            +
                  attribute :payments, :default => {}
         
     | 
| 
      
 510 
     | 
    
         
            +
                  attribute :payment_control
         
     | 
| 
      
 511 
     | 
    
         
            +
             
     | 
| 
      
 512 
     | 
    
         
            +
                  attr_accessible :member_id, :grouping_id, :fields, :row, :event, :first_name, :last_name, :date_of_birth, :attending, :payments, :payment_control
         
     | 
| 
      
 513 
     | 
    
         
            +
             
     | 
| 
       480 
514 
     | 
    
         
             
                  validates_numericality_of :row, :only_integer=>true, :greater_than_or_equal_to=>0
         
     | 
| 
       481 
515 
     | 
    
         
             
                  validates_numericality_of :member_id, :only_integer=>true, :greater_than=>0
         
     | 
| 
       482 
516 
     | 
    
         
             
                  validates_numericality_of :grouping_id, :only_integer=>true, :greater_than_or_equal_to=>-2
         
     | 
| 
       483 
     | 
    
         
            -
                  validates :fields, :hash => {:key_type => String}
         
     | 
| 
      
 517 
     | 
    
         
            +
                  validates :fields, :hash => { :key_type => Fixnum, :value_type => String }
         
     | 
| 
      
 518 
     | 
    
         
            +
                  validates :payments, :hash => { :key_type => Fixnum, :value_type => String }
         
     | 
| 
       484 
519 
     | 
    
         
             
                  validates_each :event do |record, attr, value|
         
     | 
| 
       485 
520 
     | 
    
         
             
                    record.event.valid?
         
     | 
| 
       486 
521 
     | 
    
         
             
                  end
         
     | 
| 
      
 522 
     | 
    
         
            +
                  validates_presence_of :first_name
         
     | 
| 
      
 523 
     | 
    
         
            +
                  validates_presence_of :last_name
         
     | 
| 
      
 524 
     | 
    
         
            +
                  validates_presence_of :date_of_birth
         
     | 
| 
      
 525 
     | 
    
         
            +
                  validates_inclusion_of :payment_control, :in => [:manual, :automatic, nil]
         
     | 
| 
      
 526 
     | 
    
         
            +
                  validates_inclusion_of :attending, :in => [:yes, :no, :invited, :shown, nil]
         
     | 
| 
      
 527 
     | 
    
         
            +
             
     | 
| 
       487 
528 
     | 
    
         | 
| 
       488 
     | 
    
         
            -
              
         
     | 
| 
       489 
529 
     | 
    
         
             
                  # @!method initialize
         
     | 
| 
       490 
530 
     | 
    
         
             
                  #   Initialize a new Attendance
         
     | 
| 
       491 
531 
     | 
    
         
             
                  #   @param [Hash] attributes The hash of attributes (see attributes for descriptions, use Symbol of attribute name as the key)
         
     | 
| 
      
 532 
     | 
    
         
            +
                  old_initialize = instance_method(:initialize)
         
     | 
| 
      
 533 
     | 
    
         
            +
                  define_method :initialize do |*args|
         
     | 
| 
      
 534 
     | 
    
         
            +
                    ret_val = old_initialize.bind(self).call(*args)
         
     | 
| 
      
 535 
     | 
    
         
            +
                    self.fields = DirtyHashy.new(self.fields)
         
     | 
| 
      
 536 
     | 
    
         
            +
                    self.fields.clean_up!
         
     | 
| 
      
 537 
     | 
    
         
            +
                    return ret_val
         
     | 
| 
      
 538 
     | 
    
         
            +
                  end
         
     | 
| 
       492 
539 
     | 
    
         | 
| 
       493 
540 
     | 
    
         | 
| 
       494 
541 
     | 
    
         
             
                  # Update event attendance
         
     | 
| 
       495 
542 
     | 
    
         
             
                  # @param [Osm::Api] api The api to use to make the request
         
     | 
| 
       496 
     | 
    
         
            -
                  # @param [String] field_id The id of the field to update (must be 'attending' or /\Af_\d+\Z/)
         
     | 
| 
       497 
543 
     | 
    
         
             
                  # @return [Boolean] if the operation suceeded or not
         
     | 
| 
       498 
     | 
    
         
            -
                   
     | 
| 
       499 
     | 
    
         
            -
                  def update(api, field_id)
         
     | 
| 
      
 544 
     | 
    
         
            +
                  def update(api)
         
     | 
| 
       500 
545 
     | 
    
         
             
                    require_ability_to(api, :write, :events, event.section_id)
         
     | 
| 
       501 
     | 
    
         
            -
             
     | 
| 
       502 
     | 
    
         
            -
             
     | 
| 
       503 
     | 
    
         
            -
             
     | 
| 
       504 
     | 
    
         
            -
                       
     | 
| 
       505 
     | 
    
         
            -
             
     | 
| 
       506 
     | 
    
         
            -
             
     | 
| 
       507 
     | 
    
         
            -
                       
     | 
| 
       508 
     | 
    
         
            -
                       
     | 
| 
       509 
     | 
    
         
            -
                       
     | 
| 
       510 
     | 
    
         
            -
             
     | 
| 
       511 
     | 
    
         
            -
             
     | 
| 
       512 
     | 
    
         
            -
             
     | 
| 
      
 546 
     | 
    
         
            +
             
     | 
| 
      
 547 
     | 
    
         
            +
                    payment_values = {
         
     | 
| 
      
 548 
     | 
    
         
            +
                      :manual => 'Manual',
         
     | 
| 
      
 549 
     | 
    
         
            +
                      :automatic => 'Automatic',
         
     | 
| 
      
 550 
     | 
    
         
            +
                    }
         
     | 
| 
      
 551 
     | 
    
         
            +
                    attending_values = {
         
     | 
| 
      
 552 
     | 
    
         
            +
                      :yes => 'Yes',
         
     | 
| 
      
 553 
     | 
    
         
            +
                      :no => 'No',
         
     | 
| 
      
 554 
     | 
    
         
            +
                      :invited => 'Invited',
         
     | 
| 
      
 555 
     | 
    
         
            +
                      :shown => 'Show in My.SCOUT',
         
     | 
| 
      
 556 
     | 
    
         
            +
                    }
         
     | 
| 
      
 557 
     | 
    
         
            +
             
     | 
| 
      
 558 
     | 
    
         
            +
                    updated = true
         
     | 
| 
      
 559 
     | 
    
         
            +
                    fields.changes.each do |field, (was,now)|
         
     | 
| 
      
 560 
     | 
    
         
            +
                      data = api.perform_query("events.php?action=updateScout", {
         
     | 
| 
      
 561 
     | 
    
         
            +
                        'scoutid' => member_id,
         
     | 
| 
      
 562 
     | 
    
         
            +
                        'column' => "f_#{field}",
         
     | 
| 
      
 563 
     | 
    
         
            +
                        'value' => now,
         
     | 
| 
      
 564 
     | 
    
         
            +
                        'sectionid' => event.section_id,
         
     | 
| 
      
 565 
     | 
    
         
            +
                        'row' => row,
         
     | 
| 
      
 566 
     | 
    
         
            +
                        'eventid' => event.id,
         
     | 
| 
      
 567 
     | 
    
         
            +
                      })
         
     | 
| 
      
 568 
     | 
    
         
            +
                      updated = false unless data.is_a?(Hash)
         
     | 
| 
      
 569 
     | 
    
         
            +
                    end
         
     | 
| 
      
 570 
     | 
    
         
            +
             
     | 
| 
      
 571 
     | 
    
         
            +
                    if changed_attributes.include?('payment_control')
         
     | 
| 
      
 572 
     | 
    
         
            +
                      data = api.perform_query("events.php?action=updateScout", {
         
     | 
| 
      
 573 
     | 
    
         
            +
                        'scoutid' => member_id,
         
     | 
| 
      
 574 
     | 
    
         
            +
                        'column' => 'payment',
         
     | 
| 
      
 575 
     | 
    
         
            +
                        'value' => payment_values[payment_control],
         
     | 
| 
      
 576 
     | 
    
         
            +
                        'sectionid' => event.section_id,
         
     | 
| 
      
 577 
     | 
    
         
            +
                        'row' => row,
         
     | 
| 
      
 578 
     | 
    
         
            +
                        'eventid' => event.id,
         
     | 
| 
      
 579 
     | 
    
         
            +
                      })
         
     | 
| 
      
 580 
     | 
    
         
            +
                      updated = false unless data.is_a?(Hash)
         
     | 
| 
      
 581 
     | 
    
         
            +
                    end
         
     | 
| 
      
 582 
     | 
    
         
            +
                    if changed_attributes.include?('attending')
         
     | 
| 
      
 583 
     | 
    
         
            +
                      data = api.perform_query("events.php?action=updateScout", {
         
     | 
| 
      
 584 
     | 
    
         
            +
                        'scoutid' => member_id,
         
     | 
| 
      
 585 
     | 
    
         
            +
                        'column' => 'attending',
         
     | 
| 
      
 586 
     | 
    
         
            +
                        'value' => attending_values[attending],
         
     | 
| 
      
 587 
     | 
    
         
            +
                        'sectionid' => event.section_id,
         
     | 
| 
      
 588 
     | 
    
         
            +
                        'row' => row,
         
     | 
| 
      
 589 
     | 
    
         
            +
                        'eventid' => event.id,
         
     | 
| 
      
 590 
     | 
    
         
            +
                      })
         
     | 
| 
      
 591 
     | 
    
         
            +
                      updated = false unless data.is_a?(Hash)
         
     | 
| 
      
 592 
     | 
    
         
            +
                    end
         
     | 
| 
      
 593 
     | 
    
         
            +
             
     | 
| 
      
 594 
     | 
    
         
            +
                    if updated
         
     | 
| 
       513 
595 
     | 
    
         
             
                      reset_changed_attributes
         
     | 
| 
      
 596 
     | 
    
         
            +
                      fields.clean_up!
         
     | 
| 
       514 
597 
     | 
    
         
             
                      # The cached event attedance will be out of date
         
     | 
| 
       515 
     | 
    
         
            -
                       
     | 
| 
       516 
     | 
    
         
            -
             
     | 
| 
       517 
     | 
    
         
            -
                     
     | 
| 
       518 
     | 
    
         
            -
             
     | 
| 
      
 598 
     | 
    
         
            +
                      cache_delete(api, ['event_attendance', event.id])
         
     | 
| 
      
 599 
     | 
    
         
            +
                    end
         
     | 
| 
      
 600 
     | 
    
         
            +
                    return updated
         
     | 
| 
      
 601 
     | 
    
         
            +
                  end
         
     | 
| 
      
 602 
     | 
    
         
            +
             
     | 
| 
      
 603 
     | 
    
         
            +
                  # @! method automatic_payments?
         
     | 
| 
      
 604 
     | 
    
         
            +
                  #  Check wether payments are made automatically for this member
         
     | 
| 
      
 605 
     | 
    
         
            +
                  #  @return [Boolean]
         
     | 
| 
      
 606 
     | 
    
         
            +
                  # @! method manual_payments?
         
     | 
| 
      
 607 
     | 
    
         
            +
                  #  Check wether payments are made manually for this member
         
     | 
| 
      
 608 
     | 
    
         
            +
                  #  @return [Boolean]
         
     | 
| 
      
 609 
     | 
    
         
            +
                  [:automatic, :manual].each do |payment_control_type|
         
     | 
| 
      
 610 
     | 
    
         
            +
                    define_method "#{payment_control_type}_payments?" do
         
     | 
| 
      
 611 
     | 
    
         
            +
                      payments == payment_control_type
         
     | 
| 
       519 
612 
     | 
    
         
             
                    end
         
     | 
| 
       520 
613 
     | 
    
         
             
                  end
         
     | 
| 
       521 
614 
     | 
    
         | 
| 
       522 
     | 
    
         
            -
                  #  
     | 
| 
      
 615 
     | 
    
         
            +
                  # @! method is_attending?
         
     | 
| 
      
 616 
     | 
    
         
            +
                  #  Check wether the member has said they are attending the event
         
     | 
| 
      
 617 
     | 
    
         
            +
                  #  @return [Boolean]
         
     | 
| 
      
 618 
     | 
    
         
            +
                  # @! method is_not_attending?
         
     | 
| 
      
 619 
     | 
    
         
            +
                  #  Check wether the member has said they are not attending the event
         
     | 
| 
      
 620 
     | 
    
         
            +
                  #  @return [Boolean]
         
     | 
| 
      
 621 
     | 
    
         
            +
                  # @! method is_invited?
         
     | 
| 
      
 622 
     | 
    
         
            +
                  #  Check wether the member has been invited to the event
         
     | 
| 
      
 623 
     | 
    
         
            +
                  #  @return [Boolean]
         
     | 
| 
      
 624 
     | 
    
         
            +
                  # @! method is_shown?
         
     | 
| 
      
 625 
     | 
    
         
            +
                  #  Check wether the member can see the event in My.SCOUT
         
     | 
| 
      
 626 
     | 
    
         
            +
                  #  @return [Boolean]
         
     | 
| 
      
 627 
     | 
    
         
            +
                  [:attending, :not_attending, :invited, :shown].each do |attending_type|
         
     | 
| 
      
 628 
     | 
    
         
            +
                    define_method "is_#{attending_type}?" do
         
     | 
| 
      
 629 
     | 
    
         
            +
                      attending == attending_type
         
     | 
| 
      
 630 
     | 
    
         
            +
                    end
         
     | 
| 
      
 631 
     | 
    
         
            +
                  end
         
     | 
| 
      
 632 
     | 
    
         
            +
             
     | 
| 
      
 633 
     | 
    
         
            +
                  # Compare Attendance based on event then row
         
     | 
| 
       523 
634 
     | 
    
         
             
                  def <=>(another)
         
     | 
| 
       524 
635 
     | 
    
         
             
                    result = self.event <=> another.try(:event)
         
     | 
| 
       525 
636 
     | 
    
         
             
                    result = self.row <=> another.try(:row) if result == 0
         
     | 
| 
       526 
637 
     | 
    
         
             
                    return result
         
     | 
| 
       527 
638 
     | 
    
         
             
                  end
         
     | 
| 
       528 
639 
     | 
    
         | 
| 
      
 640 
     | 
    
         
            +
                  def inspect
         
     | 
| 
      
 641 
     | 
    
         
            +
                    Osm.inspect_instance(self, options={:replace_with => {'event' => :id}})
         
     | 
| 
      
 642 
     | 
    
         
            +
                  end
         
     | 
| 
      
 643 
     | 
    
         
            +
             
     | 
| 
       529 
644 
     | 
    
         
             
                end # Class Attendance
         
     | 
| 
       530 
645 
     | 
    
         | 
| 
       531 
646 
     | 
    
         
             
              end # Class Event
         
     | 
    
        data/lib/osm/flexi_record.rb
    CHANGED
    
    | 
         @@ -226,6 +226,10 @@ module Osm 
     | 
|
| 
       226 
226 
     | 
    
         
             
                    return result
         
     | 
| 
       227 
227 
     | 
    
         
             
                  end
         
     | 
| 
       228 
228 
     | 
    
         | 
| 
      
 229 
     | 
    
         
            +
                  def inspect
         
     | 
| 
      
 230 
     | 
    
         
            +
                    Osm.inspect_instance(self, options={:replace_with => {'flexi_record' => :id}})
         
     | 
| 
      
 231 
     | 
    
         
            +
                  end
         
     | 
| 
      
 232 
     | 
    
         
            +
             
     | 
| 
       229 
233 
     | 
    
         
             
                end # Class FlexiRecord::Column
         
     | 
| 
       230 
234 
     | 
    
         | 
| 
       231 
235 
     | 
    
         | 
| 
         @@ -316,6 +320,10 @@ module Osm 
     | 
|
| 
       316 
320 
     | 
    
         
             
                    return result
         
     | 
| 
       317 
321 
     | 
    
         
             
                  end
         
     | 
| 
       318 
322 
     | 
    
         | 
| 
      
 323 
     | 
    
         
            +
                  def inspect
         
     | 
| 
      
 324 
     | 
    
         
            +
                    Osm.inspect_instance(self, options={:replace_with => {'flexi_record' => :id}})
         
     | 
| 
      
 325 
     | 
    
         
            +
                  end
         
     | 
| 
      
 326 
     | 
    
         
            +
             
     | 
| 
       319 
327 
     | 
    
         
             
                end # Class FlexiRecord::Data
         
     | 
| 
       320 
328 
     | 
    
         | 
| 
       321 
329 
     | 
    
         
             
              end # Class FlexiRecord
         
     | 
    
        data/lib/osm/section.rb
    CHANGED
    
    | 
         @@ -14,7 +14,7 @@ module Osm 
     | 
|
| 
       14 
14 
     | 
    
         
             
                # @!attribute [rw] subscription_expires
         
     | 
| 
       15 
15 
     | 
    
         
             
                #   @return [Date] when the section's subscription to OSM expires
         
     | 
| 
       16 
16 
     | 
    
         
             
                # @!attribute [rw] type
         
     | 
| 
       17 
     | 
    
         
            -
                #   @return [Symbol] the section type (:beavers, :cubs, :scouts, :exporers, :adults, :waiting, :unknown)
         
     | 
| 
      
 17 
     | 
    
         
            +
                #   @return [Symbol] the section type (:beavers, :cubs, :scouts, :exporers, :network, :adults, :waiting, :unknown)
         
     | 
| 
       18 
18 
     | 
    
         
             
                # @!attribute [rw] column_names
         
     | 
| 
       19 
19 
     | 
    
         
             
                #   @return [Hash] custom names to use for the data columns
         
     | 
| 
       20 
20 
     | 
    
         
             
                # @!attribute [rw] fields
         
     | 
| 
         @@ -310,13 +310,16 @@ module Osm 
     | 
|
| 
       310 
310 
     | 
    
         
             
                # @!method explorers?
         
     | 
| 
       311 
311 
     | 
    
         
             
                #   Check if this is an Explorers section
         
     | 
| 
       312 
312 
     | 
    
         
             
                #   @return (Boolean)
         
     | 
| 
      
 313 
     | 
    
         
            +
                # @!method network?
         
     | 
| 
      
 314 
     | 
    
         
            +
                #   Check if this is a Network section
         
     | 
| 
      
 315 
     | 
    
         
            +
                #   @return (Boolean)
         
     | 
| 
       313 
316 
     | 
    
         
             
                # @!method adults?
         
     | 
| 
       314 
317 
     | 
    
         
             
                #   Check if this is an Adults section
         
     | 
| 
       315 
318 
     | 
    
         
             
                #   @return (Boolean)
         
     | 
| 
       316 
319 
     | 
    
         
             
                # @!method waiting?
         
     | 
| 
       317 
320 
     | 
    
         
             
                #   Check if this is a waiting list
         
     | 
| 
       318 
321 
     | 
    
         
             
                #   @return (Boolean)
         
     | 
| 
       319 
     | 
    
         
            -
                [:beavers, :cubs, :scouts, :explorers, :adults, :waiting].each do |attribute|
         
     | 
| 
      
 322 
     | 
    
         
            +
                [:beavers, :cubs, :scouts, :explorers, :network, :adults, :waiting].each do |attribute|
         
     | 
| 
       320 
323 
     | 
    
         
             
                  define_method "#{attribute}?" do
         
     | 
| 
       321 
324 
     | 
    
         
             
                    type == attribute
         
     | 
| 
       322 
325 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -336,7 +339,7 @@ module Osm 
     | 
|
| 
       336 
339 
     | 
    
         
             
                def <=>(another)
         
     | 
| 
       337 
340 
     | 
    
         
             
                  result = self.group_name <=> another.try(:group_name)
         
     | 
| 
       338 
341 
     | 
    
         
             
                  result = 0 if self.type == another.try(:type) && result == 0
         
     | 
| 
       339 
     | 
    
         
            -
                  [:beavers, :cubs, :scouts, :explorers, : 
     | 
| 
      
 342 
     | 
    
         
            +
                  [:beavers, :cubs, :scouts, :explorers, :network, :adults, :waiting].each do |type|
         
     | 
| 
       340 
343 
     | 
    
         
             
                    if result == 0
         
     | 
| 
       341 
344 
     | 
    
         
             
                      result = -1 if self.type == type
         
     | 
| 
       342 
345 
     | 
    
         
             
                      result =  1 if another.try(:type) == type
         
     | 
    
        data/spec/osm/event_spec.rb
    CHANGED
    
    | 
         @@ -69,7 +69,12 @@ describe "Event" do 
     | 
|
| 
       69 
69 
     | 
    
         
             
                    :member_id => 1,
         
     | 
| 
       70 
70 
     | 
    
         
             
                    :grouping_id => 2,
         
     | 
| 
       71 
71 
     | 
    
         
             
                    :row => 3,
         
     | 
| 
       72 
     | 
    
         
            -
                    : 
     | 
| 
      
 72 
     | 
    
         
            +
                    :first_name => 'First',
         
     | 
| 
      
 73 
     | 
    
         
            +
                    :last_name => 'Last',
         
     | 
| 
      
 74 
     | 
    
         
            +
                    :attending => :yes,
         
     | 
| 
      
 75 
     | 
    
         
            +
                    :date_of_birth => Date.new(2000, 1, 2),
         
     | 
| 
      
 76 
     | 
    
         
            +
                    :fields => {},
         
     | 
| 
      
 77 
     | 
    
         
            +
                    :payments => {},
         
     | 
| 
       73 
78 
     | 
    
         
             
                    :event => Osm::Event.new(:id => 1, :section_id => 1, :name => 'Name', :columns => [])
         
     | 
| 
       74 
79 
     | 
    
         
             
                  }
         
     | 
| 
       75 
80 
     | 
    
         | 
| 
         @@ -77,7 +82,12 @@ describe "Event" do 
     | 
|
| 
       77 
82 
     | 
    
         
             
                  ea.member_id.should == 1
         
     | 
| 
       78 
83 
     | 
    
         
             
                  ea.grouping_id.should == 2
         
     | 
| 
       79 
84 
     | 
    
         
             
                  ea.fields.should == {}
         
     | 
| 
      
 85 
     | 
    
         
            +
                  ea.payments.should == {}
         
     | 
| 
       80 
86 
     | 
    
         
             
                  ea.row.should == 3
         
     | 
| 
      
 87 
     | 
    
         
            +
                  ea.first_name.should == 'First'
         
     | 
| 
      
 88 
     | 
    
         
            +
                  ea.last_name.should == 'Last'
         
     | 
| 
      
 89 
     | 
    
         
            +
                  ea.date_of_birth.should == Date.new(2000, 1, 2)
         
     | 
| 
      
 90 
     | 
    
         
            +
                  ea.attending.should == :yes
         
     | 
| 
       81 
91 
     | 
    
         
             
                  ea.valid?.should be_true
         
     | 
| 
       82 
92 
     | 
    
         
             
                end
         
     | 
| 
       83 
93 
     | 
    
         | 
| 
         @@ -528,6 +538,8 @@ describe "Event" do 
     | 
|
| 
       528 
538 
     | 
    
         
             
                        'dob' => '1980-01-02',
         
     | 
| 
       529 
539 
     | 
    
         
             
                        'patrolid' => '2',
         
     | 
| 
       530 
540 
     | 
    
         
             
                        'f_1' => 'a',
         
     | 
| 
      
 541 
     | 
    
         
            +
                        'payment' => 'Manual',
         
     | 
| 
      
 542 
     | 
    
         
            +
                        'p1' => ''
         
     | 
| 
       531 
543 
     | 
    
         
             
                      }
         
     | 
| 
       532 
544 
     | 
    
         
             
                    ]
         
     | 
| 
       533 
545 
     | 
    
         
             
                  }
         
     | 
| 
         @@ -541,25 +553,63 @@ describe "Event" do 
     | 
|
| 
       541 
553 
     | 
    
         
             
                  ea = attendance[0]
         
     | 
| 
       542 
554 
     | 
    
         
             
                  ea.member_id.should == 1
         
     | 
| 
       543 
555 
     | 
    
         
             
                  ea.grouping_id.should == 2
         
     | 
| 
      
 556 
     | 
    
         
            +
                  ea.first_name.should == 'First'
         
     | 
| 
      
 557 
     | 
    
         
            +
                  ea.last_name.should == 'Last'
         
     | 
| 
      
 558 
     | 
    
         
            +
                  ea.date_of_birth.should == Date.new(1980, 1, 2)
         
     | 
| 
      
 559 
     | 
    
         
            +
                  ea.attending.should == :yes
         
     | 
| 
       544 
560 
     | 
    
         
             
                  ea.fields.should == {
         
     | 
| 
       545 
     | 
    
         
            -
                     
     | 
| 
       546 
     | 
    
         
            -
             
     | 
| 
       547 
     | 
    
         
            -
             
     | 
| 
       548 
     | 
    
         
            -
                     
     | 
| 
       549 
     | 
    
         
            -
                    'f_1' => 'a',
         
     | 
| 
      
 561 
     | 
    
         
            +
                    1 => 'a',
         
     | 
| 
      
 562 
     | 
    
         
            +
                  }
         
     | 
| 
      
 563 
     | 
    
         
            +
                  ea.payments.should == {
         
     | 
| 
      
 564 
     | 
    
         
            +
                    1 => '',
         
     | 
| 
       550 
565 
     | 
    
         
             
                  }
         
     | 
| 
       551 
566 
     | 
    
         
             
                  ea.row.should == 0
         
     | 
| 
       552 
567 
     | 
    
         
             
                end
         
     | 
| 
       553 
568 
     | 
    
         | 
| 
       554 
569 
     | 
    
         
             
                it "Update attendance (succeded)" do
         
     | 
| 
       555 
     | 
    
         
            -
                  ea = Osm::Event::Attendance.new(:row => 0, :member_id => 4, :fields => {' 
     | 
| 
      
 570 
     | 
    
         
            +
                  ea = Osm::Event::Attendance.new(:row => 0, :member_id => 4, :fields => {1 => 'old value', 2 => 'another old value'}, :event => Osm::Event.new(:id => 2, :section_id => 1))
         
     | 
| 
       556 
571 
     | 
    
         | 
| 
      
 572 
     | 
    
         
            +
                  ea.fields[1] = 'value'
         
     | 
| 
       557 
573 
     | 
    
         
             
                  HTTParty.should_receive(:post).with(
         
     | 
| 
       558 
574 
     | 
    
         
             
                    "https://www.onlinescoutmanager.co.uk/events.php?action=updateScout",
         
     | 
| 
       559 
575 
     | 
    
         
             
                    {:body => {
         
     | 
| 
       560 
576 
     | 
    
         
             
                      'scoutid' => 4,
         
     | 
| 
       561 
577 
     | 
    
         
             
                      'column' => 'f_1',
         
     | 
| 
       562 
     | 
    
         
            -
                      'value' => ' 
     | 
| 
      
 578 
     | 
    
         
            +
                      'value' => 'value',
         
     | 
| 
      
 579 
     | 
    
         
            +
                      'sectionid' => 1,
         
     | 
| 
      
 580 
     | 
    
         
            +
                      'row' => 0,
         
     | 
| 
      
 581 
     | 
    
         
            +
                      'eventid' => 2,
         
     | 
| 
      
 582 
     | 
    
         
            +
                      'apiid' => @CONFIGURATION[:api][:osm][:id],
         
     | 
| 
      
 583 
     | 
    
         
            +
                      'token' => @CONFIGURATION[:api][:osm][:token],
         
     | 
| 
      
 584 
     | 
    
         
            +
                      'userid' => 'user_id',
         
     | 
| 
      
 585 
     | 
    
         
            +
                      'secret' => 'secret',
         
     | 
| 
      
 586 
     | 
    
         
            +
                    }}
         
     | 
| 
      
 587 
     | 
    
         
            +
                  ) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>'{}'}) }
         
     | 
| 
      
 588 
     | 
    
         
            +
             
     | 
| 
      
 589 
     | 
    
         
            +
                  ea.attending = :yes
         
     | 
| 
      
 590 
     | 
    
         
            +
                  HTTParty.should_receive(:post).with(
         
     | 
| 
      
 591 
     | 
    
         
            +
                    "https://www.onlinescoutmanager.co.uk/events.php?action=updateScout",
         
     | 
| 
      
 592 
     | 
    
         
            +
                    {:body => {
         
     | 
| 
      
 593 
     | 
    
         
            +
                      'scoutid' => 4,
         
     | 
| 
      
 594 
     | 
    
         
            +
                      'column' => 'attending',
         
     | 
| 
      
 595 
     | 
    
         
            +
                      'value' => 'Yes',
         
     | 
| 
      
 596 
     | 
    
         
            +
                      'sectionid' => 1,
         
     | 
| 
      
 597 
     | 
    
         
            +
                      'row' => 0,
         
     | 
| 
      
 598 
     | 
    
         
            +
                      'eventid' => 2,
         
     | 
| 
      
 599 
     | 
    
         
            +
                      'apiid' => @CONFIGURATION[:api][:osm][:id],
         
     | 
| 
      
 600 
     | 
    
         
            +
                      'token' => @CONFIGURATION[:api][:osm][:token],
         
     | 
| 
      
 601 
     | 
    
         
            +
                      'userid' => 'user_id',
         
     | 
| 
      
 602 
     | 
    
         
            +
                      'secret' => 'secret',
         
     | 
| 
      
 603 
     | 
    
         
            +
                    }}
         
     | 
| 
      
 604 
     | 
    
         
            +
                  ) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>'{}'}) }
         
     | 
| 
      
 605 
     | 
    
         
            +
             
     | 
| 
      
 606 
     | 
    
         
            +
                  ea.payment_control = :automatic
         
     | 
| 
      
 607 
     | 
    
         
            +
                  HTTParty.should_receive(:post).with(
         
     | 
| 
      
 608 
     | 
    
         
            +
                    "https://www.onlinescoutmanager.co.uk/events.php?action=updateScout",
         
     | 
| 
      
 609 
     | 
    
         
            +
                    {:body => {
         
     | 
| 
      
 610 
     | 
    
         
            +
                      'scoutid' => 4,
         
     | 
| 
      
 611 
     | 
    
         
            +
                      'column' => 'payment',
         
     | 
| 
      
 612 
     | 
    
         
            +
                      'value' => 'Automatic',
         
     | 
| 
       563 
613 
     | 
    
         
             
                      'sectionid' => 1,
         
     | 
| 
       564 
614 
     | 
    
         
             
                      'row' => 0,
         
     | 
| 
       565 
615 
     | 
    
         
             
                      'eventid' => 2,
         
     | 
| 
         @@ -570,7 +620,7 @@ describe "Event" do 
     | 
|
| 
       570 
620 
     | 
    
         
             
                    }}
         
     | 
| 
       571 
621 
     | 
    
         
             
                  ) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>'{}'}) }
         
     | 
| 
       572 
622 
     | 
    
         | 
| 
       573 
     | 
    
         
            -
                  ea.update(@api 
     | 
| 
      
 623 
     | 
    
         
            +
                  ea.update(@api).should be_true
         
     | 
| 
       574 
624 
     | 
    
         
             
                end
         
     | 
| 
       575 
625 
     | 
    
         | 
| 
       576 
626 
     | 
    
         | 
    
        data/spec/osm/osm_spec.rb
    CHANGED
    
    | 
         @@ -55,4 +55,32 @@ describe "Online Scout Manager" do 
     | 
|
| 
       55 
55 
     | 
    
         | 
| 
       56 
56 
     | 
    
         
             
              end
         
     | 
| 
       57 
57 
     | 
    
         | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
              describe "Inspect instance" do
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
                class TestA < Osm::Model
         
     | 
| 
      
 62 
     | 
    
         
            +
                  attribute :id
         
     | 
| 
      
 63 
     | 
    
         
            +
                  attribute :b
         
     | 
| 
      
 64 
     | 
    
         
            +
                  attr_accessible :id, :b
         
     | 
| 
      
 65 
     | 
    
         
            +
                end
         
     | 
| 
      
 66 
     | 
    
         
            +
                class TestB < Osm::Model
         
     | 
| 
      
 67 
     | 
    
         
            +
                  attribute :id
         
     | 
| 
      
 68 
     | 
    
         
            +
                  attribute :a
         
     | 
| 
      
 69 
     | 
    
         
            +
                  attr_accessible :id, :a
         
     | 
| 
      
 70 
     | 
    
         
            +
                end
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
                it "Returns a string" do
         
     | 
| 
      
 73 
     | 
    
         
            +
                  this_one = TestA.new(:id => 1, :b => '1')
         
     | 
| 
      
 74 
     | 
    
         
            +
                  inspect = Osm.inspect_instance(this_one)
         
     | 
| 
      
 75 
     | 
    
         
            +
                  inspect.should == '#<TestA b: "1", id: 1 >'
         
     | 
| 
      
 76 
     | 
    
         
            +
                end
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
                it "Replaces items with their attribute" do
         
     | 
| 
      
 79 
     | 
    
         
            +
                  this_one = TestA.new(:id => 1, :b => TestB.new(:id => 2))
         
     | 
| 
      
 80 
     | 
    
         
            +
                  inspect = Osm.inspect_instance(this_one, options={:replace_with => {'b' => :id}})
         
     | 
| 
      
 81 
     | 
    
         
            +
                  inspect.should == '#<TestA b.id: 2, id: 1 >'
         
     | 
| 
      
 82 
     | 
    
         
            +
                end
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
              end
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
       58 
86 
     | 
    
         
             
            end
         
     | 
    
        data/spec/osm/section_spec.rb
    CHANGED
    
    | 
         @@ -229,12 +229,13 @@ describe "Section" do 
     | 
|
| 
       229 
229 
     | 
    
         
             
                cubs      = Osm::Section.new(:type => :cubs)
         
     | 
| 
       230 
230 
     | 
    
         
             
                scouts    = Osm::Section.new(:type => :scouts)
         
     | 
| 
       231 
231 
     | 
    
         
             
                explorers = Osm::Section.new(:type => :explorers)
         
     | 
| 
      
 232 
     | 
    
         
            +
                network   = Osm::Section.new(:type => :network)
         
     | 
| 
       232 
233 
     | 
    
         
             
                adults    = Osm::Section.new(:type => :adults)
         
     | 
| 
       233 
234 
     | 
    
         
             
                waiting   = Osm::Section.new(:type => :waiting)
         
     | 
| 
       234 
235 
     | 
    
         | 
| 
       235 
     | 
    
         
            -
                {:beavers => beavers, :cubs => cubs, :scouts => scouts, :explorers => explorers, :adults => adults, :waiting => waiting, :unknown => unknown}.each do |section_type, section|
         
     | 
| 
      
 236 
     | 
    
         
            +
                {:beavers => beavers, :cubs => cubs, :scouts => scouts, :explorers => explorers, :network => network, :adults => adults, :waiting => waiting, :unknown => unknown}.each do |section_type, section|
         
     | 
| 
       236 
237 
     | 
    
         
             
                  it "For a #{section_type} section" do
         
     | 
| 
       237 
     | 
    
         
            -
                    [:beavers, :cubs, :scouts, :explorers, :adults, :waiting].each do |type|
         
     | 
| 
      
 238 
     | 
    
         
            +
                    [:beavers, :cubs, :scouts, :explorers, :network, :adults, :waiting].each do |type|
         
     | 
| 
       238 
239 
     | 
    
         
             
                      section.send("#{type.to_s}?").should == (section_type == type)
         
     | 
| 
       239 
240 
     | 
    
         
             
                    end
         
     | 
| 
       240 
241 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -248,6 +249,7 @@ describe "Section" do 
     | 
|
| 
       248 
249 
     | 
    
         
             
                cubs =      Osm::Section.new(:type => :cubs)
         
     | 
| 
       249 
250 
     | 
    
         
             
                scouts =    Osm::Section.new(:type => :scouts)
         
     | 
| 
       250 
251 
     | 
    
         
             
                explorers = Osm::Section.new(:type => :explorers)
         
     | 
| 
      
 252 
     | 
    
         
            +
                network =   Osm::Section.new(:type => :network)
         
     | 
| 
       251 
253 
     | 
    
         
             
                adults =    Osm::Section.new(:type => :adults)
         
     | 
| 
       252 
254 
     | 
    
         
             
                waiting =   Osm::Section.new(:type => :waiting)
         
     | 
| 
       253 
255 
     | 
    
         | 
| 
         @@ -256,7 +258,7 @@ describe "Section" do 
     | 
|
| 
       256 
258 
     | 
    
         
             
                    section.youth_section?.should be_true
         
     | 
| 
       257 
259 
     | 
    
         
             
                  end
         
     | 
| 
       258 
260 
     | 
    
         
             
                end
         
     | 
| 
       259 
     | 
    
         
            -
                [adults, waiting, unknown].each do |section|
         
     | 
| 
      
 261 
     | 
    
         
            +
                [network, adults, waiting, unknown].each do |section|
         
     | 
| 
       260 
262 
     | 
    
         
             
                  it "For a #{section.type} section" do
         
     | 
| 
       261 
263 
     | 
    
         
             
                    section.youth_section?.should be_false
         
     | 
| 
       262 
264 
     | 
    
         
             
                  end
         
     | 
    
        data/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: osm
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.4.0
         
     | 
| 
       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: 2013- 
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2013-03-10 00:00:00.000000000Z
         
     | 
| 
       13 
13 
     | 
    
         
             
            dependencies:
         
     | 
| 
       14 
14 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       15 
15 
     | 
    
         
             
              name: activesupport
         
     | 
| 
       16 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 16 
     | 
    
         
            +
              requirement: &88838420 !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: * 
     | 
| 
      
 24 
     | 
    
         
            +
              version_requirements: *88838420
         
     | 
| 
       25 
25 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       26 
26 
     | 
    
         
             
              name: httparty
         
     | 
| 
       27 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 27 
     | 
    
         
            +
              requirement: &88838170 !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: * 
     | 
| 
      
 35 
     | 
    
         
            +
              version_requirements: *88838170
         
     | 
| 
       36 
36 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       37 
37 
     | 
    
         
             
              name: active_attr
         
     | 
| 
       38 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 38 
     | 
    
         
            +
              requirement: &88837940 !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: * 
     | 
| 
      
 46 
     | 
    
         
            +
              version_requirements: *88837940
         
     | 
| 
       47 
47 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       48 
48 
     | 
    
         
             
              name: activemodel
         
     | 
| 
       49 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 49 
     | 
    
         
            +
              requirement: &88837710 !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: * 
     | 
| 
      
 57 
     | 
    
         
            +
              version_requirements: *88837710
         
     | 
| 
       58 
58 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       59 
59 
     | 
    
         
             
              name: dirty_hashy
         
     | 
| 
       60 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 60 
     | 
    
         
            +
              requirement: &88837480 !ruby/object:Gem::Requirement
         
     | 
| 
       61 
61 
     | 
    
         
             
                none: false
         
     | 
| 
       62 
62 
     | 
    
         
             
                requirements:
         
     | 
| 
       63 
63 
     | 
    
         
             
                - - ~>
         
     | 
| 
         @@ -65,10 +65,10 @@ dependencies: 
     | 
|
| 
       65 
65 
     | 
    
         
             
                    version: 0.2.1
         
     | 
| 
       66 
66 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       67 
67 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       68 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 68 
     | 
    
         
            +
              version_requirements: *88837480
         
     | 
| 
       69 
69 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       70 
70 
     | 
    
         
             
              name: rake
         
     | 
| 
       71 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 71 
     | 
    
         
            +
              requirement: &88837250 !ruby/object:Gem::Requirement
         
     | 
| 
       72 
72 
     | 
    
         
             
                none: false
         
     | 
| 
       73 
73 
     | 
    
         
             
                requirements:
         
     | 
| 
       74 
74 
     | 
    
         
             
                - - ~>
         
     | 
| 
         @@ -76,10 +76,10 @@ dependencies: 
     | 
|
| 
       76 
76 
     | 
    
         
             
                    version: '10.0'
         
     | 
| 
       77 
77 
     | 
    
         
             
              type: :development
         
     | 
| 
       78 
78 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       79 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 79 
     | 
    
         
            +
              version_requirements: *88837250
         
     | 
| 
       80 
80 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       81 
81 
     | 
    
         
             
              name: rspec
         
     | 
| 
       82 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 82 
     | 
    
         
            +
              requirement: &88837020 !ruby/object:Gem::Requirement
         
     | 
| 
       83 
83 
     | 
    
         
             
                none: false
         
     | 
| 
       84 
84 
     | 
    
         
             
                requirements:
         
     | 
| 
       85 
85 
     | 
    
         
             
                - - ~>
         
     | 
| 
         @@ -87,10 +87,10 @@ dependencies: 
     | 
|
| 
       87 
87 
     | 
    
         
             
                    version: '2.11'
         
     | 
| 
       88 
88 
     | 
    
         
             
              type: :development
         
     | 
| 
       89 
89 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       90 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 90 
     | 
    
         
            +
              version_requirements: *88837020
         
     | 
| 
       91 
91 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       92 
92 
     | 
    
         
             
              name: fakeweb
         
     | 
| 
       93 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 93 
     | 
    
         
            +
              requirement: &88836790 !ruby/object:Gem::Requirement
         
     | 
| 
       94 
94 
     | 
    
         
             
                none: false
         
     | 
| 
       95 
95 
     | 
    
         
             
                requirements:
         
     | 
| 
       96 
96 
     | 
    
         
             
                - - ~>
         
     | 
| 
         @@ -98,10 +98,10 @@ dependencies: 
     | 
|
| 
       98 
98 
     | 
    
         
             
                    version: '1.3'
         
     | 
| 
       99 
99 
     | 
    
         
             
              type: :development
         
     | 
| 
       100 
100 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       101 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 101 
     | 
    
         
            +
              version_requirements: *88836790
         
     | 
| 
       102 
102 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       103 
103 
     | 
    
         
             
              name: guard-rspec
         
     | 
| 
       104 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 104 
     | 
    
         
            +
              requirement: &88836560 !ruby/object:Gem::Requirement
         
     | 
| 
       105 
105 
     | 
    
         
             
                none: false
         
     | 
| 
       106 
106 
     | 
    
         
             
                requirements:
         
     | 
| 
       107 
107 
     | 
    
         
             
                - - ~>
         
     | 
| 
         @@ -109,10 +109,10 @@ dependencies: 
     | 
|
| 
       109 
109 
     | 
    
         
             
                    version: '2.4'
         
     | 
| 
       110 
110 
     | 
    
         
             
              type: :development
         
     | 
| 
       111 
111 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       112 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 112 
     | 
    
         
            +
              version_requirements: *88836560
         
     | 
| 
       113 
113 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       114 
114 
     | 
    
         
             
              name: rb-inotify
         
     | 
| 
       115 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 115 
     | 
    
         
            +
              requirement: &88836330 !ruby/object:Gem::Requirement
         
     | 
| 
       116 
116 
     | 
    
         
             
                none: false
         
     | 
| 
       117 
117 
     | 
    
         
             
                requirements:
         
     | 
| 
       118 
118 
     | 
    
         
             
                - - ~>
         
     | 
| 
         @@ -120,7 +120,7 @@ dependencies: 
     | 
|
| 
       120 
120 
     | 
    
         
             
                    version: '0.9'
         
     | 
| 
       121 
121 
     | 
    
         
             
              type: :development
         
     | 
| 
       122 
122 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       123 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 123 
     | 
    
         
            +
              version_requirements: *88836330
         
     | 
| 
       124 
124 
     | 
    
         
             
            description: Use the Online Scout Manager API (https://www.onlinescoutmanager.co.uk)
         
     | 
| 
       125 
125 
     | 
    
         
             
              to retrieve and save data.
         
     | 
| 
       126 
126 
     | 
    
         
             
            email:
         
     |