places 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in places.gemspec
4
+ gemspec
@@ -0,0 +1,50 @@
1
+ # Google Places
2
+
3
+ Ruby wrapper for the [Google Places API](http://code.google.com/apis/maps/documentation/places/).
4
+
5
+ ## Installation
6
+
7
+ Inside your Gemfile:
8
+ gem 'places'
9
+
10
+ ## Get Google Places API credentials
11
+
12
+ Go here and activate it: [https://code.google.com/apis/console](https://code.google.com/apis/console)
13
+
14
+ ## Usage
15
+
16
+ ### Instantiate a client
17
+
18
+ >> @client = Places::Client.new(:api_key => 'your_api_key')
19
+
20
+ ## Examples
21
+
22
+ #### Search for a place
23
+
24
+ >> @search = @client.search(:lat => 32.8481659, :lng => -97.1952847, :types => "food", :name => "roots")
25
+ >> @search.results.first.name
26
+ => 'Roots Coffeehouse'
27
+
28
+ #### Get details for a place
29
+
30
+ >> @detail = @client.details(:reference => "CnRpAAAAjVikwLlaJ2WN8i0cPwu3A0zcE9iCSMDihmbn_bkXYkM-7xtRcn-ZAmrQtWAAzxQPYxZmyaCeNIMQ_t_eWNDp1CmviA-iY-M63UjpUywQeR5B1dmZ2_Ne756bAjp2uYXTxobVtLKeWkVmGz2dFUMacRIQ6MbrsRQfx1fIbMf4s-s6RhoU-5Uxc26iNf80jxRypRlMJl_k6Gg")
31
+ >> @detail.result.name
32
+ >> 'Roots Coffeehouse'
33
+
34
+ #### Check-in to a place
35
+
36
+ >> @checkin = @client.checkin(:reference => "CnRpAAAAjVikwLlaJ2WN8i0cPwu3A0zcE9iCSMDihmbn_bkXYkM-7xtRcn-ZAmrQtWAAzxQPYxZmyaCeNIMQ_t_eWNDp1CmviA-iY-M63UjpUywQeR5B1dmZ2_Ne756bAjp2uYXTxobVtLKeWkVmGz2dFUMacRIQ6MbrsRQfx1fIbMf4s-s6RhoU-5Uxc26iNf80jxRypRlMJl_k6Gg")
37
+
38
+ #### Add a new place
39
+
40
+ >> @add = @client.add(:lat => -33.8669710, :lng => 151.1958750, :accuracy => 50, :name => "Google Shoes!", :types => "shoe_store")
41
+
42
+ #### Delete a place
43
+
44
+ >> @delete = @client.delete(:reference => "CkQxAAAAgoh_Zw4jcE_9-B1b56AgriFZKVdpgc5yYXtwRAPjs-aWIxgUi6Wl-Qe-DdDP5m7PUCzy9iOqWWmdx4sU53035RIQqqNIGGPevJaTM9l1Xh9hpRoUWxhdGBS0XppFiJhZMXX_jiuDsdY")
45
+
46
+ ## Copyright
47
+
48
+ Contact me if you have any suggestions and feel free to fork it!
49
+
50
+ Copyright (c) 2009 Johnny Khai Nguyen, released under the MIT license
@@ -0,0 +1,7 @@
1
+ require 'bundler'
2
+ require 'rspec/core/rake_task'
3
+
4
+ Bundler::GemHelper.install_tasks
5
+ RSpec::Core::RakeTask.new('spec')
6
+
7
+ task :default => :spec
@@ -0,0 +1,23 @@
1
+ require 'rubygems'
2
+ require 'httparty'
3
+ require 'hashie'
4
+ require 'json'
5
+
6
+ directory = File.expand_path(File.dirname(__FILE__))
7
+
8
+ Hash.send :include, Hashie::HashExtensions
9
+
10
+ module Places
11
+
12
+ def self.configure
13
+ yield self
14
+ true
15
+ end
16
+
17
+ class << self
18
+ attr_accessor :api_key
19
+ end
20
+
21
+ end
22
+
23
+ require File.join(directory, 'places', 'client')
@@ -0,0 +1,96 @@
1
+ module Places
2
+
3
+ class Client
4
+ include HTTParty
5
+ base_uri "https://maps.googleapis.com/maps/api/place"
6
+
7
+ attr_reader :api_key
8
+
9
+ def initialize(options={})
10
+ @api_key = options[:api_key] || GooglePlaces.api_key
11
+ end
12
+
13
+ def search(options={})
14
+ radius = options.delete(:radius) || 500
15
+ sensor = options.delete(:sensor) || false
16
+ types = options.delete(:types)
17
+ name = options.delete(:name)
18
+ lat = options.delete(:lat)
19
+ lng = options.delete(:lng)
20
+ location = [lat,lng].join(',')
21
+
22
+ options = {
23
+ :location => location,
24
+ :radius => radius,
25
+ :sensor => sensor,
26
+ :name => name
27
+ }
28
+
29
+ if types
30
+ types = (types.is_a?(Array) ? types.join('|') : types)
31
+ options.merge!(:types => types)
32
+ end
33
+
34
+ mashup(self.class.get("/search/json", :query => options.merge(self.default_options)))
35
+ end
36
+
37
+ def details(options={})
38
+ sensor = options.delete(:sensor) || false
39
+ reference = options.delete(:reference)
40
+ options = {:reference => reference, :sensor => sensor}
41
+ mashup(self.class.get("/details/json", :query => options.merge(self.default_options)))
42
+ end
43
+
44
+ def checkin(options={})
45
+ sensor = options.delete(:sensor) || false
46
+ reference = options.delete(:reference)
47
+ mashup(self.class.post("/check-in/json?sensor=#{sensor}&key=#{@api_key}", :body => {:reference => reference}.to_json))
48
+ end
49
+
50
+ def add(options={})
51
+ sensor = options.delete(:sensor) || false
52
+ accuracy = options.delete(:accuracy)
53
+ types = options.delete(:types)
54
+ name = options.delete(:name)
55
+ lat = options.delete(:lat)
56
+ lng = options.delete(:lng)
57
+
58
+ options = {
59
+ :location => {:lat => lat, :lng => lng},
60
+ :name => name,
61
+ :accuracy => accuracy,
62
+ :types => [types]
63
+ }
64
+
65
+ mashup(self.class.post("/add/json?sensor=#{sensor}&key=#{@api_key}", :body => options.to_json))
66
+ end
67
+
68
+ def delete(options={})
69
+ sensor = options.delete(:sensor) || false
70
+ reference = options.delete(:reference)
71
+ mashup(self.class.post("/delete/json?sensor=#{sensor}&key=#{@api_key}", :body => {:reference => reference}.to_json))
72
+ end
73
+
74
+ protected
75
+
76
+ def default_options
77
+ { :key => @api_key }
78
+ end
79
+
80
+ def mashup(response)
81
+ case response.code
82
+ when 200
83
+ if response.is_a?(Hash)
84
+ Hashie::Mash.new(response)
85
+ else
86
+ if response.first.is_a?(Hash)
87
+ response.map{|item| Hashie::Mash.new(item)}
88
+ else
89
+ response
90
+ end
91
+ end
92
+ end
93
+ end
94
+
95
+ end
96
+ end
@@ -0,0 +1,3 @@
1
+ module Places
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,29 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "places/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "places"
7
+ s.version = Places::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Johnny Khai Nguyen"]
10
+ s.email = ["johnnyn@gmail.com"]
11
+ s.homepage = ""
12
+ s.summary = %q{Ruby wrapper for the Google Places API}
13
+ s.description = %q{Use this to access the Google Places API in your Ruby application}
14
+
15
+ s.rubyforge_project = "places"
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
21
+
22
+ s.add_dependency 'httparty'
23
+ s.add_dependency 'hashie'
24
+ s.add_dependency 'json'
25
+ s.add_development_dependency 'rspec'
26
+ s.add_development_dependency 'webmock'
27
+ s.add_development_dependency 'vcr'
28
+
29
+ end
@@ -0,0 +1,67 @@
1
+ require 'spec_helper'
2
+
3
+ describe Places::Client do
4
+
5
+ context 'searching for a place' do
6
+ use_vcr_cassette 'search'
7
+
8
+ it 'should not initialize without an api_key' do
9
+ lambda { Places::Client.new }.should raise_error
10
+ end
11
+
12
+ it 'should initialize with an api_key' do
13
+ @client = Places::Client.new(:api_key => "foobar")
14
+ @client.api_key.should == "foobar"
15
+ end
16
+
17
+ it 'should request a place search' do
18
+ @client = Places::Client.new(:api_key => "foobar")
19
+ @search = @client.search(:lat => 32.8481659, :lng => -97.1952847, :types => "food", :name => "roots")
20
+ @search.results.size.should == 1
21
+ @search.results.first.name.should == 'Roots Coffeehouse'
22
+ end
23
+ end
24
+
25
+ context 'details for a place' do
26
+ use_vcr_cassette 'details'
27
+
28
+ it "should fetch details of a specific places" do
29
+ @client = Places::Client.new(:api_key => "foobar")
30
+ @detail = @client.details(:reference => "CnRpAAAAjVikwLlaJ2WN8i0cPwu3A0zcE9iCSMDihmbn_bkXYkM-7xtRcn-ZAmrQtWAAzxQPYxZmyaCeNIMQ_t_eWNDp1CmviA-iY-M63UjpUywQeR5B1dmZ2_Ne756bAjp2uYXTxobVtLKeWkVmGz2dFUMacRIQ6MbrsRQfx1fIbMf4s-s6RhoU-5Uxc26iNf80jxRypRlMJl_k6Gg")
31
+ @detail.result.formatted_address.should == "9101 Blvd 26, Suite 101, North Richland Hills, TX 76180, United States"
32
+ @detail.result.name.should == 'Roots Coffeehouse'
33
+ @detail.result.id.should == "8e4570eb70ddeea123e33d0c6b584ffe3a967d4e"
34
+ end
35
+ end
36
+
37
+ context 'check-in to a place' do
38
+ use_vcr_cassette 'checkin'
39
+
40
+ it "should check-in to a specific place" do
41
+ @client = Places::Client.new(:api_key => "foobar")
42
+ @checkin = @client.checkin(:reference => "CnRpAAAAjVikwLlaJ2WN8i0cPwu3A0zcE9iCSMDihmbn_bkXYkM-7xtRcn-ZAmrQtWAAzxQPYxZmyaCeNIMQ_t_eWNDp1CmviA-iY-M63UjpUywQeR5B1dmZ2_Ne756bAjp2uYXTxobVtLKeWkVmGz2dFUMacRIQ6MbrsRQfx1fIbMf4s-s6RhoU-5Uxc26iNf80jxRypRlMJl_k6Gg")
43
+ @checkin.status.should == "OK"
44
+ end
45
+ end
46
+
47
+ context 'adding a place' do
48
+ use_vcr_cassette 'add'
49
+
50
+ it "should add a new place" do
51
+ @client = Places::Client.new(:api_key => "foobar")
52
+ @add = @client.add(:lat => -33.8669710, :lng => 151.1958750, :accuracy => 50, :name => "Google Shoes!", :types => "shoe_store")
53
+ @add.id.should == "a306f93119e8d12eabadb79bd82f0d3e547d0ad2"
54
+ @add.status.should == "OK"
55
+ end
56
+ end
57
+
58
+ context 'deleting a place' do
59
+ use_vcr_cassette 'delete'
60
+
61
+ it "should delete a specific place" do
62
+ @client = Places::Client.new(:api_key => "foobar")
63
+ @delete = @client.delete(:reference => "CkQxAAAAgoh_Zw4jcE_9-B1b56AgriFZKVdpgc5yYXtwRAPjs-aWIxgUi6Wl-Qe-DdDP5m7PUCzy9iOqWWmdx4sU53035RIQqqNIGGPevJaTM9l1Xh9hpRoUWxhdGBS0XppFiJhZMXX_jiuDsdY")
64
+ @delete.status.should == "OK"
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,9 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ require 'rspec'
4
+ require 'vcr_setup'
5
+ require 'places'
6
+
7
+ RSpec.configure do |config|
8
+ config.extend VCR::RSpec::Macros
9
+ end
@@ -0,0 +1,32 @@
1
+ ---
2
+ - !ruby/struct:VCR::HTTPInteraction
3
+ request: !ruby/struct:VCR::Request
4
+ method: :post
5
+ uri: https://maps.googleapis.com:443/maps/api/place/add/json?key=foobar&sensor=false
6
+ body: "{\"accuracy\":50,\"location\":{\"lat\":-33.866971,\"lng\":151.195875},\"name\":\"Google Shoes!\",\"types\":[\"shoe_store\"]}"
7
+ headers:
8
+ response: !ruby/struct:VCR::Response
9
+ status: !ruby/struct:VCR::ResponseStatus
10
+ code: 200
11
+ message: OK
12
+ headers:
13
+ content-type:
14
+ - application/json; charset=UTF-8
15
+ server:
16
+ - mafe
17
+ date:
18
+ - Sun, 05 Jun 2011 22:38:01 GMT
19
+ x-xss-protection:
20
+ - 1; mode=block
21
+ cache-control:
22
+ - private
23
+ vary:
24
+ - Accept-Language
25
+ body: |
26
+ {
27
+ "id" : "a306f93119e8d12eabadb79bd82f0d3e547d0ad2",
28
+ "reference" : "CkQxAAAAgoh_Zw4jcE_9-B1b56AgriFZKVdpgc5yYXtwRAPjs-aWIxgUi6Wl-Qe-DdDP5m7PUCzy9iOqWWmdx4sU53035RIQqqNIGGPevJaTM9l1Xh9hpRoUWxhdGBS0XppFiJhZMXX_jiuDsdY",
29
+ "status" : "OK"
30
+ }
31
+
32
+ http_version: "1.1"
@@ -0,0 +1,28 @@
1
+ ---
2
+ - !ruby/struct:VCR::HTTPInteraction
3
+ request: !ruby/struct:VCR::Request
4
+ method: :post
5
+ uri: https://maps.googleapis.com:443/maps/api/place/check-in/json?key=foobar&sensor=false
6
+ body: "{\"reference\":\"CnRpAAAAjVikwLlaJ2WN8i0cPwu3A0zcE9iCSMDihmbn_bkXYkM-7xtRcn-ZAmrQtWAAzxQPYxZmyaCeNIMQ_t_eWNDp1CmviA-iY-M63UjpUywQeR5B1dmZ2_Ne756bAjp2uYXTxobVtLKeWkVmGz2dFUMacRIQ6MbrsRQfx1fIbMf4s-s6RhoU-5Uxc26iNf80jxRypRlMJl_k6Gg\"}"
7
+ headers:
8
+ response: !ruby/struct:VCR::Response
9
+ status: !ruby/struct:VCR::ResponseStatus
10
+ code: 200
11
+ message: OK
12
+ headers:
13
+ content-type:
14
+ - application/json; charset=UTF-8
15
+ server:
16
+ - mafe
17
+ date:
18
+ - Sun, 05 Jun 2011 18:46:00 GMT
19
+ x-xss-protection:
20
+ - 1; mode=block
21
+ cache-control:
22
+ - private
23
+ body: |
24
+ {
25
+ "status" : "OK"
26
+ }
27
+
28
+ http_version: "1.1"
@@ -0,0 +1,28 @@
1
+ ---
2
+ - !ruby/struct:VCR::HTTPInteraction
3
+ request: !ruby/struct:VCR::Request
4
+ method: :post
5
+ uri: https://maps.googleapis.com:443/maps/api/place/delete/json?key=foobar&sensor=false
6
+ body: "{\"reference\":\"CkQxAAAAgoh_Zw4jcE_9-B1b56AgriFZKVdpgc5yYXtwRAPjs-aWIxgUi6Wl-Qe-DdDP5m7PUCzy9iOqWWmdx4sU53035RIQqqNIGGPevJaTM9l1Xh9hpRoUWxhdGBS0XppFiJhZMXX_jiuDsdY\"}"
7
+ headers:
8
+ response: !ruby/struct:VCR::Response
9
+ status: !ruby/struct:VCR::ResponseStatus
10
+ code: 200
11
+ message: OK
12
+ headers:
13
+ content-type:
14
+ - application/json; charset=UTF-8
15
+ server:
16
+ - mafe
17
+ date:
18
+ - Sun, 05 Jun 2011 22:41:36 GMT
19
+ x-xss-protection:
20
+ - 1; mode=block
21
+ cache-control:
22
+ - private
23
+ body: |
24
+ {
25
+ "status" : "OK"
26
+ }
27
+
28
+ http_version: "1.1"
@@ -0,0 +1,76 @@
1
+ ---
2
+ - !ruby/struct:VCR::HTTPInteraction
3
+ request: !ruby/struct:VCR::Request
4
+ method: :get
5
+ uri: https://maps.googleapis.com:443/maps/api/place/details/json?key=foobar&reference=CnRpAAAAjVikwLlaJ2WN8i0cPwu3A0zcE9iCSMDihmbn_bkXYkM-7xtRcn-ZAmrQtWAAzxQPYxZmyaCeNIMQ_t_eWNDp1CmviA-iY-M63UjpUywQeR5B1dmZ2_Ne756bAjp2uYXTxobVtLKeWkVmGz2dFUMacRIQ6MbrsRQfx1fIbMf4s-s6RhoU-5Uxc26iNf80jxRypRlMJl_k6Gg&sensor=false
6
+ body:
7
+ headers:
8
+ response: !ruby/struct:VCR::Response
9
+ status: !ruby/struct:VCR::ResponseStatus
10
+ code: 200
11
+ message: OK
12
+ headers:
13
+ content-type:
14
+ - application/json; charset=UTF-8
15
+ server:
16
+ - mafe
17
+ date:
18
+ - Sun, 05 Jun 2011 15:32:44 GMT
19
+ x-xss-protection:
20
+ - 1; mode=block
21
+ cache-control:
22
+ - private
23
+ vary:
24
+ - Accept-Language
25
+ body: |
26
+ {
27
+ "html_attributions" : [],
28
+ "result" : {
29
+ "address_components" : [
30
+ {
31
+ "long_name" : "9101",
32
+ "short_name" : "9101",
33
+ "types" : [ "street_number" ]
34
+ },
35
+ {
36
+ "long_name" : "Blvd 26, Suite 101",
37
+ "short_name" : "Blvd 26, Suite 101",
38
+ "types" : [ "route" ]
39
+ },
40
+ {
41
+ "long_name" : "North Richland Hills",
42
+ "short_name" : "North Richland Hills",
43
+ "types" : [ "locality", "political" ]
44
+ },
45
+ {
46
+ "long_name" : "TX",
47
+ "short_name" : "TX",
48
+ "types" : [ "administrative_area_level_1", "political" ]
49
+ },
50
+ {
51
+ "long_name" : "76180",
52
+ "short_name" : "76180",
53
+ "types" : [ "postal_code" ]
54
+ }
55
+ ],
56
+ "formatted_address" : "9101 Blvd 26, Suite 101, North Richland Hills, TX 76180, United States",
57
+ "formatted_phone_number" : "(817) 503-7344",
58
+ "geometry" : {
59
+ "location" : {
60
+ "lat" : 32.8526060,
61
+ "lng" : -97.19118399999999
62
+ }
63
+ },
64
+ "icon" : "http://maps.gstatic.com/mapfiles/place_api/icons/generic_business-71.png",
65
+ "id" : "8e4570eb70ddeea123e33d0c6b584ffe3a967d4e",
66
+ "name" : "Roots Coffeehouse",
67
+ "rating" : 4.60,
68
+ "reference" : "CnRpAAAA3YgHq1uZnJITbzaknQcij762-bPT_1BUZykuRSh9nCsszGkp_3kUZakJGiM_QKfBLWnvqE_vGR2fjilbxF0x8awlmJWEKDFWMp4ZX7jLWuXOVpqE7u-FwJj9r4tUb7yDZSRDkUSZhji8iMiZr-aJXBIQN2A3BhfTDeN6vBv8nzSyQxoUrnAGcz41OlHk7g3oa4YapsKVBYM",
69
+ "types" : [ "food", "establishment" ],
70
+ "url" : "http://maps.google.com/maps/place?cid=12868917690814993239",
71
+ "vicinity" : "Blvd 26, Suite 101, North Richland Hills"
72
+ },
73
+ "status" : "OK"
74
+ }
75
+
76
+ http_version: "1.1"
@@ -0,0 +1,47 @@
1
+ ---
2
+ - !ruby/struct:VCR::HTTPInteraction
3
+ request: !ruby/struct:VCR::Request
4
+ method: :get
5
+ uri: https://maps.googleapis.com:443/maps/api/place/search/json?key=foobar&location=32.8481659,-97.1952847&name=roots&radius=500&sensor=false&types=food
6
+ body:
7
+ headers:
8
+ response: !ruby/struct:VCR::Response
9
+ status: !ruby/struct:VCR::ResponseStatus
10
+ code: 200
11
+ message: OK
12
+ headers:
13
+ content-type:
14
+ - application/json; charset=UTF-8
15
+ server:
16
+ - mafe
17
+ date:
18
+ - Sun, 05 Jun 2011 15:19:49 GMT
19
+ x-xss-protection:
20
+ - 1; mode=block
21
+ cache-control:
22
+ - private
23
+ vary:
24
+ - Accept-Language
25
+ body: |
26
+ {
27
+ "html_attributions" : [],
28
+ "results" : [
29
+ {
30
+ "geometry" : {
31
+ "location" : {
32
+ "lat" : 32.8526060,
33
+ "lng" : -97.19118399999999
34
+ }
35
+ },
36
+ "icon" : "http://maps.gstatic.com/mapfiles/place_api/icons/generic_business-71.png",
37
+ "id" : "8e4570eb70ddeea123e33d0c6b584ffe3a967d4e",
38
+ "name" : "Roots Coffeehouse",
39
+ "reference" : "CnRoAAAANen2s7DMyGHNyW-MgJokmzmSGP0D7Y-LP5g6KDrI2_P9MOgxq8f50f3U9le53E8YAVbiChe9P-0GFyqn0UMMX6a7wKpgUSwysdiiPpA9jTdygf3gdGYC0W1-C7H2s9j39C7ryP3yFGj-fD2EzDdLZxIQI6G8HpURe4hJKWsxfRsReRoUSO5SZViRU0XOTZ6FMZ1xTB5t02Y",
40
+ "types" : [ "food", "establishment" ],
41
+ "vicinity" : "Blvd 26, Suite 101, North Richland Hills"
42
+ }
43
+ ],
44
+ "status" : "OK"
45
+ }
46
+
47
+ http_version: "1.1"
@@ -0,0 +1,8 @@
1
+ require 'vcr'
2
+
3
+ VCR.config do |c|
4
+ c.cassette_library_dir = 'spec/vcr_cassettes'
5
+ c.stub_with :webmock
6
+ c.ignore_localhost = true
7
+ c.default_cassette_options = { :record => :new_episodes }
8
+ end
metadata ADDED
@@ -0,0 +1,173 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: places
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Johnny Khai Nguyen
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-06-05 00:00:00 -05:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: httparty
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: hashie
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ hash: 3
44
+ segments:
45
+ - 0
46
+ version: "0"
47
+ type: :runtime
48
+ version_requirements: *id002
49
+ - !ruby/object:Gem::Dependency
50
+ name: json
51
+ prerelease: false
52
+ requirement: &id003 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ hash: 3
58
+ segments:
59
+ - 0
60
+ version: "0"
61
+ type: :runtime
62
+ version_requirements: *id003
63
+ - !ruby/object:Gem::Dependency
64
+ name: rspec
65
+ prerelease: false
66
+ requirement: &id004 !ruby/object:Gem::Requirement
67
+ none: false
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ hash: 3
72
+ segments:
73
+ - 0
74
+ version: "0"
75
+ type: :development
76
+ version_requirements: *id004
77
+ - !ruby/object:Gem::Dependency
78
+ name: webmock
79
+ prerelease: false
80
+ requirement: &id005 !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ hash: 3
86
+ segments:
87
+ - 0
88
+ version: "0"
89
+ type: :development
90
+ version_requirements: *id005
91
+ - !ruby/object:Gem::Dependency
92
+ name: vcr
93
+ prerelease: false
94
+ requirement: &id006 !ruby/object:Gem::Requirement
95
+ none: false
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ hash: 3
100
+ segments:
101
+ - 0
102
+ version: "0"
103
+ type: :development
104
+ version_requirements: *id006
105
+ description: Use this to access the Google Places API in your Ruby application
106
+ email:
107
+ - johnnyn@gmail.com
108
+ executables: []
109
+
110
+ extensions: []
111
+
112
+ extra_rdoc_files: []
113
+
114
+ files:
115
+ - .gitignore
116
+ - Gemfile
117
+ - README.md
118
+ - Rakefile
119
+ - lib/places.rb
120
+ - lib/places/client.rb
121
+ - lib/places/version.rb
122
+ - places.gemspec
123
+ - spec/places/client_spec.rb
124
+ - spec/spec_helper.rb
125
+ - spec/vcr_cassettes/add.yml
126
+ - spec/vcr_cassettes/checkin.yml
127
+ - spec/vcr_cassettes/delete.yml
128
+ - spec/vcr_cassettes/details.yml
129
+ - spec/vcr_cassettes/search.yml
130
+ - spec/vcr_setup.rb
131
+ has_rdoc: true
132
+ homepage: ""
133
+ licenses: []
134
+
135
+ post_install_message:
136
+ rdoc_options: []
137
+
138
+ require_paths:
139
+ - lib
140
+ required_ruby_version: !ruby/object:Gem::Requirement
141
+ none: false
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ hash: 3
146
+ segments:
147
+ - 0
148
+ version: "0"
149
+ required_rubygems_version: !ruby/object:Gem::Requirement
150
+ none: false
151
+ requirements:
152
+ - - ">="
153
+ - !ruby/object:Gem::Version
154
+ hash: 3
155
+ segments:
156
+ - 0
157
+ version: "0"
158
+ requirements: []
159
+
160
+ rubyforge_project: places
161
+ rubygems_version: 1.6.2
162
+ signing_key:
163
+ specification_version: 3
164
+ summary: Ruby wrapper for the Google Places API
165
+ test_files:
166
+ - spec/places/client_spec.rb
167
+ - spec/spec_helper.rb
168
+ - spec/vcr_cassettes/add.yml
169
+ - spec/vcr_cassettes/checkin.yml
170
+ - spec/vcr_cassettes/delete.yml
171
+ - spec/vcr_cassettes/details.yml
172
+ - spec/vcr_cassettes/search.yml
173
+ - spec/vcr_setup.rb