Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughユーザーの休会履歴表示を追加。User に判定/集計メソッドを追加し、ダッシュボードとプロファイルに新パーシャルを導入、旧パーシャル削除、関連CSS/フィクスチャ/システムテストを更新しました。 Changes
Sequence Diagram(s)sequenceDiagram
participant Browser as ブラウザ
participant Rails as Rails サーバ
participant DB as データベース
Browser->>Rails: ダッシュボード/プロフィールをリクエスト
Rails->>DB: current_user / user.hibernations を取得
DB-->>Rails: hibernation レコード集合
Rails->>Rails: ever_hibernated? / hibernation_count を評価
Rails-->>Browser: _hibernation_history を含む HTML を返す
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 分 Possibly related issues
Possibly related PRs
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
@machida 現在の実装現在は
を表示させています。休会ユーザーのプロフィールで表示される項目とほぼ同じです。 |
1d3aa01 to
51b663d
Compare
eb9ce48 to
40e289b
Compare
|
@machida 問題無ければデザインをお願いしたいです🙇♂️ |
|
それでOKですー |
This comment was marked as duplicate.
This comment was marked as duplicate.
|
📝 今日話してユーザー画面もダッシュボードも休会履歴で統一することにしました。 |
bba4b30 to
3fdb1a6
Compare
There was a problem hiding this comment.
Actionable comments posted: 6
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
test/fixtures/users.yml (2)
1033-1049:⚠️ Potential issue | 🔴 Critical重大:
pjordキーも重複しています。
pjordキーがファイル内で重複しています(Line 962-982 と Line 1033-1049)。このフィクスチャも同様に、後の定義が前の定義を上書きします。いずれかの重複エントリを削除してください。
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@test/fixtures/users.yml` around lines 1033 - 1049, The YAML fixture contains a duplicated top-level key "pjord"; remove one of the duplicate "pjord" entries so only a single definition remains (choose to keep either the earlier or the later block and delete the other), ensuring the remaining entry preserves the intended fields (login_name, email, crypted_password, salt, name, company, admin/adviser flags, timestamps) and that YAML indentation and formatting remain valid after removal.
852-867:⚠️ Potential issue | 🔴 CriticalYAMLキーの重複を確認しました。
neverloginキーがファイル内で重複しています(Line 792-805 と Line 852-867)。YAMLでは後の定義が前の定義を上書きするため、最初のneverloginフィクスチャが無効になります。また、2番目の定義にはcountry_codeとsubdivision_codeフィールドが追加されているため、最初の定義は完全にアクセス不可能になります。重複しているエントリの1つを削除してください。
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@test/fixtures/users.yml` around lines 852 - 867, The YAML file contains a duplicated fixture key "neverlogin" (two entries: one around lines ~792-805 and another ~852-867) causing the first definition to be overwritten; remove or consolidate one of the "neverlogin" entries so only a single fixture with that key remains (either delete the redundant block or merge its unique fields such as country_code and subdivision_code into the remaining "neverlogin" fixture).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@app/views/users/_hibernation_history.html.slim`:
- Around line 1-5: The is_self check uses Ruby's object identity method
user.equal?(current_user) which fails when two distinct instances represent the
same DB user; change the check in the template to compare identities by value
(e.g., compare user.id to current_user&.id or use user == current_user) so that
is_self correctly reflects the same logical user even when instances differ;
update the assignment where is_self is defined (the line setting is_self) to use
that value-based comparison and handle possible nil current_user safely.
In `@config/locales/ja.yml`:
- Around line 144-146: The added I18n key hibernation.period is unused because
the partial _hibernation_history.html.slim still has hardcoded "休会期間" and
"休会予定期間"; replace those hardcoded strings with
Hibernation.human_attribute_name(:period) (or the appropriate localized label
for planned period) in the two occurrences so they use the hibernation.period
translation, or if you intentionally don't want a :period label remove the
hibernation.period key from config/locales/ja.yml to avoid dead translations.
In `@db/fixtures/discord_profiles.yml`:
- Around line 339-342: The YAML contains a duplicate top-level key
discord_profile_new-mentor (one at line ~334 and another for hukki), which
causes the earlier entry to be overwritten; fix this by renaming the second key
to a unique identifier (e.g., discord_profile_hukki or
discord_profile_new-mentor-hukki) or merge the hukki data into the existing
discord_profile_new-mentor entry, and ensure the renamed key still references
the hukki user and correct fields (user: hukki, account_name: hukki-taro,
times_url: ...).
In `@db/fixtures/users.yml`:
- Line 295: users.yml のシードデータで unsubscribe_email_token が hatsuno
ユーザーと重複しているため(同じ値 k3a49_NwgTsiJS0oHGU2Fw が設定されている)、一意性制約違反を避けるため該当ユーザーの
unsubscribe_email_token をユニークなトークン値に差し替えてください; 変更対象は users.yml の該当レコードの
unsubscribe_email_token フィールドで、新しいランダムまたは生成済みの一意値を設定して他レコードと重複しないことを確認してください。
In `@test/system/home/hibernation_history_test.rb`:
- Around line 5-6: The test class name in
test/system/home/hibernation_history_test.rb is mismatched: change class
HibernationCountTest to HibernationHistoryTest so it matches the filename and PR
title; update any internal references or test helpers that reference
HibernationCountTest (e.g., class declaration in the file and any usages in
other tests or setup/teardown hooks) and leave the superclass
ApplicationSystemTestCase unchanged.
In `@test/system/users/profile_test.rb`:
- Line 215: Rename the test declaration that currently reads "shold not show
hibernation history on user profile when user has never hibernated" to "should
not show hibernation history on user profile when user has never hibernated" by
correcting the typo in the test name string in the test 'shold not show
hibernation history on user profile when user has never hibernated' declaration
so the test description is spelled correctly.
---
Outside diff comments:
In `@test/fixtures/users.yml`:
- Around line 1033-1049: The YAML fixture contains a duplicated top-level key
"pjord"; remove one of the duplicate "pjord" entries so only a single definition
remains (choose to keep either the earlier or the later block and delete the
other), ensuring the remaining entry preserves the intended fields (login_name,
email, crypted_password, salt, name, company, admin/adviser flags, timestamps)
and that YAML indentation and formatting remain valid after removal.
- Around line 852-867: The YAML file contains a duplicated fixture key
"neverlogin" (two entries: one around lines ~792-805 and another ~852-867)
causing the first definition to be overwritten; remove or consolidate one of the
"neverlogin" entries so only a single fixture with that key remains (either
delete the redundant block or merge its unique fields such as country_code and
subdivision_code into the remaining "neverlogin" fixture).
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: cd87108c-5ef9-4625-b685-70e6364e1b62
📒 Files selected for processing (21)
app/assets/stylesheets/application/blocks/user/_user-metas.cssapp/assets/stylesheets/shared/blocks/card/_card-footer.cssapp/decorators/user_decorator/retire.rbapp/models/user.rbapp/views/home/index.html.slimapp/views/users/_hibernation_history.html.slimapp/views/users/_hibernation_info.html.slimapp/views/users/show.html.slimconfig/locales/ja.ymldb/fixtures/discord_profiles.ymldb/fixtures/hibernations.ymldb/fixtures/talks.ymldb/fixtures/users.ymltest/decorators/user_decorator/retire_test.rbtest/fixtures/discord_profiles.ymltest/fixtures/hibernations.ymltest/fixtures/talks.ymltest/fixtures/users.ymltest/system/home/hibernation_history_test.rbtest/system/user/courses_test.rbtest/system/users/profile_test.rb
💤 Files with no reviewable changes (1)
- app/views/users/_hibernation_info.html.slim
3fdb1a6 to
896c546
Compare
There was a problem hiding this comment.
Actionable comments posted: 3
🧹 Nitpick comments (2)
app/models/user.rb (1)
682-684:any?の使用を検討してください
!hibernations.empty?は動作しますが、Rails ではhibernations.any?の方がより慣用的です。♻️ 修正案
def ever_hibernated? - !hibernations.empty? + hibernations.any? end🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@app/models/user.rb` around lines 682 - 684, Replace the implementation of the ever_hibernated? method to use the Rails idiom hibernations.any? instead of negating empty?; locate the ever_hibernated? method in the User model and change its body from using !hibernations.empty? to hibernations.any? so the code is more idiomatic and clearer.test/system/home/hibernation_history_test.rb (1)
13-18: より堅牢なアサーションへの変更を検討
assert_no_selectorで特定の回数'休会履歴(1回)'を指定していますが、存在しないことを確認するなら回数に依存しないアサーションの方が堅牢です。♻️ 修正案
test 'should not show hibernation history on dashboard when logged in user never hibernated' do visit_with_auth '/', 'kimura' assert_selector '.page-header__title', text: 'ダッシュボード' - assert_no_selector '.card-header__title', text: '休会履歴(1回)' - assert_no_selector '.user-metas__title', text: '1回目の休会' + assert_no_selector '.card-header__title', text: /休会履歴/ + assert_no_selector '.user-metas__title', text: /回目の休会/ end🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@test/system/home/hibernation_history_test.rb` around lines 13 - 18, The test method should not assert absence of a specific occurrence label '(1回)'; update the assertions to assert absence of the generic hibernation section/labels instead. In the test 'should not show hibernation history on dashboard when logged in user never hibernated', replace or change the assert_no_selector calls that look for '.card-header__title' text: '休会履歴(1回)' and '.user-metas__title' text: '1回目の休会' to assert_no_selector for the generic header text '休会履歴' (or a regex matching '休会') using the same selectors (or assert_no_selector on a more specific hibernation container if one exists), keeping visit_with_auth and the page-header assertion unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@app/decorators/user_decorator/retire.rb`:
- Line 19: The retire_deadline method currently returns only the countdown
(countdown variable) while the view label reads "休会期限日時"; update the view label
to reflect the actual return value (e.g., change "休会期限日時" to "自動退会" or "自動退会予定")
so it matches retire_deadline's behavior, or alternatively adjust
retire_deadline to include scheduled_retire_at if you prefer keeping the
existing label; reference retire_deadline and scheduled_retire_at when making
the change.
In `@db/fixtures/discord_profiles.yml`:
- Around line 339-342: The fixture discord_profile_hukki in
db/fixtures/discord_profiles.yml uses account_name "hukki-taro", which violates
the DiscordProfile validation regex /\A[\w.]+\z/ in
app/models/discord_profile.rb; update the account_name value to a valid form
(e.g., replace the hyphen with an underscore or dot such as "hukki_taro" or
"hukki.taro") so the fixture passes the model validation when seeding/tests run.
In `@test/system/home/hibernation_history_test.rb`:
- Around line 7-11: テスト "show my hibernation history on dashboard"
がフィクスチャ(hibernation3 と hibernation4 により hukki
に2件の休会がある)と不整合で失敗するので、テスト内のアサーションをフィクスチャに合わせて修正してください:visit_with_auth '/',
'hukki' の後でカードヘッダーの件数表示を '休会履歴(2回)' にし、ユーザーメタのタイトル等('.user-metas__title')も
1回目ではなく適切な表示(例えば '1回目の休会' と '2回目の休会' を検証するか、最新の2件を正しく反映する内容)に合わせて更新してください。Ensure
you update the assertions referencing the test name and selectors in this test
to match the fixture records hibernation3 and hibernation4.
---
Nitpick comments:
In `@app/models/user.rb`:
- Around line 682-684: Replace the implementation of the ever_hibernated? method
to use the Rails idiom hibernations.any? instead of negating empty?; locate the
ever_hibernated? method in the User model and change its body from using
!hibernations.empty? to hibernations.any? so the code is more idiomatic and
clearer.
In `@test/system/home/hibernation_history_test.rb`:
- Around line 13-18: The test method should not assert absence of a specific
occurrence label '(1回)'; update the assertions to assert absence of the generic
hibernation section/labels instead. In the test 'should not show hibernation
history on dashboard when logged in user never hibernated', replace or change
the assert_no_selector calls that look for '.card-header__title' text:
'休会履歴(1回)' and '.user-metas__title' text: '1回目の休会' to assert_no_selector for the
generic header text '休会履歴' (or a regex matching '休会') using the same selectors
(or assert_no_selector on a more specific hibernation container if one exists),
keeping visit_with_auth and the page-header assertion unchanged.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 34ceba03-6d38-4495-9ec1-6fd2b4132701
📒 Files selected for processing (21)
app/assets/stylesheets/application/blocks/user/_user-metas.cssapp/assets/stylesheets/shared/blocks/card/_card-footer.cssapp/decorators/user_decorator/retire.rbapp/models/user.rbapp/views/home/index.html.slimapp/views/users/_hibernation_history.html.slimapp/views/users/_hibernation_info.html.slimapp/views/users/show.html.slimconfig/locales/ja.ymldb/fixtures/discord_profiles.ymldb/fixtures/hibernations.ymldb/fixtures/talks.ymldb/fixtures/users.ymltest/decorators/user_decorator/retire_test.rbtest/fixtures/discord_profiles.ymltest/fixtures/hibernations.ymltest/fixtures/talks.ymltest/fixtures/users.ymltest/system/home/hibernation_history_test.rbtest/system/user/courses_test.rbtest/system/users/profile_test.rb
💤 Files with no reviewable changes (1)
- app/views/users/_hibernation_info.html.slim
✅ Files skipped from review due to trivial changes (1)
- test/fixtures/talks.yml
🚧 Files skipped from review as they are similar to previous changes (10)
- app/assets/stylesheets/application/blocks/user/_user-metas.css
- test/decorators/user_decorator/retire_test.rb
- db/fixtures/users.yml
- db/fixtures/talks.yml
- app/views/home/index.html.slim
- config/locales/ja.yml
- test/fixtures/hibernations.yml
- test/system/users/profile_test.rb
- app/assets/stylesheets/shared/blocks/card/_card-footer.css
- app/views/users/_hibernation_history.html.slim
896c546 to
4a5a3bc
Compare
There was a problem hiding this comment.
Actionable comments posted: 2
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
test/fixtures/users.yml (1)
852-867:⚠️ Potential issue | 🔴 Criticaltest/fixtures/users.yml に重複するYAMLキーが存在します。
neverloginキーがLine 792とLine 852で、pjordキーがLine 962とLine 1033で重複して定義されています。YAMLでは後の定義が前の定義を上書きするため、テストデータの一貫性が失われます。修正案:重複キーの削除
重複しているエントリを削除してください:
- Line 852-867の
neverloginブロックを削除(またはLine 792-805を削除)- Line 1033-1049の
pjordブロックを削除(またはLine 962-983を削除)内容を比較して、正しい方を残してください。
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@test/fixtures/users.yml` around lines 852 - 867, The users.yml fixture contains duplicate YAML mapping keys causing later entries to overwrite earlier ones; locate the two duplicated top-level user keys "neverlogin" (the blocks starting at the earlier and later neverlogin entries) and "pjord" and remove the unwanted duplicates so each user key appears only once—compare the two versions of each block (neverlogin and pjord) and keep the correct/desired block, deleting the other to restore consistent test data.
🧹 Nitpick comments (1)
test/system/user/courses_test.rb (1)
12-16: 件数の固定値が fixture 追加に引きずられやすいです。この PR でも別機能のユーザー追加に合わせて
31→32を直しているので、この期待値は壊れやすいです。ここは件数そのものを固定せず、対象ユーザーの表示/非表示を主に見るか、fixture から組み立てた期待値を使う方が保守しやすいです。🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@test/system/user/courses_test.rb` around lines 12 - 16, In the test "show users sorted by rails course" avoid the brittle fixed count assertion; instead replace assert_selector '.users-item', count: 24 with a dynamic check that derives the expected count from fixtures or asserts presence/absence of specific users — e.g., load the Rails-course users via the same fixture/query used by the app (or use fixtures(:users).select { |u| u.course == 'Rails' }.size) and assert_selector '.users-item', count: expected_count, or simply assert_selector '.users-item' and assert_text for a couple of known Rails users; keep references to visit_with_auth '/users/courses', 'kimura' and the '.users-item' selector so the test still validates the Rails tab rendering.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@app/views/users/_hibernation_history.html.slim`:
- Around line 15-16: The current hibernation branch always renders the element
with class user-metas.is-only-mentor (when is_hibernating and i.zero?), which
ignores the is_self check and causes mentor-only styling to appear for the
profile owner; update the conditional to mirror the else branch by including the
is_self predicate (i.zero? && is_hibernating && !is_self) so that the
.user-metas.is-only-mentor node is only rendered for non-self viewers, matching
the other branch's behavior.
In `@test/system/users/profile_test.rb`:
- Around line 183-223: The tests assert absence of a header with a hard-coded
count ('休会履歴(1回)') which will mask cases where the card is present with a
different count; update the assertions in the affected tests to check for the
header label without the count and to avoid count-specific entries. Replace
assert_no_selector '.card-header__title', text: '休会履歴(1回)' with
assert_no_selector '.card-header__title', text: '休会履歴' and replace
assert_no_selector '.user-metas__title', text: '1回目の休会' with a non-count check
such as assert_no_selector '.user-metas__title', text: '休会' (apply these changes
to the assertions around visit_with_auth calls and the 'should not show
hibernation history...' test where the same pattern appears).
---
Outside diff comments:
In `@test/fixtures/users.yml`:
- Around line 852-867: The users.yml fixture contains duplicate YAML mapping
keys causing later entries to overwrite earlier ones; locate the two duplicated
top-level user keys "neverlogin" (the blocks starting at the earlier and later
neverlogin entries) and "pjord" and remove the unwanted duplicates so each user
key appears only once—compare the two versions of each block (neverlogin and
pjord) and keep the correct/desired block, deleting the other to restore
consistent test data.
---
Nitpick comments:
In `@test/system/user/courses_test.rb`:
- Around line 12-16: In the test "show users sorted by rails course" avoid the
brittle fixed count assertion; instead replace assert_selector '.users-item',
count: 24 with a dynamic check that derives the expected count from fixtures or
asserts presence/absence of specific users — e.g., load the Rails-course users
via the same fixture/query used by the app (or use fixtures(:users).select { |u|
u.course == 'Rails' }.size) and assert_selector '.users-item', count:
expected_count, or simply assert_selector '.users-item' and assert_text for a
couple of known Rails users; keep references to visit_with_auth
'/users/courses', 'kimura' and the '.users-item' selector so the test still
validates the Rails tab rendering.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 3ba13e23-335f-4ae5-be22-d2f4723f87df
📒 Files selected for processing (19)
app/assets/stylesheets/application/blocks/user/_user-metas.cssapp/assets/stylesheets/shared/blocks/card/_card-footer.cssapp/models/user.rbapp/views/home/index.html.slimapp/views/users/_hibernation_history.html.slimapp/views/users/_hibernation_info.html.slimapp/views/users/show.html.slimconfig/locales/ja.ymldb/fixtures/discord_profiles.ymldb/fixtures/hibernations.ymldb/fixtures/talks.ymldb/fixtures/users.ymltest/fixtures/discord_profiles.ymltest/fixtures/hibernations.ymltest/fixtures/talks.ymltest/fixtures/users.ymltest/system/home/hibernation_history_test.rbtest/system/user/courses_test.rbtest/system/users/profile_test.rb
💤 Files with no reviewable changes (1)
- app/views/users/_hibernation_info.html.slim
✅ Files skipped from review due to trivial changes (1)
- config/locales/ja.yml
🚧 Files skipped from review as they are similar to previous changes (5)
- app/models/user.rb
- db/fixtures/talks.yml
- app/assets/stylesheets/application/blocks/user/_user-metas.css
- test/fixtures/hibernations.yml
- test/system/home/hibernation_history_test.rb
ccef51f to
6099f00
Compare
| negative: Negative | ||
| neutral: Neutral | ||
| positive: Positive | ||
| user: |
There was a problem hiding this comment.
今回のPRとは関係ないですが、インデントがおかしかったので修正しました。
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as duplicate.
This comment was marked as duplicate.
|
Tip For best results, initiate chat on the files or code changes.
🧠 Learnings used |
| - is_hibernating = user.hibernated? | ||
| - total_hibernation_count = user.hibernations.count | ||
| - is_self = user == current_user |
There was a problem hiding this comment.
これらは一度変数に入れる意味があまりないようにおもいました。
もしこういうものがひつようなのであれば、decoratorやhelperでメソッド化するのが良いかなと思います。(この場合は不要だと思いますが)
元の仕様では復帰したユーザーの休会情報は見れなくなっていた 管理側で必要になることが多いため変更
管理者とメンターはプロフィールページから 本人はダッシュボードに表示されるようにした
休会ユーザーの傾向を確認したいため、全ての休会情報を表示したいという要望があったため retire_deadlineメソッドは_hibernation_info.html.slim内でのみ使用されており、 変更しても他の箇所への影響はないと判断して修正した。
運用上あり得る範囲でテストデータを修正 既存のcourses_testを変更したのは、コース選択は必須であり、運用上course_idを持たないユーザーは存在しないと判断したため また、作成当時のPRを確認したところコースの人数が正しく表示されているかを確認できればよく ユーザーの数は増減しても問題ないと判断し、修正に踏み切った ref: #8070
テストを軽くするため 休会情報が表示される、という機能は動かなくなっても致命的では無いので、軽さを優先してテストメソッドを一つにまとめた 逆に、表示されてはいけない人に表示される、は致命的なので、テストメソッドを分けたままにした
ユーザーkyuukaiは休会中であるのに、復帰日が存在していたため修正
画面の表記を休会情報→休会履歴に変更したことに合わせて ファイル名もリネームした
今回は同一ユーザーであるかをチェックしたい epaul?はRubyのオブジェクト同一性をチェックするもの 同じユーザーでも異なるオブジェクトインスタンスになる場合があるので==に修正
デザインで表示項目が変更になり、日時も必要になったため 削除した部分を復活させた ref: 594dd0e 休会情報の表示項目を変更
アカウント名にはアンダースコアとピリオド以外の特殊文字を使用できない
休会履歴(1回)、が表示されないことをテストすると fixtureに新しい休会レコードを追加した際も落ちてしまうため
短い処理をラップしているだけでありメソッドを別途作る理由も薄いと判断した
369cf11 to
8274e6d
Compare







Issue
概要
変更確認方法
管理者とメンターが休会ユーザーと復帰ユーザーの休会履歴をプロフィールから閲覧できる
rails db:seedを実行休会経験のあるユーザーのダッシュボードに休会履歴が表示される
Screenshot
変更前
プロフィールページ
ダッシュボード
変更後
プロフィールページ
ダッシュボード
捕捉
以下のissueも同時に対応した
#9719
Summary by CodeRabbit