diff --git a/spec/context_spec.cr b/spec/context_spec.cr index fbdb153..c30942c 100644 --- a/spec/context_spec.cr +++ b/spec/context_spec.cr @@ -16,7 +16,7 @@ describe Discord::Context do it "raises on a type that hasn't been stored" do context = Discord::Context.new - expect_raises(Exception) do + expect_raises(KeyError, "Missing reference in context to Storage") do context[Storage] end end diff --git a/src/discordcr-middleware/context.cr b/src/discordcr-middleware/context.cr index 0023ae8..60501fb 100644 --- a/src/discordcr-middleware/context.cr +++ b/src/discordcr-middleware/context.cr @@ -28,7 +28,11 @@ module Discord # Access a stored value by class def [](clazz : T.class) : T forall T - @extensions[clazz.crystal_type_id].unsafe_as(T) + if reference = @extensions[clazz.crystal_type_id]? + reference.unsafe_as(T) + else + raise KeyError.new("Missing reference in context to #{T}") + end end # Store an object in this class. The object must be a `class`.