wavelabs_client_api 0.3.5

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.
Files changed (43) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.travis.yml +8 -0
  4. data/CODE_OF_CONDUCT.md +13 -0
  5. data/Gemfile +6 -0
  6. data/LICENSE.txt +21 -0
  7. data/README.md +140 -0
  8. data/Rakefile +12 -0
  9. data/bin/console +14 -0
  10. data/bin/setup +7 -0
  11. data/lib/generators/templates/wavelabs_client_api_initializer.rb +13 -0
  12. data/lib/generators/wavelabs_client_api/install_generator.rb +17 -0
  13. data/lib/wavelabs_client_api.rb +34 -0
  14. data/lib/wavelabs_client_api/client/api/core/auth_api.rb +179 -0
  15. data/lib/wavelabs_client_api/client/api/core/base_api.rb +92 -0
  16. data/lib/wavelabs_client_api/client/api/core/media_api.rb +48 -0
  17. data/lib/wavelabs_client_api/client/api/core/social_api.rb +78 -0
  18. data/lib/wavelabs_client_api/client/api/core/users_api.rb +90 -0
  19. data/lib/wavelabs_client_api/client/api/data_models/base_api_model.rb +40 -0
  20. data/lib/wavelabs_client_api/client/api/data_models/login_api_model.rb +41 -0
  21. data/lib/wavelabs_client_api/client/api/data_models/media_api_model.rb +26 -0
  22. data/lib/wavelabs_client_api/client/api/data_models/member_api_model.rb +55 -0
  23. data/lib/wavelabs_client_api/client/api/data_models/message_api_model.rb +19 -0
  24. data/lib/wavelabs_client_api/client/api/data_models/social_accounts_api_model.rb +41 -0
  25. data/lib/wavelabs_client_api/client/api/data_models/token_api_model.rb +37 -0
  26. data/lib/wavelabs_client_api/client/api/data_models/token_details_api_model.rb +51 -0
  27. data/lib/wavelabs_client_api/version.rb +3 -0
  28. data/spec/core_api_specs/auth_api_spec.rb +90 -0
  29. data/spec/core_api_specs/media_api_spec.rb +38 -0
  30. data/spec/core_api_specs/social_api_spec.rb +32 -0
  31. data/spec/core_api_specs/users_api_spec.rb +65 -0
  32. data/spec/data_model_specs/login_api_model_spec.rb +27 -0
  33. data/spec/data_model_specs/media_api_model_spec.rb +21 -0
  34. data/spec/data_model_specs/member_api_model_spec.rb +38 -0
  35. data/spec/data_model_specs/message_api_model_spec.rb +19 -0
  36. data/spec/data_model_specs/social_accounts_api_model_spec.rb +25 -0
  37. data/spec/data_model_specs/token_api_model_spec.rb +21 -0
  38. data/spec/spec_helper.rb +28 -0
  39. data/spec/support/temp_user.doc +0 -0
  40. data/spec/support/temp_user.png +0 -0
  41. data/spec/support/user_sign_up.rb +20 -0
  42. data/wavelabs_client_api.gemspec +41 -0
  43. metadata +183 -0
@@ -0,0 +1,92 @@
1
+ require 'httmultiparty'
2
+
3
+ module WavelabsClientApi
4
+ module Client
5
+ module Api
6
+ module Core
7
+ class BaseApi
8
+
9
+ include HTTMultiParty
10
+
11
+ #debug_output $stdout
12
+
13
+ headers 'Accept' => 'application/json', 'Content-Type' => 'application/json'
14
+
15
+ def base_api_url(uri)
16
+ site_url + uri
17
+ end
18
+
19
+ def site_url
20
+ WavelabsClientApi.configuration.api_host_url
21
+ end
22
+
23
+ def client_id
24
+ WavelabsClientApi.configuration.client_key
25
+ end
26
+
27
+ def client_secret
28
+ WavelabsClientApi.configuration.client_secret
29
+ end
30
+
31
+ def self.check_connection?
32
+ begin
33
+ res = self.get(WavelabsClientApi.configuration.api_host_url)
34
+ if res.code == 200
35
+ true
36
+ end
37
+ rescue StandardError
38
+ false
39
+ end
40
+ end
41
+
42
+ def send_request_with_token(method, url, access_token, body = nil, query = nil)
43
+
44
+ begin
45
+ self.class.send(method, url, :body => body, :query => query, :headers => {"Authorization" => "Bearer " + access_token})
46
+ rescue StandardError
47
+ end
48
+
49
+ end
50
+
51
+ def send_request(method, url, body = nil, query_params = nil)
52
+ begin
53
+ self.class.send(method, url, :body => body.to_json, :query => query_params)
54
+ rescue StandardError
55
+ end
56
+
57
+ end
58
+
59
+ def create_login_model(login_params)
60
+ WavelabsClientApi::Client::Api::DataModels::LoginApiModel.new(login_params)
61
+ end
62
+
63
+ def create_member_model(json_response, except_token)
64
+ WavelabsClientApi::Client::Api::DataModels::MemberApiModel.new(json_response, except_token)
65
+ end
66
+
67
+ def create_token_model(json_response)
68
+ WavelabsClientApi::Client::Api::DataModels::TokenApiModel.new(json_response)
69
+ end
70
+
71
+ def create_media_model(json_response)
72
+ WavelabsClientApi::Client::Api::DataModels::MediaApiModel.new(json_response)
73
+ end
74
+
75
+ def create_message_model(json_response)
76
+ WavelabsClientApi::Client::Api::DataModels::MessageApiModel.new(json_response)
77
+ end
78
+
79
+ def create_social_model(json_response)
80
+ WavelabsClientApi::Client::Api::DataModels::SocialAccountsApiModel.new(json_response)
81
+ end
82
+
83
+ def create_token_details_model(json_response)
84
+ WavelabsClientApi::Client::Api::DataModels::TokenDetailsApiModel.new(json_response)
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end
90
+ end
91
+
92
+
@@ -0,0 +1,48 @@
1
+ # This class is responsible for handling
2
+ # Requests from Com::Nbos::Core::MediaController.
3
+ # It will create the request based on Controller request params and
4
+ # send that request to Wavelabs API server and return the response back.
5
+ # While sending respose back to receiver it will create the virtual models
6
+ # from Com::Nbos::Api::DataModels
7
+
8
+ class WavelabsClientApi::Client::Api::Core::MediaApi < WavelabsClientApi::Client::Api::Core::BaseApi
9
+
10
+ MEDIA_URI = "/api/media/v0/media"
11
+
12
+ def get_media(user_id, media_for, access_token)
13
+ url_path = base_api_url(MEDIA_URI)
14
+ query_params = { :id => user_id, :mediafor => media_for}
15
+ api_response = send_request_with_token("get", url_path, access_token, nil, query_params)
16
+
17
+ build_media_response(api_response)
18
+ end
19
+
20
+
21
+ def upload_media(file_path, media_for, access_token, user_id)
22
+ url_path = base_api_url(MEDIA_URI)
23
+ query_params = { :id => user_id,
24
+ :mediafor => media_for
25
+ }
26
+
27
+ body = {:file => File.new(file_path)}
28
+
29
+ api_response = send_request_with_token("post", url_path, access_token, body, query_params)
30
+ File.delete(file_path) if !file_path.include?("/spec/support/")
31
+ build_media_response(api_response)
32
+ end
33
+
34
+ def build_media_response(api_response)
35
+ begin
36
+ if api_response.code == 200
37
+ media_model = create_media_model(api_response.parsed_response)
38
+ {status: 200, media: media_model}
39
+ end
40
+ rescue StandardError
41
+ message_model = create_message_model(nil)
42
+ message_model.message = "Internal Server Error Please Try After Some Time."
43
+ { status: 500, message: message_model}
44
+ end
45
+ end
46
+
47
+
48
+ end
@@ -0,0 +1,78 @@
1
+ # This class is responsible for handling
2
+ # Requests from Com::Nbos::Core::SocialController.
3
+ # It will create the request based on Controller request params and
4
+ # send that request to Wavelabs API server and return the response back.
5
+ # While sending respose back to receiver it will create the virtual models
6
+ # from Com::Nbos::Api::DataModels
7
+
8
+ class WavelabsClientApi::Client::Api::Core::SocialApi < WavelabsClientApi::Client::Api::Core::BaseApi
9
+
10
+ # Api Server Social Authentication End Point URIs
11
+ FACEBOOK_LOGIN_URI = "/api/identity/v0/auth/social/facebook/connect"
12
+ GOOGLE_LOGIN_URI = "/api/identity/v0/auth/social/googlePlus/connect"
13
+ TWITER_LOGIN_URI = "/api/identity/v0/auth/social/twitter/connect"
14
+ GITHUB_LOGIN_URI = "/api/identity/v0/auth/social/gitHub/connect"
15
+ LINKEDIN_LOGIN_URI = "/api/identity/v0/auth/social/linkedIn/connect"
16
+ INSTAGRAM_LOGIN_URI = "/api/identity/v0/auth/social/instagram/connect"
17
+ INVALID_SOCIAL_URI = "/api/identity/v0/auth/social/invalid/connect"
18
+
19
+
20
+
21
+ def login(social_params, provider, access_token)
22
+ social_uri = get_scoial_login_uri(provider)
23
+ url_path = base_api_url(social_uri)
24
+
25
+ connection_options = { :clientId => client_id,
26
+ :accessToken => social_params[:credentials][:token],
27
+ :expiresIn => "#{social_params[:credentials][:expires_at]}"
28
+ }
29
+ api_response = send_request_with_token('post', url_path, access_token, connection_options.to_json)
30
+
31
+
32
+ if api_response.parsed_response["message"].present?
33
+ social_member_model = create_member_model(nil, true)
34
+ social_member_model.add_messages(api_response.parsed_response)
35
+ else
36
+ social_member_model = create_member_model(api_response.parsed_response, false)
37
+ end
38
+
39
+ begin
40
+ if api_response.code == 200
41
+ { status: 200, login: social_member_model}
42
+ elsif api_response.code == 400
43
+ social_member_model.add_errors(api_response.parsed_response)
44
+ { status: 400, login: social_member_model}
45
+ else
46
+ social_member_model.add_messages(api_response.parsed_response)
47
+ { status: api_response.code, login: social_member_model}
48
+ end
49
+ rescue StandardError
50
+ social_member_model.message = "Internal Server Error Please Try After Some Time."
51
+ { status: 500, login: social_member_model}
52
+ end
53
+
54
+ end
55
+
56
+
57
+ # Method to return end point URI for specific social login
58
+ def get_scoial_login_uri(provider)
59
+ case provider
60
+ when "facebook"
61
+ FACEBOOK_LOGIN_URI
62
+ when "google_oauth2"
63
+ GOOGLE_LOGIN_URI
64
+ when "twitter"
65
+ TWITER_LOGIN_URI
66
+ when "github"
67
+ GITHUB_LOGIN_URI
68
+ when "linkedin"
69
+ LINKEDIN_LOGIN_URI
70
+ when "instagram"
71
+ INSTAGRAM_LOGIN_URI
72
+ else
73
+ INVALID_SOCIAL_URI
74
+ end
75
+ end
76
+
77
+
78
+ end
@@ -0,0 +1,90 @@
1
+ # This class is responsible for handling
2
+ # Requests from Com::Nbos::Core::UsersController.
3
+ # It will create the request based on Controller request params and
4
+ # send that request to Wavelabs API server and return the response back.
5
+ # While sending respose back to receiver it will create the virtual models
6
+ # from Com::Nbos::Api::DataModels
7
+
8
+ class WavelabsClientApi::Client::Api::Core::UsersApi < WavelabsClientApi::Client::Api::Core::BaseApi
9
+
10
+ SIGNUP_URI = "/api/identity/v0/users/signup"
11
+ USER_URI = "/api/identity/v0/users"
12
+
13
+ def sign_up(sign_up_params, access_token)
14
+ url_path = base_api_url(SIGNUP_URI)
15
+ connection_options = { :clientId => client_id,
16
+ :username => sign_up_params[:username],
17
+ :password => sign_up_params[:password],
18
+ :email => sign_up_params[:email],
19
+ :firstName => sign_up_params[:firstName],
20
+ :lastName => sign_up_params[:lastName]
21
+ }
22
+ api_response = send_request_with_token('post', url_path, access_token, connection_options.to_json)
23
+
24
+ new_member_model = create_login_model(sign_up_params)
25
+
26
+ begin
27
+ if api_response.code == 200
28
+ member_api_model = create_member_model(api_response.parsed_response, false)
29
+ {status: 200, member: member_api_model}
30
+ elsif api_response.code == 400
31
+ new_member_model.add_errors(api_response.parsed_response)
32
+ {status: api_response.code, member: new_member_model}
33
+ else
34
+ new_member_model.add_messages(api_response.parsed_response)
35
+ {status: api_response.code, member: new_member_model}
36
+ end
37
+ rescue StandardError
38
+ new_member_model.message = "Internal Server Error Please Try After Some Time."
39
+ { status: 500, member: new_member_model}
40
+ end
41
+
42
+ end
43
+
44
+ def show(user_params, access_token)
45
+ url_path = base_api_url(USER_URI + "/#{user_params[:id]}")
46
+ api_response = send_request_with_token('get', url_path, access_token)
47
+ begin
48
+ if api_response.code == 200
49
+ normalized_res = {"member" => api_response.parsed_response}
50
+ {status: 200, member: create_member_model(normalized_res, true)}
51
+ else
52
+ login_model = create_login_model(nil)
53
+ login_model.add_messages(api_response.parsed_response)
54
+ { status: api_response.code, member: login_model}
55
+ end
56
+ rescue StandardError
57
+ login_model = create_login_model(nil)
58
+ login_model.message = "Internal Server Error Please Try After Some Time."
59
+ { status: 500, member: login_model}
60
+ end
61
+ end
62
+
63
+ def update(user_params, access_token)
64
+ url_path = base_api_url(USER_URI + "/#{user_params[:id]}")
65
+ connection_options = {
66
+ :email => user_params[:email],
67
+ :firstName => user_params[:firstName],
68
+ :lastName => user_params[:lastName],
69
+ :description => user_params[:description],
70
+ :phone => user_params[:phone]
71
+ }
72
+ api_response = send_request_with_token('put', url_path, access_token, connection_options.to_json)
73
+
74
+ begin
75
+ if api_response.code == 200
76
+ normalized_res = {"member" => api_response.parsed_response}
77
+ {status: 200, member: create_member_model(normalized_res, true)}
78
+ elsif api_response.code == 400
79
+ member_model = create_member_model({"member" => user_params}, true)
80
+ member_model.add_errors(api_response.parsed_response)
81
+ {status: 400, member: member_model}
82
+ end
83
+ rescue StandardError
84
+ member_model = create_member_model(nil, true)
85
+ member_model.message = "Internal Server Error Please Try After Some Time."
86
+ { status: 500, member: member_model}
87
+ end
88
+ end
89
+
90
+ end
@@ -0,0 +1,40 @@
1
+ module WavelabsClientApi
2
+ module Client
3
+ module Api
4
+ module DataModels
5
+ class BaseApiModel
6
+
7
+ include ActiveModel::Validations
8
+ include ActiveModel::Conversion
9
+ extend ActiveModel::Naming
10
+
11
+ def create_login_model(login_params)
12
+ WavelabsClientApi::Client::Api::DataModels::LoginApiModel.new(login_params)
13
+ end
14
+
15
+ def create_member_model(json_response, except_token)
16
+ WavelabsClientApi::Client::Api::DataModels::MemberApiModel.new(json_response, except_token)
17
+ end
18
+
19
+ def create_token_model(json_response)
20
+ WavelabsClientApi::Client::Api::DataModels::TokenApiModel.new(json_response)
21
+ end
22
+
23
+ def create_media_model(json_response)
24
+ WavelabsClientApi::Client::Api::DataModels::MediaApiModel.new(json_response)
25
+ end
26
+
27
+ def create_message_model(json_response)
28
+ WavelabsClientApi::Client::Api::DataModels::MessageApiModel.new(json_response)
29
+ end
30
+
31
+ def create_social_model(json_response)
32
+ WavelabsClientApi::Client::Api::DataModels::SocialAccountsApiModel.new(json_response)
33
+ end
34
+
35
+ end
36
+
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,41 @@
1
+ # This class is a virtual Model for LoginApiModel.
2
+ # It have required attributes to create the LoginApiModel object.
3
+ # And also it included the Rails ActiveModel::Validations to
4
+ # add errors which will populate on views. Based on the response from
5
+ # Wavelabs API server 'add_errors' or 'add_messages' methods add appropriate
6
+ # messages to LoginApi model object.
7
+
8
+ class WavelabsClientApi::Client::Api::DataModels::LoginApiModel < WavelabsClientApi::Client::Api::DataModels::BaseApiModel
9
+
10
+ attr_accessor :username, :password, :email, :firstName, :lastName, :phone, :newPassword, :message
11
+
12
+ def initialize(login_params = nil)
13
+ if login_params.present?
14
+ @username = login_params["username"]
15
+ @password = login_params["password"]
16
+ @email = login_params["email"]
17
+ @firstName = login_params["firstName"]
18
+ @lastName = login_params["lastName"]
19
+ @phone = login_params["phone"]
20
+ @newPassword = login_params["newPassword"]
21
+ end
22
+ end
23
+
24
+ def add_errors(json_response)
25
+ json_response["errors"].each do |e|
26
+ property_name = e['propertyName']
27
+ msg = e['message']
28
+ self.errors[property_name] << msg
29
+ end
30
+ end
31
+
32
+ def add_messages(json_response)
33
+ if json_response["message"].present?
34
+ @message = json_response["message"]
35
+ elsif json_response["error"].present?
36
+ @message = json_response["error"]
37
+ end
38
+
39
+ end
40
+
41
+ end
@@ -0,0 +1,26 @@
1
+ # This class is a virtual Model for MediaApi model.
2
+ # It have required attributes to create the MediaApi model.
3
+ # And also it included the Rails ActiveModel::Validations to
4
+ # add errors which will populate on views. Based on the response from
5
+ # Wavelabs API server aading appropriate
6
+ # message to MediaApi model object w hile initialize.
7
+
8
+
9
+ # To-Do
10
+ # Right now we are getting 200 status code for invalid file formates
11
+ # Need to Cahnge the logic based on API server.
12
+ class WavelabsClientApi::Client::Api::DataModels::MediaApiModel < WavelabsClientApi::Client::Api::DataModels::BaseApiModel
13
+
14
+ attr_accessor :extension, :mediaFileDetailsList, :supportedsizes, :newMedia, :message
15
+
16
+ def initialize(media_params = nil)
17
+ if media_params.present? && media_params["extension"].present?
18
+ @extension = media_params["extension"]
19
+ @mediaFileDetailsList = media_params["mediaFileDetailsList"]
20
+ @supportedsizes = media_params["supportedsizes"]
21
+ elsif media_params.present? && media_params["message"].present?
22
+ @message = media_params["message"]
23
+ end
24
+ end
25
+
26
+ end
@@ -0,0 +1,55 @@
1
+ # This class is a virtual Model for MemberApi model.
2
+ # It have required attributes to create the MemberApi model.
3
+ # It will create associated TokenApi & SocialAccountsApi model objects based on Response.
4
+ # And also it included the Rails ActiveModel::Validations to
5
+ # add errors which will populate on views. Based on the response from
6
+ # Wavelabs API server 'add_errors' or 'add_messages' methods add appropriate
7
+ # messages to MemberAPi model object.
8
+
9
+ class WavelabsClientApi::Client::Api::DataModels::MemberApiModel < WavelabsClientApi::Client::Api::DataModels::BaseApiModel
10
+
11
+ attr_accessor :id, :uuid, :username, :description, :email, :firstName, :lastName, :phone, :social_accounts, :token, :message
12
+
13
+ def initialize(option_params, except_token = false)
14
+ if option_params.present?
15
+ @id = option_params["member"]["id"]
16
+ @uuid = option_params["member"]["uuid"]
17
+ @description = option_params["member"]["description"]
18
+ @email = option_params["member"]["email"]
19
+ @firstName = option_params["member"]["firstName"]
20
+ @lastName = option_params["member"]["lastName"]
21
+ @phone = option_params["member"]["phone"]
22
+ build_associated_models(option_params["token"], option_params["member"]["socialAccounts"], except_token)
23
+ end
24
+ end
25
+
26
+ def build_associated_models(token_params, social_params, except_token)
27
+ @token = create_token_model(token_params) if !except_token
28
+ @social_accounts = []
29
+ if social_params.presence && social_params.size > 0
30
+ social_params.each do |sp|
31
+ @social_accounts << create_social_model(sp)
32
+ end
33
+ else
34
+ @social_accounts << create_social_model(nil)
35
+ end
36
+
37
+ end
38
+
39
+ def add_errors(json_response)
40
+ json_response["errors"].each do |e|
41
+ property_name = e['propertyName']
42
+ msg = e['message']
43
+ self.errors[property_name] << msg
44
+ end
45
+ end
46
+
47
+ def add_messages(json_response)
48
+ if json_response["message"].present?
49
+ @message = json_response["message"]
50
+ elsif json_response["error"].present?
51
+ @message = json_response["error"]
52
+ end
53
+ end
54
+
55
+ end