Sha256: 5744be101c89c6fb89f610a32fb02301be8700f5e22eb258ba782eecfa105ec9
Contents?: true
Size: 869 Bytes
Versions: 2
Compression:
Stored size: 869 Bytes
Contents
require "key_struct/version" module KeyStruct def self.reader(*keys) define_key_struct(:attr_reader, keys) end def self.accessor(*keys) define_key_struct(:attr_accessor, keys) end instance_eval do alias :[] :accessor end private def self.define_key_struct(access, keys) klass = Class.new klass.class_eval do keyvalues = Hash[*keys.map{|key| (Hash === key) ? key.to_a : [key, nil]}.flatten] keys = keyvalues.keys send access, *keys define_method(:initialize) do |args={}| args = keyvalues.merge(args) keys.each do |key| instance_variable_set("@#{key}", args.delete(key)) end raise ArgumentError, "Invalid argument(s): #{args.keys.map(&:inspect).join(' ')}; KeyStruct accepts #{keys.map(&:inspect).join(' ')}" if args.any? end end klass end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
key_struct-0.0.2 | lib/key_struct.rb |
key_struct-0.0.1 | lib/key_struct.rb |