class GuessStruct

Constants

GuessError
VERSION

Public Class Methods

clear() click to toggle source
# File lib/guess_struct.rb, line 56
def clear
  d = definition
  d.each_key do |k|
    d[k] = nil
  end
end
definition() click to toggle source
# File lib/guess_struct.rb, line 48
def definition
  const_get(:DEFINITION)
end
members() click to toggle source
# File lib/guess_struct.rb, line 52
def members
  const_get(:MEMBERS)
end
new(**arg) click to toggle source
# File lib/guess_struct.rb, line 5
def initialize(**arg)
  sym_arg = {}
  arg.each do |k, v|
    sym_arg[k.to_sym] = v
  end
  self.class.members.each do |k|
    self[k] = sym_arg[k]
  end
end
Also aliased as: original_new
new(*args, &block) click to toggle source
# File lib/guess_struct.rb, line 64
def new(*args, &block)
  c = Class.new(GuessStruct) do
    const_set :MEMBERS, args
    const_set :DEFINITION, Hash[members.map { |i| [i, nil] }]

    class << self
      alias_method :new, :original_new
    end

    args.each do |k|
      define_method(k) do
        instance_variable_get("@#{k}")
      end

      define_method("#{k}=") do |v|
        unless valid?(k, v)
          raise GuessError, "#{self.class}##{k} expect #{self.class.definition.fetch(k)} got #{v.inspect}"
        end
        self.class.definition[k] = v.class if !v.nil?
        instance_variable_set("@#{k}", v)
      end
    end
  end
  if block_given?
    c.module_eval(&block)
  end
  c
end
original_new(**arg)
Also aliased as: new
Alias for: new

Public Instance Methods

[](key) click to toggle source
# File lib/guess_struct.rb, line 23
def [](key)
  __send__ key
end
[]=(key, value) click to toggle source
# File lib/guess_struct.rb, line 27
def []=(key, value)
  __send__ "#{key}=", value
end
inspect() click to toggle source
# File lib/guess_struct.rb, line 31
def inspect
  m = to_h.map do |k, v|
    "#{k}=#{v.inspect}"
  end
  "#<#{self.class} #{m.join(', ')}>"
end
Also aliased as: to_s
to_h() click to toggle source
# File lib/guess_struct.rb, line 39
def to_h
  m = {}
  self.class.members.each do |k|
    m[k] = self[k]
  end
  m
end
to_s()
Alias for: inspect
valid?(key, value) click to toggle source
# File lib/guess_struct.rb, line 15
def valid?(key, value)
  t = self.class.definition[key]
  return true if t.nil?
  return true if value.nil?
  return true if t === value
  false
end