Class: NdrPseudonymise::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/ndr_pseudonymise/client.rb

Overview

A class to wrap interactions with a remote pseudonymisation service.

Sample usage, against a local pseudonymisation service:

client = NdrPseudonymise::Client.new(
  host: 'localhost', port: 3000, use_ssl: false,
  token: 'your_name:some_token', context: 'just testing'
)

client.pseudonymise(identifiers: { nhs_number: '0123456789' })

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(host:, token:, port: 443, use_ssl: true, root_path: '/api/v1', context: nil) ⇒ Client

Returns a new instance of Client.



19
20
21
22
23
24
# File 'lib/ndr_pseudonymise/client.rb', line 19

def initialize(host:, token:, port: 443, use_ssl: true, root_path: '/api/v1', context: nil)
  @host = Net::HTTP.new(host, port).tap { |http| http.use_ssl = use_ssl }
  @header = "Token token=#{token.inspect}"
  @root_path = root_path
  @context = context
end

Instance Attribute Details

#contextObject

Returns the value of attribute context.



17
18
19
# File 'lib/ndr_pseudonymise/client.rb', line 17

def context
  @context
end

#hostObject

Returns the value of attribute host.



17
18
19
# File 'lib/ndr_pseudonymise/client.rb', line 17

def host
  @host
end

Instance Method Details

#keysObject

Returns a list of pseudonymisation keys that the current user is able to use.

Sample usage:

client.keys #=> [{name"=>"key one", "supported_variants"=>[1]}, ...]


32
33
34
# File 'lib/ndr_pseudonymise/client.rb', line 32

def keys
  get('/keys')
end

#pseudonymise(identifiers:, key_names: [], variants: [], context: @context) ⇒ Object

Returns pseudonymised identifiers for the supplied identifiers. By default, the pseudonymisation service requests all ID variants from all available keys; this can be filtered by using ‘variants` and `key_names` respectively.

Sample usage:

client.pseudonymise(identifiers: { nhs_number: '0123456789' }) #=>
  [
    { "key_name"=>"key one", "variant"=>1, "pseudoid"=>"b549ef342...", "identifiers"=>... },
    { "key_name"=>"key two", "variant"=>1, "pseudoid"=>"0ebd91c13...", "identifiers"=>... },
  ]

client.pseudonymise(identifiers: { postcode: 'CB22 3AD', birth_date: '2000-01-01' }, key_names: ['key two']) #=>
  [
    { "key_name"=>"key two", "variant"=>2, "pseudoid"=>"043d5fc1a...", "identifiers"=>... },
  ]

Raises:

  • (ArgumentError)


64
65
66
67
68
69
70
71
72
# File 'lib/ndr_pseudonymise/client.rb', line 64

def pseudonymise(identifiers:, key_names: [], variants: [], context: @context)
  raise ArgumentError, 'you must supply context!' if context.blank?

  data = { identifiers: identifiers, context: context }
  data[:key_names] = key_names if key_names.present?
  data[:variants] = variants if variants.present?

  post('/pseudonymise', data)
end

#variantsObject

Returns a list of variants that the current user is able to use.

Sample usage:

client.variants #=> [{"variant"=>"1", "required_identifiers" => ["nhs_number"]}, ...]


42
43
44
# File 'lib/ndr_pseudonymise/client.rb', line 42

def variants
  get('/variants')
end