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