Last active
October 29, 2021 14:03
-
-
Save dgorodnichy/96ec88a913f72a0c67e7cc7aff707503 to your computer and use it in GitHub Desktop.
Facade pattern
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Dashboard | |
def initialize(filters) | |
@filters = filters | |
end | |
def call | |
users = FetchUsers.new(@filters).call | |
activities = FetchActivities.new(@filters).call | |
match_activities(users, activities | |
end | |
private | |
def match_activities(users, activities) | |
hash = {} | |
users.each { |user| hash[user[:name]] = activities[user[:id]] } | |
hash | |
end | |
end | |
class FetchUsers | |
def initialize(filters) | |
@filters = filters | |
end | |
def call | |
# Returns users in the following format: | |
# [ | |
# { id: 1, name: 'John Doe' }, | |
# { id: 2, name: 'Richard Roe' }, | |
# { id: 3, name: 'Janie Doe' } | |
# ] | |
UsersForeignAPI.new(@filters).call | |
end | |
end | |
class FetchActivities | |
def initialize(filters) | |
@filters = filters | |
end | |
def call | |
# Returns activities in the following format: | |
# { | |
# 1 => { calls: 3, messages: 8 }, | |
# 2 => { calls: 14, messages: 3 }, | |
# 3 => { calls: 4, messages: 11 } | |
# } | |
ActivitiesForeignAPI.new(@filters).call | |
end | |
end | |
filters = {from: 'Wed, 29 Sep 2021', to: 'Fri, 29 Oct 2021'} | |
Dashboard.new(filters).call | |
# => { | |
# "John Doe"=>{:calls=>3, :messages=>8}, | |
# "Richard Roe"=>{:calls=>14, :messages=>3}, | |
# "Janie Doe"=>{:calls=>4, :messages=>11} | |
# } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment