class Ehsso::Person

Attributes

email[RW]
first_name[RW]
id[RW]
last_error_message[RW]
last_name[RW]
module_key[RW]
module_name[RW]
reference[RW]
roles[RW]

Public Class Methods

new(args={}) click to toggle source
# File lib/ehsso/person.rb, line 16
def initialize(args={})
  @id               = args[:id]
  @reference        = args[:reference]
  @first_name       = args[:first_name]
  @last_name        = args[:last_name]
  @email            = args[:email]

  # for this purpose we deal with only one module
  @module_key       = args[:module_key]
  @module_name      = args[:module_name]
  @roles            = args[:roles].is_a?(Array) ? args[:roles] : []
end
parse_from_request_header(header={}) click to toggle source
# File lib/ehsso/person.rb, line 44
def self.parse_from_request_header(header={})
  person = Ehsso::Person.new()

  # reference (mandatory)
  if header['HTTP_NIBR521'].nil? || header['HTTP_NIBR521'].size == 0
    person.last_error_message = "Unable to extract HTTP_NIBR* porperties from request header"
    return person
  end

  person.reference = header['HTTP_NIBR521'].downcase

  [
    [:first_name=, 'HTTP_NIBRFIRST'],
    [:last_name=, 'HTTP_NIBRLAST'],
    [:email=, 'HTTP_NIBREMAIL']
  ].each do |method, key|
    person.send(method, header[key]) if header[key] && header[key].strip.size > 0
  end

  return person
rescue => e
  person.last_error_message = e.to_s
  return person
end

Public Instance Methods

fetch() click to toggle source
# File lib/ehsso/person.rb, line 69
def fetch
  handle_service_call(action: 'people.modules.roles')
end
fetch_or_create() click to toggle source
# File lib/ehsso/person.rb, line 73
def fetch_or_create
  handle_service_call(action: 'people_with_guest_registration_if_missing.modules.roles')
end
full_name() click to toggle source
# File lib/ehsso/person.rb, line 39
def full_name
  return nil if self.last_name.nil? && self.first_name.nil?
  [self.last_name, self.first_name].compact.join(" ")
end
method_missing(method) click to toggle source

you can use methods like guest?, user?, operator?, administrator? etc.

# File lib/ehsso/person.rb, line 34
def method_missing(method)
  raise "Method [#{method}] not defined or allowed" unless method[-1] == '?'
  @roles.include?(method[0..-2].upcase)
end
valid?() click to toggle source
# File lib/ehsso/person.rb, line 29
def valid?
  @last_error_message.nil?
end

Private Instance Methods

handle_response(response) click to toggle source
# File lib/ehsso/person.rb, line 110
def handle_response(response)
  if response.code == 200
    begin
      data = JSON.parse(response.body)

      item = data['response'][0]
      @id = item['id']
      @reference = item['reference']
      @first_name = item['first_name']
      @last_name = item['last_name']
      @email = item['email']

      modul = item['modules'][0]
      @module_key = modul['reference']
      @module_name = modul['name']
      @roles = modul['roles']
      @last_error_message = nil
    rescue
      @last_error_message = "Unable to parse service response data"
    end
  else
    # something went wrong
    begin
      # try to parse the body to get valid error message
      data = JSON.parse(response.body)
      @last_error_message = data['response_message']
    rescue
      @last_error_message = "#{response.request.url}: [#{response.code}] #{response.return_message}"
    end
  end
end
handle_service_call(args={}) click to toggle source
# File lib/ehsso/person.rb, line 99
def handle_service_call(args={})
  url = [Ehsso.configuration.base_url, 'people'].join('/')
  userpwd = Ehsso.configuration.username_and_password

  # allows to mock class for rspec
  service_class = args[:service_class] || Typhoeus

  response = service_class.post(url, body: JSON.generate(payload(action: args[:action])), userpwd: userpwd, ssl_verifypeer: false)
  handle_response(response)
end
payload(args={}) click to toggle source
# File lib/ehsso/person.rb, line 79
def payload(args={})
  {
    type: 'request',
    action: args[:action] || 'people.modules.roles',
    request: [
      {
        reference: @reference,
        first_name: @first_name,
        last_name: @last_name,
        email: @email,
        modules: [
          {
            reference: args[:module_key] || Ehsso.configuration.module_key
          }
        ]
      }
    ]
  }
end