Class: GuessStruct
- Inherits:
-
Object
- Object
- GuessStruct
- Defined in:
- lib/guess_struct.rb,
lib/guess_struct/version.rb
Constant Summary collapse
- GuessError =
Class.new(StandardError)
- VERSION =
"0.0.1"
Class Method Summary collapse
- .clear ⇒ Object
- .definition ⇒ Object
- .members ⇒ Object
- .new(*args, &block) ⇒ Object
- .original_new ⇒ Object
Instance Method Summary collapse
- #[](key) ⇒ Object
- #[]=(key, value) ⇒ Object
-
#initialize(**arg) ⇒ GuessStruct
constructor
A new instance of GuessStruct.
- #inspect ⇒ Object (also: #to_s)
- #to_h ⇒ Object
- #valid?(key, value) ⇒ Boolean
Constructor Details
#initialize(**arg) ⇒ GuessStruct
Returns a new instance of GuessStruct.
5 6 7 8 9 10 11 12 13 |
# 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 |
Class Method Details
.clear ⇒ Object
56 57 58 59 60 61 |
# File 'lib/guess_struct.rb', line 56 def clear d = definition d.each_key do |k| d[k] = nil end end |
.definition ⇒ Object
48 49 50 |
# File 'lib/guess_struct.rb', line 48 def definition const_get(:DEFINITION) end |
.members ⇒ Object
52 53 54 |
# File 'lib/guess_struct.rb', line 52 def members const_get(:MEMBERS) end |
.new(*args, &block) ⇒ Object
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# 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 ⇒ Object
63 |
# File 'lib/guess_struct.rb', line 63 alias original_new new |
Instance Method Details
#[](key) ⇒ Object
23 24 25 |
# File 'lib/guess_struct.rb', line 23 def [](key) __send__ key end |
#[]=(key, value) ⇒ Object
27 28 29 |
# File 'lib/guess_struct.rb', line 27 def []=(key, value) __send__ "#{key}=", value end |
#inspect ⇒ Object Also known as: to_s
31 32 33 34 35 36 |
# 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 |
#to_h ⇒ Object
39 40 41 42 43 44 45 |
# 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) ⇒ Boolean
15 16 17 18 19 20 21 |
# 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 |