yotpo 0.1.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +5 -13
  2. data/.ruby-version +1 -1
  3. data/.travis.yml +0 -2
  4. data/lib/yotpo.rb +1 -1
  5. data/lib/yotpo/api/account_social.rb +39 -0
  6. data/lib/yotpo/api/answer.rb +16 -0
  7. data/lib/yotpo/api/comment.rb +38 -0
  8. data/lib/yotpo/api/feature.rb +12 -0
  9. data/lib/yotpo/api/oauth.rb +13 -0
  10. data/lib/yotpo/api/owner_feature.rb +48 -0
  11. data/lib/yotpo/api/owner_feature_setting.rb +37 -0
  12. data/lib/yotpo/api/product.rb +13 -0
  13. data/lib/yotpo/api/question.rb +44 -0
  14. data/lib/yotpo/api/review.rb +4 -1
  15. data/lib/yotpo/api/user.rb +5 -0
  16. data/lib/yotpo/client.rb +21 -5
  17. data/lib/yotpo/core/response_parser.rb +5 -3
  18. data/lib/yotpo/version.rb +1 -1
  19. data/spec/api/account_social_spec.rb +59 -0
  20. data/spec/api/answer_spec.rb +32 -0
  21. data/spec/api/comment_spec.rb +74 -0
  22. data/spec/api/feature_spec.rb +21 -0
  23. data/spec/api/oauth_spec.rb +22 -0
  24. data/spec/api/owner_feature_setting_spec.rb +79 -0
  25. data/spec/api/owner_feature_spec.rb +77 -0
  26. data/spec/api/product_spec.rb +18 -0
  27. data/spec/api/purchase_spec.rb +2 -2
  28. data/spec/api/question_spec.rb +53 -0
  29. data/spec/api/review_spec.rb +17 -0
  30. data/spec/api/user_spec.rb +14 -0
  31. data/spec/cassettes/add_features.yml +51 -0
  32. data/spec/cassettes/add_shop_owner_answer.yml +49 -0
  33. data/spec/cassettes/add_vote_to_review.yml +46 -0
  34. data/spec/cassettes/anonymous_user_confirmation.yml +49 -0
  35. data/spec/cassettes/create_account_social.yml +51 -0
  36. data/spec/cassettes/create_comment.yml +53 -0
  37. data/spec/cassettes/create_new_purchase.yml +23 -28
  38. data/spec/cassettes/get_account_social.yml +51 -0
  39. data/spec/cassettes/get_feature_settings.yml +50 -0
  40. data/spec/cassettes/get_features.yml +191 -0
  41. data/spec/cassettes/get_owner_features.yml +106 -0
  42. data/spec/cassettes/get_product_url.yml +93 -0
  43. data/spec/cassettes/mass_update_feature_settings.yml +48 -0
  44. data/spec/cassettes/owner_feature_settings.yml +49 -0
  45. data/spec/cassettes/question_create_by_token.yml +49 -0
  46. data/spec/cassettes/question_send_confirmation.yml +74 -0
  47. data/spec/cassettes/remove_feature.yml +49 -0
  48. data/spec/cassettes/update_account_social.yml +50 -0
  49. data/spec/cassettes/update_comment.yml +50 -0
  50. data/spec/cassettes/update_comment_avatar.yml +48 -0
  51. data/spec/cassettes/update_feature_settings.yml +48 -0
  52. data/spec/cassettes/user_enable_feature.yml +49 -0
  53. data/spec/cassettes/validate_token.yml +48 -0
  54. data/yotpo.gemspec +2 -2
  55. metadata +99 -26
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- ZTc5NGE1MDA2ZTNlOGY3MzViNDQwZWNmY2ZlOGEzNDViNGFmNWNjZA==
5
- data.tar.gz: !binary |-
6
- OTdhNmJhZTk5NzJhZGRmOWRhNzgwMTE1NWRjZDMzMzcxMjAxNGIzOQ==
2
+ SHA1:
3
+ metadata.gz: 1ba58ed0c74829ed39bfb92a5fa9ce230fd1bc3d
4
+ data.tar.gz: 76180c212971fa35fb523cf6ad1b7e1b13720cdb
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- ZWY0MGFjOTJkODRkZWI4N2MyZDczNjZlODk4MTcyMGE5OTI3NGYxNzE0YmYz
10
- MzJkYjE2ZTllMGQyM2U3ZGY1Y2UzZTBjNTNiYjU0MTQ4MjRiODgxNDVjNjcz
11
- YTliYmJmOGIzY2EyZTdjNTc1MDI0Yzg0ODAyMzQ3MzU1ZDJhNzA=
12
- data.tar.gz: !binary |-
13
- MTgzNDQ2NDk2NjU3MjYyN2JlMzg0YzU2NzJmYmIxYmRmMzc4OGU1YzkyYTc5
14
- ZDI0YjBlMGU4NThmZWQ4ODI5MTY0NWU4NjY0NWVmYmZjMjA2OWFmZjFjY2Ew
15
- NmUzMWY5MzM0NDJhOWNjZjRhNmExODdhNjE2ODM0Y2UzNWRlNjQ=
6
+ metadata.gz: d931d0b999b6da7e7eb54fd9d38889a1b0c2ca0ae4b407e00fc0aa9f80d4174ac8a4b9c4688b15bb94e6314fca2242f7b9ab3500f5ef0bcf42b004a9f966e6f0
7
+ data.tar.gz: c137689b3bea97ab1c5bbedddfac0c87b73bd6d81a4defc98c42acbf7337a7f0dcb39ac27dee2f39bd93bf4f4feb0bdfe899d37f4afeadaf26948af07890906d
@@ -1 +1 @@
1
- ruby-2.2.1
1
+ ruby-2.2.2
@@ -1,7 +1,5 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.9.3
4
- - 2.1.1
5
3
  - ruby-head
6
4
  deploy:
7
5
  provider: rubygems
@@ -40,7 +40,7 @@ module Yotpo
40
40
  # @return an instance of Yotpo::Client
41
41
  #
42
42
  def client
43
- @client ||= Yotpo::Client.new()
43
+ @client ||= Yotpo::Client.new(@url || 'https://api.yotpo.com')
44
44
  end
45
45
 
46
46
  private
@@ -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,12 @@
1
+ module Yotpo
2
+ module Feature
3
+ def get_features(params)
4
+ request = {
5
+ utoken: params[:utoken]
6
+ }
7
+ get('/features', request)
8
+ end
9
+ end
10
+ end
11
+
12
+
@@ -0,0 +1,13 @@
1
+ module Yotpo
2
+ module Oauth
3
+ def validate_token(params)
4
+ request = {
5
+ token: params[:utoken],
6
+ app_key: params[:app_key]
7
+ }
8
+ get('/oauth/validate_token', request)
9
+ end
10
+ end
11
+ end
12
+
13
+
@@ -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
+
@@ -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
@@ -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
@@ -60,5 +60,10 @@ module Yotpo
60
60
  }
61
61
  get('/users/b2blogin.json', request)
62
62
  end
63
+
64
+ def anonymous_user_confirmation(params)
65
+ get("/users/anonymous/#{params[:token]}")
66
+ end
67
+
63
68
  end
64
69
  end
@@ -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
- preform(url, :delete) do
80
- return connection.delete(url)
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
- unless body.empty?
8
- body.response || body.status || body
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
 
@@ -1,3 +1,3 @@
1
1
  module Yotpo
2
- VERSION = '0.1.0'
2
+ VERSION = '1.0.0'
3
3
  end
@@ -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