From 0b0e6c0112f52adb8e674af56b7b82e98b3cd471 Mon Sep 17 00:00:00 2001
From: Yohei Yasukawa
Date: Sat, 16 Aug 2025 13:55:23 +0900
Subject: [PATCH 1/9] feat: Move /events/latest to /dojos/activity following
Rails Way
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- RESTfulなURLパターンに従い、道場の活動状況を /dojos/activity に移動
- 情報アーキテクチャの改善(道場関連は/dojos配下に統一)
- 旧URL (/events/latest) から新URLへの301リダイレクトを設定
- テストを追加(最小限の実装、YAGNI原則に従う)
---
app/controllers/dojos_controller.rb | 35 +++++++++++++++++
app/controllers/events_controller.rb | 38 ------------------
.../activity.html.erb} | 2 +-
config/routes.rb | 12 ++++--
spec/requests/dojos_spec.rb | 39 +++++++++++++++++++
5 files changed, 84 insertions(+), 42 deletions(-)
rename app/views/{events/latest.html.erb => dojos/activity.html.erb} (99%)
diff --git a/app/controllers/dojos_controller.rb b/app/controllers/dojos_controller.rb
index bd20e735c..2531e53e8 100644
--- a/app/controllers/dojos_controller.rb
+++ b/app/controllers/dojos_controller.rb
@@ -105,4 +105,39 @@ def show
format.csv { send_data render_to_string, type: :csv }
end
end
+
+ # GET /dojos/activity
+ # 道場の活動状況を表示(旧 /events/latest から移行)
+ def activity
+ @latest_event_by_dojos = []
+ Dojo.active.each do |dojo|
+ link_in_note = dojo.note.match(URI.regexp)
+ date_in_note = dojo.note.match(/(\d{4}-\d{1,2}-\d{1,2})/) # YYYY-MM-DD
+ last_session_link = link_in_note.nil? ? dojo_path(dojo.id) : link_in_note.to_s
+ last_session_date = date_in_note.nil? ? dojo.created_at : Time.zone.parse(date_in_note.to_s)
+
+ latest_event = dojo.event_histories.newest.first
+ latest_event_at = latest_event.nil? ? Time.zone.parse('2000-01-23') : latest_event.evented_at
+ @latest_event_by_dojos << {
+ id: dojo.id,
+ name: dojo.name,
+ note: dojo.note,
+ url: dojo.url,
+ has_event_histories: latest_event.nil?,
+
+ # 過去のイベント開催日と note 内の日付を比較し、新しい方の日付を表示
+ event_at: (latest_event_at < last_session_date) ?
+ last_session_date.strftime("%Y-%m-%d") :
+ latest_event.evented_at.strftime("%Y-%m-%d"),
+
+ # 過去のイベント開催日と note 内の日付を比較し、新しい方のリンクを表示
+ event_url: (latest_event_at < last_session_date) ?
+ last_session_link :
+ latest_event.event_url
+ }
+ end
+
+ # Sort by older events first && older Dojo ID first if same event date.
+ @latest_event_by_dojos.sort_by!{ |dojo| [dojo[:event_at], dojo[:id]] }
+ end
end
diff --git a/app/controllers/events_controller.rb b/app/controllers/events_controller.rb
index 4e8cb9fb4..25b30666a 100644
--- a/app/controllers/events_controller.rb
+++ b/app/controllers/events_controller.rb
@@ -13,42 +13,4 @@ def index
}
end
end
-
- def latest
- # 現在はノートで細かな確認ができるため不要? (念のため残しています)
- # @active_dojos_verified = [
- # '和歌山', '市川真間', '泉', '石垣', '南紀田辺', '三好', '市川', 'ひばりヶ丘', '伊勢',
- # '徳島', '柏', '富山', 'ももち', '木曽', '熊本'
- # ]
- @latest_event_by_dojos = []
- Dojo.active.each do |dojo|
- link_in_note = dojo.note.match(URI.regexp)
- date_in_note = dojo.note.match(/(\d{4}-\d{1,2}-\d{1,2})/) # YYYY-MM-DD
- last_session_link = link_in_note.nil? ? dojo_path(dojo.id) : link_in_note.to_s
- last_session_date = date_in_note.nil? ? dojo.created_at : Time.zone.parse(date_in_note.to_s)
-
- latest_event = dojo.event_histories.newest.first
- latest_event_at = latest_event.nil? ? Time.zone.parse('2000-01-23') : latest_event.evented_at
- @latest_event_by_dojos << {
- id: dojo.id,
- name: dojo.name,
- note: dojo.note,
- url: dojo.url,
- has_event_histories: latest_event.nil?,
-
- # 過去のイベント開催日と note 内の日付を比較し、新しい方の日付を表示
- event_at: (latest_event_at < last_session_date) ?
- last_session_date.strftime("%Y-%m-%d") :
- latest_event.evented_at.strftime("%Y-%m-%d"),
-
- # 過去のイベント開催日と note 内の日付を比較し、新しい方のリンクを表示
- event_url: (latest_event_at < last_session_date) ?
- last_session_link :
- latest_event.event_url
- }
- end
-
- # Sort by older events first && older Dojo ID first if same event date.
- @latest_event_by_dojos.sort_by!{ |dojo| [dojo[:event_at], dojo[:id]] }
- end
end
diff --git a/app/views/events/latest.html.erb b/app/views/dojos/activity.html.erb
similarity index 99%
rename from app/views/events/latest.html.erb
rename to app/views/dojos/activity.html.erb
index d9685dca7..47d422e38 100644
--- a/app/views/events/latest.html.erb
+++ b/app/views/dojos/activity.html.erb
@@ -1,6 +1,6 @@
<% provide(:title, '道場情報 - 直近の開催日まとめ') %>
<% provide(:desc, '道場別の直近開催日をまとめたページです。') %>
-<% provide(:url, events_latest_url) %>
+<% provide(:url, activity_dojos_url) %>
<% provide(:meta_image, '/img/ogp-events.jpeg') %>
diff --git a/config/routes.rb b/config/routes.rb
index 06b00c353..0eb3e73fe 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -64,7 +64,11 @@
get "/kata" => "docs#kata"
#get "/debug/kata" => "docs#kata"
- resources :dojos, only: %i(index show) # GET /dojos.json returns dojo data as JSON
+ resources :dojos, only: %i(index show) do # GET /dojos.json returns dojo data as JSON
+ collection do
+ get :activity # GET /dojos/activity - 道場活動状況(旧 /events/latest)
+ end
+ end
resources :docs, only: %i(index show)
resources :podcasts, only: %i(index show)
resources :spaces, only: %i(index)
@@ -84,9 +88,11 @@
#resources :stats, only: %i(show)
#resources :pokemons, only: %i(index create)
- # Upcoming Events & Latest Events
+ # Upcoming Events
get '/events' => 'events#index'
- get '/events/latest' => 'events#latest'
+
+ # Legacy redirect: /events/latest moved to /dojos/activity
+ get '/events/latest', to: redirect('/dojos/activity')
# Redirects
get "/releases/2016/12/12/new-backend", to: redirect('/docs/post-backend-update-history')
diff --git a/spec/requests/dojos_spec.rb b/spec/requests/dojos_spec.rb
index 809abd498..c7b040f51 100644
--- a/spec/requests/dojos_spec.rb
+++ b/spec/requests/dojos_spec.rb
@@ -318,4 +318,43 @@
end
end
end
+
+ describe "GET /dojos/activity" do
+ before do
+ # アクティブな道場を作成
+ @active_dojo = create(:dojo,
+ name: "Active Dojo",
+ created_at: 1.week.ago,
+ inactivated_at: nil
+ )
+
+ # 非アクティブな道場を作成
+ @inactive_dojo = create(:dojo,
+ name: "Inactive Dojo",
+ created_at: 2.years.ago,
+ inactivated_at: 1.year.ago
+ )
+ end
+
+ it "returns http success" do
+ get activity_dojos_path
+ expect(response).to have_http_status(:success)
+ end
+
+ it "displays the activity status page" do
+ get activity_dojos_path
+ expect(response.body).to include("道場別の直近の開催日まとめ")
+ end
+
+ it "includes only active dojos" do
+ get activity_dojos_path
+ expect(response.body).to include(@active_dojo.name)
+ expect(response.body).not_to include(@inactive_dojo.name)
+ end
+
+ it "redirects from old URL /events/latest" do
+ get "/events/latest"
+ expect(response).to redirect_to(activity_dojos_path)
+ end
+ end
end
\ No newline at end of file
From 9cfa869de546991647835620419594e8b1b6731c Mon Sep 17 00:00:00 2001
From: Yohei Yasukawa
Date: Sat, 16 Aug 2025 14:11:30 +0900
Subject: [PATCH 2/9] =?UTF-8?q?refactor:=20=E3=83=86=E3=83=BC=E3=83=96?=
=?UTF-8?q?=E3=83=ABCSS=E3=82=92=E5=85=B1=E9=80=9A=E5=8C=96=E3=81=97?=
=?UTF-8?q?=E3=81=A6DRY=E3=81=AB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- /dojos と /dojos/activity で重複していたテーブルスタイルを統一
- custom.scss の .stats-table クラスに共通スタイルを集約
- 両ビューから重複CSSを削除し、stats-tableクラスを適用
---
app/assets/stylesheets/custom.scss | 31 ++++++++++++++++++++++++++++--
app/views/dojos/activity.html.erb | 29 +---------------------------
app/views/dojos/index.html.erb | 21 --------------------
3 files changed, 30 insertions(+), 51 deletions(-)
diff --git a/app/assets/stylesheets/custom.scss b/app/assets/stylesheets/custom.scss
index 010b4b6ed..c064c9f10 100644
--- a/app/assets/stylesheets/custom.scss
+++ b/app/assets/stylesheets/custom.scss
@@ -1075,7 +1075,34 @@ section {
/* Stats and Dojos table styling */
.stats-table {
- td.inactive-item {
- background-color: gainsboro;
+ table-layout: auto;
+
+ th {
+ padding: 10px;
+ text-align: center;
+ }
+
+ td {
+ padding: 1px 10px 1px 10px;
+ text-align: right;
+ font-size: smaller;
+
+ &.url-cell {
+ white-space: normal; /* 改行を許可 */
+ word-wrap: break-word; /* 古めのブラウザ向け */
+ overflow-wrap: break-word; /* 新しめのブラウザ向け */
+ word-break: break-all; /* 英数字が続く場合の保険 (必要に応じて) */
+ text-align: left;
+ }
+
+ &.inactive-item {
+ background-color: gainsboro;
+ }
+ }
+
+ // Activity page specific style for expired events
+ span.expired a {
+ color: red;
+ background-color: #ffe5e5; /* 薄い赤背景 */
}
}
diff --git a/app/views/dojos/activity.html.erb b/app/views/dojos/activity.html.erb
index 47d422e38..6bb26d7d6 100644
--- a/app/views/dojos/activity.html.erb
+++ b/app/views/dojos/activity.html.erb
@@ -25,35 +25,8 @@
-
-
-
+
☯️ 道場名
diff --git a/app/views/dojos/index.html.erb b/app/views/dojos/index.html.erb
index 4ecf89c15..e0cd2d805 100644
--- a/app/views/dojos/index.html.erb
+++ b/app/views/dojos/index.html.erb
@@ -62,27 +62,6 @@
-
-
From 0b97c07545a21d2056bebe1abbe663e34dee8876 Mon Sep 17 00:00:00 2001
From: Yohei Yasukawa
Date: Sat, 16 Aug 2025 14:14:11 +0900
Subject: [PATCH 3/9] =?UTF-8?q?feat:=20/dojos/activity=20=E3=81=AEnote?=
=?UTF-8?q?=E3=82=AB=E3=83=A9=E3=83=A0=E3=81=ABtruncate=E3=82=92=E9=81=A9?=
=?UTF-8?q?=E7=94=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- /dojos ページと同様に長いテキストを省略表示
- noteは60文字でtruncate(URLを含むことが多いため)
- titleアトリビュートで全文を確認可能
---
app/views/dojos/activity.html.erb | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/app/views/dojos/activity.html.erb b/app/views/dojos/activity.html.erb
index 6bb26d7d6..39d268b2a 100644
--- a/app/views/dojos/activity.html.erb
+++ b/app/views/dojos/activity.html.erb
@@ -65,7 +65,10 @@
- <%= raw Addressable::URI.unescape(Rinku.auto_link(dojo[:note])) %>
+
+ <% truncated_note = truncate(dojo[:note], length: 60) %>
+ <%= raw Addressable::URI.unescape(Rinku.auto_link(truncated_note)) %>
+
|
From a5181facc5fb7e89471ea2e4c70f8b18b5381c41 Mon Sep 17 00:00:00 2001
From: Yohei Yasukawa
Date: Sat, 16 Aug 2025 14:21:09 +0900
Subject: [PATCH 4/9] =?UTF-8?q?feat:=20/dojos/activity=20=E3=81=AB?=
=?UTF-8?q?=E6=8E=B2=E8=BC=89=E6=97=A5=E3=82=AB=E3=83=A9=E3=83=A0=E3=82=92?=
=?UTF-8?q?=E8=BF=BD=E5=8A=A0=E3=81=97=E3=80=81=E9=96=8B=E5=82=AC=E6=97=A5?=
=?UTF-8?q?=E3=81=A8=E5=88=86=E9=9B=A2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 掲載日(🗓): /dojos と同じロジック(created_at)
- 開催日(👥): 直近のイベント開催日(なければ空欄)
- ページタイトルを「活動状況まとめ」に更新
- テストを追加して新しいカラム構成を検証
---
app/controllers/dojos_controller.rb | 43 +++++++++---------
app/views/dojos/activity.html.erb | 68 ++++++++++++++++++++---------
spec/requests/dojos_spec.rb | 15 ++++++-
3 files changed, 83 insertions(+), 43 deletions(-)
diff --git a/app/controllers/dojos_controller.rb b/app/controllers/dojos_controller.rb
index 2531e53e8..8e33953e2 100644
--- a/app/controllers/dojos_controller.rb
+++ b/app/controllers/dojos_controller.rb
@@ -113,31 +113,30 @@ def activity
Dojo.active.each do |dojo|
link_in_note = dojo.note.match(URI.regexp)
date_in_note = dojo.note.match(/(\d{4}-\d{1,2}-\d{1,2})/) # YYYY-MM-DD
- last_session_link = link_in_note.nil? ? dojo_path(dojo.id) : link_in_note.to_s
- last_session_date = date_in_note.nil? ? dojo.created_at : Time.zone.parse(date_in_note.to_s)
-
- latest_event = dojo.event_histories.newest.first
- latest_event_at = latest_event.nil? ? Time.zone.parse('2000-01-23') : latest_event.evented_at
+
+ latest_event = dojo.event_histories.newest.first
+
@latest_event_by_dojos << {
- id: dojo.id,
- name: dojo.name,
- note: dojo.note,
- url: dojo.url,
- has_event_histories: latest_event.nil?,
-
- # 過去のイベント開催日と note 内の日付を比較し、新しい方の日付を表示
- event_at: (latest_event_at < last_session_date) ?
- last_session_date.strftime("%Y-%m-%d") :
- latest_event.evented_at.strftime("%Y-%m-%d"),
-
- # 過去のイベント開催日と note 内の日付を比較し、新しい方のリンクを表示
- event_url: (latest_event_at < last_session_date) ?
- last_session_link :
- latest_event.event_url
+ id: dojo.id,
+ name: dojo.name,
+ note: dojo.note,
+ url: dojo.url,
+ created_at: dojo.created_at, # 掲載日(/dojos と同じ)
+
+ # 直近の開催日(イベント履歴がある場合のみ)
+ latest_event_at: latest_event.nil? ? nil : latest_event.evented_at,
+ latest_event_url: latest_event.nil? ? nil : latest_event.event_url,
+
+ # note内の日付とリンク(fallback用)
+ note_date: date_in_note.nil? ? nil : Time.zone.parse(date_in_note.to_s),
+ note_link: link_in_note.nil? ? nil : link_in_note.to_s
}
end
- # Sort by older events first && older Dojo ID first if same event date.
- @latest_event_by_dojos.sort_by!{ |dojo| [dojo[:event_at], dojo[:id]] }
+ # Sort by latest event date (or created_at if no events) && older Dojo ID if same date
+ @latest_event_by_dojos.sort_by! do |dojo|
+ sort_date = dojo[:latest_event_at] || dojo[:note_date] || dojo[:created_at]
+ [sort_date, dojo[:id]]
+ end
end
end
diff --git a/app/views/dojos/activity.html.erb b/app/views/dojos/activity.html.erb
index 39d268b2a..24d684ae0 100644
--- a/app/views/dojos/activity.html.erb
+++ b/app/views/dojos/activity.html.erb
@@ -1,5 +1,5 @@
-<% provide(:title, '道場情報 - 直近の開催日まとめ') %>
-<% provide(:desc, '道場別の直近開催日をまとめたページです。') %>
+<% provide(:title, '道場情報 - 活動状況まとめ') %>
+<% provide(:desc, '道場別の掲載日と直近開催日をまとめたページです。') %>
<% provide(:url, activity_dojos_url) %>
<% provide(:meta_image, '/img/ogp-events.jpeg') %>
@@ -9,7 +9,7 @@
- ☯️ 道場別の直近の開催日まとめ
+ ☯️ 道場別の活動状況まとめ
主にデータ分析や
@@ -18,9 +18,9 @@
@@ -29,15 +29,32 @@
- ☯️ 道場名
+
+ ☯️
+
+ 道場名
+
|
-
- 🗓 直近の開催日または掲載日
-
+
+ 🗓
+
+ 掲載日
+
|
- 📝 ノート
+
+ 👥
+
+ 開催日
+
+ |
+
+
+ 📝
+
+ ノート
+
|
<% @latest_event_by_dojos.each do |dojo| %>
@@ -47,19 +64,30 @@
<%= dojo[:name] %>
+
+ <%= dojo[:created_at].strftime("%Y-%m-%d") %>
+ |
- <% if dojo[:has_event_histories] %>
-
- >
- <%= link_to dojo[:event_at], dojo[:event_url] %>
-
+ <% if dojo[:latest_event_at] %>
+
+ <% expired = dojo[:latest_event_at] <= Time.current.prev_year && !dojo[:note].include?('Active') %>
+
+ <%= link_to dojo[:latest_event_at].strftime("%Y-%m-%d"), dojo[:latest_event_url] %>
+
+ <% elsif dojo[:note_date] %>
+
+ <% expired = dojo[:note_date] <= Time.current.prev_year && !dojo[:note].include?('Active') %>
+
+ <% if dojo[:note_link] %>
+ <%= link_to dojo[:note_date].strftime("%Y-%m-%d"), dojo[:note_link] %>
+ <% else %>
+ <%= dojo[:note_date].strftime("%Y-%m-%d") %>
+ <% end %>
+
<% else %>
-
-
- >
- <%= link_to dojo[:event_at], dojo[:event_url] %>
-
+
+ -
<% end %>
|
diff --git a/spec/requests/dojos_spec.rb b/spec/requests/dojos_spec.rb
index c7b040f51..7a52f96a3 100644
--- a/spec/requests/dojos_spec.rb
+++ b/spec/requests/dojos_spec.rb
@@ -343,7 +343,7 @@
it "displays the activity status page" do
get activity_dojos_path
- expect(response.body).to include("道場別の直近の開催日まとめ")
+ expect(response.body).to include("道場別の活動状況まとめ")
end
it "includes only active dojos" do
@@ -356,5 +356,18 @@
get "/events/latest"
expect(response).to redirect_to(activity_dojos_path)
end
+
+ it "displays proper column headers" do
+ get activity_dojos_path
+ expect(response.body).to include("掲載日")
+ expect(response.body).to include("開催日")
+ expect(response.body).to include("ノート")
+ end
+
+ it "displays created_at date for active dojos" do
+ get activity_dojos_path
+ # 掲載日は YYYY-MM-DD 形式で表示される
+ expect(response.body).to match(@active_dojo.created_at.strftime("%Y-%m-%d"))
+ end
end
end
\ No newline at end of file
From 613cc0a2024fc7bc0c39e2c7b9af3467d32eb41d Mon Sep 17 00:00:00 2001
From: Yohei Yasukawa
Date: Sat, 16 Aug 2025 14:24:01 +0900
Subject: [PATCH 5/9] =?UTF-8?q?feat:=20/dojos/activity=20=E3=81=AB?=
=?UTF-8?q?=E9=81=93=E5=A0=B4ID=E3=82=92=E8=A1=A8=E7=A4=BA=EF=BC=88/dojos?=
=?UTF-8?q?=20=E3=81=A8=E5=90=8C=E3=81=98=E5=BD=A2=E5=BC=8F=EF=BC=89?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 道場名 (ID 番号) ヘッダーを /dojos と統一
- 道場名の下にIDを表示する形式も統一
- リンク先を道場詳細ページに変更(内部リンク化)
- DRY原則に従い、両ページで同じ表示形式を維持
---
app/views/dojos/activity.html.erb | 7 +++++--
spec/requests/dojos_spec.rb | 7 +++++++
2 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/app/views/dojos/activity.html.erb b/app/views/dojos/activity.html.erb
index 24d684ae0..b013fb7b8 100644
--- a/app/views/dojos/activity.html.erb
+++ b/app/views/dojos/activity.html.erb
@@ -32,7 +32,7 @@
☯️
- 道場名
+ 道場名 (ID 番号)
@@ -61,7 +61,10 @@
|
- <%= dojo[:name] %>
+ <%= link_to dojo_path(dojo[:id]) do %>
+ <%= dojo[:name] %>
+ (ID: <%= dojo[:id] %>)
+ <% end %>
|
diff --git a/spec/requests/dojos_spec.rb b/spec/requests/dojos_spec.rb
index 7a52f96a3..457279c47 100644
--- a/spec/requests/dojos_spec.rb
+++ b/spec/requests/dojos_spec.rb
@@ -369,5 +369,12 @@
# 掲載日は YYYY-MM-DD 形式で表示される
expect(response.body).to match(@active_dojo.created_at.strftime("%Y-%m-%d"))
end
+
+ it "displays dojo ID same as /dojos page" do
+ get activity_dojos_path
+ # /dojos ページと同じように ID が表示される
+ expect(response.body).to include("(ID: #{@active_dojo.id})")
+ expect(response.body).to include("道場名 (ID 番号)")
+ end
end
end
\ No newline at end of file
From 715a2f86245e4defa7c146d31a8386f869278afa Mon Sep 17 00:00:00 2001
From: Yohei Yasukawa
Date: Sat, 16 Aug 2025 14:28:32 +0900
Subject: [PATCH 6/9] =?UTF-8?q?docs:=20/dojos/activity=20=E3=81=AE?=
=?UTF-8?q?=E8=AA=AC=E6=98=8E=E6=96=87=E3=82=92=E6=94=B9=E5=96=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- リンク先ページ名を正式名称に統一(統計情報)
- 不要な説明を削除してシンプルに
- 開催日のデータソース制限を明確化
---
app/views/dojos/activity.html.erb | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/app/views/dojos/activity.html.erb b/app/views/dojos/activity.html.erb
index b013fb7b8..bf30eff65 100644
--- a/app/views/dojos/activity.html.erb
+++ b/app/views/dojos/activity.html.erb
@@ -18,9 +18,9 @@
From f0166c5d711dcbbd1ebecae81da54299c3b69536 Mon Sep 17 00:00:00 2001
From: Yohei Yasukawa
Date: Sat, 16 Aug 2025 16:06:22 +0900
Subject: [PATCH 7/9] =?UTF-8?q?fix:=20=E3=82=BD=E3=83=BC=E3=83=88=E9=A0=86?=
=?UTF-8?q?=E3=82=92=E5=9C=B0=E7=90=86=E7=9A=84=E9=A0=86=E5=BA=8F=E3=81=AB?=
=?UTF-8?q?=E6=94=B9=E5=96=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 同じ日付の道場をIDではなくorderでソート(地理的にまとまる)
---
app/controllers/dojos_controller.rb | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/controllers/dojos_controller.rb b/app/controllers/dojos_controller.rb
index 8e33953e2..85641415b 100644
--- a/app/controllers/dojos_controller.rb
+++ b/app/controllers/dojos_controller.rb
@@ -133,10 +133,10 @@ def activity
}
end
- # Sort by latest event date (or created_at if no events) && older Dojo ID if same date
+ # Sort by latest event date (or created_at if no events) && Dojo's order if same date
@latest_event_by_dojos.sort_by! do |dojo|
sort_date = dojo[:latest_event_at] || dojo[:note_date] || dojo[:created_at]
- [sort_date, dojo[:id]]
+ [sort_date, dojo[:order]]
end
end
end
From 535c254d8f3c306fd10d6d7b7768963349fa8642 Mon Sep 17 00:00:00 2001
From: Yohei Yasukawa
Date: Sat, 16 Aug 2025 16:10:37 +0900
Subject: [PATCH 8/9] =?UTF-8?q?refactor:=20=E9=9D=9E=E3=82=A2=E3=82=AF?=
=?UTF-8?q?=E3=83=86=E3=82=A3=E3=83=96=E5=88=A4=E5=AE=9A=E3=81=AE=E9=96=BE?=
=?UTF-8?q?=E5=80=A4=E3=82=92Dojo=E3=83=A2=E3=83=87=E3=83=AB=E3=81=AB?=
=?UTF-8?q?=E5=AE=9A=E6=95=B0=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- INACTIVE_THRESHOLD = 1.year をDojoモデルに定義
- メンテナンス性向上(閾値変更が容易に)
- ビューでは Time.current.prev_year の代わりに定数を使用
- Claudeからのフィードバックを適用
---
app/controllers/dojos_controller.rb | 3 +++
app/models/dojo.rb | 3 +++
app/views/dojos/activity.html.erb | 4 ++--
3 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/app/controllers/dojos_controller.rb b/app/controllers/dojos_controller.rb
index 85641415b..4cf8389be 100644
--- a/app/controllers/dojos_controller.rb
+++ b/app/controllers/dojos_controller.rb
@@ -109,6 +109,9 @@ def show
# GET /dojos/activity
# 道場の活動状況を表示(旧 /events/latest から移行)
def activity
+ # ビューで使用するための閾値をインスタンス変数に設定(モデルから取得)
+ @inactive_threshold = Dojo::INACTIVE_THRESHOLD
+
@latest_event_by_dojos = []
Dojo.active.each do |dojo|
link_in_note = dojo.note.match(URI.regexp)
diff --git a/app/models/dojo.rb b/app/models/dojo.rb
index 2bc580417..429b19cef 100644
--- a/app/models/dojo.rb
+++ b/app/models/dojo.rb
@@ -5,6 +5,9 @@ class Dojo < ApplicationRecord
NUM_OF_TOTAL_EVENTS = "10,000"
NUM_OF_TOTAL_NINJAS = "62,000"
DOJO_INFO_YAML_PATH = Rails.root.join('db', 'dojos.yml')
+
+ # 1年以上イベント開催していない道場を判定する閾値
+ INACTIVE_THRESHOLD = 1.year
belongs_to :prefecture
has_many :dojo_event_services, dependent: :destroy
diff --git a/app/views/dojos/activity.html.erb b/app/views/dojos/activity.html.erb
index bf30eff65..32208fe9f 100644
--- a/app/views/dojos/activity.html.erb
+++ b/app/views/dojos/activity.html.erb
@@ -74,13 +74,13 @@
<% if dojo[:latest_event_at] %>
- <% expired = dojo[:latest_event_at] <= Time.current.prev_year && !dojo[:note].include?('Active') %>
+ <% expired = dojo[:latest_event_at] <= Time.current - @inactive_threshold && !dojo[:note].include?('Active') %>
<%= link_to dojo[:latest_event_at].strftime("%Y-%m-%d"), dojo[:latest_event_url] %>
<% elsif dojo[:note_date] %>
- <% expired = dojo[:note_date] <= Time.current.prev_year && !dojo[:note].include?('Active') %>
+ <% expired = dojo[:note_date] <= Time.current - @inactive_threshold && !dojo[:note].include?('Active') %>
<% if dojo[:note_link] %>
<%= link_to dojo[:note_date].strftime("%Y-%m-%d"), dojo[:note_link] %>
From d0a39af08c4d8bdff2d19d60385427746452c181 Mon Sep 17 00:00:00 2001
From: Yohei Yasukawa
Date: Sat, 16 Aug 2025 16:17:20 +0900
Subject: [PATCH 9/9] =?UTF-8?q?feat:=20/signup=20=E3=83=9A=E3=83=BC?=
=?UTF-8?q?=E3=82=B8=E3=81=AE=E9=9D=9E=E3=82=A2=E3=82=AF=E3=83=86=E3=82=A3?=
=?UTF-8?q?=E3=83=96=E6=9C=9F=E9=96=93=E3=82=92=E5=8B=95=E7=9A=84=E8=A1=A8?=
=?UTF-8?q?=E7=A4=BA=E3=81=AB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- Dojo::INACTIVE_THRESHOLD 定数から期間を自動取得
- ハードコードされた「1年間」を変数化
- 将来の閾値変更時に自動で反映されるように改善
- 全角数字に自動変換(例: 1 → 1)
---
app/controllers/docs_controller.rb | 13 +++++++++++++
public/docs/signup.md | 2 +-
2 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/app/controllers/docs_controller.rb b/app/controllers/docs_controller.rb
index 9cd3b25ab..9b6d9b3ca 100644
--- a/app/controllers/docs_controller.rb
+++ b/app/controllers/docs_controller.rb
@@ -25,6 +25,19 @@ def show
@doc.content.gsub! "{{ NUM_OF_TOTAL_EVENTS }}", Dojo::NUM_OF_TOTAL_EVENTS
@doc.content.gsub! "{{ NUM_OF_TOTAL_NINJAS }}", Dojo::NUM_OF_TOTAL_NINJAS
end
+
+ # INACTIVE_THRESHOLD を日本語の期間表記に変換
+ if @doc.content.include? "INACTIVE_THRESHOLD"
+ # 1.year → "1年間", 6.months → "6ヶ月間" のように変換
+ threshold_in_months = Dojo::INACTIVE_THRESHOLD.to_i / 1.month.to_i
+ threshold_text = if threshold_in_months >= 12
+ years = threshold_in_months / 12
+ "#{years.to_s.tr('0-9', '0-9')}年間"
+ else
+ "#{threshold_in_months.to_s.tr('0-9', '0-9')}ヶ月間"
+ end
+ @doc.content.gsub! "{{ INACTIVE_THRESHOLD }}", threshold_text
+ end
@content = Kramdown::Document.new(@doc.content, input: 'GFM').to_html
@url = request.url
diff --git a/public/docs/signup.md b/public/docs/signup.md
index 1ea9550f9..1da134e5c 100644
--- a/public/docs/signup.md
+++ b/public/docs/signup.md
@@ -41,7 +41,7 @@ CoderDojo の立ち上げ申請がまだお済みでない場合は、下記ペ
1. 文字数やタグ数に上限があるため、申請内容を一部変更して掲載する場合があります 🙏
- 📝 例: scratch→Scratch,月1回開催→毎月開催,HTML5→HTML,マイクラ→Minecraft など
-
-1. 財団により非アクティブと判断された場合、もしくは一定期間 (現時点では1年間) 活動状況が確認できない場合は非表示になります 😴
+1. 財団により非アクティブと判断された場合、もしくは一定期間 (現時点では{{ INACTIVE_THRESHOLD }}) 活動状況が確認できない場合は非表示になります 😴
- 📜️ [CoderDojo が承認されているかを確認する方法 - CoderDojo Japan](/docs/how-to-check-dojo-status)
-
1. 申請後もロゴ画像や説明文を更新できますので、まずは気軽にお申し込みください 📮✨
| |