Browse files

Note where external services are being used to potentially mock out

  • Loading branch information...
edgenard committed May 12, 2018
1 parent 50936a9 commit 67b206820e5571329e9458e22d8d8a1d29d80789
@@ -1,45 +1,50 @@
class VideoService
class VideoService
def video_list
# NOTE: External service/Maybe

This comment has been minimized.


medwards1771 May 15, 2018


You're marking several lines of code as eternal services here. Why? What makes that this stuff an "external service" ?

video_list_json ='videos.json')
# Read a json file and store the contents in an instance variable
@video_list = JSON.parse('videos.json'))
@video_list = JSON.parse(video_list_json)
# Get all the ids of the stored in the contents and JSON file that was just
ids ={|v| v['youtubeID']}
# Get authorized with Google to be allowed to make API calls
# NOTE: External Service
client =
token_key: 'api-youtube',
application_name: 'Gateway Youtube Example',
application_version: '0.1'
# Not sure what this does, but I think its a way to tell youtube what I'm asking for
# NOTE: External Service
youtube = client.discovered_api('youtube', 'v3')
# Send the request to Youtube passing in the ids of the videos from out Json file and telling which
# data we want from youtube. We want a video snippet, contentDetails(probably a description)
# and statistics about the video
request = {
api_method: youtube.videos.list, # This looks like there are many api_methods and the one
api_method: youtube.videos.list,# NOTE: External Service # This looks like there are many api_methods and the one
# we are asking for is the one that returns a list of videos.
parameters: {
id: ids.join(","),
part: 'snippet, contentDetails, statistics',
# Get the body of the response and parse it with JSON.parse to make into a Ruby hash
# NOTE: External Service
response = JSON.parse(client.execute!(request).body)
# Go through the array of ids
ids.each do |id|
ids.each do |id|
# Find the video object that matches the this specific id
video = @video_list.find{|v| id == v['youtubeID']}
# Go through the items from the response and find one that matches the id
# Go through the items from the response and find one that matches the id
youtube_record = response['items'].find{|v| id == v['id']}
# Update the views key in the video object(the one we got from our JSON file)
# with the viewCount from the response we got from youtube.
video['views'] = youtube_record['statistics']['viewCount'].to_i
# Find out how many days the video has been live from the response from youtube
days_available = - Date.parse(youtube_record['snippet']['publishedAt'])
# Update the monthly views of the video
video['monthlyViews'] = video['views'] * 365.0 / days_available / 12
video['monthlyViews'] = video['views'] * 365.0 / days_available / 12
# return the updated video list in a JSON dump
return JSON.dump(@video_list)
@@ -0,0 +1,7 @@
require 'test/unit'
require './youtube_video_list'

class VideoServiceTest < Test::Unit::TestCase


0 comments on commit 67b2068

Please sign in to comment.