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