Sha256: 3940d125cc94fe0dc01d50a9d1ecca7811d386169c4149dbf1a22408f360c03a

Contents?: true

Size: 815 Bytes

Versions: 11

Compression:

Stored size: 815 Bytes

Contents

# frozen_string_literal: true

module GoogleDistanceMatrix
  # Represents a collection of places
  class Places
    include Enumerable

    def initialize(places = [])
      @places = []
      concat Array.wrap(places)
    end

    delegate :each, :[], :length, :index, :pop, :shift, :delete_at, :compact, :inspect, to: :places

    %i[<< push unshift].each do |method|
      define_method method do |*args|
        args = ensure_args_are_places args

        places.public_send(method, *args)

        places.uniq!
        self
      end
    end

    def concat(other)
      push(*other)
    end

    private

    attr_reader :places

    def ensure_args_are_places(args)
      args.map do |arg|
        if arg.is_a? Place
          arg
        else
          Place.new arg
        end
      end
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
google_distance_matrix-0.7.1 lib/google_distance_matrix/places.rb
google_distance_matrix-0.7.0 lib/google_distance_matrix/places.rb
google_distance_matrix-0.6.7 lib/google_distance_matrix/places.rb
google_distance_matrix-0.6.6 lib/google_distance_matrix/places.rb
google_distance_matrix-0.6.5 lib/google_distance_matrix/places.rb
google_distance_matrix-0.6.4 lib/google_distance_matrix/places.rb
google_distance_matrix-0.6.3 lib/google_distance_matrix/places.rb
google_distance_matrix-0.6.2 lib/google_distance_matrix/places.rb
google_distance_matrix-0.6.1 lib/google_distance_matrix/places.rb
google_distance_matrix-0.6.0 lib/google_distance_matrix/places.rb
google_distance_matrix-0.5.0 lib/google_distance_matrix/places.rb