Skip to content

Instantly share code, notes, and snippets.

@pxotox
Last active April 15, 2019 18:45
Show Gist options
  • Save pxotox/3d694aee5fc5bc3e8ebe6cdc908c6d5a to your computer and use it in GitHub Desktop.
Save pxotox/3d694aee5fc5bc3e8ebe6cdc908c6d5a to your computer and use it in GitHub Desktop.
CrossKnowledge - Technical challenge (PHP)

Technical challenge

Here is the description of what you'll need to implement and answer on this technical challenge.

Challenges

You'll answer the 4 following challenges.

1. Cache function

Implement a function (on the same module - request.php) to cache requests preventing unecessary calls. You may use this Redis module as a cache service.

Note: You may use any PHP version, including PHP7+.

2. Date formatting

Implement a JavaScript code (on the same file - date-format.html) that replaces the date value of all elements (that have js-date-format class) with the value of the time passed from now (new Date()). Use the following format:

  • 1 second ago OR X seconds ago
  • 1 minute ago OR X minutes ago
  • 1 hour ago OR X hours ago
  • Date in ISO format (original format)

Example:

Working example

Note: You should use ecmascript 6 features but may not use any framework or add any dependency.

3. Apply style

Implement the CSS code to make the component on component.html look like the desired mockup below.

Mockup:

Desired mockup

Note #1: You should use new CSS features and add classes as you need, but try not to change the HTML structure.

Note #2: We recommend you try using BEM.

4. Question

Send us your answer for the following question:

What are the main HTTP verbs used in REST applications and what are they meant for?

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>CrossKnowledge - Code challenge</title>
<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500" rel="stylesheet">
</head>
<body>
<article>
<header>
<div>
<div>
Avengers: Infinity War
</div>
<div>
156 minutes
</div>
</div>
<div>
85% <img src="https://www.rottentomatoes.com/assets/pizza-pie/images/icons/global/cf-lg.3c29eff04f2.png" alt="">
</div>
</header>
<div>
<img src="https://resizing.flixster.com/Xjz2VShAGgZ6Z5AaSxUcgw4MRNo=/fit-in/200x296.2962962962963/v1.bTsxMjcwMDQ5MztqOzE4MDU2OzEyMDA7MTY4ODsyNTAw">
<a href="https://www.rottentomatoes.com/m/avengers_infinity_war" target="_blank">
Check review
</a>
</div>
<footer>
<p>
An unprecedented cinematic journey ten years in the making and spanning the entire Marvel Cinematic Universe, Marvel Studios' "Avengers: Infinity War" brings to the screen the ultimate, deadliest showdown of all time. The Avengers and their Super Hero allies must be willing to sacrifice all in an attempt to defeat the powerful Thanos before his blitz of devastation and ruin puts an end to the universe.
</p>
</footer>
</article>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>CrossKnowledge - Code challenge</title>
</head>
<body>
<script>
// This will create elements for testing every second
// Don't change this code if possible
(() => {
let elementsCount = 100
for (i = 0; i < elementsCount; i++) {
setTimeout(() => {
let el = document.createElement("div")
el.className = 'js-date-format'
el.innerHTML = (new Date()).toISOString()
document.body.appendChild(el)
}, i * 1000)
}
})();
</script>
</body>
</html>
<?php
class SimpleJsonRequest
{
private static function makeRequest(string $method, string $url, array $parameters = null, array $data = null)
{
$opts = [
'http' => [
'method' => $method,
'header' => 'Content-type: application/json',
'content' => $data ? json_encode($data) : null
]
];
$url .= ($parameters ? '?' . http_build_query($parameters) : '');
return file_get_contents($url, false, stream_context_create($opts));
}
public static function get(string $url, array $parameters = null)
{
return json_decode(self::makeRequest('GET', $url, $parameters));
}
public static function post(string $url, array $parameters = null, array $data)
{
return json_decode(self::makeRequest('POST', $url, $parameters, $data));
}
public static function put(string $url, array $parameters = null, array $data)
{
return json_decode(self::makeRequest('PUT', $url, $parameters, $data));
}
public static function patch(string $url, array $parameters = null, array $data)
{
return json_decode(self::makeRequest('PATCH', $url, $parameters, $data));
}
public static function delete(string $url, array $parameters = null, array $data = null)
{
return json_decode(self::makeRequest('DELETE', $url, $parameters, $data));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment