Skip to content

Commit dd3bd01

Browse files
authored
Merge pull request #392 from coderdojo-japan/aggregation_specify_provider
イベント履歴収集スクリプトでプロバイダ指定を可能に
2 parents 2c5c03e + 7b7072e commit dd3bd01

File tree

4 files changed

+68
-11
lines changed

4 files changed

+68
-11
lines changed
Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,27 @@
1-
# rake statistics:aggregation[from,to]
1+
# rake statistics:aggregation[from,to,provider]
22

33
## 概要
44

5-
指定期間のイベント履歴を集計する
5+
指定期間/プロバイダのイベント履歴を集計する
66

77
## 引数
88

99
|引数名||必須|説明|
1010
|--|--|--|--|
1111
|from|string|(省略可)|集計期間開始年/年月/年月日|
1212
|to|string|(省略可)|集計期間終了年/年月/年月日|
13+
|provider|string|(省略可)|集計対象プロバイダ|
1314

1415
## 説明
1516

1617
from/to で指定された期間のイベント履歴を集計する。
1718

19+
provider が指定されたとき、指定プロバイダに対してのみ集計を行う。
20+
1821
+ from, to を共に省略した場合、前週一週間分の履歴を集計する。
1922
+ 全期間(2012年以降前日まで)を集計する場合、from/to 共に '-' を指定する。
2023
```
21-
rake statistics:aggregation[-,-]
24+
rake statistics:aggregation[-,-,]
2225
```
2326
+ from/to に期間を指定する場合、それぞれ以下の形式で指定可能。
2427
```
@@ -27,3 +30,5 @@ rake statistics:aggregation[-,-]
2730
+ to は前日、前日の年月、もしくは前日の年を最大とする。これより未来を指定された場合でも、最大以降は集計対象外とする。
2831

2932
+ from, to いずれかを省略した場合、指定された他方の年/年月/年月日の履歴を集計する。
33+
34+
+ provider には、connpass, doorkeeper, facebook, static_yaml が指定可能。

lib/statistics/aggregation.rb

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ module Statistics
22
class Aggregation
33
def initialize(args)
44
@from, @to = aggregation_period(args[:from], args[:to])
5-
dojos = fetch_dojos
5+
dojos = fetch_dojos(args[:provider])
66
@externals = dojos[:externals]
77
@internals = dojos[:internals]
88
end
@@ -56,12 +56,27 @@ def date_from(str)
5656
d
5757
end
5858

59-
def fetch_dojos
59+
def fetch_dojos(provider)
60+
if provider.blank?
61+
# 全プロバイダ対象
62+
external_services = DojoEventService::EXTERNAL_SERVICES
63+
internal_services = DojoEventService::INTERNAL_SERVICES
64+
else
65+
external_services = []
66+
internal_services = []
67+
case provider
68+
when 'connpass', 'doorkeeper', 'facebook'
69+
external_services = [provider]
70+
when 'static_yaml'
71+
internal_services = [provider]
72+
end
73+
end
74+
6075
{
61-
externals: find_dojos_by(DojoEventService::EXTERNAL_SERVICES),
62-
internals: find_dojos_by(DojoEventService::INTERNAL_SERVICES)
76+
externals: find_dojos_by(external_services),
77+
internals: find_dojos_by(internal_services)
6378
}
64-
end
79+
end
6580

6681
def find_dojos_by(services)
6782
services.each.with_object({}) do |name, hash|

lib/tasks/statistics.rake

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
require_relative '../statistics.rb'
22

33
namespace :statistics do
4-
desc '月次/週次のイベント履歴を集計します'
5-
task :aggregation, [:from, :to] => :environment do |tasks, args|
6-
# EventService::Providers::Facebook.access_token = Koala::Facebook::OAuth.new(ENV['FACEBOOK_APP_ID'], ENV['FACEBOOK_APP_SECRET']).get_app_access_token
4+
desc '指定期間/プロバイダのイベント履歴を集計します'
5+
task :aggregation, [:from, :to, :provider] => :environment do |tasks, args|
76
EventHistory.transaction do
87
Statistics::Aggregation.new(args).run
98
end

spec/lib/statistics/aggregation_spec.rb

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,5 +104,43 @@
104104
expect{ sa.send(:date_from, 'abc') }.to raise_error(ArgumentError)
105105
end
106106
end
107+
108+
context 'fetch_dojos(provider)' do
109+
it '指定なし' do
110+
dojos = sa.send(:fetch_dojos, nil)
111+
expect(dojos[:externals].keys).to eq(DojoEventService::EXTERNAL_SERVICES)
112+
expect(dojos[:internals].keys).to eq(DojoEventService::INTERNAL_SERVICES)
113+
end
114+
115+
it 'connpass' do
116+
dojos = sa.send(:fetch_dojos, 'connpass')
117+
expect(dojos[:externals].keys).to eq(['connpass'])
118+
expect(dojos[:internals].keys).to eq([])
119+
end
120+
121+
it 'doorkeeper' do
122+
dojos = sa.send(:fetch_dojos, 'doorkeeper')
123+
expect(dojos[:externals].keys).to eq(['doorkeeper'])
124+
expect(dojos[:internals].keys).to eq([])
125+
end
126+
127+
it 'facebook' do
128+
dojos = sa.send(:fetch_dojos, 'facebook')
129+
expect(dojos[:externals].keys).to eq(['facebook'])
130+
expect(dojos[:internals].keys).to eq([])
131+
end
132+
133+
it 'static_yaml' do
134+
dojos = sa.send(:fetch_dojos, 'static_yaml')
135+
expect(dojos[:externals].keys).to eq([])
136+
expect(dojos[:internals].keys).to eq(['static_yaml'])
137+
end
138+
139+
it 'other' do
140+
dojos = sa.send(:fetch_dojos, 'abc')
141+
expect(dojos[:externals].keys).to eq([])
142+
expect(dojos[:internals].keys).to eq([])
143+
end
144+
end
107145
end
108146
end

0 commit comments

Comments
 (0)