class Ssllabs::ApiObject

Attributes

all_attributes[RW]
fields[RW]
lists[RW]
refs[RW]

Public Class Methods

field_methods(name) click to toggle source
# File lib/ssllabs/api_object.rb, line 29
    def self.field_methods(name)
      is_bool = name.to_s.end_with?('?')
      attr_name = to_attr_name(name)
      api_name = to_api_name(name)
      class_eval <<-EOF, __FILE__, __LINE__
        def #{attr_name}#{'?' if is_bool}
          @#{api_name}
        end
        def #{attr_name}=(value)
          @#{api_name} = value
        end
      EOF
    end
has_fields(*names) click to toggle source
# File lib/ssllabs/api_object.rb, line 43
def self.has_fields(*names)
  names.each do |name|
    @all_attributes << to_api_name(name)
    @fields << to_api_name(name)
    field_methods(name)
  end
end
has_object_ref(name, klass) click to toggle source
# File lib/ssllabs/api_object.rb, line 57
def self.has_object_ref(name, klass)
  @all_attributes << to_api_name(name)
  @refs[to_api_name(name)] = klass
  field_methods(name)
end
has_objects_list(name, klass) click to toggle source
# File lib/ssllabs/api_object.rb, line 51
def self.has_objects_list(name, klass)
  @all_attributes << to_api_name(name)
  @lists[to_api_name(name)] = klass
  field_methods(name)
end
inherited(base) click to toggle source
# File lib/ssllabs/api_object.rb, line 14
def self.inherited(base)
  base.all_attributes = []
  base.fields = []
  base.lists = {}
  base.refs = {}
end
load(attributes = {}) click to toggle source
# File lib/ssllabs/api_object.rb, line 63
def self.load(attributes = {})
  obj = self.new
  attributes.each do |name,value|
    if @fields.include?(name)
      obj.instance_variable_set("@#{name}", value)
    elsif @lists.key?(name)
      obj.instance_variable_set("@#{name}", value.map { |v| @lists[name].load(v) }) unless value.nil?
    elsif @refs.key?(name)
      obj.instance_variable_set("@#{name}", @refs[name].load(value)) unless value.nil?
    end
  end
  obj
end
to_api_name(name) click to toggle source
# File lib/ssllabs/api_object.rb, line 21
def self.to_api_name(name)
  name.to_s.gsub(/\?$/,'').camelize(:lower)
end
to_attr_name(name) click to toggle source
# File lib/ssllabs/api_object.rb, line 25
def self.to_attr_name(name)
  name.to_s.gsub(/\?$/,'').gsub(/URI/,'Uri').underscore
end

Public Instance Methods

to_api_hash(with_api_names: false) click to toggle source
# File lib/ssllabs/api_object.rb, line 77
def to_api_hash(with_api_names: false)
  obj = {}
  self.class.all_attributes.each do |api_name|
    v = instance_variable_get("@#{api_name}")
    key_name = with_api_names ? api_name : self.class.to_attr_name(api_name)
    obj[key_name] = to_hash_value(v, with_api_names)
  end
  obj
end
to_hash_value(entry, with_api_names) click to toggle source
# File lib/ssllabs/api_object.rb, line 87
def to_hash_value(entry, with_api_names)
  if entry.respond_to?(:to_api_hash)
    entry.to_api_hash(with_api_names: with_api_names)
  elsif entry.is_a?(Array)
    entry.map { |entry| to_hash_value(entry, with_api_names) }
  else
    entry
  end
end
to_json(opts={}) click to toggle source
# File lib/ssllabs/api_object.rb, line 97
def to_json(opts={})
  to_api_hash(with_api_names: true).to_json
end