module Nexpose::JsonSerializer
Public Instance Methods
deserialize(data)
click to toggle source
# File lib/nexpose/json_serializer.rb, line 5 def deserialize(data) data.each do |key, value| if respond_to?(key) property = value if value.respond_to? :each obj = resolve_type(key) unless obj.nil? if value.is_a?(Array) property = value.map { |dv| ((dv.respond_to? :each) ? create_object(obj, dv).deserialize(dv) : dv) } else property = create_object(obj, value).deserialize(value) end end elsif value.is_a?(String) && value.match(/^\d{8}T\d{6}\.\d{3}/) property = ISO8601.to_time(value) end instance_variable_set("@#{key}", property) end end self end
serialize()
click to toggle source
# File lib/nexpose/json_serializer.rb, line 27 def serialize hash = to_hash(Hash.new) JSON.generate(hash) unless hash.nil? end
to_hash(hash)
click to toggle source
# File lib/nexpose/json_serializer.rb, line 32 def to_hash(hash) self.instance_variables.each do |m| value = self.instance_variable_get(m) hash[m.to_s.delete('@')] = do_hash(value) end hash end
Private Instance Methods
create_object(obj, data)
click to toggle source
# File lib/nexpose/json_serializer.rb, line 53 def create_object(obj, data) if obj.respond_to?(:json_initializer) obj.method(:json_initializer).call(data) else obj.method(:new).call end end
do_hash(obj)
click to toggle source
# File lib/nexpose/json_serializer.rb, line 42 def do_hash(obj) if obj.is_a?(Array) obj = obj.map do |el| do_hash(el) end elsif obj.class.included_modules.include? JsonSerializer obj = obj.to_hash(Hash.new) end obj end
normalize_field(field)
click to toggle source
# File lib/nexpose/json_serializer.rb, line 75 def normalize_field(field) class_name = field.to_s.split('_').map(&:capitalize!).join class_name = 'Vulnerability' if class_name == 'Vulnerabilities' class_name.chop! if class_name.end_with?('s') class_name end
resolve_type(field)
click to toggle source
# File lib/nexpose/json_serializer.rb, line 61 def resolve_type(field) class_name = normalize_field(field) type_attribute = "#{field}_type" if self.respond_to?(type_attribute) clazz = self.public_send(type_attribute) elsif Object.const_get(@@namespace).const_defined?(class_name) resolved = Object.const_get(@@namespace).const_get(class_name) clazz = resolved if resolved.included_modules.include? JsonSerializer end clazz end