Sha256: 4794336c33888d997500dbab263a03498a56b506dee53dcfc19bb68763ca8e8d

Contents?: true

Size: 885 Bytes

Versions: 6

Compression:

Stored size: 885 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)) ? Yajl::Parser.parse(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, Yajl::Encoder.encode(value))
      value
    end

  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
gcoder-1.0.0 lib/gcoder/resolver.rb
gcoder-0.12.1 lib/gcoder/resolver.rb
gcoder-0.12.0 lib/gcoder/resolver.rb
gcoder-0.11.0 lib/gcoder/resolver.rb
gcoder-0.10.0 lib/gcoder/resolver.rb
gcoder-0.9.0 lib/gcoder/resolver.rb