Sha256: 8e897c147c2d9d638b5c64a8970e0dfa91d39bcaf10f894fffe27574fe7bc208

Contents?: true

Size: 875 Bytes

Versions: 2

Compression:

Stored size: 875 Bytes

Contents

module GCoder
  class Resolver

    def initialize(opts = {})
      @config = GCoder.config.merge(opts)
      if (adapter_name = @config[:storage])
        @conn = Storage[adapter_name].new(@config[:storage_config])
      else
        @conn = nil
      end
    end

    def [](*args)
      geocode *args
    end

    def geocode(query, opts = {})
      fetch([query, opts].join) {
        Geocoder::Request.new(query, opts).get.as_mash
      }.results
    end

    def fetch(key)
      raise ArgumentError, 'block required' unless block_given?
      Hashie::Mash.new(
        (val = get(key)) ? MultiJson.load(val) : set(key, yield)
      )
    end

    private

    def get(query)
      return nil unless @conn
      @conn.get(query)
    end

    def set(key, value)
      return value unless @conn
      @conn.set(key, MultiJson.dump(value))
      value
    end

  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
gcoder-1.2.0 lib/gcoder/resolver.rb
gcoder-1.1.0 lib/gcoder/resolver.rb