Sha256: 2d3093e917f1bc2455476beab4fb9191217c524eacafa058cd46fb1f99aae6c7
Contents?: true
Size: 967 Bytes
Versions: 1
Compression:
Stored size: 967 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) Class.new.class_eval do keyvalues = Hash[*keys.map{|key| (Hash === key) ? key.to_a : [key, nil]}.flatten(2)] keys = keyvalues.keys send access, *keys define_method(:initialize) do |args={}| args = keyvalues.merge(args) keys.each do |key| instance_variable_set("@#{key}".to_sym, args.delete(key)) end raise ArgumentError, "Invalid argument(s): #{args.keys.map(&:inspect).join(' ')}; KeyStruct accepts #{keys.map(&:inspect).join(' ')}" if args.any? end define_method(:==) do |other| keys.all?{|key| self.send(key) == other.send(key)} end self end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
key_struct-0.1.2 | lib/key_struct.rb |