Class: Kameleoon::Network::NetworkManager

Inherits:
Object
  • Object
show all
Defined in:
lib/kameleoon/network/network_manager.rb

Overview

NetworkManager is used to make API calls.

Constant Summary collapse

FETCH_CONFIGURATION_ATTEMPT_NUMBER =
2
TRACKING_CALL_ATTEMPT_NUMBER =
2
TRACKING_CALL_RETRY_DELAY =

in seconds

5.0
SDK_TYPE_HEADER =
'X-Kameleoon-SDK-Type'
SDK_VERSION_HEADER =
'X-Kameleoon-SDK-Version'
ACCESS_TOKEN_GRANT_TYPE =
'client_credentials'
HEADER_IF_MODIFIED_SINCE =
'If-Modified-Since'
HEADER_LAST_MODIFIED =

in lower case because the network lib casts response headers to lower

'last-modified'

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(environment, default_timeout, access_token_source_factory, url_provider, event_manager) ⇒ NetworkManager

Returns a new instance of NetworkManager.



29
30
31
32
33
34
35
36
# File 'lib/kameleoon/network/network_manager.rb', line 29

def initialize(environment, default_timeout, access_token_source_factory, url_provider, event_manager)
  @environment = environment
  @default_timeout = default_timeout
  @access_token_source = access_token_source_factory.create(self)
  @url_provider = url_provider
  @event_manager = event_manager
  @sync_net_provider = SyncNetProvider.new
end

Instance Attribute Details

#access_token_sourceObject (readonly)

Returns the value of attribute access_token_source.



27
28
29
# File 'lib/kameleoon/network/network_manager.rb', line 27

def access_token_source
  @access_token_source
end

#default_timeoutObject (readonly)

Returns the value of attribute default_timeout.



27
28
29
# File 'lib/kameleoon/network/network_manager.rb', line 27

def default_timeout
  @default_timeout
end

#environmentObject (readonly)

Returns the value of attribute environment.



27
28
29
# File 'lib/kameleoon/network/network_manager.rb', line 27

def environment
  @environment
end

#event_managerObject (readonly)

Returns the value of attribute event_manager.



27
28
29
# File 'lib/kameleoon/network/network_manager.rb', line 27

def event_manager
  @event_manager
end

#url_providerObject (readonly)

Returns the value of attribute url_provider.



27
28
29
# File 'lib/kameleoon/network/network_manager.rb', line 27

def url_provider
  @url_provider
end

Instance Method Details

#fetch_access_jwtoken(basic_auth_token, timeout = nil) ⇒ Object



77
78
79
80
81
82
83
84
85
86
87
# File 'lib/kameleoon/network/network_manager.rb', line 77

def fetch_access_jwtoken(basic_auth_token, timeout = nil)
  url = @url_provider.make_access_token_url
  timeout = ensure_timeout(timeout)
  data_map = {
    grant_type: ACCESS_TOKEN_GRANT_TYPE,
  }
  data = UriHelper.encode_query(data_map).encode('UTF-8')
  request = Request.new(Method::POST, url, ContentType::FORM, timeout, data: data)
  request.authorize(basic_auth_token)
  unwrap_response(*make_call(Events::RequestType::ACCESS_TOKEN, request, false))
end

#fetch_configuration(timestamp = nil, timeout = nil, if_modified_since: nil) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/kameleoon/network/network_manager.rb', line 38

def fetch_configuration(timestamp = nil, timeout = nil, if_modified_since: nil)
  url = @url_provider.make_configuration_url(@environment, timestamp)
  timeout = ensure_timeout(timeout)
  headers = { SDK_TYPE_HEADER => SDK_NAME, SDK_VERSION_HEADER => SDK_VERSION }
  headers[HEADER_IF_MODIFIED_SINCE] = if_modified_since if if_modified_since
  request = Request.new(Method::GET, url, ContentType::JSON, timeout, extra_headers: headers)
  response, success = make_call(Events::RequestType::DATAFILE, request, false,
                                FETCH_CONFIGURATION_ATTEMPT_NUMBER - 1)
  return nil unless success
  return FetchedConfiguration.new(nil, nil) if response.code == 304

  last_modified = response.headers&.[](HEADER_LAST_MODIFIED)&.first
  FetchedConfiguration.new(response.body, last_modified)
end

#get_remote_data(key, timeout = nil) ⇒ Object



53
54
55
56
57
58
# File 'lib/kameleoon/network/network_manager.rb', line 53

def get_remote_data(key, timeout = nil)
  url = @url_provider.make_api_data_get_request_url(key)
  timeout = ensure_timeout(timeout)
  request = Request.new(Method::GET, url, ContentType::JSON, timeout)
  unwrap_response(*make_call(Events::RequestType::REMOTE_DATA, request, true))
end

#get_remote_visitor_data(visitor_code, filter, is_unique_identifier, timeout = nil) ⇒ Object



60
61
62
63
64
65
# File 'lib/kameleoon/network/network_manager.rb', line 60

def get_remote_visitor_data(visitor_code, filter, is_unique_identifier, timeout = nil)
  url = @url_provider.make_visitor_data_get_url(visitor_code, filter, is_unique_identifier)
  timeout = ensure_timeout(timeout)
  request = Request.new(Method::GET, url, ContentType::JSON, timeout)
  unwrap_response(*make_call(Events::RequestType::REMOTE_VISITOR_DATA, request, true))
end

#send_tracking_data(lines, timeout = nil) ⇒ Object



67
68
69
70
71
72
73
74
75
# File 'lib/kameleoon/network/network_manager.rb', line 67

def send_tracking_data(lines, timeout = nil)
  return if lines.nil? || lines.empty?

  url = @url_provider.make_tracking_url
  timeout = ensure_timeout(timeout)
  request = Request.new(Method::POST, url, ContentType::WILDCARD, timeout, data: lines)
  unwrap_response(*make_call(Events::RequestType::TRACKING, request, true,
                             TRACKING_CALL_ATTEMPT_NUMBER - 1, TRACKING_CALL_RETRY_DELAY))
end