Skip to content

Commit e8a3e26

Browse files
authored
Merge pull request #460 from coderdojo-japan/view_upcoming_events
直近の CoderDojo 開催情報を表示する
2 parents 61ecd77 + a71e5dc commit e8a3e26

File tree

12 files changed

+109
-6
lines changed

12 files changed

+109
-6
lines changed

app/assets/stylesheets/custom.scss

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -561,6 +561,33 @@ a {
561561
text-decoration: none
562562
}
563563

564+
.event-region {
565+
font-weight: bold;
566+
}
567+
568+
#event-list {
569+
width: 80%;
570+
margin: 0 auto;
571+
}
572+
573+
#event-list .event-date {
574+
text-align: left;
575+
margin: .5em 0;
576+
}
577+
578+
#event-list ul {
579+
list-style: none;
580+
padding-left: 20px;
581+
}
582+
583+
#event-list ul li {
584+
text-align: left;
585+
}
586+
587+
#event-list .event-at {
588+
display: inline-block;
589+
width: 80px;
590+
}
564591

565592
@media only screen and (min-width:560px) {
566593
.dojo {

app/controllers/events_controller.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
class EventsController < ApplicationController
2+
def show
3+
@url = request.url
4+
@upcoming_events = UpcomingEvent.group_by_prefecture_and_date
5+
end
6+
end

app/models/upcoming_event.rb

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,33 @@ class UpcomingEvent < ApplicationRecord
88
validates :participants, presence: true
99

1010
scope :for, ->(service) { where(dojo_event_service: DojoEventService.for(service)) }
11+
scope :since, ->(date) { where('event_at >= ?', date.beginning_of_day) }
1112
scope :until, ->(date) { where('event_at < ?', date.beginning_of_day) }
13+
14+
class << self
15+
def group_by_prefecture_and_date
16+
events_by_prefecture = eager_load(dojo_event_service: :dojo).since(Time.zone.today).
17+
merge(Dojo.default_order).
18+
group_by { |event| event.dojo_event_service.dojo.prefecture_id }
19+
20+
result = {}
21+
Prefecture.all.each do |prefecture|
22+
events = events_by_prefecture[prefecture.id]
23+
next if events.blank?
24+
result[prefecture] = events.sort_by(&:event_at).map(&:catalog).group_by { |d| d[:event_date] }
25+
end
26+
result
27+
end
28+
end
29+
30+
def catalog
31+
{
32+
dojo_name: dojo_event_service.dojo.name,
33+
dojo_prefecture_name: dojo_event_service.dojo.prefecture.name,
34+
event_title: event_title,
35+
event_url: event_url,
36+
event_at: event_at,
37+
event_date: event_at.to_date
38+
}
39+
end
1240
end
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
%div#event-list
2+
- upcoming_events.each do |prefecture, events_by_date|
3+
%p.event-region= prefecture.name
4+
- events_by_date.each do |date, events|
5+
%p.event-date= "#{date.strftime('%Y/%m/%d')}"
6+
%ul
7+
- events.each do |event|
8+
%li
9+
%p
10+
%span.event-at= "#{event[:event_at].strftime('%k:%M')}"
11+
%a.event-url{ href: "#{event[:event_url]}" }
12+
%span= event[:event_title]
13+
%span= "(#{event[:dojo_name]})"

app/views/events/show.html.haml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
- provide(:title, 'イベント')
2+
- provide(:desc, 'もうすぐ開催のイベント情報をまとめています。')
3+
- provide(:url, @url)
4+
5+
/
6+
%section.cover{style: 'padding-top:40px; background-color: white;'}
7+
= image_tag "stats_cover.png"
8+
9+
%section#events.text-center
10+
%br
11+
%h1 もうすぐ開催のイベント
12+
%br
13+
%p{:style => "margin: 0 30px 40px 30px;"}
14+
💻 開催予定のイベントをチェックしましょう!
15+
= render partial: 'upcoming_events', locals: { upcoming_events: @upcoming_events }
16+
17+
%br
18+
%br

config/routes.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
# Hotfix with the code above that works correctly.
2626
#resources :stats, only: %i(show)
2727

28+
get "/events" => "events#show"
29+
2830
# Redirects
2931
get "/releases/2016/12/12/new-backend", to: redirect('/news/2016/12/12/new-backend')
3032
get "/blogs/2016/12/12/new-backend", to: redirect('/news/2016/12/12/new-backend')
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
class AddEventTitleToUpcomingEvent < ActiveRecord::Migration[5.1]
2+
def change
3+
add_column :upcoming_events, :event_title, :string, null: false
4+
end
5+
end

db/schema.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
#
1111
# It's strongly recommended that you check this file into your version control system.
1212

13-
ActiveRecord::Schema.define(version: 20190526151359) do
13+
ActiveRecord::Schema.define(version: 20190602092528) do
1414

1515
# These are extensions that must be enabled in order to support this database
1616
enable_extension "plpgsql"
@@ -86,6 +86,7 @@
8686
t.datetime "event_at", null: false
8787
t.string "service_name", null: false
8888
t.integer "participants", null: false
89+
t.string "event_title", null: false
8990
t.index ["dojo_event_service_id"], name: "index_upcoming_events_on_dojo_event_service_id"
9091
t.index ["service_name", "event_id"], name: "index_upcoming_events_on_service_name_and_event_id", unique: true
9192
end

lib/upcoming_events/tasks/connpass.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ def run
1515

1616
record = dojo_event_service.upcoming_events.find_or_initialize_by(event_id: e['event_id'])
1717
record.update!(service_name: dojo_event_service.name,
18+
event_title: e['title'],
1819
event_url: e['event_url'],
1920
event_at: Time.zone.parse(e['started_at']),
2021
participants: e['accepted'])

lib/upcoming_events/tasks/doorkeeper.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ def run
1515

1616
record = dojo_event_service.upcoming_events.find_or_initialize_by(event_id: e['id'])
1717
record.update!(service_name: dojo_event_service.name,
18+
event_title: e['title'],
1819
event_url: e['public_url'],
1920
participants: e['participants'],
2021
event_at: Time.zone.parse(e['starts_at']))

spec/factories/upcoming_events.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
factory :upcoming_event do
55
service_name { :connpass }
66
event_id { '1234' }
7+
event_title { 'event title' }
78
event_url { 'http:/www.aaa.com/events/1224' }
89
event_at { '2019-05-01 10:00'.in_time_zone }
910
participants { 1 }

spec/lib/upcoming_events/aggregation_spec.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@
2626
end
2727

2828
it '昨日分までは削除' do
29-
create(:upcoming_event, dojo_event_service_id: @es1.id, service_name: 'connpass', event_id: '1111', event_at: "#{Time.zone.today - 3.days} 13:00:00".in_time_zone)
30-
create(:upcoming_event, dojo_event_service_id: @es1.id, service_name: 'connpass', event_id: '2222', event_at: "#{Time.zone.today - 2.days} 14:00:00".in_time_zone)
31-
create(:upcoming_event, dojo_event_service_id: @es1.id, service_name: 'connpass', event_id: '3333', event_at: "#{Time.zone.today - 1.days} 15:00:00".in_time_zone)
32-
create(:upcoming_event, dojo_event_service_id: @es2.id, service_name: 'doorkeeper', event_id: '4444', event_at: "#{Time.zone.today - 2.days} 10:00:00".in_time_zone)
33-
create(:upcoming_event, dojo_event_service_id: @es2.id, service_name: 'doorkeeper', event_id: '5555', event_at: "#{Time.zone.today - 1.days} 11:00:00".in_time_zone)
29+
create(:upcoming_event, dojo_event_service_id: @es1.id, service_name: 'connpass', event_id: '1111', event_title: 'title 1111', event_at: "#{Time.zone.today - 3.days} 13:00:00".in_time_zone)
30+
create(:upcoming_event, dojo_event_service_id: @es1.id, service_name: 'connpass', event_id: '2222', event_title: 'title 2222', event_at: "#{Time.zone.today - 2.days} 14:00:00".in_time_zone)
31+
create(:upcoming_event, dojo_event_service_id: @es1.id, service_name: 'connpass', event_id: '3333', event_title: 'title 3333', event_at: "#{Time.zone.today - 1.days} 15:00:00".in_time_zone)
32+
create(:upcoming_event, dojo_event_service_id: @es2.id, service_name: 'doorkeeper', event_id: '4444', event_title: 'title 4444', event_at: "#{Time.zone.today - 2.days} 10:00:00".in_time_zone)
33+
create(:upcoming_event, dojo_event_service_id: @es2.id, service_name: 'doorkeeper', event_id: '5555', event_title: 'title 5555', event_at: "#{Time.zone.today - 1.days} 11:00:00".in_time_zone)
3434

3535
expect{ UpcomingEvents::Aggregation.new({}).run }.to change{ UpcomingEvent.count }.from(5).to(3)
3636
end

0 commit comments

Comments
 (0)