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
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
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