wavelabs_client_api 0.3.5

Sign up to get free protection for your applications and to get access to all the features.
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