Skip to content

Instantly share code, notes, and snippets.

@dgorodnichy
Last active October 29, 2021 14:03
Show Gist options
  • Save dgorodnichy/96ec88a913f72a0c67e7cc7aff707503 to your computer and use it in GitHub Desktop.
Save dgorodnichy/96ec88a913f72a0c67e7cc7aff707503 to your computer and use it in GitHub Desktop.
Facade pattern
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