Module: Nordvpn::Api::Endpoints::Servers

Included in:
Client
Defined in:
lib/nordvpn/api/endpoints/servers.rb

Instance Method Summary collapse

Instance Method Details

#country_serversObject



17
18
19
# File 'lib/nordvpn/api/endpoints/servers.rb', line 17

def country_servers
  get("/v1/servers/countries")&.body
end

#ikev2_servers(servers: nil, memoize: true) ⇒ Object



21
22
23
# File 'lib/nordvpn/api/endpoints/servers.rb', line 21

def ikev2_servers(servers: nil, memoize: true)
  servers_by_features(features: ["ikev2"], servers: servers, memoize: memoize)
end

#l2tp_servers(servers: nil, memoize: true) ⇒ Object



45
46
47
# File 'lib/nordvpn/api/endpoints/servers.rb', line 45

def l2tp_servers(servers: nil, memoize: true)
  servers_by_features(features: ["l2tp"], servers: servers, memoize: memoize)
end

#openvpn_tcp_servers(servers: nil, memoize: true) ⇒ Object



25
26
27
# File 'lib/nordvpn/api/endpoints/servers.rb', line 25

def openvpn_tcp_servers(servers: nil, memoize: true)
  servers_by_features(features: ["openvpn_tcp"], servers: servers, memoize: memoize)
end

#openvpn_udp_servers(servers: nil, memoize: true) ⇒ Object



29
30
31
# File 'lib/nordvpn/api/endpoints/servers.rb', line 29

def openvpn_udp_servers(servers: nil, memoize: true)
  servers_by_features(features: ["openvpn_udp"], servers: servers, memoize: memoize)
end

#pptp_servers(servers: nil, memoize: true) ⇒ Object



41
42
43
# File 'lib/nordvpn/api/endpoints/servers.rb', line 41

def pptp_servers(servers: nil, memoize: true)
  servers_by_features(features: ["pptp"], servers: servers, memoize: memoize)
end

#proxy_servers(servers: nil, memoize: true) ⇒ Object



37
38
39
# File 'lib/nordvpn/api/endpoints/servers.rb', line 37

def proxy_servers(servers: nil, memoize: true)
  servers_by_features(features: ["proxy", "proxy_ssl"], servers: servers, memoize: memoize)
end

#retrieve_servers(memoize: true) ⇒ Object



6
7
8
9
10
11
12
13
14
15
# File 'lib/nordvpn/api/endpoints/servers.rb', line 6

def retrieve_servers(memoize: true)
  servers     =   memoize ? self.cache.fetch("servers", nil) : nil

  if servers.nil?
    servers                 =   get("/server")&.body
    self.cache["servers"]   =   servers if memoize
  end

  return servers
end

#servers_by_country(country, servers: nil, memoize: true) ⇒ Object



68
69
70
71
# File 'lib/nordvpn/api/endpoints/servers.rb', line 68

def servers_by_country(country, servers: nil, memoize: true)
  servers           =   servers.nil? ? retrieve_servers(memoize: memoize) : servers
  filtered          =   servers&.select { |server| server["flag"].downcase.eql?(country.downcase) }
end

#servers_by_features(features: [], servers: nil, memoize: true) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/nordvpn/api/endpoints/servers.rb', line 49

def servers_by_features(features: [], servers: nil, memoize: true)
  filtered          =   []
  
  servers           =   servers.nil? ? retrieve_servers(memoize: memoize) : servers
  
  servers&.each do |server|
    matching_all    =   true
  
    features.each do |feature|
      matching_all  =   matching_all && server.dig("features", feature).eql?(true)
      break if !matching_all
    end
  
    filtered       <<   server if matching_all
  end

  return filtered
end

#servers_by_type_and_country(type, country, servers: nil, memoize: true) ⇒ Object



73
74
75
76
# File 'lib/nordvpn/api/endpoints/servers.rb', line 73

def servers_by_type_and_country(type, country, servers: nil, memoize: true)
  result            =   send("#{type}_servers", servers: servers, memoize: memoize)
  result            =   servers_by_country(country, servers: result, memoize: memoize)
end

#socks_servers(servers: nil, memoize: true) ⇒ Object



33
34
35
# File 'lib/nordvpn/api/endpoints/servers.rb', line 33

def socks_servers(servers: nil, memoize: true)
  servers_by_features(features: ["socks"], servers: servers, memoize: memoize)
end