yotpo 0.1.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -13
- data/.ruby-version +1 -1
- data/.travis.yml +0 -2
- data/lib/yotpo.rb +1 -1
- data/lib/yotpo/api/account_social.rb +39 -0
- data/lib/yotpo/api/answer.rb +16 -0
- data/lib/yotpo/api/comment.rb +38 -0
- data/lib/yotpo/api/feature.rb +12 -0
- data/lib/yotpo/api/oauth.rb +13 -0
- data/lib/yotpo/api/owner_feature.rb +48 -0
- data/lib/yotpo/api/owner_feature_setting.rb +37 -0
- data/lib/yotpo/api/product.rb +13 -0
- data/lib/yotpo/api/question.rb +44 -0
- data/lib/yotpo/api/review.rb +4 -1
- data/lib/yotpo/api/user.rb +5 -0
- data/lib/yotpo/client.rb +21 -5
- data/lib/yotpo/core/response_parser.rb +5 -3
- data/lib/yotpo/version.rb +1 -1
- data/spec/api/account_social_spec.rb +59 -0
- data/spec/api/answer_spec.rb +32 -0
- data/spec/api/comment_spec.rb +74 -0
- data/spec/api/feature_spec.rb +21 -0
- data/spec/api/oauth_spec.rb +22 -0
- data/spec/api/owner_feature_setting_spec.rb +79 -0
- data/spec/api/owner_feature_spec.rb +77 -0
- data/spec/api/product_spec.rb +18 -0
- data/spec/api/purchase_spec.rb +2 -2
- data/spec/api/question_spec.rb +53 -0
- data/spec/api/review_spec.rb +17 -0
- data/spec/api/user_spec.rb +14 -0
- data/spec/cassettes/add_features.yml +51 -0
- data/spec/cassettes/add_shop_owner_answer.yml +49 -0
- data/spec/cassettes/add_vote_to_review.yml +46 -0
- data/spec/cassettes/anonymous_user_confirmation.yml +49 -0
- data/spec/cassettes/create_account_social.yml +51 -0
- data/spec/cassettes/create_comment.yml +53 -0
- data/spec/cassettes/create_new_purchase.yml +23 -28
- data/spec/cassettes/get_account_social.yml +51 -0
- data/spec/cassettes/get_feature_settings.yml +50 -0
- data/spec/cassettes/get_features.yml +191 -0
- data/spec/cassettes/get_owner_features.yml +106 -0
- data/spec/cassettes/get_product_url.yml +93 -0
- data/spec/cassettes/mass_update_feature_settings.yml +48 -0
- data/spec/cassettes/owner_feature_settings.yml +49 -0
- data/spec/cassettes/question_create_by_token.yml +49 -0
- data/spec/cassettes/question_send_confirmation.yml +74 -0
- data/spec/cassettes/remove_feature.yml +49 -0
- data/spec/cassettes/update_account_social.yml +50 -0
- data/spec/cassettes/update_comment.yml +50 -0
- data/spec/cassettes/update_comment_avatar.yml +48 -0
- data/spec/cassettes/update_feature_settings.yml +48 -0
- data/spec/cassettes/user_enable_feature.yml +49 -0
- data/spec/cassettes/validate_token.yml +48 -0
- data/yotpo.gemspec +2 -2
- metadata +99 -26
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
OTdhNmJhZTk5NzJhZGRmOWRhNzgwMTE1NWRjZDMzMzcxMjAxNGIzOQ==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 1ba58ed0c74829ed39bfb92a5fa9ce230fd1bc3d
|
4
|
+
data.tar.gz: 76180c212971fa35fb523cf6ad1b7e1b13720cdb
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
MzJkYjE2ZTllMGQyM2U3ZGY1Y2UzZTBjNTNiYjU0MTQ4MjRiODgxNDVjNjcz
|
11
|
-
YTliYmJmOGIzY2EyZTdjNTc1MDI0Yzg0ODAyMzQ3MzU1ZDJhNzA=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
MTgzNDQ2NDk2NjU3MjYyN2JlMzg0YzU2NzJmYmIxYmRmMzc4OGU1YzkyYTc5
|
14
|
-
ZDI0YjBlMGU4NThmZWQ4ODI5MTY0NWU4NjY0NWVmYmZjMjA2OWFmZjFjY2Ew
|
15
|
-
NmUzMWY5MzM0NDJhOWNjZjRhNmExODdhNjE2ODM0Y2UzNWRlNjQ=
|
6
|
+
metadata.gz: d931d0b999b6da7e7eb54fd9d38889a1b0c2ca0ae4b407e00fc0aa9f80d4174ac8a4b9c4688b15bb94e6314fca2242f7b9ab3500f5ef0bcf42b004a9f966e6f0
|
7
|
+
data.tar.gz: c137689b3bea97ab1c5bbedddfac0c87b73bd6d81a4defc98c42acbf7337a7f0dcb39ac27dee2f39bd93bf4f4feb0bdfe899d37f4afeadaf26948af07890906d
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
ruby-2.2.
|
1
|
+
ruby-2.2.2
|
data/.travis.yml
CHANGED
data/lib/yotpo.rb
CHANGED
@@ -0,0 +1,39 @@
|
|
1
|
+
module Yotpo
|
2
|
+
module AccountSocial
|
3
|
+
def create_account_social(params)
|
4
|
+
request = {
|
5
|
+
account_social: {
|
6
|
+
social_network_name: params[:social_network_name],
|
7
|
+
access_token: params[:access_token],
|
8
|
+
social_id: params[:social_id],
|
9
|
+
secret: params[:secret],
|
10
|
+
page_token: params[:page_token],
|
11
|
+
page_id: params[:page_id],
|
12
|
+
message: params[:message],
|
13
|
+
social_push_type_id: params[:social_push_type_id],
|
14
|
+
invalidated_at: params[:invalidated_at],
|
15
|
+
},
|
16
|
+
utoken: params[:utoken]
|
17
|
+
}
|
18
|
+
post("/apps/#{params[:app_key]}/account_socials", request)
|
19
|
+
end
|
20
|
+
|
21
|
+
def update_account_social(params)
|
22
|
+
request = {
|
23
|
+
utoken: params.delete(:utoken)
|
24
|
+
}
|
25
|
+
request[:account_social] = params
|
26
|
+
put("/apps/#{params.delete(:app_key)}/account_socials/#{params.delete(:id)}", request)
|
27
|
+
end
|
28
|
+
|
29
|
+
def get_account_social(params)
|
30
|
+
request = {
|
31
|
+
utoken: params[:utoken]
|
32
|
+
}
|
33
|
+
get("/apps/#{params[:app_key]}/account_socials", request)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Yotpo
|
2
|
+
module Answer
|
3
|
+
|
4
|
+
def add_shop_owner_answer(params)
|
5
|
+
request = {
|
6
|
+
comment: {
|
7
|
+
content: params[:content],
|
8
|
+
public: params[:public]
|
9
|
+
},
|
10
|
+
utoken: params[:utoken]
|
11
|
+
}
|
12
|
+
post("questions/#{params[:question_id]}/answers", request)
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Yotpo
|
2
|
+
module Comment
|
3
|
+
def create_comment(params)
|
4
|
+
request = {
|
5
|
+
utoken: params[:utoken],
|
6
|
+
comment: {
|
7
|
+
content: params[:content],
|
8
|
+
public: params[:public]
|
9
|
+
}
|
10
|
+
}
|
11
|
+
post("/reviews/#{params[:review_id]}/comments", request)
|
12
|
+
end
|
13
|
+
|
14
|
+
def update_comment(params)
|
15
|
+
request = {
|
16
|
+
utoken: params[:utoken],
|
17
|
+
comment: {
|
18
|
+
content: params[:content],
|
19
|
+
public: params[:public]
|
20
|
+
}
|
21
|
+
}
|
22
|
+
put("/reviews/#{params[:review_id]}/comments/#{params[:comment_id]}", request)
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
def update_comment_avatar(params)
|
27
|
+
request = {
|
28
|
+
utoken: params[:utoken],
|
29
|
+
comments_avatar_data: params[:comments_avatar_data],
|
30
|
+
comments_display_name: params[:comments_display_name]
|
31
|
+
}
|
32
|
+
put("/apps/#{params[:app_key]}/app_comment_avatar", request)
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module Yotpo
|
2
|
+
module OwnerFeature
|
3
|
+
def add_feature(params)
|
4
|
+
request = {
|
5
|
+
utoken: params[:utoken],
|
6
|
+
id: params[:feature_id]
|
7
|
+
}
|
8
|
+
post("#{get_owner_basic_path(params[:owner_type])}/#{params[:owner_id]}/features", request)
|
9
|
+
end
|
10
|
+
|
11
|
+
def remove_feature(params)
|
12
|
+
request = {
|
13
|
+
utoken: params[:utoken]
|
14
|
+
}
|
15
|
+
delete("#{get_owner_basic_path(params[:owner_type])}/#{params[:owner_id]}/features/#{params[:feature_id]}", request)
|
16
|
+
end
|
17
|
+
|
18
|
+
def user_enable_feature(params)
|
19
|
+
request = {
|
20
|
+
utoken: params[:utoken],
|
21
|
+
feature: {
|
22
|
+
user_enabled: params[:user_enabled]
|
23
|
+
}
|
24
|
+
}
|
25
|
+
put("apps/#{params[:app_key]}/features/#{params[:feature_id]}", request)
|
26
|
+
end
|
27
|
+
|
28
|
+
def get_owner_features(params)
|
29
|
+
request = {
|
30
|
+
utoken: params[:utoken]
|
31
|
+
}
|
32
|
+
get("apps/#{params[:app_key]}/features", request)
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
def get_owner_basic_path(owner_type)
|
37
|
+
if owner_type == :user
|
38
|
+
'/users'
|
39
|
+
elsif owner_type == :account
|
40
|
+
'/apps'
|
41
|
+
else
|
42
|
+
raise 'Wrong owner type!'
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Yotpo
|
2
|
+
module OwnerFeatureSetting
|
3
|
+
def get_feature_settings(params)
|
4
|
+
request = {
|
5
|
+
utoken: params[:utoken],
|
6
|
+
owner_ids: params[:owner_ids]
|
7
|
+
}
|
8
|
+
get("features/#{params[:feature_id]}/get_multiple_owners_settings", request)
|
9
|
+
end
|
10
|
+
|
11
|
+
def mass_update_feature_settings(params)
|
12
|
+
request = {
|
13
|
+
utoken: params[:utoken],
|
14
|
+
settings: params[:settings]
|
15
|
+
}
|
16
|
+
put("features/#{params[:feature_id]}/#{params[:owner_id]}/admin_mass_update", request)
|
17
|
+
end
|
18
|
+
|
19
|
+
def owner_feature_settings(params)
|
20
|
+
request = {
|
21
|
+
utoken: params[:utoken],
|
22
|
+
}
|
23
|
+
get("apps/#{params[:app_key]}/features/#{params[:feature_id]}/feature_settings", request)
|
24
|
+
end
|
25
|
+
|
26
|
+
def update_feature_settings(params)
|
27
|
+
request = {
|
28
|
+
utoken: params[:utoken],
|
29
|
+
value: params[:value],
|
30
|
+
key: params[:key]
|
31
|
+
}
|
32
|
+
put("apps/#{params[:app_key]}/features/#{params[:feature_id]}/feature_settings/#{params[:feature_settings_id]}", request)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
|
data/lib/yotpo/api/product.rb
CHANGED
@@ -21,5 +21,18 @@ module Yotpo
|
|
21
21
|
sku = params[:product_id]
|
22
22
|
get("/products/#{app_key}/#{sku}/bottomline")
|
23
23
|
end
|
24
|
+
|
25
|
+
def get_product_url(params)
|
26
|
+
app_key = params[:app_key]
|
27
|
+
product_id = params[:product_id]
|
28
|
+
request = {
|
29
|
+
utoken: params[:utoken],
|
30
|
+
reference: params[:reference],
|
31
|
+
source: params[:source],
|
32
|
+
sub_reference: params[:sub_reference]
|
33
|
+
}
|
34
|
+
request[:product_id] = product_id if product_id
|
35
|
+
get("/products/#{app_key}/product_url", request)
|
36
|
+
end
|
24
37
|
end
|
25
38
|
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Yotpo
|
2
|
+
module Question
|
3
|
+
|
4
|
+
def question_send_confirmation(params)
|
5
|
+
request = {
|
6
|
+
appkey: params[:app_key],
|
7
|
+
sku: params[:product_id],
|
8
|
+
product_title: params[:product_title],
|
9
|
+
product_url: params[:product_url],
|
10
|
+
display_name: params[:user_display_name],
|
11
|
+
email: params[:user_email],
|
12
|
+
review_content: params[:review_body],
|
13
|
+
review_source: params[:review_source],
|
14
|
+
product_description: params[:product_description],
|
15
|
+
product_image_url: params[:product_image_url],
|
16
|
+
demo: params[:demo],
|
17
|
+
signature: params[:signature],
|
18
|
+
reviewer_type: params[:reviewer_type],
|
19
|
+
}
|
20
|
+
request.delete_if {|element, value| value.nil? }
|
21
|
+
post('questions/send_confirmation_mail', request)
|
22
|
+
end
|
23
|
+
|
24
|
+
def question_create_by_token(params)
|
25
|
+
request = {
|
26
|
+
content: params[:content],
|
27
|
+
domain: params[:domain],
|
28
|
+
product_tags: params[:product_tags],
|
29
|
+
product_description: params[:product_description],
|
30
|
+
product_image_url: params[:product_image_url],
|
31
|
+
product_title: params[:product_name],
|
32
|
+
product_url: params[:product_url],
|
33
|
+
sku: params[:product_id],
|
34
|
+
token: params[:token],
|
35
|
+
utm_campaign: params[:utm_campaign],
|
36
|
+
utm_medium: params[:utm_medium],
|
37
|
+
utm_source: params[:utm_source]
|
38
|
+
}
|
39
|
+
request.delete_if {|element, value| value.nil? }
|
40
|
+
get('questions/create_by_token', request)
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
data/lib/yotpo/api/review.rb
CHANGED
@@ -38,7 +38,6 @@ module Yotpo
|
|
38
38
|
get('/reviews/dynamic_create', request)
|
39
39
|
end
|
40
40
|
|
41
|
-
|
42
41
|
#
|
43
42
|
# Gets reviews of a specific product
|
44
43
|
#
|
@@ -63,5 +62,9 @@ module Yotpo
|
|
63
62
|
request.delete_if{|key,val| val.nil? }
|
64
63
|
get("/products/#{app_key}/#{sku}/reviews", request)
|
65
64
|
end
|
65
|
+
|
66
|
+
def add_vote_to_review(params)
|
67
|
+
get("reviews/#{params[:review_id]}/vote/#{params[:vote_value]}")
|
68
|
+
end
|
66
69
|
end
|
67
70
|
end
|
data/lib/yotpo/api/user.rb
CHANGED
data/lib/yotpo/client.rb
CHANGED
@@ -7,6 +7,14 @@ require 'yotpo/core/response_parser'
|
|
7
7
|
require 'yotpo/version'
|
8
8
|
require 'yotpo/api/account'
|
9
9
|
require 'yotpo/api/account_platform'
|
10
|
+
require 'yotpo/api/account_social'
|
11
|
+
require 'yotpo/api/comment'
|
12
|
+
require 'yotpo/api/question'
|
13
|
+
require 'yotpo/api/answer'
|
14
|
+
require 'yotpo/api/feature'
|
15
|
+
require 'yotpo/api/oauth'
|
16
|
+
require 'yotpo/api/owner_feature'
|
17
|
+
require 'yotpo/api/owner_feature_setting'
|
10
18
|
require 'yotpo/api/product'
|
11
19
|
require 'yotpo/api/purchase'
|
12
20
|
require 'yotpo/api/reminder'
|
@@ -17,11 +25,18 @@ module Yotpo
|
|
17
25
|
class Client
|
18
26
|
include Yotpo::Account
|
19
27
|
include Yotpo::AccountPlatform
|
28
|
+
include Yotpo::AccountSocial
|
29
|
+
include Yotpo::Comment
|
30
|
+
include Yotpo::Feature
|
31
|
+
include Yotpo::Oauth
|
32
|
+
include Yotpo::OwnerFeature
|
33
|
+
include Yotpo::OwnerFeatureSetting
|
20
34
|
include Yotpo::Product
|
21
35
|
include Yotpo::Reminder
|
22
36
|
include Yotpo::Review
|
23
37
|
include Yotpo::User
|
24
|
-
|
38
|
+
include Yotpo::Question
|
39
|
+
include Yotpo::Answer
|
25
40
|
include Yotpo::Purchase
|
26
41
|
|
27
42
|
|
@@ -75,9 +90,10 @@ module Yotpo
|
|
75
90
|
# Does a DELETE request to the url with the params
|
76
91
|
#
|
77
92
|
# @param url [String] the relative path in the Yotpo API
|
78
|
-
def delete(url)
|
79
|
-
|
80
|
-
|
93
|
+
def delete(url, params)
|
94
|
+
params = convert_hash_keys(params)
|
95
|
+
preform(url, :delete, params: params) do
|
96
|
+
return connection.delete(url, params)
|
81
97
|
end
|
82
98
|
end
|
83
99
|
|
@@ -125,7 +141,7 @@ module Yotpo
|
|
125
141
|
|
126
142
|
# Setting request and response to use JSON/XML
|
127
143
|
conn.request :oj
|
128
|
-
conn.response :oj
|
144
|
+
conn.response :oj, :content_type => /\bjson$/
|
129
145
|
|
130
146
|
# Set to use instrumentals to get time logs
|
131
147
|
conn.use :instrumentation
|
@@ -4,8 +4,10 @@ require 'faraday_middleware/response_middleware'
|
|
4
4
|
module Yotpo
|
5
5
|
class ResponseParser < Faraday::Response::Middleware
|
6
6
|
def parse(body)
|
7
|
-
|
8
|
-
body.response || body.status
|
7
|
+
if body.respond_to?(:response) || body.respond_to?(:status)
|
8
|
+
body.response || body.status
|
9
|
+
else
|
10
|
+
body
|
9
11
|
end
|
10
12
|
end
|
11
13
|
end
|
@@ -19,7 +21,7 @@ module Yotpo
|
|
19
21
|
end
|
20
22
|
|
21
23
|
define_parser do |body|
|
22
|
-
::Oj.load(body, mode: :compat) unless body.strip.empty?
|
24
|
+
::Oj.load(body, mode: :compat) unless body.to_s.strip.empty?
|
23
25
|
end
|
24
26
|
end
|
25
27
|
|
data/lib/yotpo/version.rb
CHANGED
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe Yotpo::AccountSocial do
|
4
|
+
describe '#create social account' do
|
5
|
+
before(:all) do
|
6
|
+
account_social_params = {
|
7
|
+
utoken: @utoken,
|
8
|
+
app_key: @app_key,
|
9
|
+
social_network_name: 'INSTAGRAM',
|
10
|
+
access_token: 78910,
|
11
|
+
social_id: 111213141516,
|
12
|
+
}
|
13
|
+
VCR.use_cassette('create_account_social') do
|
14
|
+
@response = Yotpo.create_account_social(account_social_params)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
subject { @response.body.account_social }
|
19
|
+
it { should be_a ::Hashie::Mash }
|
20
|
+
it { should respond_to :access_token }
|
21
|
+
it { should respond_to :social_id }
|
22
|
+
end
|
23
|
+
|
24
|
+
describe '#update social account' do
|
25
|
+
before(:all) do
|
26
|
+
account_social_params = {
|
27
|
+
utoken: @utoken,
|
28
|
+
app_key: @app_key,
|
29
|
+
access_token: 123,
|
30
|
+
secret: 123,
|
31
|
+
id: 17
|
32
|
+
}
|
33
|
+
VCR.use_cassette('update_account_social') do
|
34
|
+
@response = Yotpo.update_account_social(account_social_params)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
subject { @response.body }
|
39
|
+
it { should be_a ::Hashie::Mash }
|
40
|
+
it { should respond_to :account_social }
|
41
|
+
end
|
42
|
+
|
43
|
+
describe '#get social account' do
|
44
|
+
before(:all) do
|
45
|
+
account_social_params = {
|
46
|
+
utoken: @utoken,
|
47
|
+
app_key: @app_key
|
48
|
+
}
|
49
|
+
VCR.use_cassette('get_account_social') do
|
50
|
+
@response = Yotpo.get_account_social(account_social_params)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
subject { @response.body.account_socials[0] }
|
55
|
+
it { should be_a ::Hashie::Mash }
|
56
|
+
it { should respond_to :access_token }
|
57
|
+
it { should respond_to :social_id }
|
58
|
+
end
|
59
|
+
end
|