yelp-fusion 0.1.pre.beta

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/.rubocop.yml +1 -0
  4. data/.rubocop_todo.yml +210 -0
  5. data/CODE_OF_CONDUCT.md +74 -0
  6. data/Gemfile +8 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +180 -0
  9. data/Rakefile +9 -0
  10. data/Test::vcr_casettes/business.yml +75 -0
  11. data/Test::vcr_casettes/match.yml +61 -0
  12. data/Test::vcr_casettes/phone.yml +65 -0
  13. data/Test::vcr_casettes/review.yml +72 -0
  14. data/Test::vcr_casettes/search.yml +263 -0
  15. data/Test::vcr_casettes/search_by_coordinates.yml +57 -0
  16. data/Test::vcr_casettes/transaction.yml +254 -0
  17. data/Test::vcr_casettes/transaction_by_coordinates.yml +56 -0
  18. data/bin/console +14 -0
  19. data/bin/setup +8 -0
  20. data/lib/yelp/fusion.rb +36 -0
  21. data/lib/yelp/fusion/client.rb +86 -0
  22. data/lib/yelp/fusion/configuration.rb +37 -0
  23. data/lib/yelp/fusion/endpoint/business.rb +70 -0
  24. data/lib/yelp/fusion/endpoint/match.rb +64 -0
  25. data/lib/yelp/fusion/endpoint/phone.rb +71 -0
  26. data/lib/yelp/fusion/endpoint/review.rb +72 -0
  27. data/lib/yelp/fusion/endpoint/search.rb +104 -0
  28. data/lib/yelp/fusion/endpoint/transaction.rb +97 -0
  29. data/lib/yelp/fusion/error.rb +105 -0
  30. data/lib/yelp/fusion/responses/base.rb +43 -0
  31. data/lib/yelp/fusion/responses/business.rb +36 -0
  32. data/lib/yelp/fusion/responses/match.rb +36 -0
  33. data/lib/yelp/fusion/responses/models/business.rb +48 -0
  34. data/lib/yelp/fusion/responses/models/categories.rb +34 -0
  35. data/lib/yelp/fusion/responses/models/center.rb +34 -0
  36. data/lib/yelp/fusion/responses/models/hours.rb +38 -0
  37. data/lib/yelp/fusion/responses/models/location.rb +36 -0
  38. data/lib/yelp/fusion/responses/models/openHours.rb +34 -0
  39. data/lib/yelp/fusion/responses/models/region.rb +38 -0
  40. data/lib/yelp/fusion/responses/models/reviews.rb +38 -0
  41. data/lib/yelp/fusion/responses/models/user.rb +36 -0
  42. data/lib/yelp/fusion/responses/phone.rb +36 -0
  43. data/lib/yelp/fusion/responses/review.rb +36 -0
  44. data/lib/yelp/fusion/responses/search.rb +38 -0
  45. data/lib/yelp/fusion/responses/transaction.rb +36 -0
  46. data/lib/yelp/fusion/version.rb +25 -0
  47. data/yelp-fusion.gemspec +44 -0
  48. metadata +192 -0
@@ -0,0 +1,37 @@
1
+ # Copyright (c) Jobcase, Inc. All rights reserved.
2
+
3
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ # of this software and associated documentation files (the "Software"), to deal
5
+ # in the Software without restriction, including without limitation the rights
6
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ # copies of the Software, and to permit persons to whom the Software is
8
+ # furnished to do so, subject to the following conditions:
9
+
10
+ # The above copyright notice and this permission notice shall be included in
11
+ # all copies or substantial portions of the Software.
12
+
13
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ # THE SOFTWARE.
20
+
21
+ module Yelp
22
+ module Fusion
23
+ class Configuration
24
+ attr_accessor :api_key
25
+
26
+ # Creates the configuration
27
+ # @param [config_api] String
28
+ # containing configuration parameter and its value
29
+ # @return [Configuration] a new configuration with the value from the
30
+ # config_api String
31
+ def initialize(config_api = nil)
32
+ return unless !config_api.nil? && config_api.is_a?(String)
33
+ self.api_key = config_api
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,70 @@
1
+ # Copyright (c) Jobcase, Inc. All rights reserved.
2
+
3
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ # of this software and associated documentation files (the "Software"), to deal
5
+ # in the Software without restriction, including without limitation the rights
6
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ # copies of the Software, and to permit persons to whom the Software is
8
+ # furnished to do so, subject to the following conditions:
9
+
10
+ # The above copyright notice and this permission notice shall be included in
11
+ # all copies or substantial portions of the Software.
12
+
13
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ # THE SOFTWARE.
20
+
21
+ require 'erb'
22
+ require 'json'
23
+
24
+ require 'yelp/fusion/responses/business'
25
+
26
+ module Yelp
27
+ module Fusion
28
+ module Endpoint
29
+ class Business
30
+ PATH = '/v3/businesses/'.freeze
31
+
32
+ def initialize(client)
33
+ @client = client
34
+ end
35
+
36
+ # Make a request to the business endpoint on the API
37
+ #
38
+ # @param id [String] the business id
39
+ # @param locale [Hash] a hash of supported locale-related parameters
40
+ # @return [Response::Business] the parsed response object from the API
41
+ #
42
+ # @example Get business
43
+ # business = client.business('yelp-san-francisco')
44
+ # business.name # => 'Yelp'
45
+ # buinesss.url # => 'http://www.yelp.com/biz/yelp-san-francisco'
46
+ def business(id, locale = {})
47
+ Responses::Business.new(JSON.parse(business_request(id, locale).body))
48
+ end
49
+
50
+ private
51
+
52
+ # Make a request to the business endpoint of the API
53
+ # The endpoint requires a format of /v3/business/{business-id}
54
+ # so the primary request parameter is concatenated. After getting
55
+ # the response back it's checked to see if there are any API errors
56
+ # and raises the relevant one if there is
57
+ #
58
+ # @param id [String, Integer] the business id
59
+ # @param locale [Hash] a hash of supported locale-related parameters
60
+ # @return [Faraday::Response] the raw response back from the connection
61
+ def business_request(id, locale = {})
62
+ result = @client.connection.get (PATH +
63
+ ERB::Util.url_encode(id)), locale
64
+ Error.check_for_error(result)
65
+ result
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,64 @@
1
+ # Copyright (c) Jobcase, Inc. All rights reserved.
2
+
3
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ # of this software and associated documentation files (the "Software"), to deal
5
+ # in the Software without restriction, including without limitation the rights
6
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ # copies of the Software, and to permit persons to whom the Software is
8
+ # furnished to do so, subject to the following conditions:
9
+
10
+ # The above copyright notice and this permission notice shall be included in
11
+ # all copies or substantial portions of the Software.
12
+
13
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ # THE SOFTWARE.
20
+
21
+ require 'erb'
22
+ require 'json'
23
+
24
+ require 'yelp/fusion/responses/business'
25
+
26
+ module Yelp
27
+ module Fusion
28
+ module Endpoint
29
+ class Match
30
+ PATH = '/v3/businesses/matches'.freeze
31
+
32
+ def initialize(client)
33
+ @client = client
34
+ end
35
+
36
+ # Make a request to the business endpoint on the API
37
+ #
38
+ # @param params [Hash] a hash of the required location parameters
39
+ # @return [Response::Match] a parsed object of the response.
40
+ # For a complete sample response visit:
41
+ # https://www.yelp.com/developers/documentation/v3/business_match
42
+ #
43
+ # @example Search for business with params
44
+ # params = { name: 'swissbakers', address1:
45
+ # '168 Western Ave', city: 'allston', state:
46
+ # 'MA', country: 'US' }
47
+ # response = client.mathc(params)
48
+ # response.businesses # [<Business 1>, <Business 2>, <Business 3>]
49
+ # response.businesses[0].name # 'Yelp'
50
+ def match(params = {})
51
+ Responses::Match.new(JSON.parse(match_request(params).body))
52
+ end
53
+
54
+ private
55
+
56
+ def match_request(params = {})
57
+ result = @client.connection.get PATH, params
58
+ Error.check_for_error(result)
59
+ result
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,71 @@
1
+ # Copyright (c) Jobcase, Inc. All rights reserved.
2
+
3
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ # of this software and associated documentation files (the "Software"), to deal
5
+ # in the Software without restriction, including without limitation the rights
6
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ # copies of the Software, and to permit persons to whom the Software is
8
+ # furnished to do so, subject to the following conditions:
9
+
10
+ # The above copyright notice and this permission notice shall be included in
11
+ # all copies or substantial portions of the Software.
12
+
13
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ # THE SOFTWARE.
20
+
21
+ require 'erb'
22
+ require 'json'
23
+
24
+ require 'yelp/fusion/responses/phone'
25
+
26
+ module Yelp
27
+ module Fusion
28
+ module Endpoint
29
+ class Phone
30
+ PATH = '/v3/businesses/search/phone'.freeze
31
+
32
+ def initialize(client)
33
+ @client = client
34
+ end
35
+
36
+ # Make a request to the business endpoint on the API
37
+ #
38
+ # @param phone [String] the phone number
39
+ # @return [Response::Phone] a parsed object of the response.
40
+ # For a complete sample response visit:
41
+ # https://www.yelp.com/developers/documentation/v3/business_search_phone
42
+ #
43
+ # @example Search for business with params and locale
44
+ #
45
+ # response = client.phone_search('+14159083801')
46
+ # response.businesses # [<Business 1>, <Business 2>, <Business 3>]
47
+ # response.businesses[0].name # 'Yelp'
48
+ def phone_search(phone)
49
+ phone_hash = { phone: phone }
50
+ Responses::Phone.new(JSON.parse(phone_request(phone_hash).body))
51
+ end
52
+
53
+ private
54
+
55
+ # Make a request to the business endpoint of the API
56
+ # The endpoint requires a format of /v3/business_search_phone
57
+ # so the primary request parameter is concatenated. After getting
58
+ # the response back it's checked to see if there are any API errors
59
+ # and raises the relevant one if there is.
60
+ #
61
+ # @param phone [String] the phone number
62
+ # @return [Faraday::Response] the raw response back from the connection
63
+ def phone_request(phone)
64
+ result = @client.connection.get PATH, phone
65
+ Error.check_for_error(result)
66
+ result
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,72 @@
1
+ # Copyright (c) Jobcase, Inc. All rights reserved.
2
+
3
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ # of this software and associated documentation files (the "Software"), to deal
5
+ # in the Software without restriction, including without limitation the rights
6
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ # copies of the Software, and to permit persons to whom the Software is
8
+ # furnished to do so, subject to the following conditions:
9
+
10
+ # The above copyright notice and this permission notice shall be included in
11
+ # all copies or substantial portions of the Software.
12
+
13
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ # THE SOFTWARE.
20
+
21
+ require 'erb'
22
+ require 'json'
23
+
24
+ require 'yelp/fusion/responses/review'
25
+
26
+ module Yelp
27
+ module Fusion
28
+ module Endpoint
29
+ class Review
30
+ PATH = '/v3/businesses/'.freeze
31
+
32
+ def initialize(client)
33
+ @client = client
34
+ end
35
+
36
+ # Make a request to the business endpoint on the API
37
+ #
38
+ # @param id [String] the business id
39
+ # @param locale [Hash] a hash of supported locale-related parameters
40
+ # @return [Response::Review] the parsed response object from the API
41
+ #
42
+ # @example Get Review
43
+ # id = 'xAG4O7l-t1ubbwVAlPnDKg'
44
+ # locale = { lang: 'fr' }
45
+ # response = client.review(id, locale)
46
+ # response.name # => 'Yelp'
47
+ # response.url # => 'http://www.yelp.com/biz/yelp-san-francisco'
48
+ def review(id, locale = {})
49
+ Responses::Review.new(JSON.parse(review_request(id, locale).body))
50
+ end
51
+
52
+ private
53
+
54
+ # Make a request to the review endpoint of the API
55
+ # The endpoint requires a format of v3/businesses/{id}/reviews
56
+ # so the primary request parameter is concatenated. After getting
57
+ # the response back it's checked to see if there are any API errors
58
+ # and raises the relevant one if there is.
59
+ #
60
+ # @param id [String] the business id
61
+ # @param locale [Hash] a hash of supported locale-related parameters
62
+ # @return [Faraday::Response] the raw response back from the connection
63
+ def review_request(id, locale = {})
64
+ result = @client.connection.get (PATH +
65
+ ERB::Util.url_encode(id) + '/reviews'), locale
66
+ Error.check_for_error(result)
67
+ result
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,104 @@
1
+ # Copyright (c) Jobcase, Inc. All rights reserved.
2
+
3
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ # of this software and associated documentation files (the "Software"), to deal
5
+ # in the Software without restriction, including without limitation the rights
6
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ # copies of the Software, and to permit persons to whom the Software is
8
+ # furnished to do so, subject to the following conditions:
9
+
10
+ # The above copyright notice and this permission notice shall be included in
11
+ # all copies or substantial portions of the Software.
12
+
13
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ # THE SOFTWARE.
20
+
21
+ require 'json'
22
+ require 'yelp/fusion/responses/search'
23
+
24
+ module Yelp
25
+ module Fusion
26
+ module Endpoint
27
+ class Search
28
+ PATH = '/v3/businesses/search'.freeze
29
+ def initialize(client)
30
+ @client = client
31
+ end
32
+
33
+ # Take a search_request and return the formatted/structured
34
+ # response from the API
35
+ #
36
+ # @param location [String] a string location of the neighborhood,
37
+ # address, or city
38
+ # @param params [Hash] a hash that corresponds to params on the API:
39
+ # https://www.yelp.com/developers/documentation/v3/business_search
40
+ # @return [Response::Search] a parsed object of the response.
41
+ # For a complete list of possible response values visit:
42
+ # https://www.yelp.com/developers/documentation/v3/business_search
43
+ #
44
+ # @example Search for business with params
45
+ # params = { term: 'food',
46
+ # limit: 3,
47
+ # category: 'discgolf' }
48
+ #
49
+ # response = client.search('San Francisco', params)
50
+ # response.businesses # [<Business 1>, <Business 2>, <Business 3>]
51
+ # response.businesses[0].name # 'Yelp'
52
+ def search(location, params = {})
53
+ params[:location] = location
54
+
55
+ Responses::Search.new(JSON.parse(search_request(params).body))
56
+ end
57
+
58
+ # Search by coordinates: give it a latitude and longitude along with
59
+ # option accuracy, altitude, and altitude_accuracy to search an area.
60
+ # More info at:
61
+ # https://www.yelp.com/developers/documentation/v3/business_search
62
+ #
63
+ # @param coordinates [Hash] a hash of latitude and longitude.
64
+ # @param params [Hash] a hash that corresponds to params on the API:
65
+ # https://www.yelp.com/developers/documentation/v3/business_search
66
+ # @return [Response::Search] a parsed object of the response.
67
+ # For a complete list of possible response values visit:
68
+ # https://www.yelp.com/developers/documentation/v3/business_search
69
+ #
70
+ # @example Search for business with params
71
+ # coordinates = { latitude: 37.786732,
72
+ # longitude: -122.399978 }
73
+ #
74
+ # params = { term: 'food',
75
+ # limit: 3,
76
+ # category: 'discgolf' }
77
+ #
78
+ # response = client.search(coordinates, params)
79
+ # response.businesses # [<Business 1>, <Business 2>, <Business 3>]
80
+ # response.businesses[0].name # 'Yelp'
81
+ def search_by_coordinates(coordinates, params = {})
82
+ raise Error::MissingLatLng if coordinates[:latitude].nil? ||
83
+ coordinates[:longitude].nil?
84
+ coordinates.merge!(params)
85
+ Responses::Search.new(JSON.parse(search_request(coordinates).body))
86
+ end
87
+
88
+ private
89
+
90
+ # Make a request against the search endpoint from the API and return the
91
+ # raw response. After getting the response back it's checked to see if
92
+ # there are any API errors and raises the relevant one if there is.
93
+ #
94
+ # @param params [Hash] a hash of parameters for the search request
95
+ # @return [Faraday::Response] the raw response back from the connection
96
+ def search_request(params)
97
+ result = @client.connection.get PATH, params
98
+ Yelp::Fusion::Error.check_for_error(result)
99
+ result
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,97 @@
1
+ # Copyright (c) Jobcase, Inc. All rights reserved.
2
+
3
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ # of this software and associated documentation files (the "Software"), to deal
5
+ # in the Software without restriction, including without limitation the rights
6
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ # copies of the Software, and to permit persons to whom the Software is
8
+ # furnished to do so, subject to the following conditions:
9
+
10
+ # The above copyright notice and this permission notice shall be included in
11
+ # all copies or substantial portions of the Software.
12
+
13
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ # THE SOFTWARE.
20
+
21
+ require 'erb'
22
+ require 'json'
23
+
24
+ require 'yelp/fusion/responses/business'
25
+
26
+ module Yelp
27
+ module Fusion
28
+ module Endpoint
29
+ class Transaction
30
+ PATH = '/v3/transactions/'.freeze
31
+
32
+ def initialize(client)
33
+ @client = client
34
+ end
35
+
36
+ # Make a request to the business endpoint on the API
37
+ #
38
+ # @param id [String] the business id
39
+ # @param locale [Hash] a hash of supported locale-related parameters
40
+ # @return [Response::Review] the parsed response object from the API
41
+ #
42
+ # @example Get Transaction
43
+ # review = client.transaction('delivery', 'San Francisco')
44
+ # review.name # => 'Yelp'
45
+ # review.url # => 'http://www.yelp.com/biz/yelp-san-francisco'
46
+ def transaction_search(transaction_type, location)
47
+ result = transaction_request(transaction_type, location)
48
+ Responses::Transaction.new(JSON.parse(result.body))
49
+ end
50
+
51
+ # Search by coordinates: give it a latitude and longitude along with
52
+ # option accuracy, altitude, and altitude_accuracy to search an area.
53
+ # More info at
54
+ # https://www.yelp.com/developers/documentation/v3/transaction_search
55
+ #
56
+ # @param coordinates [Hash] a hash of latitude and longitude.
57
+ # @param params [Hash] a hash that corresponds to params on the API:
58
+ # https://www.yelp.com/developers/documentation/v3/transaction_search
59
+ # @return [Response::Search] a parsed object of the response.
60
+ # For a complete list of possible response values visit:
61
+ # https://www.yelp.com/developers/documentation/v3/transaction_search
62
+ #
63
+ # @example Search for business with params
64
+ # coordinates = { latitude: 37.786732,
65
+ # longitude: -122.399978 }
66
+ #
67
+ # response = client.search('delivery', coordinates)
68
+ # response.businesses # [<Business 1>, <Business 2>, <Business 3>]
69
+ # response.businesses[0].name # 'Yelp'
70
+ def transaction_by_coordinates(transaction_type, coordinates)
71
+ raise Error::MissingLatLng if coordinates[:latitude].nil? ||
72
+ coordinates[:longitude].nil?
73
+ result = transaction_request(transaction_type, coordinates)
74
+ Responses::Transaction.new(JSON.parse(result.body))
75
+ end
76
+
77
+ private
78
+
79
+ # Make a request to the transaction endpoint of the API
80
+ # The endpoint requires a format of /v3/transaction_search
81
+ # so the primary request parameter is concatenated. After getting
82
+ # the response back it's checked to see if there are any API errors
83
+ # and raises the relevant one if there is.
84
+ #
85
+ # @param transaction_type [String] it has to be delivery
86
+ # @param location [Hash] a hash of supported location
87
+ # @return [Faraday::Response] the raw response back from the connection
88
+ def transaction_request(transaction_type, location)
89
+ result = @client.connection.get (PATH +
90
+ ERB::Util.url_encode(transaction_type) + '/search'), location
91
+ Error.check_for_error(result)
92
+ result
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end