user_reviews 0.0.8 → 0.0.9
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.
- data/.pairs +8 -0
- data/Gemfile.lock +3 -3
- data/Rakefile +2 -0
- data/lib/providers/citysearch_reviews/business.rb +23 -0
- data/lib/providers/citysearch_reviews/review.rb +16 -0
- data/lib/providers/citysearch_reviews_api.rb +72 -0
- data/lib/providers/google/api.rb +1 -1
- data/lib/providers/google_reviews/business.rb +21 -0
- data/lib/providers/google_reviews/review.rb +24 -0
- data/lib/providers/google_reviews_api.rb +73 -0
- data/lib/providers/yelp_reviews/business.rb +29 -0
- data/lib/providers/yelp_reviews/review.rb +14 -0
- data/lib/providers/yelp_reviews_api.rb +81 -0
- data/lib/user_reviews/version.rb +1 -1
- data/scripts/uploadgem.sh +7 -0
- data/spec/providers/citysearch_reviews/business_spec.rb +31 -0
- data/spec/providers/citysearch_reviews_api_spec.rb +44 -0
- data/spec/providers/google_reviews/business_spec.rb +30 -0
- data/spec/providers/google_reviews_api_spec.rb +56 -0
- data/spec/providers/yelp_reviews/business_spec.rb +28 -0
- data/spec/providers/yelp_reviews_api_spec.rb +68 -0
- data/user_reviews-0.0.1.gem +0 -0
- data/user_reviews-0.0.2.gem +0 -0
- data/user_reviews-0.0.3.gem +0 -0
- data/user_reviews-0.0.4.gem +0 -0
- metadata +30 -9
data/.pairs
ADDED
data/Gemfile.lock
CHANGED
@@ -11,8 +11,8 @@ PATH
|
|
11
11
|
GEM
|
12
12
|
remote: https://rubygems.org/
|
13
13
|
specs:
|
14
|
-
activesupport (3.2.
|
15
|
-
i18n (
|
14
|
+
activesupport (3.2.13)
|
15
|
+
i18n (= 0.6.1)
|
16
16
|
multi_json (~> 1.0)
|
17
17
|
coderay (1.0.8)
|
18
18
|
diff-lcs (1.1.3)
|
@@ -29,7 +29,7 @@ GEM
|
|
29
29
|
coderay (~> 1.0.5)
|
30
30
|
method_source (~> 0.8)
|
31
31
|
slop (~> 3.4)
|
32
|
-
rake (10.0
|
32
|
+
rake (10.1.0)
|
33
33
|
rspec (2.12.0)
|
34
34
|
rspec-core (~> 2.12.0)
|
35
35
|
rspec-expectations (~> 2.12.0)
|
data/Rakefile
CHANGED
@@ -0,0 +1,23 @@
|
|
1
|
+
module Providers
|
2
|
+
module CitysearchReviews
|
3
|
+
class Business
|
4
|
+
attr_accessor :name, :address, :reference, :average_rating, :total_reviews
|
5
|
+
|
6
|
+
def self.build_business(node)
|
7
|
+
return nil if [node["name"], node["address"], node["review_info"], node["id"]].include?(nil)
|
8
|
+
new(node)
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def initialize(node)
|
14
|
+
@name = node["name"]
|
15
|
+
full_address = node["address"]
|
16
|
+
@address = [full_address["street"], full_address["city"], full_address["state"], full_address["postal_code"]].join(" ")
|
17
|
+
@reference = node["id"]
|
18
|
+
@total_reviews = node['review_info']['total_user_reviews']
|
19
|
+
@average_rating = node['review_info']['overall_review_rating']
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'date'
|
2
|
+
|
3
|
+
module Providers
|
4
|
+
module CitysearchReviews
|
5
|
+
class Review
|
6
|
+
attr_accessor :rating, :author_name, :reviewed_at, :comment
|
7
|
+
|
8
|
+
def initialize(node)
|
9
|
+
@rating = node["review_rating"]
|
10
|
+
@author_name = node["review_author"]
|
11
|
+
@reviewed_at = DateTime.parse(node["review_date"]).to_time
|
12
|
+
@comment = node["review_text"]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'httparty'
|
2
|
+
require 'open-uri'
|
3
|
+
|
4
|
+
|
5
|
+
module Providers
|
6
|
+
class CitysearchReviewsApi
|
7
|
+
LOCALHOST_IP = "127.0.0.1"
|
8
|
+
def initialize(options)
|
9
|
+
@key = options[:publisher_key]
|
10
|
+
@ip = options[:client_ip] || LOCALHOST_IP
|
11
|
+
end
|
12
|
+
|
13
|
+
def find_business_by_name(name, business_type, city_state)
|
14
|
+
request_url = business_search_url(name, business_type, city_state)
|
15
|
+
json_results = HTTParty.get(request_url)
|
16
|
+
parse_business_results(json_results)
|
17
|
+
end
|
18
|
+
|
19
|
+
def find_business_by_id(citysearch_id)
|
20
|
+
request_url = business_url(citysearch_id)
|
21
|
+
json_results = HTTParty.get(request_url)
|
22
|
+
json = json_results["locations"] || []
|
23
|
+
|
24
|
+
return json if json.empty?
|
25
|
+
Providers::CitysearchReviews::Business.build_business(json.first)
|
26
|
+
end
|
27
|
+
|
28
|
+
def find_reviews_for_business(citysearch_id)
|
29
|
+
request_url = reviews_url(citysearch_id)
|
30
|
+
json_results = HTTParty.get(request_url)
|
31
|
+
parse_reviews_results(json_results)
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def business_url(citysearch_id)
|
37
|
+
"http://api.citygridmedia.com/content/places/v2/detail?publisher=#{@key}&id=#{citysearch_id}&id_type=cs&client_ip=127.0.0.1&format=json"
|
38
|
+
end
|
39
|
+
|
40
|
+
def business_search_url(name, business_type = "", city_state)
|
41
|
+
"http://api.citygridmedia.com/content/places/v2/search/where?where=#{URI::encode(city_state)}&what=#{URI::encode(name)}&publisher=#{@key}&format=json"
|
42
|
+
end
|
43
|
+
|
44
|
+
def reviews_url(citysearch_id)
|
45
|
+
"http://api.citygridmedia.com/content/reviews/v2/search/where?listing_id=#{citysearch_id}&publisher=#{@key}&format=json"
|
46
|
+
end
|
47
|
+
|
48
|
+
def parse_business_results(json)
|
49
|
+
result = []
|
50
|
+
return result if json.nil? || json["results"].nil?
|
51
|
+
|
52
|
+
json = json["results"] || []
|
53
|
+
json["locations"].each do |e|
|
54
|
+
result.push(Providers::CitysearchReviews::Business.build_business(e))
|
55
|
+
end
|
56
|
+
|
57
|
+
result
|
58
|
+
end
|
59
|
+
|
60
|
+
def parse_reviews_results(json)
|
61
|
+
result = []
|
62
|
+
return result if json.nil? || json["results"].nil?
|
63
|
+
|
64
|
+
json = json["results"] || []
|
65
|
+
json["reviews"].each do |e|
|
66
|
+
result.push(Providers::CitysearchReviews::Review.new(e))
|
67
|
+
end
|
68
|
+
|
69
|
+
result
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
data/lib/providers/google/api.rb
CHANGED
@@ -63,7 +63,7 @@ module Providers
|
|
63
63
|
return result if json.nil? || json["result"].nil? || json["result"]["reviews"].nil?
|
64
64
|
|
65
65
|
json["result"]["reviews"].each do |e|
|
66
|
-
result.push(Providers::
|
66
|
+
result.push(Providers::Google::Review.new(e))
|
67
67
|
end
|
68
68
|
|
69
69
|
result
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Providers
|
2
|
+
module GoogleReviews
|
3
|
+
class Business
|
4
|
+
attr_accessor :name, :address, :reference, :average_rating, :url
|
5
|
+
|
6
|
+
def self.build_business(node)
|
7
|
+
return nil if [node["name"], node["formatted_address"], node["reference"]].include?(nil)
|
8
|
+
new(node)
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
def initialize(node)
|
13
|
+
@name = node["name"]
|
14
|
+
@address = node["formatted_address"]
|
15
|
+
@reference = node["reference"]
|
16
|
+
@average_rating = node["rating"]
|
17
|
+
@url = node["url"]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Providers
|
2
|
+
module GoogleReviews
|
3
|
+
class Review
|
4
|
+
attr_accessor :rating, :author_name, :reviewed_at, :comment
|
5
|
+
|
6
|
+
def initialize(node)
|
7
|
+
@rating = average_rating(node["aspects"])
|
8
|
+
@author_name = node["author_name"]
|
9
|
+
@reviewed_at = Time.at(node["time"].to_i)
|
10
|
+
@comment = node["text"]
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def average_rating(arr)
|
16
|
+
return 0 if arr.nil? || arr.size < 1
|
17
|
+
|
18
|
+
sum = 0
|
19
|
+
arr.each { |el| sum += el["rating"].to_f }
|
20
|
+
sum.to_f / arr.size
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require 'httparty'
|
2
|
+
require 'open-uri'
|
3
|
+
|
4
|
+
module Providers
|
5
|
+
class GoogleReviewsApi
|
6
|
+
class ExceededQueryLimitError < StandardError; end
|
7
|
+
|
8
|
+
def initialize(options)
|
9
|
+
@key = options[:key]
|
10
|
+
end
|
11
|
+
|
12
|
+
def find_business_by_name(name, business_type, city_state = "")
|
13
|
+
request_url = business_url(name, business_type)
|
14
|
+
@json_results = HTTParty.get(request_url)
|
15
|
+
parse_business_results(@json_results)
|
16
|
+
end
|
17
|
+
|
18
|
+
def find_reviews_for_business(ref)
|
19
|
+
request_url = reviews_url(ref)
|
20
|
+
@json_results = HTTParty.get(request_url)
|
21
|
+
parse_reviews_results(@json_results)
|
22
|
+
end
|
23
|
+
|
24
|
+
def find_business_by_id(google_id)
|
25
|
+
request_url = reviews_url(google_id)
|
26
|
+
@json_results = HTTParty.get(request_url)
|
27
|
+
return @json_results if @json_results.nil?
|
28
|
+
|
29
|
+
json = @json_results["result"]
|
30
|
+
return json if json.nil?
|
31
|
+
|
32
|
+
Providers::GoogleReviews::Business.build_business(json)
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def query_limit_has_been_reached?
|
38
|
+
@json_results["status"] == 'OVER_QUERY_LIMIT'
|
39
|
+
end
|
40
|
+
|
41
|
+
def business_url(business_name, business_type)
|
42
|
+
"https://maps.googleapis.com/maps/api/place/textsearch/json?key=#{@key}&query=#{URI::encode(business_name)}=&sensor=false&type=#{URI::encode(business_type)}"
|
43
|
+
end
|
44
|
+
|
45
|
+
def reviews_url(reference)
|
46
|
+
"https://maps.googleapis.com/maps/api/place/details/json?key=#{@key}&reference=#{reference}&sensor=false"
|
47
|
+
end
|
48
|
+
|
49
|
+
def parse_business_results(json)
|
50
|
+
raise ExceededQueryLimitError if query_limit_has_been_reached?
|
51
|
+
|
52
|
+
result = []
|
53
|
+
return result if json.nil? || json["results"].nil?
|
54
|
+
|
55
|
+
json["results"].each do |e|
|
56
|
+
result.push(Providers::GoogleReviews::Business.build_business(e))
|
57
|
+
end
|
58
|
+
|
59
|
+
result
|
60
|
+
end
|
61
|
+
|
62
|
+
def parse_reviews_results(json)
|
63
|
+
result = []
|
64
|
+
return result if json.nil? || json["result"].nil? || json["result"]["reviews"].nil?
|
65
|
+
|
66
|
+
json["result"]["reviews"].each do |e|
|
67
|
+
result.push(Providers::GoogleReviews::Review.new(e))
|
68
|
+
end
|
69
|
+
|
70
|
+
result
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Providers
|
2
|
+
module YelpReviews
|
3
|
+
class Business
|
4
|
+
attr_accessor :name, :address, :yelp_id, :average_rating, :total_reviews
|
5
|
+
|
6
|
+
def self.build_business(node)
|
7
|
+
return nil if [node["location"], node["rating"], node["id"]].include?(nil)
|
8
|
+
new(node)
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def initialize(node)
|
14
|
+
return if [node,
|
15
|
+
node["location"],
|
16
|
+
node["location"]["display_address"],
|
17
|
+
node["rating"],
|
18
|
+
node["review_count"],
|
19
|
+
node["id"]].include?(nil)
|
20
|
+
|
21
|
+
@address = node["location"]["display_address"].join(" ")
|
22
|
+
@name = node["name"]
|
23
|
+
@average_rating = node["rating"]
|
24
|
+
@total_reviews = node["review_count"]
|
25
|
+
@yelp_id = node["id"]
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Providers
|
2
|
+
module YelpReviews
|
3
|
+
class Review
|
4
|
+
attr_accessor :rating, :author_name, :reviewed_at, :comment
|
5
|
+
|
6
|
+
def initialize(node)
|
7
|
+
@rating = node["rating"]
|
8
|
+
@author_name = node["name"]
|
9
|
+
@reviewed_at = Time.at(node["time_created"].to_i)
|
10
|
+
@comment = node["excerpt"]
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
require 'oauth'
|
2
|
+
require 'json'
|
3
|
+
require 'open-uri'
|
4
|
+
|
5
|
+
module Providers
|
6
|
+
class YelpReviewsApi
|
7
|
+
|
8
|
+
def initialize(options)
|
9
|
+
@consumer_key = options[:consumer_key]
|
10
|
+
@consumer_secret = options[:consumer_secret]
|
11
|
+
@token = options[:token]
|
12
|
+
@token_secret = options[:token_secret]
|
13
|
+
end
|
14
|
+
|
15
|
+
def find_business_by_name(name, business_type, city_state)
|
16
|
+
access_token = create_oauth_token
|
17
|
+
response = JSON.parse(access_token.get(business_path(name, business_type, city_state)).body)
|
18
|
+
parse_businesses(response["businesses"])
|
19
|
+
end
|
20
|
+
|
21
|
+
def find_reviews_for_business(yelp_id)
|
22
|
+
access_token = create_oauth_token
|
23
|
+
response = JSON.parse(access_token.get(review_path(yelp_id)).body)
|
24
|
+
parse_reviews(response["reviews"])
|
25
|
+
end
|
26
|
+
|
27
|
+
def find_business_by_id(yelp_id)
|
28
|
+
access_token = create_oauth_token
|
29
|
+
response = JSON.parse(access_token.get(review_path(yelp_id)).body)
|
30
|
+
Providers::YelpReviews::Business.build_business(response) if response &&
|
31
|
+
response["location"] &&
|
32
|
+
response["location"]["display_address"]
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def create_oauth_token
|
39
|
+
consumer_key = @consumer_key
|
40
|
+
consumer_secret = @consumer_secret
|
41
|
+
token = @token
|
42
|
+
token_secret = @token_secret
|
43
|
+
|
44
|
+
consumer = OAuth::Consumer.new(consumer_key, consumer_secret, site: "http://api.yelp.com")
|
45
|
+
OAuth::AccessToken.new(consumer, token, token_secret)
|
46
|
+
end
|
47
|
+
|
48
|
+
def business_path(name, business_type, city_state)
|
49
|
+
"/v2/search?term=#{URI::encode(name)}&category_filter=#{URI::encode(business_type)}&location=#{URI::encode(city_state)}"
|
50
|
+
end
|
51
|
+
|
52
|
+
def review_path(yelp_id)
|
53
|
+
"/v2/business/#{yelp_id}"
|
54
|
+
end
|
55
|
+
|
56
|
+
def parse_businesses(business_list)
|
57
|
+
result = []
|
58
|
+
return result if business_list.nil? ||
|
59
|
+
business_list.empty? ||
|
60
|
+
business_list["location"].nil? ||
|
61
|
+
business_list["location"]["display_address"].nil?
|
62
|
+
|
63
|
+
business_list.each do |business|
|
64
|
+
result.push(Providers::YelpReviews::Business.build_business(business))
|
65
|
+
end
|
66
|
+
|
67
|
+
result
|
68
|
+
end
|
69
|
+
|
70
|
+
def parse_reviews(review_list)
|
71
|
+
result = []
|
72
|
+
return result if review_list.nil?
|
73
|
+
|
74
|
+
review_list.each do |review|
|
75
|
+
result.push(Providers::YelpReviews::Review.new(review))
|
76
|
+
end
|
77
|
+
|
78
|
+
result
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
data/lib/user_reviews/version.rb
CHANGED
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Providers::CitysearchReviews::Business do
|
4
|
+
describe "#initialize" do
|
5
|
+
let(:address) { {"street" => '', "city" => '', "state" => '', "postal_code" => '' } }
|
6
|
+
let(:node) do
|
7
|
+
{
|
8
|
+
"name" => '',
|
9
|
+
"address" => address,
|
10
|
+
"id" => stub,
|
11
|
+
"rating" => stub,
|
12
|
+
"review_info" => {}
|
13
|
+
}
|
14
|
+
end
|
15
|
+
|
16
|
+
context "when required fields are not present" do
|
17
|
+
let(:node) { Hash.new(nil) }
|
18
|
+
it "returns nil" do
|
19
|
+
biz = Providers::CitysearchReviews::Business.build_business(node)
|
20
|
+
biz.should be_nil
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context "when required fields are present" do
|
25
|
+
it "returns an Bussiness object" do
|
26
|
+
Providers::CitysearchReviews::Business.build_business(node).should be
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Providers::CitysearchReviewsApi do
|
4
|
+
before do
|
5
|
+
end
|
6
|
+
|
7
|
+
describe "#initialize" do
|
8
|
+
it "initializes a new CitySearch provider" do
|
9
|
+
Providers::CitysearchReviewsApi.new(publisher_key: "").should be
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "#find_business_by_name" do
|
14
|
+
let(:json_result) { { "address" => {} } }
|
15
|
+
let(:business_url) { "http://www.example.com" }
|
16
|
+
let(:citysearch_wrapper) { Providers::CitysearchReviewsApi.new(key: "") }
|
17
|
+
let(:query_result) { [Providers::CitysearchReviews::Business.build_business(json_result)] }
|
18
|
+
|
19
|
+
it "returns an array of possible businesses" do
|
20
|
+
citysearch_wrapper.should_receive(:business_search_url).with("Unpakt", "moving company", "NY,NY") { business_url }
|
21
|
+
HTTParty.should_receive(:get).with(business_url) { json_result }
|
22
|
+
citysearch_wrapper.should_receive(:parse_business_results).with(json_result) { query_result }
|
23
|
+
|
24
|
+
citysearch_wrapper.find_business_by_name("Unpakt", "moving company", "NY,NY").should eq query_result
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
describe "#find_reviews_for_business" do
|
30
|
+
let(:citysearch_id) { stub }
|
31
|
+
let(:json_result) { {"review_date" => "2007-03-07T21:53:41.000Z"} }
|
32
|
+
let(:reviews_url) { "http://www.example.com" }
|
33
|
+
let(:citysearch_wrapper) { Providers::CitysearchReviewsApi.new(key: "") }
|
34
|
+
let(:query_result) { [Providers::CitysearchReviews::Review.new(json_result)] }
|
35
|
+
|
36
|
+
it "returns the rating for a given entity" do
|
37
|
+
citysearch_wrapper.should_receive(:reviews_url).with(citysearch_id) { reviews_url }
|
38
|
+
HTTParty.should_receive(:get).with(reviews_url) { json_result }
|
39
|
+
citysearch_wrapper.should_receive(:parse_reviews_results).with(json_result) { query_result }
|
40
|
+
|
41
|
+
citysearch_wrapper.find_reviews_for_business(citysearch_id).should eq query_result
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Providers::GoogleReviews::Business do
|
4
|
+
describe "#initialize" do
|
5
|
+
let(:node) do
|
6
|
+
{
|
7
|
+
"name" => '',
|
8
|
+
"formatted_address" => '',
|
9
|
+
"reference" => stub,
|
10
|
+
"url" => stub,
|
11
|
+
"rating" => stub
|
12
|
+
}
|
13
|
+
end
|
14
|
+
|
15
|
+
context "when required fields are not present" do
|
16
|
+
let(:node) { Hash.new(nil) }
|
17
|
+
it "returns nil" do
|
18
|
+
biz = Providers::GoogleReviews::Business.build_business(node)
|
19
|
+
biz.should be_nil
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context "when required fields are present" do
|
24
|
+
it "returns an Bussiness object" do
|
25
|
+
Providers::GoogleReviews::Business.build_business(node).should be
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Providers::GoogleReviewsApi do
|
4
|
+
before do
|
5
|
+
end
|
6
|
+
|
7
|
+
describe "#initialize" do
|
8
|
+
it "initializes a new GoogleReviews provider" do
|
9
|
+
Providers::GoogleReviewsApi.new(key: "").should be
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "#find_business_by_name" do
|
14
|
+
let(:json_result) { "{}" }
|
15
|
+
let(:business_url) { "http://www.example.com" }
|
16
|
+
let(:google_wrapper) { Providers::GoogleReviewsApi.new(key: "") }
|
17
|
+
let(:query_result) { [Providers::GoogleReviews::Business.build_business(json_result)] }
|
18
|
+
|
19
|
+
context "when the api is valid" do
|
20
|
+
it "returns an array of possible businesses" do
|
21
|
+
google_wrapper.should_receive(:business_url).with("Unpakt", "moving_company") { business_url }
|
22
|
+
HTTParty.should_receive(:get).with(business_url) { json_result }
|
23
|
+
google_wrapper.should_receive(:parse_business_results).with(json_result) { query_result }
|
24
|
+
|
25
|
+
google_wrapper.find_business_by_name("Unpakt", "moving_company").should eq query_result
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context "when the api query limit is reached" do
|
30
|
+
let(:json_result) { {'status' => 'OVER_QUERY_LIMIT'} }
|
31
|
+
|
32
|
+
it "raises an error" do
|
33
|
+
google_wrapper.should_receive(:business_url).with("Unpakt", "moving_company") { business_url }
|
34
|
+
HTTParty.should_receive(:get).with(business_url) { json_result }
|
35
|
+
lambda { google_wrapper.find_business_by_name("Unpakt", "moving_company") }.should raise_error Providers::GoogleReviewsApi::ExceededQueryLimitError
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe "#find_reviews_for_business" do
|
41
|
+
let(:reference) { stub }
|
42
|
+
let(:json_result) { "{}" }
|
43
|
+
let(:reviews_url) { "http://www.example.com" }
|
44
|
+
let(:google_wrapper) { Providers::GoogleReviewsApi.new(key: "") }
|
45
|
+
let(:query_result) { [Providers::GoogleReviews::Review.new(json_result)] }
|
46
|
+
|
47
|
+
it "returns the rating for a given entity" do
|
48
|
+
google_wrapper.should_receive(:reviews_url).with(reference) { reviews_url }
|
49
|
+
HTTParty.should_receive(:get).with(reviews_url) { json_result }
|
50
|
+
google_wrapper.should_receive(:parse_reviews_results).with(json_result) { query_result }
|
51
|
+
|
52
|
+
google_wrapper.find_reviews_for_business(reference).should eq query_result
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Providers::YelpReviews::Business do
|
4
|
+
describe "#initialize" do
|
5
|
+
let(:node) do
|
6
|
+
{
|
7
|
+
"location" => '',
|
8
|
+
"rating" => '',
|
9
|
+
"id" => stub,
|
10
|
+
}
|
11
|
+
end
|
12
|
+
|
13
|
+
context "when required fields are not present" do
|
14
|
+
let(:node) { Hash.new(nil) }
|
15
|
+
it "returns nil" do
|
16
|
+
biz = Providers::YelpReviews::Business.build_business(node)
|
17
|
+
biz.should be_nil
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
context "when required fields are present" do
|
22
|
+
it "returns an Bussiness object" do
|
23
|
+
Providers::YelpReviews::Business.build_business(node).should be
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Providers::YelpReviewsApi do
|
4
|
+
before do
|
5
|
+
end
|
6
|
+
|
7
|
+
describe "#initialize" do
|
8
|
+
it "initializes a new GoogleReviews provider" do
|
9
|
+
Providers::YelpReviewsApi.new(consumer_key: "",
|
10
|
+
consumer_secret: "",
|
11
|
+
token: "",
|
12
|
+
token_secret: "").should be
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "#find_business_by_name" do
|
17
|
+
let(:token) { stub }
|
18
|
+
let(:api_result) { stub }
|
19
|
+
let(:response_body) { stub }
|
20
|
+
let(:business_path) { "super_path" }
|
21
|
+
let(:business_place) do
|
22
|
+
{"location" => {"display_address" => ["1 Place", "NY"]}}
|
23
|
+
end
|
24
|
+
let(:json_result) {{"businesses" => business_places }}
|
25
|
+
let(:business_places) { [business_place] }
|
26
|
+
let(:yelp_wrapper) { Providers::YelpReviewsApi.new({}) }
|
27
|
+
let(:query_result) { [Providers::YelpReviews::Business.build_business(business_place)] }
|
28
|
+
|
29
|
+
it "returns an array of possible businesses" do
|
30
|
+
yelp_wrapper.should_receive(:create_oauth_token) { token }
|
31
|
+
yelp_wrapper.should_receive(:business_path).with("Unpakt", "movers", "NY,NY") { business_path }
|
32
|
+
token.should_receive(:get).with(business_path) { api_result }
|
33
|
+
api_result.should_receive(:body) { response_body }
|
34
|
+
|
35
|
+
|
36
|
+
JSON.should_receive(:parse).with(response_body) { json_result }
|
37
|
+
yelp_wrapper.should_receive(:parse_businesses).with(business_places) { query_result }
|
38
|
+
|
39
|
+
yelp_wrapper.find_business_by_name("Unpakt", "movers", "NY,NY").should eq query_result
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
|
44
|
+
describe "#find_reviews_for_business" do
|
45
|
+
let(:token) { stub }
|
46
|
+
let(:api_result) { stub }
|
47
|
+
let(:response_body) { stub }
|
48
|
+
let(:review_path) { "super_path" }
|
49
|
+
let(:review) {{"rating" => 1}}
|
50
|
+
let(:reviews) { [review] }
|
51
|
+
let(:json_result) {{"reviews" => reviews }}
|
52
|
+
let(:yelp_wrapper) { Providers::YelpReviewsApi.new({}) }
|
53
|
+
let(:query_result) { [Providers::YelpReviews::Review.new(review)] }
|
54
|
+
|
55
|
+
it "returns an array of possible businesses" do
|
56
|
+
yelp_wrapper.should_receive(:create_oauth_token) { token }
|
57
|
+
yelp_wrapper.should_receive(:review_path).with("yelp-Unpakt") { review_path }
|
58
|
+
token.should_receive(:get).with(review_path) { api_result }
|
59
|
+
api_result.should_receive(:body) { response_body }
|
60
|
+
|
61
|
+
|
62
|
+
JSON.should_receive(:parse).with(response_body) { json_result }
|
63
|
+
yelp_wrapper.should_receive(:parse_reviews).with(reviews) { query_result }
|
64
|
+
|
65
|
+
yelp_wrapper.find_reviews_for_business("yelp-Unpakt").should eq query_result
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: user_reviews
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-07-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -99,6 +99,7 @@ extensions: []
|
|
99
99
|
extra_rdoc_files: []
|
100
100
|
files:
|
101
101
|
- .gitignore
|
102
|
+
- .pairs
|
102
103
|
- .rspec
|
103
104
|
- Gemfile
|
104
105
|
- Gemfile.lock
|
@@ -109,22 +110,42 @@ files:
|
|
109
110
|
- lib/providers/citysearch/api.rb
|
110
111
|
- lib/providers/citysearch/business.rb
|
111
112
|
- lib/providers/citysearch/review.rb
|
113
|
+
- lib/providers/citysearch_reviews/business.rb
|
114
|
+
- lib/providers/citysearch_reviews/review.rb
|
115
|
+
- lib/providers/citysearch_reviews_api.rb
|
112
116
|
- lib/providers/google/api.rb
|
113
117
|
- lib/providers/google/business.rb
|
114
118
|
- lib/providers/google/review.rb
|
119
|
+
- lib/providers/google_reviews/business.rb
|
120
|
+
- lib/providers/google_reviews/review.rb
|
121
|
+
- lib/providers/google_reviews_api.rb
|
115
122
|
- lib/providers/yelp/api.rb
|
116
123
|
- lib/providers/yelp/business.rb
|
117
124
|
- lib/providers/yelp/review.rb
|
125
|
+
- lib/providers/yelp_reviews/business.rb
|
126
|
+
- lib/providers/yelp_reviews/review.rb
|
127
|
+
- lib/providers/yelp_reviews_api.rb
|
118
128
|
- lib/user_reviews.rb
|
119
129
|
- lib/user_reviews/version.rb
|
130
|
+
- scripts/uploadgem.sh
|
120
131
|
- spec/providers/citysearch/api_spec.rb
|
121
132
|
- spec/providers/citysearch/business_spec.rb
|
133
|
+
- spec/providers/citysearch_reviews/business_spec.rb
|
134
|
+
- spec/providers/citysearch_reviews_api_spec.rb
|
122
135
|
- spec/providers/google/api_spec.rb
|
123
136
|
- spec/providers/google/business_spec.rb
|
137
|
+
- spec/providers/google_reviews/business_spec.rb
|
138
|
+
- spec/providers/google_reviews_api_spec.rb
|
124
139
|
- spec/providers/yelp/api_spec.rb
|
125
140
|
- spec/providers/yelp/business_spec.rb
|
141
|
+
- spec/providers/yelp_reviews/business_spec.rb
|
142
|
+
- spec/providers/yelp_reviews_api_spec.rb
|
126
143
|
- spec/spec_helper.rb
|
127
144
|
- spec/user_reviews_spec.rb
|
145
|
+
- user_reviews-0.0.1.gem
|
146
|
+
- user_reviews-0.0.2.gem
|
147
|
+
- user_reviews-0.0.3.gem
|
148
|
+
- user_reviews-0.0.4.gem
|
128
149
|
- user_reviews.gemspec
|
129
150
|
homepage: http://www.unpakt.com
|
130
151
|
licenses: []
|
@@ -138,30 +159,30 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
138
159
|
- - ! '>='
|
139
160
|
- !ruby/object:Gem::Version
|
140
161
|
version: '0'
|
141
|
-
segments:
|
142
|
-
- 0
|
143
|
-
hash: 3212237321803513
|
144
162
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
145
163
|
none: false
|
146
164
|
requirements:
|
147
165
|
- - ! '>='
|
148
166
|
- !ruby/object:Gem::Version
|
149
167
|
version: '0'
|
150
|
-
segments:
|
151
|
-
- 0
|
152
|
-
hash: 3212237321803513
|
153
168
|
requirements: []
|
154
169
|
rubyforge_project:
|
155
|
-
rubygems_version: 1.8.
|
170
|
+
rubygems_version: 1.8.24
|
156
171
|
signing_key:
|
157
172
|
specification_version: 3
|
158
173
|
summary: Wrapper for mulitple user review APIs
|
159
174
|
test_files:
|
160
175
|
- spec/providers/citysearch/api_spec.rb
|
161
176
|
- spec/providers/citysearch/business_spec.rb
|
177
|
+
- spec/providers/citysearch_reviews/business_spec.rb
|
178
|
+
- spec/providers/citysearch_reviews_api_spec.rb
|
162
179
|
- spec/providers/google/api_spec.rb
|
163
180
|
- spec/providers/google/business_spec.rb
|
181
|
+
- spec/providers/google_reviews/business_spec.rb
|
182
|
+
- spec/providers/google_reviews_api_spec.rb
|
164
183
|
- spec/providers/yelp/api_spec.rb
|
165
184
|
- spec/providers/yelp/business_spec.rb
|
185
|
+
- spec/providers/yelp_reviews/business_spec.rb
|
186
|
+
- spec/providers/yelp_reviews_api_spec.rb
|
166
187
|
- spec/spec_helper.rb
|
167
188
|
- spec/user_reviews_spec.rb
|