Sha256: 8e90b9d36ed72938ca946a7ebd50e8d94ee155a8bbeb3c6aaa1c33a941dcddc4
Contents?: true
Size: 789 Bytes
Versions: 47
Compression:
Stored size: 789 Bytes
Contents
class ConstructorStruct def self.new(*accessors, &block) defaults = {:accessors => true, :strict => false} accessor_names = accessors.dup if accessors.last.is_a? Hash accessor_names.pop user_opts = accessors.last user_opts.delete(:accessors) defaults.each do |k,v| user_opts[k] ||= v end else accessors << defaults end Class.new do constructor *accessors class_eval(&block) if block comparator_code = accessor_names.map { |fname| "self.#{fname} == o.#{fname}" }.join(" && ") eval %| def ==(o) (self.class == o.class) && #{comparator_code} end def eql?(o) (self.class == o.class) && #{comparator_code} end | end end end
Version data entries
47 entries across 47 versions & 2 rubygems