Method: Osm::Badge::Data#started

Defined in:
lib/osm/badge.rb

#startedFixnum

Get which stage has been started

Returns:

  • (Fixnum)

    which stage of the badge has been started by the member (lowest)



691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
# File 'lib/osm/badge.rb', line 691

def started
  unless badge.has_levels?
    return started? ? 1 : 0
  end
  unless badge.show_level_letters
    # Nights, Hikes or Water
    done = requirements[badge.level_requirement].to_i
    levels = badge.levels                    # e.g. [0,1,2,3,4,5,10]
    return 0 if levels.include?(done)        # Has achieved a level (and not started next )
    return 0 if done >= levels[-1]           # No more levels to do
    (1..(levels.size-1)).to_a.reverse_each do |i|  # indexes from last to 2nd
      this_level = levels[i]
      previous_level = levels[i-1]
      return this_level if (done < this_level && done > previous_level) # this_level has been started (and not finished)
    end
    return 0 # No reason we should ever get here
  else
    # 'Normal' staged
    letters = ('a'..'z').to_a
    top_level = badge.levels[-1]
    return 0 if due == top_level || awarded == top_level # No more levels to do
    ((due + 1)..top_level).reverse_each do |level|
      badge.requirements.each do |requirement|
        next unless requirement.mod.letter.eql?(letters[level - 1]) # Not interested in other levels
        return level if requirement_met?(requirement.id)
      end
    end
    return 0 # No levels started
  end
end