Skip to content

Providers名前空間の切り出し #276

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 25 commits into from
Mar 12, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
c02f95c
touch events.html.haml and add static_pages_controller_spec test
AnaTofuZ Feb 28, 2018
2a0529a
modofied namespace statiscs/providers/ to providers/
AnaTofuZ Mar 5, 2018
1a03b3c
remove module Statistics namespace for lib/providers/*.rb
AnaTofuZ Mar 5, 2018
cb0a915
Merge branch 'add_events_pages' of ssh://github.com/AnaTofuZ/coderdoj…
AnaTofuZ Mar 5, 2018
4b8f227
lib/statistics.rbでの `providers` の名前空間からstatisticsを外した
AnaTofuZ Mar 5, 2018
ec1f07b
名前空間の変更に伴うlib/tasks/statistics.rakeでのStatistics::Providersの名前修正
AnaTofuZ Mar 5, 2018
1e412e4
git mv spec/lib/statistics/providers -> spec/lib/providers/*
AnaTofuZ Mar 5, 2018
4721898
spec/lib/providers* でのテスト対象の名前空間の修正
AnaTofuZ Mar 5, 2018
6219af4
rm `/events` components
AnaTofuZ Mar 5, 2018
f341803
remove spec/controller/static_pages_controller_spec for /evens
AnaTofuZ Mar 5, 2018
f609b2d
git mv providers/* -> eventservice/providers/*
AnaTofuZ Mar 5, 2018
b30cdbd
move providers.rb to eventservice/providers.rb and new eventservice.r…
AnaTofuZ Mar 5, 2018
fd426de
add eventservice name space for lib/**/*.rb
AnaTofuZ Mar 5, 2018
d044d00
modified lib/eventservice/providers/*.rb indents
AnaTofuZ Mar 5, 2018
a20eac9
git mv spec/lib/providers -> spec/lib/eventservice/providers
AnaTofuZ Mar 5, 2018
0fd4ef8
modofied spec/lib/eventservice/providers use Providers -> EventServic…
AnaTofuZ Mar 5, 2018
4fc5347
modofied lib/task/statistics use Providers -> EventService::Providers
AnaTofuZ Mar 5, 2018
5e052ab
use Everything namespace for lib/statistics/tasks/*.rb
AnaTofuZ Mar 5, 2018
f6469ff
rename directory and lib/eventservice for git mv s/eventservice/event…
AnaTofuZ Mar 12, 2018
a6fa303
rename spec/lib/eventservice/* -> spec/lib/event_service
AnaTofuZ Mar 12, 2018
29a838f
modofied require 'eventservice' -> 'event_service'
AnaTofuZ Mar 12, 2018
272a297
mv statistics/client.rb -> event_service/client.rb
AnaTofuZ Mar 12, 2018
c026250
modofied use event_service/client
AnaTofuZ Mar 12, 2018
56602fb
modified namespace Statistics -> EventService
AnaTofuZ Mar 12, 2018
0f4dcd5
modofied use test code for Statistics::Client -> EventService::Client
AnaTofuZ Mar 12, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions lib/event_service.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
module EventService; end

require_relative 'event_service/providers'
require_relative 'event_service/client'
2 changes: 1 addition & 1 deletion lib/statistics/client.rb → lib/event_service/client.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
module Statistics
module EventService
class Client
class_attribute :debug
self.debug = false
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
module Statistics
module EventService
module Providers
end
end
Expand Down
42 changes: 42 additions & 0 deletions lib/event_service/providers/connpass.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
module EventService
module Providers
class Connpass
ENDPOINT = 'https://connpass.com/api/v1'.freeze

def initialize
@client = EventService::Client.new(ENDPOINT)
end

def search(keyword:)
@client.get('event/', { keyword: keyword, count: 100 })
end

def fetch_events(series_id:, yyyymm: nil, yyyymmdd: nil)
params = {
series_id: series_id,
start: 1,
count: 100
}
params[:ym] = yyyymm if yyyymm
params[:ymd] = yyyymmdd if yyyymmdd
events = []

loop do
part = @client.get('event/', params)

break if part['results_returned'].zero?

events.push(*part.fetch('events'))

break if part.size < params[:count]

break if params[:start] + params[:count] > part['results_available']

params[:start] += params[:count]
end

events
end
end
end
end
51 changes: 51 additions & 0 deletions lib/event_service/providers/doorkeeper.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
module EventService
module Providers
class Doorkeeper
ENDPOINT = 'https://api.doorkeeper.jp'.freeze

def initialize
@client = EventService::Client.new(ENDPOINT) do |c|
c.authorization(:Bearer, ENV.fetch('DOORKEEPER_API_TOKEN'))
end
@default_since = Time.zone.parse('2010-07-01')
@default_until = Time.zone.now.end_of_day
end

def search(keyword:)
@client.get('events', q: keyword, since: @default_since, expand: 'group')
end

def fetch_events(group_id:, since_at: @default_since, until_at: @default_until)
begin
params = {
page: 1,
since: since_at,
until: until_at
}
events = []

loop do
part = @client.get("groups/#{group_id}/events", params)

break if part.size.zero?

events.push(*part.map { |e| e['event'] })

break if part.size < 25 # 25 items / 1 request

params[:page] += 1
end

events
rescue Faraday::ClientError => e
raise e unless e.response[:status] == 429

puts 'API rate limit exceeded.'
puts "This task will retry in 60 seconds from now(#{Time.zone.now})."
sleep 60
retry
end
end
end
end
end
34 changes: 34 additions & 0 deletions lib/event_service/providers/facebook.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
module EventService
module Providers
class Facebook
class_attribute :access_token

def initialize
@client = Koala::Facebook::API.new(self.access_token)
end

def fetch_events(group_id:, since_at: nil, until_at: nil)
params = {
fields: %i(attending_count start_time owner),
limit: 100
}.tap do |h|
# @note FacebookのGraph APIはPDTがタイムゾーンとなっており、
# JST<->PDTのオフセット8時間を追加した時刻をパラメータとする必要がある
# @see https://github.com/coderdojo-japan/coderdojo.jp/pull/182#discussion_r148935458
h[:since] = since_at.since(8.hours).to_i if since_at
h[:until] = until_at.since(8.hours).to_i if until_at
end

events = []

collection = @client.get_object("#{group_id}/events", params)
events.push(*collection.to_a)
while !collection.empty? && collection.paging['next'] do
events.push(*collection.next_page.to_a)
end

events
end
end
end
end
11 changes: 11 additions & 0 deletions lib/event_service/providers/static_yaml.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
module EventService
module Providers
class StaticYaml
YAML_FILE = Rails.root.join('db', 'static_event_histories.yaml')

def fetch_events
YAML.load_file(YAML_FILE) || []
end
end
end
end
3 changes: 1 addition & 2 deletions lib/statistics.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
module Statistics; end

require_relative 'statistics/client'
require_relative 'statistics/providers'
require_relative 'statistics/tasks'
require_relative 'statistics/aggregation'
require_relative 'event_service'
42 changes: 0 additions & 42 deletions lib/statistics/providers/connpass.rb

This file was deleted.

51 changes: 0 additions & 51 deletions lib/statistics/providers/doorkeeper.rb

This file was deleted.

34 changes: 0 additions & 34 deletions lib/statistics/providers/facebook.rb

This file was deleted.

11 changes: 0 additions & 11 deletions lib/statistics/providers/static_yaml.rb

This file was deleted.

2 changes: 1 addition & 1 deletion lib/statistics/tasks/connpass.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ def self.delete_event_histories(period)
end

def initialize(dojos, date, weekly)
@client = Providers::Connpass.new
@client = EventService::Providers::Connpass.new
@dojos = dojos
@params = build_params(date, weekly)
end
Expand Down
2 changes: 1 addition & 1 deletion lib/statistics/tasks/doorkeeper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ def self.delete_event_histories(period)
end

def initialize(dojos, date, weekly)
@client = Providers::Doorkeeper.new
@client = EventService::Providers::Doorkeeper.new
@dojos = dojos
@params = build_params(date, weekly)
end
Expand Down
2 changes: 1 addition & 1 deletion lib/statistics/tasks/facebook.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ def self.delete_event_histories(period)
end

def initialize(dojos, date, weekly)
@client = Providers::Facebook.new
@client = EventService::Providers::Facebook.new
@dojos = dojos
@params = build_params(date, weekly)
end
Expand Down
2 changes: 1 addition & 1 deletion lib/statistics/tasks/static_yaml.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ def self.delete_event_histories(_period)
end

def initialize(dojos, _date, _weekly)
@client = Providers::StaticYaml.new
@client = EventService::Providers::StaticYaml.new
@dojos = dojos
end

Expand Down
6 changes: 3 additions & 3 deletions lib/tasks/statistics.rake
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ require_relative '../statistics.rb'
namespace :statistics do
desc '月次/週次のイベント履歴を集計します'
task :aggregation, [:from, :to] => :environment do |tasks, args|
Statistics::Providers::Facebook.access_token = Koala::Facebook::OAuth.new(ENV['FACEBOOK_APP_ID'], ENV['FACEBOOK_APP_SECRET']).get_app_access_token
EventService::Providers::Facebook.access_token = Koala::Facebook::OAuth.new(ENV['FACEBOOK_APP_ID'], ENV['FACEBOOK_APP_SECRET']).get_app_access_token
Statistics::Aggregation.new(args).run
end

Expand All @@ -14,9 +14,9 @@ namespace :statistics do
require 'pp'

puts 'Searching Connpass'
pp Statistics::Providers::Connpass.new.search(keyword: args[:keyword])
pp EventService::Providers::Connpass.new.search(keyword: args[:keyword])

puts 'Searching Doorkeeper'
pp Statistics::Providers::Doorkeeper.new.search(keyword: args[:keyword])
pp EventService::Providers::Doorkeeper.new.search(keyword: args[:keyword])
end
end
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
require 'rails_helper'
require 'statistics'
require 'event_service'

RSpec.describe Statistics::Providers::Connpass do
RSpec.describe EventService::Providers::Connpass do
include_context 'Use stubs for Connpass'

describe '#search' do
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
require 'rails_helper'
require 'statistics'
require 'event_service'

RSpec.describe Statistics::Providers::Doorkeeper do
RSpec.describe EventService::Providers::Doorkeeper do
include_context 'Use stubs for Doorkeeper'

describe '#search' do
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
require 'rails_helper'
require 'statistics'
require 'event_service'

RSpec.describe Statistics::Providers::Facebook do
RSpec.describe EventService::Providers::Facebook do
include_context 'Use stubs for Facebook'

describe '#fetch_events' do
Expand Down
Loading