{"action":"created","comment":{"url":"https://api.github.com/repos/ElixirCourse/blog/pulls/comments/184057692","pull_request_review_id":115174699,"id":184057692,"diff_hunk":"@@ -0,0 +1,547 @@\n+---\n+title_image_path: flow.jpg\n+category: Програма\n+created_at: 2018-04-17T10:00:00\n+tags:\n+  - elixir\n+  - basics\n+  - erlang\n+  - beam\n+  - functional programming\n+  - pattern matching\n+  - case\n+  - cond\n+  - if\n+  - conditionals\n+---\n+\n+# Съпоставяне на образци и управляващи оператори\n+\n+Какво означава 'функционален език за програмиране'?\n+Има много мнения по въпроса, но почти всеки признава *Haskell* за функционален език.\n+\n+Истината е, че има множество от, да ги наречем, симптоми на функционалните езици за програмиране.\n+Някои от тях са по-важни, други - не чак толкова, но бихме могли да кажем, че колкото повече такива симптоми има даден език, той е толкова по-функционален.\n+\n+Elixir върви в един или повече процеси, които като структури и начин на работа не са обвързани с тези симптоми, но това, което се изпълнява в тях е написано на език за програмиране.\n+Във всеки такъв процес върви последователна логика, написана на функционален език.\n+Този език е основата на Elixir и същевременно е Elixir. Също така е функционален език.\n+\n+В тази публикация ще обсъдим два от горе-споменатите симптоми на функционалните езици : *pattern matching* и *immutability*, като споменем и демонстрираме някои от другите.\n+Също така ще разгледаме какви други начини има за разделяне на логиката на програмата ни.\n+\n+## Elixir като функционален език\n+\n+Нека да изброим някои от симптомите за които говорихме и които присъстват в Elixir:\n+\n+ * Функциите са *first-class* стойности. Кодът представлява композирани функции, абстракции се постигат главно чрез функции от по-висок ред.\n+ * Контролирани странични ефекти. В Elixir IO операциите са имплементирани чрез комуникацията между процеси. Нищо в текущият процес не се променя, той просто изпраща съобщение някъде.\n+ * Всичко е израз. Всяка конструкция връща стойност. Винаги.\n+ * Няма цикли - повторението и пазенето на състояние се извършва чрез рекурсия.\n+ * Всичко е *immutable*.\n+ * *Pattern matching* - данни могат да се конструират и деконструират в зависимост от тяхна структура. Различни варианти на една функция могат да се дефинират в зависимост от данните, които приема.\n+\n+Има и други подобни симптоми, но тези са достатъчни засега.\n+Нека да разгледаме *pattern matching*-а, който Elixir ни предоставя.\n+\n+## Pattern matching\n+\n+Преводът на *pattern matching* от Английски на Български език е *'съпоставяне на образци'*.\n+Както сигурно си мислите - звучи странно и някак далечно.\n+За конспекта на курса по Elixir беше нужно различните термини да са на Български, затова от време на време ще го ползваме в заглавия и под-заглавия, но когато говорим за него ще ползваме просто *съпоставяне*, *matching* или *pattern matching*.\n+\n+### Базова употреба\n+\n+*Pattern matching*-ът е една от най-важните и основни особености на Elixir.\n+Операторът `=` се нарича *match operator*.\n+Можем да го сравним с знака *равно* в математиката.\n+Използвайки го, превръщаме целия израз в уравнение, в което сравняваме лявата с дясната страна.\n+Ако сравнението е успешно се връща стойността на това уравнение, ако не - има грешка.\n+\n+От казаното по-горе, следва, че можем да напишем следното:\n+\n+```elixir\n+4 = 4\n+#=> 4\n+```\n+\n+В този израз, се съпоставят лявата и дясната страна, тъй като са еднакви, съпоставянето е успешно и израза връща общата стойност на двете страни.\n+Ако сега напишем следното:\n+\n+```elixir\n+x = 5\n+#=> 5\n+\n+x\n+#=> 5\n+```\n+\n+Този израз отново съпоставя лявата и дясната страна. Тук имаме променлива и *match операторът* прави всичко възможно съпоставянето да е успешно.\n+Поради тази причина при съпоставката, променливата `x` започва да има стойност `5` и имаме *match*. Стойността на израза е `5` и като допълнителен ефект променливата `x` има стойност `5`.\n+\n+Сега следната съпоставка ще е сполучлива:\n+\n+```elixir\n+5 = x\n+#=> 5\n+```\n+\n+Двете страни на израза имат една и съща стойност, както и преди, изразът връща тази стойност.\n+Ако напишем следното:\n+\n+```elixir\n+3 = x\n+#=> ** (MatchError) no match of right hand side value: 5\n+```\n+\n+Имаме грешка : `MatchError` или грешка при съпоставяне.\n+Това е така, защото *match операторът* присвоява стойност на променлива само ако тя е от лявата му страна.\n+В случая `x` е от дясната страна и се съпоставя неговата стойност (`5`) с `3`, което не е успешен *match*.\n+\n+Важно следствие от начина по който работи *mattern matching*-а, е че той може да се използва за проверка на очаквани стойности.\n+Пример:\n+\n+```elixir\n+{:ok, content} = File.read(\"some_file.txt\")\n+```\n+\n+Няма защо да се занимаваме да хвърляме грешки, ако нещо не се случи както очакваме в програмата ни.\n+Ще пишем нашите очаквания от левите страни на изразите, съставящи програмата.\n+\n+### Задаване на стойности на променливи\n+\n+Нека обобщим какво научихме за *match оператора* до тук:\n+\n+  * С него се дефинират променливи.\n+  * С него могат да се правят проверки дали дадена променлива има дадена стойност.\n+\n+Променливите в Elixir са от типа на стойността си.\n+Те не могат просто да се декларират без да им се зададе стойност.","path":"posts/materials/pattern_matching_and_control_flow.md","position":119,"original_position":119,"commit_id":"dfc2e0a95fd566e6fa6a66734672eb9d88905fd8","original_commit_id":"dfc2e0a95fd566e6fa6a66734672eb9d88905fd8","user":{"login":"IvanIvanoff","id":6518376,"avatar_url":"https://avatars3.githubusercontent.com/u/6518376?v=4","gravatar_id":"","url":"https://api.github.com/users/IvanIvanoff","html_url":"https://github.com/IvanIvanoff","followers_url":"https://api.github.com/users/IvanIvanoff/followers","following_url":"https://api.github.com/users/IvanIvanoff/following{/other_user}","gists_url":"https://api.github.com/users/IvanIvanoff/gists{/gist_id}","starred_url":"https://api.github.com/users/IvanIvanoff/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/IvanIvanoff/subscriptions","organizations_url":"https://api.github.com/users/IvanIvanoff/orgs","repos_url":"https://api.github.com/users/IvanIvanoff/repos","events_url":"https://api.github.com/users/IvanIvanoff/events{/privacy}","received_events_url":"https://api.github.com/users/IvanIvanoff/received_events","type":"User","site_admin":false},"body":"Може малко инфо да се добави:\r\nАко се опитате да \"декларирате\" променлива без да ѝ зададете стойност, то това се интерпретира от компилатора като извикване на функция:\r\n```\r\niex(1)> x\r\n** (CompileError) iex:1: undefined function x/0\r\n\r\niex(1)> x = 4\r\n4\r\niex(2)> x\r\n4\r\n```","created_at":"2018-04-25T13:27:47Z","updated_at":"2018-04-25T13:27:47Z","html_url":"https://github.com/ElixirCourse/blog/pull/20#discussion_r184057692","pull_request_url":"https://api.github.com/repos/ElixirCourse/blog/pulls/20","author_association":"OWNER","_links":{"self":{"href":"https://api.github.com/repos/ElixirCourse/blog/pulls/comments/184057692"},"html":{"href":"https://github.com/ElixirCourse/blog/pull/20#discussion_r184057692"},"pull_request":{"href":"https://api.github.com/repos/ElixirCourse/blog/pulls/20"}}},"pull_request":{"url":"https://api.github.com/repos/ElixirCourse/blog/pulls/20","id":183474135,"html_url":"https://github.com/ElixirCourse/blog/pull/20","diff_url":"https://github.com/ElixirCourse/blog/pull/20.diff","patch_url":"https://github.com/ElixirCourse/blog/pull/20.patch","issue_url":"https://api.github.com/repos/ElixirCourse/blog/issues/20","number":20,"state":"open","locked":false,"title":"Add pattern matching, control flow and maps.","user":{"login":"meddle0x53","id":2232981,"avatar_url":"https://avatars1.githubusercontent.com/u/2232981?v=4","gravatar_id":"","url":"https://api.github.com/users/meddle0x53","html_url":"https://github.com/meddle0x53","followers_url":"https://api.github.com/users/meddle0x53/followers","following_url":"https://api.github.com/users/meddle0x53/following{/other_user}","gists_url":"https://api.github.com/users/meddle0x53/gists{/gist_id}","starred_url":"https://api.github.com/users/meddle0x53/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/meddle0x53/subscriptions","organizations_url":"https://api.github.com/users/meddle0x53/orgs","repos_url":"https://api.github.com/users/meddle0x53/repos","events_url":"https://api.github.com/users/meddle0x53/events{/privacy}","received_events_url":"https://api.github.com/users/meddle0x53/received_events","type":"User","site_admin":false},"body":"","created_at":"2018-04-23T15:33:34Z","updated_at":"2018-04-25T13:27:47Z","closed_at":null,"merged_at":null,"merge_commit_sha":"880829349817acb55867289faaccc92c4c3b6e8c","assignee":{"login":"meddle0x53","id":2232981,"avatar_url":"https://avatars1.githubusercontent.com/u/2232981?v=4","gravatar_id":"","url":"https://api.github.com/users/meddle0x53","html_url":"https://github.com/meddle0x53","followers_url":"https://api.github.com/users/meddle0x53/followers","following_url":"https://api.github.com/users/meddle0x53/following{/other_user}","gists_url":"https://api.github.com/users/meddle0x53/gists{/gist_id}","starred_url":"https://api.github.com/users/meddle0x53/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/meddle0x53/subscriptions","organizations_url":"https://api.github.com/users/meddle0x53/orgs","repos_url":"https://api.github.com/users/meddle0x53/repos","events_url":"https://api.github.com/users/meddle0x53/events{/privacy}","received_events_url":"https://api.github.com/users/meddle0x53/received_events","type":"User","site_admin":false},"assignees":[{"login":"meddle0x53","id":2232981,"avatar_url":"https://avatars1.githubusercontent.com/u/2232981?v=4","gravatar_id":"","url":"https://api.github.com/users/meddle0x53","html_url":"https://github.com/meddle0x53","followers_url":"https://api.github.com/users/meddle0x53/followers","following_url":"https://api.github.com/users/meddle0x53/following{/other_user}","gists_url":"https://api.github.com/users/meddle0x53/gists{/gist_id}","starred_url":"https://api.github.com/users/meddle0x53/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/meddle0x53/subscriptions","organizations_url":"https://api.github.com/users/meddle0x53/orgs","repos_url":"https://api.github.com/users/meddle0x53/repos","events_url":"https://api.github.com/users/meddle0x53/events{/privacy}","received_events_url":"https://api.github.com/users/meddle0x53/received_events","type":"User","site_admin":false}],"requested_reviewers":[{"login":"NJichev","id":6959211,"avatar_url":"https://avatars2.githubusercontent.com/u/6959211?v=4","gravatar_id":"","url":"https://api.github.com/users/NJichev","html_url":"https://github.com/NJichev","followers_url":"https://api.github.com/users/NJichev/followers","following_url":"https://api.github.com/users/NJichev/following{/other_user}","gists_url":"https://api.github.com/users/NJichev/gists{/gist_id}","starred_url":"https://api.github.com/users/NJichev/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/NJichev/subscriptions","organizations_url":"https://api.github.com/users/NJichev/orgs","repos_url":"https://api.github.com/users/NJichev/repos","events_url":"https://api.github.com/users/NJichev/events{/privacy}","received_events_url":"https://api.github.com/users/NJichev/received_events","type":"User","site_admin":false},{"login":"Andreshk","id":15063878,"avatar_url":"https://avatars2.githubusercontent.com/u/15063878?v=4","gravatar_id":"","url":"https://api.github.com/users/Andreshk","html_url":"https://github.com/Andreshk","followers_url":"https://api.github.com/users/Andreshk/followers","following_url":"https://api.github.com/users/Andreshk/following{/other_user}","gists_url":"https://api.github.com/users/Andreshk/gists{/gist_id}","starred_url":"https://api.github.com/users/Andreshk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Andreshk/subscriptions","organizations_url":"https://api.github.com/users/Andreshk/orgs","repos_url":"https://api.github.com/users/Andreshk/repos","events_url":"https://api.github.com/users/Andreshk/events{/privacy}","received_events_url":"https://api.github.com/users/Andreshk/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/ElixirCourse/blog/pulls/20/commits","review_comments_url":"https://api.github.com/repos/ElixirCourse/blog/pulls/20/comments","review_comment_url":"https://api.github.com/repos/ElixirCourse/blog/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ElixirCourse/blog/issues/20/comments","statuses_url":"https://api.github.com/repos/ElixirCourse/blog/statuses/dfc2e0a95fd566e6fa6a66734672eb9d88905fd8","head":{"label":"ElixirCourse:add-pattern-matching-control-flow-and-maps","ref":"add-pattern-matching-control-flow-and-maps","sha":"dfc2e0a95fd566e6fa6a66734672eb9d88905fd8","user":{"login":"ElixirCourse","id":24356130,"avatar_url":"https://avatars0.githubusercontent.com/u/24356130?v=4","gravatar_id":"","url":"https://api.github.com/users/ElixirCourse","html_url":"https://github.com/ElixirCourse","followers_url":"https://api.github.com/users/ElixirCourse/followers","following_url":"https://api.github.com/users/ElixirCourse/following{/other_user}","gists_url":"https://api.github.com/users/ElixirCourse/gists{/gist_id}","starred_url":"https://api.github.com/users/ElixirCourse/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ElixirCourse/subscriptions","organizations_url":"https://api.github.com/users/ElixirCourse/orgs","repos_url":"https://api.github.com/users/ElixirCourse/repos","events_url":"https://api.github.com/users/ElixirCourse/events{/privacy}","received_events_url":"https://api.github.com/users/ElixirCourse/received_events","type":"Organization","site_admin":false},"repo":{"id":81982352,"name":"blog","full_name":"ElixirCourse/blog","owner":{"login":"ElixirCourse","id":24356130,"avatar_url":"https://avatars0.githubusercontent.com/u/24356130?v=4","gravatar_id":"","url":"https://api.github.com/users/ElixirCourse","html_url":"https://github.com/ElixirCourse","followers_url":"https://api.github.com/users/ElixirCourse/followers","following_url":"https://api.github.com/users/ElixirCourse/following{/other_user}","gists_url":"https://api.github.com/users/ElixirCourse/gists{/gist_id}","starred_url":"https://api.github.com/users/ElixirCourse/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ElixirCourse/subscriptions","organizations_url":"https://api.github.com/users/ElixirCourse/orgs","repos_url":"https://api.github.com/users/ElixirCourse/repos","events_url":"https://api.github.com/users/ElixirCourse/events{/privacy}","received_events_url":"https://api.github.com/users/ElixirCourse/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ElixirCourse/blog","description":"Blog for the Elixir Course","fork":false,"url":"https://api.github.com/repos/ElixirCourse/blog","forks_url":"https://api.github.com/repos/ElixirCourse/blog/forks","keys_url":"https://api.github.com/repos/ElixirCourse/blog/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ElixirCourse/blog/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ElixirCourse/blog/teams","hooks_url":"https://api.github.com/repos/ElixirCourse/blog/hooks","issue_events_url":"https://api.github.com/repos/ElixirCourse/blog/issues/events{/number}","events_url":"https://api.github.com/repos/ElixirCourse/blog/events","assignees_url":"https://api.github.com/repos/ElixirCourse/blog/assignees{/user}","branches_url":"https://api.github.com/repos/ElixirCourse/blog/branches{/branch}","tags_url":"https://api.github.com/repos/ElixirCourse/blog/tags","blobs_url":"https://api.github.com/repos/ElixirCourse/blog/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ElixirCourse/blog/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ElixirCourse/blog/git/refs{/sha}","trees_url":"https://api.github.com/repos/ElixirCourse/blog/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ElixirCourse/blog/statuses/{sha}","languages_url":"https://api.github.com/repos/ElixirCourse/blog/languages","stargazers_url":"https://api.github.com/repos/ElixirCourse/blog/stargazers","contributors_url":"https://api.github.com/repos/ElixirCourse/blog/contributors","subscribers_url":"https://api.github.com/repos/ElixirCourse/blog/subscribers","subscription_url":"https://api.github.com/repos/ElixirCourse/blog/subscription","commits_url":"https://api.github.com/repos/ElixirCourse/blog/commits{/sha}","git_commits_url":"https://api.github.com/repos/ElixirCourse/blog/git/commits{/sha}","comments_url":"https://api.github.com/repos/ElixirCourse/blog/comments{/number}","issue_comment_url":"https://api.github.com/repos/ElixirCourse/blog/issues/comments{/number}","contents_url":"https://api.github.com/repos/ElixirCourse/blog/contents/{+path}","compare_url":"https://api.github.com/repos/ElixirCourse/blog/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ElixirCourse/blog/merges","archive_url":"https://api.github.com/repos/ElixirCourse/blog/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ElixirCourse/blog/downloads","issues_url":"https://api.github.com/repos/ElixirCourse/blog/issues{/number}","pulls_url":"https://api.github.com/repos/ElixirCourse/blog/pulls{/number}","milestones_url":"https://api.github.com/repos/ElixirCourse/blog/milestones{/number}","notifications_url":"https://api.github.com/repos/ElixirCourse/blog/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ElixirCourse/blog/labels{/name}","releases_url":"https://api.github.com/repos/ElixirCourse/blog/releases{/id}","deployments_url":"https://api.github.com/repos/ElixirCourse/blog/deployments","created_at":"2017-02-14T19:43:51Z","updated_at":"2018-04-15T17:56:55Z","pushed_at":"2018-04-23T15:33:35Z","git_url":"git://github.com/ElixirCourse/blog.git","ssh_url":"git@github.com:ElixirCourse/blog.git","clone_url":"https://github.com/ElixirCourse/blog.git","svn_url":"https://github.com/ElixirCourse/blog","homepage":null,"size":7629,"stargazers_count":11,"watchers_count":11,"language":"CSS","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":7,"mirror_url":null,"archived":false,"open_issues_count":1,"license":null,"forks":7,"open_issues":1,"watchers":11,"default_branch":"master"}},"base":{"label":"ElixirCourse:master","ref":"master","sha":"ace89981d05ddc64b39f4c3c51fc27bec05311d9","user":{"login":"ElixirCourse","id":24356130,"avatar_url":"https://avatars0.githubusercontent.com/u/24356130?v=4","gravatar_id":"","url":"https://api.github.com/users/ElixirCourse","html_url":"https://github.com/ElixirCourse","followers_url":"https://api.github.com/users/ElixirCourse/followers","following_url":"https://api.github.com/users/ElixirCourse/following{/other_user}","gists_url":"https://api.github.com/users/ElixirCourse/gists{/gist_id}","starred_url":"https://api.github.com/users/ElixirCourse/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ElixirCourse/subscriptions","organizations_url":"https://api.github.com/users/ElixirCourse/orgs","repos_url":"https://api.github.com/users/ElixirCourse/repos","events_url":"https://api.github.com/users/ElixirCourse/events{/privacy}","received_events_url":"https://api.github.com/users/ElixirCourse/received_events","type":"Organization","site_admin":false},"repo":{"id":81982352,"name":"blog","full_name":"ElixirCourse/blog","owner":{"login":"ElixirCourse","id":24356130,"avatar_url":"https://avatars0.githubusercontent.com/u/24356130?v=4","gravatar_id":"","url":"https://api.github.com/users/ElixirCourse","html_url":"https://github.com/ElixirCourse","followers_url":"https://api.github.com/users/ElixirCourse/followers","following_url":"https://api.github.com/users/ElixirCourse/following{/other_user}","gists_url":"https://api.github.com/users/ElixirCourse/gists{/gist_id}","starred_url":"https://api.github.com/users/ElixirCourse/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ElixirCourse/subscriptions","organizations_url":"https://api.github.com/users/ElixirCourse/orgs","repos_url":"https://api.github.com/users/ElixirCourse/repos","events_url":"https://api.github.com/users/ElixirCourse/events{/privacy}","received_events_url":"https://api.github.com/users/ElixirCourse/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ElixirCourse/blog","description":"Blog for the Elixir Course","fork":false,"url":"https://api.github.com/repos/ElixirCourse/blog","forks_url":"https://api.github.com/repos/ElixirCourse/blog/forks","keys_url":"https://api.github.com/repos/ElixirCourse/blog/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ElixirCourse/blog/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ElixirCourse/blog/teams","hooks_url":"https://api.github.com/repos/ElixirCourse/blog/hooks","issue_events_url":"https://api.github.com/repos/ElixirCourse/blog/issues/events{/number}","events_url":"https://api.github.com/repos/ElixirCourse/blog/events","assignees_url":"https://api.github.com/repos/ElixirCourse/blog/assignees{/user}","branches_url":"https://api.github.com/repos/ElixirCourse/blog/branches{/branch}","tags_url":"https://api.github.com/repos/ElixirCourse/blog/tags","blobs_url":"https://api.github.com/repos/ElixirCourse/blog/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ElixirCourse/blog/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ElixirCourse/blog/git/refs{/sha}","trees_url":"https://api.github.com/repos/ElixirCourse/blog/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ElixirCourse/blog/statuses/{sha}","languages_url":"https://api.github.com/repos/ElixirCourse/blog/languages","stargazers_url":"https://api.github.com/repos/ElixirCourse/blog/stargazers","contributors_url":"https://api.github.com/repos/ElixirCourse/blog/contributors","subscribers_url":"https://api.github.com/repos/ElixirCourse/blog/subscribers","subscription_url":"https://api.github.com/repos/ElixirCourse/blog/subscription","commits_url":"https://api.github.com/repos/ElixirCourse/blog/commits{/sha}","git_commits_url":"https://api.github.com/repos/ElixirCourse/blog/git/commits{/sha}","comments_url":"https://api.github.com/repos/ElixirCourse/blog/comments{/number}","issue_comment_url":"https://api.github.com/repos/ElixirCourse/blog/issues/comments{/number}","contents_url":"https://api.github.com/repos/ElixirCourse/blog/contents/{+path}","compare_url":"https://api.github.com/repos/ElixirCourse/blog/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ElixirCourse/blog/merges","archive_url":"https://api.github.com/repos/ElixirCourse/blog/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ElixirCourse/blog/downloads","issues_url":"https://api.github.com/repos/ElixirCourse/blog/issues{/number}","pulls_url":"https://api.github.com/repos/ElixirCourse/blog/pulls{/number}","milestones_url":"https://api.github.com/repos/ElixirCourse/blog/milestones{/number}","notifications_url":"https://api.github.com/repos/ElixirCourse/blog/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ElixirCourse/blog/labels{/name}","releases_url":"https://api.github.com/repos/ElixirCourse/blog/releases{/id}","deployments_url":"https://api.github.com/repos/ElixirCourse/blog/deployments","created_at":"2017-02-14T19:43:51Z","updated_at":"2018-04-15T17:56:55Z","pushed_at":"2018-04-23T15:33:35Z","git_url":"git://github.com/ElixirCourse/blog.git","ssh_url":"git@github.com:ElixirCourse/blog.git","clone_url":"https://github.com/ElixirCourse/blog.git","svn_url":"https://github.com/ElixirCourse/blog","homepage":null,"size":7629,"stargazers_count":11,"watchers_count":11,"language":"CSS","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":7,"mirror_url":null,"archived":false,"open_issues_count":1,"license":null,"forks":7,"open_issues":1,"watchers":11,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/ElixirCourse/blog/pulls/20"},"html":{"href":"https://github.com/ElixirCourse/blog/pull/20"},"issue":{"href":"https://api.github.com/repos/ElixirCourse/blog/issues/20"},"comments":{"href":"https://api.github.com/repos/ElixirCourse/blog/issues/20/comments"},"review_comments":{"href":"https://api.github.com/repos/ElixirCourse/blog/pulls/20/comments"},"review_comment":{"href":"https://api.github.com/repos/ElixirCourse/blog/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ElixirCourse/blog/pulls/20/commits"},"statuses":{"href":"https://api.github.com/repos/ElixirCourse/blog/statuses/dfc2e0a95fd566e6fa6a66734672eb9d88905fd8"}},"author_association":"OWNER"}}
{"actor":{"display_login":"IvanIvanoff"}}