Sha256: e313fc1a00c9787e8b23b866cbb4b13cdff75288a6f71f01e7d33a977ce1025f

Contents?: true

Size: 1.5 KB

Versions: 6

Compression:

Stored size: 1.5 KB

Contents

module GovKit
  module CA
    module PostalCode
      # The set of postal code to electoral district strategies.
      module StrategySet
        # Stores the strategy set.
        # @return [Array<Strategy::Base>] the strategy set
        def self.strategies
          @@strategies ||= []
        end

        # Adds a strategy to the strategy set.
        # @param [Strategy::Base] strategy a strategy
        # @return [Array<Strategy::Base>] the strategy set
        def self.register(strategy)
          strategies << strategy unless strategies.include?(strategy)
        end

        # Runs through the strategies in order of registration. Returns the
        # output of the first strategy to successfully determine electoral
        # districts from a postal code.
        # @param [String] postal_code a postal code
        # @return [Array<Fixnum>] the electoral districts within the postal code
        # @raise [ResourceNotFound] if no strategy succeeds
        def self.run(postal_code)
          strategies.each do |strategy|
            begin
              electoral_districts = strategy.new(postal_code).electoral_districts
              return electoral_districts if electoral_districts
            rescue Timeout::Error, Errno::EINVAL, Errno::ECONNRESET,
              Errno::ETIMEDOUT, EOFError, Net::HTTPBadResponse,
              Net::HTTPHeaderSyntaxError, Net::ProtocolError
              # Do nothing. Continue.
            end
          end

          raise ResourceNotFound
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
govkit-ca-0.0.16 lib/gov_kit-ca/postal_code/strategy_set.rb
govkit-ca-0.0.15 lib/gov_kit-ca/postal_code/strategy_set.rb
govkit-ca-0.0.14 lib/gov_kit-ca/postal_code/strategy_set.rb
govkit-ca-0.0.13 lib/gov_kit-ca/postal_code/strategy_set.rb
govkit-ca-0.0.12 lib/gov_kit-ca/postal_code/strategy_set.rb
govkit-ca-0.0.11 lib/gov_kit-ca/postal_code/strategy_set.rb