Don't use define_method to dynamically make attr_readers at runtime. Instead, create several distinct event types with the right fields.