diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b1dc81f..3f3d059e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ### 3.1.1 (Next) * [#581](https://github.com/slack-ruby/slack-ruby-client/pull/581): Migrate Danger to use danger-pr-comment workflow - [@dblock](https://github.com/dblock). +* [#583](https://github.com/slack-ruby/slack-ruby-client/pull/583): Not found errors raised by id_for use more specific error classes when they exist - [@eizengan](https://github.com/eizengan). * Your contribution here. ### 3.1.0 (2025/11/15) diff --git a/lib/slack/web/api/mixins/ids.id.rb b/lib/slack/web/api/mixins/ids.id.rb index 40f8dd1d..867d4ffd 100644 --- a/lib/slack/web/api/mixins/ids.id.rb +++ b/lib/slack/web/api/mixins/ids.id.rb @@ -15,7 +15,9 @@ def id_for(key:, name:, prefix:, enum_method:, list_method:, options: {}) end end - raise Slack::Web::Api::Errors::SlackError, "#{key}_not_found" + error_message = "#{key}_not_found" + error_class = Slack::Web::Api::Errors::ERROR_CLASSES[error_message] || Slack::Web::Api::Errors::SlackError + raise error_class, error_message end end end diff --git a/spec/slack/web/api/mixins/conversations_spec.rb b/spec/slack/web/api/mixins/conversations_spec.rb index e7fd95b2..87704239 100644 --- a/spec/slack/web/api/mixins/conversations_spec.rb +++ b/spec/slack/web/api/mixins/conversations_spec.rb @@ -59,7 +59,7 @@ it 'fails with an exception' do expect { conversations.conversations_id(channel: '#invalid') }.to( - raise_error(Slack::Web::Api::Errors::SlackError, 'channel_not_found') + raise_error(Slack::Web::Api::Errors::ChannelNotFound, 'channel_not_found') ) end diff --git a/spec/slack/web/api/mixins/users_spec.rb b/spec/slack/web/api/mixins/users_spec.rb index 5c175263..426eccba 100644 --- a/spec/slack/web/api/mixins/users_spec.rb +++ b/spec/slack/web/api/mixins/users_spec.rb @@ -46,7 +46,7 @@ it 'fails with an exception' do expect { users.users_id(user: '@foo') }.to( - raise_error(Slack::Web::Api::Errors::SlackError, 'user_not_found') + raise_error(Slack::Web::Api::Errors::UserNotFound, 'user_not_found') ) end