{"id":3566,"date":"2022-01-10T15:47:14","date_gmt":"2022-01-10T15:47:14","guid":{"rendered":"http:\/\/the-codest.localhost\/blog\/ruby-on-rails-modularization-with-packwerk-episode-ii\/"},"modified":"2026-04-28T14:05:25","modified_gmt":"2026-04-28T14:05:25","slug":"ruby-on-rails-modularisering-med-packwerk-thattur-ii","status":"publish","type":"post","link":"https:\/\/thecodest.co\/is\/blog\/ruby-on-rails-modularization-with-packwerk-episode-ii\/","title":{"rendered":"Ruby on Rails m\u00f3d\u00falger\u00f0 me\u00f0 Packwerk Episode II"},"content":{"rendered":"<h2 class=\"wp-block-heading\">Ums\u00f3kn sem pakki<\/h2>\n\n\n\n<p>A\u00f0fer\u00f0in vi\u00f0 a\u00f0 gera forriti\u00f0 okkar m\u00f3dulegt felst \u00ed \u00fev\u00ed a\u00f0 umbreyta \u00f6llu forritinu \u00ed pakka.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">B\u00fa\u00f0u til uppbygginguna<\/h3>\n\n\n\n<p>\u00cd fyrsta lagi \u00feurfum vi\u00f0 a\u00f0 b\u00faa til <code>app\/pakkar<\/code> m\u00f6ppu \u00fear sem vi\u00f0 munum setja \u00f6ll pakkana okkar. Til a\u00f0 einangra pakkana okkar ver\u00f0um vi\u00f0 a\u00f0 a\u00f0skilja hvern og einn <strong>MVC-hugmynd<\/strong> \u00ed einni m\u00f6ppu. A\u00f0 taka <strong>K\u00f3\u00f0aflokkun <a href=\"https:\/\/thecodest.co\/is\/dictionary\/why-do-projects-fail\/\">verkefni<\/a><\/strong> Sem d\u00e6mi munum vi\u00f0 hafa eitthva\u00f0 eins og eftirfarandi mynd.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/app\/uploads\/2024\/05\/2.png\" alt=\"Uppbygging pakka \" title=\"D\u00e6mi um uppbyggingu pakka\"\/><\/figure>\n\n\n\n<p>Ef vi\u00f0 reynum a\u00f0 keyra net\u00fej\u00f3ninn, mun hann ekki finna fastast\u00f6\u00f0urnar. \u00deess vegna \u00feurfum vi\u00f0 a\u00f0 b\u00e6ta vi\u00f0 einni stillil\u00ednu \u00ed okkar <code>forrit.rb<\/code><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"ruby\" class=\"language-ruby\">config.paths.add 'app\/packages', glob: '*\/{*,*\/concerns}', eager_load:true<\/code><\/pre>\n\n\n\n<p>N\u00fa virkar forriti\u00f0 en \u00fea\u00f0 finnur ekki \u00fats\u00fdnin, svo vi\u00f0 \u00feurfum a\u00f0 b\u00e6ta vi\u00f0 annarri stillil\u00ednu \u00ed okkar <code>forritunarstj\u00f3ri_ums\u00f3knar.rb<\/code><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"ruby\" class=\"language-ruby\">B\u00e6ta vi\u00f0 s\u00fdnilei\u00f0 (Dir.glob(<a href=\"https:\/\/thecodest.co\/is\/blog\/ways-to-increase-your-rails-performance\/\">Relsar<\/a>.root.join('app\/packages\/*\/views')))<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">B\u00fa\u00f0u til pakkana<\/h3>\n\n\n\n<p>Uppbygging okkar er tilb\u00fain, svo n\u00fa getum vi\u00f0 byrja\u00f0 a\u00f0 b\u00faa til pakkana. Til \u00feess a\u00f0 gera \u00fea\u00f0 \u00feurfum vi\u00f0 a\u00f0eins a\u00f0 b\u00e6ta vi\u00f0 a<code>pakki.yml<\/code> til hvers m\u00f6ppu me\u00f0 eftirfarandi stillingu:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"ruby\" class=\"language-ruby\">Tryggja fri\u00f0helgi: falskt\nTryggja h\u00e1\u00f0arkr\u00f6fur: satt<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/app\/uploads\/2024\/05\/1.png\" alt=\"pakki.yml\" title=\"package.yml d\u00e6mi\"\/><\/figure>\n\n\n\n<p><code>Tryggja fri\u00f0helgi<\/code>gefur <a href=\"https:\/\/thecodest.co\/is\/blog\/why-us-companies-are-opting-for-polish-developers\/\">okkur<\/a> m\u00f6guleikann \u00e1 a\u00f0 einangra allar fastast\u00e6r\u00f0ir pakkans og vinna me\u00f0 opinbera <a href=\"https:\/\/thecodest.co\/is\/blog\/compare-staff-augmentation-firms-that-excel-in-api-team-staffing-for-financial-technology-projects\/\">forritaskil<\/a>. Til a\u00f0 birta almennar fastast\u00e6r\u00f0ir \u00feurfum vi\u00f0 a\u00f0 b\u00e6ta fastast\u00e6r\u00f0unum inn, til d\u00e6mis&nbsp;<code>pakkar\/notendur\/app\/opinbert.<\/code>Fyrir n\u00fana \u00e6tlum vi\u00f0 a\u00f0 stilla \u00feessa konfigurat\u00edu \u00e1 <em> rangt<\/em>.<\/p>\n\n\n\n<p><code>Innlei\u00f0a h\u00e1\u00f0leika<\/code> Mun framfylgja h\u00e1\u00f0un pakka og athuga allar f\u00f6stu tilv\u00edsanir. Ef h\u00e1\u00f0un er ekki sk\u00fdrt skilgreind, ver\u00f0ur \u00fea\u00f0 brot \u00e1 m\u00f6rkunum.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Sta\u00f0festa pakka\u00adkerfi\u00f0<\/h3>\n\n\n\n<p><strong>Pakkaun<\/strong> Stofna\u00f0i vi\u00f0mi\u00f0 sem vi\u00f0 \u00feurfum a\u00f0 fylgja til a\u00f0 hafa gilt pakka kerfi. Vi\u00f0 getum byrja\u00f0 a\u00f0 keyra <code>packwerk sta\u00f0festa<\/code> \u00ed okkar leikjat\u00f6lvu.<\/p>\n\n\n\n<p>&nbsp;\u00deetta mun athuga m\u00f6ppufyrirkomulag okkar, <strong>Pakkauppsetning<\/strong>, og sj\u00e1lfhle\u00f0slu sl\u00f3\u00f0a skyndiminni.<\/p>\n\n\n\n<p>N\u00fana er ums\u00f3knin okkar \u00f3gild og vi\u00f0 ver\u00f0um a\u00f0 laga hle\u00f0slulei\u00f0irnar \u00ed<strong><code>pakkverk.yml<\/code>.<\/strong> Til a\u00f0 gera \u00feetta \u00feurfum vi\u00f0 a\u00f0eins a\u00f0 b\u00e6ta vi\u00f0 vantar sl\u00f3\u00f0irnar.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"ruby\" class=\"language-ruby\"># packwerk.yml\n\nload_paths:.\n.\n.\n\n\n# Notendur\n- app\/packages\/users\/controllers\n- app\/packages\/users\/models\n-  app\/packages\/users\/package.yml\n- app\/packages\/users\/views<\/code><\/pre>\n\n\n\n<p>\u00c1 \u00feessum t\u00edmapunkti erum vi\u00f0 tilb\u00fain a\u00f0 athuga brot \u00e1 m\u00f6rkum \u00ed forritinu okkar. Til a\u00f0 athuga brotin getum vi\u00f0 keyrt<code>packwerk uppf\u00e6rsla \u2013 \u00fareldingar<\/code> , \u00feetta skipun mun b\u00faa til <code>\u00dareltar tilv\u00edsanir.yml<\/code> Skr\u00e1 fyrir hvert pakka. \u00cd hverri skr\u00e1 finnum vi\u00f0 pakkanafn, tegund brots og sl\u00f3\u00f0 skr\u00e1arinnar. Me\u00f0 \u00f6llum \u00feessum uppl\u00fdsingum vitum vi\u00f0 hvar broti\u00f0 \u00e1 s\u00e9r sta\u00f0 og getum teki\u00f0 \u00e1kv\u00f6r\u00f0un um a\u00f0 leysa \u00fea\u00f0.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/app\/uploads\/2024\/05\/4.png\" alt=\"\u00dareltar tilv\u00edsanir.yml\" title=\"deprecated_references.yml d\u00e6mi\"\/><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"ruby\" class=\"language-ruby\"># deprecated_references.yml.\n\n.\n.\n\n\napp\/packages\/repos:\n  \"::Repo\":\n    violations:\n    - dependency\n    files:\n    - app\/packages\/users\/models\/user.rb<\/code><\/pre>\n\n\n\n<p>Me\u00f0 \u00fev\u00ed a\u00f0 taka d\u00e6mi\u00f0 munum vi\u00f0 l\u00fdsa hverjum hluta af \u00feeim uppl\u00fdsingum sem framleiddar eru.<br>eftir <strong>Pakkaun<\/strong>.<\/p>\n\n\n\n<p>\u2013 <code>app\/pakkar\/geymslar<\/code> &nbsp;\u2013 pakki \u00fear sem st\u00f6\u00f0ug brot er<br>fundi\u00f0.<\/p>\n\n\n\n<p>\u2013 <code>::Skuldabr\u00e9f<\/code> &nbsp;\u2013 sl\u00f3\u00f0 a\u00f0 skr\u00e1nni sem inniheldur brotna\u00f0u fastagildi\u00f0.<\/p>\n\n\n\n<p>\u2013 <code>h\u00e1\u00f0<\/code> &nbsp;\u2013 tegund brots, anna\u00f0hvort \u00e1 h\u00e1\u00f0un e\u00f0a fri\u00f0helgi einkal\u00edfs.<\/p>\n\n\n\n<p>\u2013 <code>app\/pakkar\/notendur\/l\u00edk\u00f6n\/notandi.rb<\/code> &nbsp;\u2013 sl\u00f3\u00f0 a\u00f0 skr\u00e1nni sem inniheldur brotna\u00f0u fastagildi\u00f0.<\/p>\n\n\n\n<p>Sem s\u00ed\u00f0asta skref \u00ed \u00feessum hluta skaltu ekki gleyma a\u00f0 b\u00e6ta n\u00fdju, framk\u00f6llu\u00f0u skr\u00e1arlei\u00f0unum vi\u00f0 <code>pakkverk.ym<\/code>l og keyra gildiskannanir aftur.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">S\u00fdning \u00e1 h\u00e1\u00f0 tengslum<\/h3>\n\n\n\n<p>Me\u00f0 \u00f6llum uppl\u00fdsingunum \u00ed package.yml og <code>\u00dareltar tilv\u00edsanir.yml<\/code>vi\u00f0 getum \u00fe\u00e1<br>S\u00fdndu h\u00e1\u00f0agraf\u00edk. Til \u00feess a\u00f0 gera \u00fea\u00f0 \u00feurfum vi\u00f0 a\u00f0 b\u00e6ta vi\u00f0 annarri gem; \u00ed \u00feessu tilfelli munum vi\u00f0 nota <a href=\"https:\/\/github.com\/mquan\/pocky\" rel=\"nofollow\">Pocky<\/a>.<\/p>\n\n\n\n<p>Hlaupandi r\u00e1k <code>pocky:b\u00faa til<\/code> Vi\u00f0 munum b\u00faa til skr\u00e1 sem kallast <code>packwerk.png<\/code> \u00fear sem vi\u00f0 getum s\u00fdnil\u00e6gt fyrsta myndriti\u00f0 okkar yfir h\u00e1\u00f0leika.<\/p>\n\n\n\n<p>Me\u00f0 \u00f6llum pakkunum skilgreindum mun grafi\u00f0 okkar l\u00edta svona \u00fat.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/app\/uploads\/2024\/05\/5.png\" alt=\"graf \u00e1n sam\u00feykktra forsendna\" title=\"graf \u00e1n sam\u00feykktra h\u00e1\u00f0ana d\u00e6mi\"\/><\/figure>\n\n\n\n<p>H\u00e1\u00f0arsamb\u00f6nd eru \u00feegar til en \u00fea\u00f0 \u00fe\u00fd\u00f0ir ekki a\u00f0 \u00feau s\u00e9u sam\u00feykkt af <strong>Pakkaun<\/strong>. Til<br>Sam\u00feykkja h\u00e1\u00f0nina, vi\u00f0 \u00feurfum a\u00f0 b\u00e6ta vi\u00f0 h\u00e1\u00f0naskipulagi\u00f0 \u00ed <code>pakki.yml<\/code><br>\u00ed hverjum pakka. Vi\u00f0 munum einbeita okkur a\u00f0 <code>p\u00f3stsm\u00ed\u00f0amenn<\/code> \u00fear sem \u00feetta er pakki \u00e1n hringlaga h\u00e1\u00f0ara. \u00dea\u00f0 er \u00feess vir\u00f0i a\u00f0 nefna a\u00f0 <strong>Pakkaun<\/strong> Leyfir okkur ekki a\u00f0 sam\u00feykkja hringlaga h\u00e1\u00f0leika.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"ruby\" class=\"language-ruby\"># app\/packages\/mail_builders\/package.yml\n\n```ruby\nenforce_privacy: false\nenforce_dependencies: true\ndependencies:\n- app\/packages\/docs\n- app\/packages\/issues\n- app\/packages\/repos<\/code><\/pre>\n\n\n\n<p>Eftir a\u00f0 hafa b\u00e6tt \u00feessari stillingu vi\u00f0, <strong>Pocky<\/strong> mun lita sam\u00feykktu h\u00e1\u00f0kerfin gr\u00e6nt.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/app\/uploads\/2024\/05\/6.png\" alt=\"graf me\u00f0 sam\u00feykktum h\u00e1\u00f0unum \" title=\"graf \u00e1n sam\u00feykktra h\u00e1\u00f0ana d\u00e6mi\"\/><\/figure>\n\n\n\n<p>Vi\u00f0 getum eytt <code>\u00dareltar tilv\u00edsanir.yml<\/code> fr\u00e1 <code>app\/pakkar\/mail_builders<\/code> og hlaupa<br><code>packwerk uppf\u00e6rsla \u2013 \u00fareldingar<\/code> aftur. Skr\u00e1in ver\u00f0ur ekki b\u00fain til aftur \u00fear sem allt<br>Vi\u00f0b\u00f3tir voru lagf\u00e6r\u00f0ar fyrir \u00feetta pakka. Mikilv\u00e6gt er a\u00f0 taka fram a\u00f0 jafnvel \u00fe\u00f3 vi\u00f0 notum ekki Graph me\u00f0 sam\u00feykktum h\u00e1\u00f0ugum.<\/p>\n\n\n\n<p><strong><a href=\"https:\/\/thecodest.co\/is\/blog\/hire-ror-developer\/\">R\u00fab\u00edn<\/a> um modular\u00edseringu Rails me\u00f0 Packwerk<\/strong> Sam\u00feykkja h\u00e1\u00f0leika. Forriti\u00f0 okkar mun enn virka eins og \u00e1\u00f0ur, en n\u00fa h\u00f6fum vi\u00f0 meira.<br>uppl\u00fdsingar til a\u00f0 taka \u00e1kvar\u00f0anir og endurskipuleggja k\u00f3\u00f0ann.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fjarl\u00e6gi\u00f0 hringlaga h\u00e1\u00f0leika<\/h3>\n\n\n\n<p>\u00cd fyrri myndritinu okkar voru margar hringlaga h\u00e1\u00f0 tengsl sem \u00feurfti a\u00f0 leysa \u00e1 einhvern h\u00e1tt. Vi\u00f0 h\u00f6fum mismunandi a\u00f0fer\u00f0ir til \u00feess:<\/p>\n\n\n\n<p>\u2013 Ger\u00f0u ekkert,<\/p>\n\n\n\n<p>\u2013 Sam\u00feykkja h\u00e1\u00f0leika, sameina pakka,<\/p>\n\n\n\n<p>\u2013 Hreyfa sig <a href=\"https:\/\/thecodest.co\/is\/dictionary\/what-is-code-refactoring\/\">k\u00f3\u00f0i<\/a> milli pakka,<\/p>\n\n\n\n<p>\u2013 Afrita virkni,&nbsp;<\/p>\n\n\n\n<p>\u2013 Framkv\u00e6ma h\u00e1\u00f0uinngj\u00f6f e\u00f0a h\u00e1\u00f0uinngj\u00f6f me\u00f0 ger\u00f0art\u00fdpu.<\/p>\n\n\n\n<p>Eitt vandam\u00e1l h\u00e9r er a\u00f0 til a\u00f0 framkv\u00e6ma almennilega endurskipulagningu \u00feurfum vi\u00f0 a\u00f0 \u00feekkja k\u00f3\u00f0agrunninn. \u00c9g er ekki svo kunnugur k\u00f3\u00f0agrunni \u00feessa verkefnis \u00fear sem \u00e9g t\u00f3k \u00fea\u00f0 sem d\u00e6mi, svo af hagn\u00fdtum \u00e1st\u00e6\u00f0um munum vi\u00f0 velja fyrstu stefnu, gera ekkert. Jafnvel \u00fe\u00f3 vi\u00f0 for\u00f0umst mestan hluta endurskipulagningarinnar, viljum vi\u00f0 vinna a\u00f0 h\u00e1\u00f0unum \u00ed <em>r\u00f3t<\/em> pakki.<\/p>\n\n\n\n<p>Grunnpakkinn inniheldur allt l\u00edm fr\u00e1 <strong>Rails-rammi<\/strong>, \u00f6llum klasunum sem vi\u00f0 erf\u00f0um fr\u00e1 og gerum allt til a\u00f0 vinna saman. Svo, til a\u00f0 leysa hringlaga h\u00e1\u00f0in, \u00e6tlum vi\u00f0 a\u00f0 b\u00faa til n\u00fdtt pakka sem kallast rails \u00ed eftirfarandi skrefum:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>F\u00e6r\u00f0u allar application_ skr\u00e1r og m\u00f6ppur \u00far forritinu til <code>app\/pakkar\/rails<\/code>.<\/li>\n\n\n\n<li>B\u00fa\u00f0u til a<code>pakki.yml<\/code> fyrir pakkann me\u00f0 s\u00f6mu stillingu og fyrri pakkar.<\/li>\n\n\n\n<li>B\u00e6ttu vi\u00f0 allar n\u00fdju skr\u00e1arlei\u00f0irnar vi\u00f0 <code>pakkverk.yml<\/code>.<\/li>\n\n\n\n<li>B\u00e6ta vi\u00f0 <code>app\/pakkar\/rails<\/code> sem h\u00e1\u00f0nari fyrir restina af pakkunum.<\/li>\n<\/ol>\n\n\n\n<p>\u00deegar vi\u00f0 b\u00faum til pakkann munum vi\u00f0 byrja a\u00f0 taka eftir m\u00f6rgum skr\u00e1m sem h\u00e6gt er a\u00f0 endurskipuleggja. Eftir a\u00f0 hafa f\u00e6rt allt \u00ed vi\u00f0eigandi pakka og sam\u00feykkt<br>Me\u00f0 h\u00e1\u00f0um hlutum munum vi\u00f0 hafa n\u00fdja uppbyggingu og hreinni graf.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/app\/uploads\/2024\/05\/graph.png\" alt=\"Pakkauppbygging me\u00f0 Rails-pakka \" title=\"Uppbygging pakka me\u00f0 d\u00e6mi um rails-pakka\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/app\/uploads\/2024\/05\/8.png\" alt=\"L\u00ednurit \u00e1n r\u00f3tarhringlaga h\u00e1\u00f0na\" title=\"D\u00e6mi um graf \u00e1n r\u00f3tarkringl\u00f3ttu h\u00e1\u00f0ana\"\/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Fjarl\u00e6gi\u00f0 h\u00e1\u00f0ni \u00far r\u00f3tapakkannum<\/h3>\n\n\n\n<p>N\u00fa l\u00edtur grafi\u00f0 okkar mun betur \u00fat; \u00fea\u00f0 v\u00e6ri fr\u00e1b\u00e6rt ef vi\u00f0 g\u00e6tum fjarl\u00e6gt allar h\u00e1\u00f0\u00adanir \u00far r\u00f3tarpakkanum. Ef vi\u00f0 sko\u00f0um deprecated_references.yml \u00ed r\u00f3tarpakkanum, munum vi\u00f0 taka eftir a\u00f0 flestar \u00feeirra eru fr\u00e1 <code>pr\u00f3f<\/code> , <code>b\u00f3kasafn\/verkefni<\/code> , <code>gagnagrunnur<\/code> og <code>stillingar<\/code><br>m\u00f6ppu. Til a\u00f0 leysa \u00feessa h\u00e1\u00f0leika \u00e6tlum vi\u00f0 a\u00f0 b\u00faa til pr\u00f3fm\u00f6ppu \u00ed hverjum pakka. A\u00f0 hafa eitthva\u00f0 eins og <code>app\/pakkar\/notendur\/pr\u00f3f<\/code>. N\u00e6st \u00e6tlum vi\u00f0 a\u00f0 \u00fatiloka <code>b\u00f3kasafn\/verkefni<\/code> , <code>gagnagrunnur<\/code> og <code>stillingar<\/code>me\u00f0al annarra m\u00f6ppna fr\u00e1 <strong>Pakkaun<\/strong> greiningu \u00fear sem \u00feessar forsendur skipta \u00ed raun ekki miklu m\u00e1li \u00ed greiningu okkar og vi\u00f0 h\u00f6fum enga au\u00f0velda lei\u00f0 til a\u00f0 leysa \u00fe\u00e6r. Vi\u00f0 munum b\u00e6ta eftirfarandi vi\u00f0 okkar <em>pakkverk.yml<\/em>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"ruby\" class=\"language-ruby\">Undanskilja:\n- \"{bin,node_modules,script,tmp,vendor,lib,db,config,perf_scripts}\/**\/*\"\n- \"lib\/tasks\/**\/*.rake\"<\/code><\/pre>\n\n\n\n<p>Eftir a\u00f0 hafa flutt allar pr\u00f3fanir \u00far r\u00f3tapakkann og \u00fatiloka\u00f0 m\u00f6ppurnar \u00far greiningunni munum vi\u00f0 f\u00e1 n\u00fdtt l\u00ednurit \u00e1n r\u00f3taskilgreina.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/app\/uploads\/2024\/05\/9.png\" alt=\"L\u00edta \u00e1n r\u00f3tarh\u00e1\u00f0ra\" title=\"L\u00edta \u00e1n r\u00f3tarh\u00e1\u00f0ra\"\/><\/figure>\n\n\n\n<p>Eins og vi\u00f0 sj\u00e1um, erum vi\u00f0 enn me\u00f0 hringlaga h\u00e1\u00f0 \u00ed<code>notendur<\/code> , <code>geymsla<\/code> , og <code>skj\u00f6l<\/code> . \u00de\u00f3 a\u00f0 vi\u00f0 h\u00f6fum ekki leyst \u00feau, h\u00f6fum vi\u00f0 mikilv\u00e6gar uppl\u00fdsingar sem vi\u00f0 \u00feurfum a\u00f0 koma \u00e1 framf\u00e6ri n\u00fana. Vi\u00f0 vitum a\u00f0 hver <a href=\"https:\/\/thecodest.co\/is\/blog\/how-to-hire-the-best-outsourced-development-team-for-a-scaleup\/\">li\u00f0<\/a> a\u00f0 framkv\u00e6ma breytingar \u00ed einu af \u00feessum pakka \u00fearf l\u00edklega a\u00f0 framkv\u00e6ma breytingar \u00ed pakkanum me\u00f0 hringlaga h\u00e1\u00f0. \u00c1 hinn b\u00f3ginn vitum vi\u00f0 a\u00f0 team getur unni\u00f0 \u00e1 <code>GitHub-f\u00e1endur<\/code> einfaldlega, a\u00f0 vita hva\u00f0a pakkar eru<br>A\u00f0 ver\u00f0a fyrir \u00e1hrifum af breytingum \u00e1 hverri stundu.<\/p>\n\n\n\n<p>\u00de\u00fa getur fundi\u00f0 endanlegan \u00e1rangur verkefnisins <a href=\"https:\/\/github.com\/niconisoria\/codetriage-packwerk\" rel=\"nofollow\">h\u00e9r<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">N\u00e6sta skref<\/h3>\n\n\n\n<p>Sem n\u00e6sta skref g\u00e6tir\u00f0u tryggt st\u00f6\u00f0uga pers\u00f3nuvernd \u00ed hverju pakka og birt a\u00f0eins opinbera API-i\u00f0 sem ver\u00f0ur a\u00f0gengilegt \u00far \u00f6\u00f0rum pakkum. \u00de\u00fa getur au\u00f0veldlega stillt hvar API-i\u00f0 \u00feitt ver\u00f0ur sta\u00f0sett \u00ed <em>pakki.yml<\/em>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"ruby\" class=\"language-ruby\">Tryggja pers\u00f3nuvernd: satt\nTryggja h\u00e1\u00f0arkerfi: satt\nOpinber sl\u00f3\u00f0ur: m\u00edn\/s\u00e9rsni\u00f0in\/sl\u00f3\u00f0\/<\/code><\/pre>\n\n\n\n<p><code> <\/code><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00c1lyktanir<\/h2>\n\n\n\n<p><strong>Pakkaun<\/strong> veitir okkur miklar uppl\u00fdsingar um forriti\u00f0 okkar og me\u00f0 \u00feeim uppl\u00fdsingum getum vi\u00f0 teki\u00f0 \u00e1kvar\u00f0anir til a\u00f0 b\u00e6ta vinnufl\u00e6\u00f0i teams-kerfa okkar. \u00de\u00f3 a\u00f0 ferli\u00f0 hafi virst langt og me\u00f0 miklum stillingum \u00fearf \u00fea\u00f0 ekki alltaf a\u00f0 vera \u00feannig. Vi\u00f0 getum byrja\u00f0 a\u00f0 b\u00faa til pakka eing\u00f6ngu fyrir n\u00fdja k\u00f3\u00f0ann sem b\u00e6tt er vi\u00f0 forriti\u00f0 okkar og sm\u00e1m saman m\u00f3\u00f0ra \u00fea\u00f0 upp \u00ed einingar. N\u00fa getum vi\u00f0 byrja\u00f0 a\u00f0 tala um sm\u00e1m\u00f3tun (Gradual Modularization), hugtak sem Stephan Hagemann kynnti. <em>\u201cVi\u00f0 getum, \u00ed fyrsta sinn, \u00e1kve\u00f0i\u00f0 a\u00f0 byrja a\u00f0 m\u00f3\u00f0\u00fal\u00edsera hluta k\u00f3\u00f0ans \u00e1 metna\u00f0arfullan h\u00e1tt\u2026 \u00deetta gerir okkur kleift a\u00f0 b\u00faa til sm\u00e1m saman vaxandi stu\u00f0ningskerfi sem stefnir a\u00f0 betri uppbyggingu forritsins.<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Heimildir<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><a href=\"https:\/\/leanpub.com\/package-based-rails-applications\" rel=\"nofollow\">Stigvaxandi einingager\u00f0 fyrir Ruby on Rails \u2013 Stephan Hagemann<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/shopify.engineering\/enforcing-modularity-rails-apps-packwerk\">A\u00f0 tryggja m\u00f3duleiningu \u00ed Rails-forritum me\u00f0 Packwerk<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/Shopify\/packwerk\">Packwerk GitHub<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/niconisoria\/codetriage-packwerk\">Upphafsk\u00f3\u00f0i greinarinnar<\/a><\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/thecodest.co\/contact\"><img decoding=\"async\" src=\"\/app\/uploads\/2024\/05\/cta_2.jpeg\" alt=\"R\u00e1\u00f0gj\u00f6f um \u00fer\u00f3un stafr\u00e6nna vara\"\/><\/a><\/figure>\n\n\n\n<p><strong>Lesa meira<\/strong><\/p>\n\n\n\n<p><a href=\"https:\/\/thecodest.co\/blog\/graphql-ruby-what-about-performance\">GraphQL Ruby. Hvernig er frammista\u00f0an?<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/thecodest.co\/blog\/rails-and-other-means-of-transport\">Lestar og \u00f6nnur samg\u00f6ngut\u00e6ki<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/thecodest.co\/blog\/rails-development-with-tmux-vim-fzf-ripgrep\">Rails-\u00fer\u00f3un me\u00f0 tmux, vim, fzf og ripgrep<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>\u00cd \u00f6\u00f0rum \u00fe\u00e6tti m\u00f3du\u00f0unarverkefnis okkar Ruby on Rails me\u00f0 Packwerk munum vi\u00f0 sko\u00f0a hugmyndina um forrit sem pakka n\u00e1nar.<\/p>","protected":false},"author":2,"featured_media":3567,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[8],"tags":[],"class_list":["post-3566","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-software-development"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Ruby on Rails modularization with Packwerk Episode II - The Codest<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/thecodest.co\/is\/blogg\/ruby-on-rails-modularisering-med-packwerk-thattur-ii\/\" \/>\n<meta property=\"og:locale\" content=\"is_IS\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ruby on Rails modularization with Packwerk Episode II\" \/>\n<meta property=\"og:description\" content=\"In the second episode of our Ruby on Rails modularization with Packwerk we will take a close look at the concept of application as an package.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/thecodest.co\/is\/blogg\/ruby-on-rails-modularisering-med-packwerk-thattur-ii\/\" \/>\n<meta property=\"og:site_name\" content=\"The Codest\" \/>\n<meta property=\"article:published_time\" content=\"2022-01-10T15:47:14+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-28T14:05:25+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/ruby_on_rails_modularization_with_packwerk_-__-_episode_2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"960\" \/>\n\t<meta property=\"og:image:height\" content=\"540\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"thecodest\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"thecodest\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-on-rails-modularization-with-packwerk-episode-ii\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-on-rails-modularization-with-packwerk-episode-ii\\\/\"},\"author\":{\"name\":\"thecodest\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/person\\\/7e3fe41dfa4f4e41a7baad4c6e0d4f76\"},\"headline\":\"Ruby on Rails modularization with Packwerk Episode II\",\"datePublished\":\"2022-01-10T15:47:14+00:00\",\"dateModified\":\"2026-04-28T14:05:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-on-rails-modularization-with-packwerk-episode-ii\\\/\"},\"wordCount\":1295,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-on-rails-modularization-with-packwerk-episode-ii\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/ruby_on_rails_modularization_with_packwerk_-__-_episode_2.png\",\"articleSection\":[\"Software Development\"],\"inLanguage\":\"is\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-on-rails-modularization-with-packwerk-episode-ii\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-on-rails-modularization-with-packwerk-episode-ii\\\/\",\"url\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-on-rails-modularization-with-packwerk-episode-ii\\\/\",\"name\":\"Ruby on Rails modularization with Packwerk Episode II - The Codest\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-on-rails-modularization-with-packwerk-episode-ii\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-on-rails-modularization-with-packwerk-episode-ii\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/ruby_on_rails_modularization_with_packwerk_-__-_episode_2.png\",\"datePublished\":\"2022-01-10T15:47:14+00:00\",\"dateModified\":\"2026-04-28T14:05:25+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-on-rails-modularization-with-packwerk-episode-ii\\\/#breadcrumb\"},\"inLanguage\":\"is\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-on-rails-modularization-with-packwerk-episode-ii\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"is\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-on-rails-modularization-with-packwerk-episode-ii\\\/#primaryimage\",\"url\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/ruby_on_rails_modularization_with_packwerk_-__-_episode_2.png\",\"contentUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/ruby_on_rails_modularization_with_packwerk_-__-_episode_2.png\",\"width\":960,\"height\":540},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-on-rails-modularization-with-packwerk-episode-ii\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/thecodest.co\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ruby on Rails modularization with Packwerk Episode II\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#website\",\"url\":\"https:\\\/\\\/thecodest.co\\\/\",\"name\":\"The Codest\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/thecodest.co\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"is\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\",\"name\":\"The Codest\",\"url\":\"https:\\\/\\\/thecodest.co\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"is\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/03\\\/thecodest-logo.svg\",\"contentUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/03\\\/thecodest-logo.svg\",\"width\":144,\"height\":36,\"caption\":\"The Codest\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/pl.linkedin.com\\\/company\\\/codest\",\"https:\\\/\\\/clutch.co\\\/profile\\\/codest\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/person\\\/7e3fe41dfa4f4e41a7baad4c6e0d4f76\",\"name\":\"thecodest\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"is\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"caption\":\"thecodest\"},\"url\":\"https:\\\/\\\/thecodest.co\\\/is\\\/author\\\/thecodest\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Ruby on Rails einingager\u00f0 me\u00f0 Packwerk Episode II - The Codest","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/thecodest.co\/is\/blogg\/ruby-on-rails-modularisering-med-packwerk-thattur-ii\/","og_locale":"is_IS","og_type":"article","og_title":"Ruby on Rails modularization with Packwerk Episode II","og_description":"In the second episode of our Ruby on Rails modularization with Packwerk we will take a close look at the concept of application as an package.","og_url":"https:\/\/thecodest.co\/is\/blogg\/ruby-on-rails-modularisering-med-packwerk-thattur-ii\/","og_site_name":"The Codest","article_published_time":"2022-01-10T15:47:14+00:00","article_modified_time":"2026-04-28T14:05:25+00:00","og_image":[{"width":960,"height":540,"url":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/ruby_on_rails_modularization_with_packwerk_-__-_episode_2.png","type":"image\/png"}],"author":"thecodest","twitter_card":"summary_large_image","twitter_misc":{"Written by":"thecodest","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/thecodest.co\/blog\/ruby-on-rails-modularization-with-packwerk-episode-ii\/#article","isPartOf":{"@id":"https:\/\/thecodest.co\/blog\/ruby-on-rails-modularization-with-packwerk-episode-ii\/"},"author":{"name":"thecodest","@id":"https:\/\/thecodest.co\/#\/schema\/person\/7e3fe41dfa4f4e41a7baad4c6e0d4f76"},"headline":"Ruby on Rails modularization with Packwerk Episode II","datePublished":"2022-01-10T15:47:14+00:00","dateModified":"2026-04-28T14:05:25+00:00","mainEntityOfPage":{"@id":"https:\/\/thecodest.co\/blog\/ruby-on-rails-modularization-with-packwerk-episode-ii\/"},"wordCount":1295,"commentCount":0,"publisher":{"@id":"https:\/\/thecodest.co\/#organization"},"image":{"@id":"https:\/\/thecodest.co\/blog\/ruby-on-rails-modularization-with-packwerk-episode-ii\/#primaryimage"},"thumbnailUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/ruby_on_rails_modularization_with_packwerk_-__-_episode_2.png","articleSection":["Software Development"],"inLanguage":"is","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/thecodest.co\/blog\/ruby-on-rails-modularization-with-packwerk-episode-ii\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/thecodest.co\/blog\/ruby-on-rails-modularization-with-packwerk-episode-ii\/","url":"https:\/\/thecodest.co\/blog\/ruby-on-rails-modularization-with-packwerk-episode-ii\/","name":"Ruby on Rails einingager\u00f0 me\u00f0 Packwerk Episode II - The Codest","isPartOf":{"@id":"https:\/\/thecodest.co\/#website"},"primaryImageOfPage":{"@id":"https:\/\/thecodest.co\/blog\/ruby-on-rails-modularization-with-packwerk-episode-ii\/#primaryimage"},"image":{"@id":"https:\/\/thecodest.co\/blog\/ruby-on-rails-modularization-with-packwerk-episode-ii\/#primaryimage"},"thumbnailUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/ruby_on_rails_modularization_with_packwerk_-__-_episode_2.png","datePublished":"2022-01-10T15:47:14+00:00","dateModified":"2026-04-28T14:05:25+00:00","breadcrumb":{"@id":"https:\/\/thecodest.co\/blog\/ruby-on-rails-modularization-with-packwerk-episode-ii\/#breadcrumb"},"inLanguage":"is","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thecodest.co\/blog\/ruby-on-rails-modularization-with-packwerk-episode-ii\/"]}]},{"@type":"ImageObject","inLanguage":"is","@id":"https:\/\/thecodest.co\/blog\/ruby-on-rails-modularization-with-packwerk-episode-ii\/#primaryimage","url":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/ruby_on_rails_modularization_with_packwerk_-__-_episode_2.png","contentUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/ruby_on_rails_modularization_with_packwerk_-__-_episode_2.png","width":960,"height":540},{"@type":"BreadcrumbList","@id":"https:\/\/thecodest.co\/blog\/ruby-on-rails-modularization-with-packwerk-episode-ii\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/thecodest.co\/"},{"@type":"ListItem","position":2,"name":"Ruby on Rails modularization with Packwerk Episode II"}]},{"@type":"WebSite","@id":"https:\/\/thecodest.co\/#website","url":"https:\/\/thecodest.co\/","name":"The Codest","description":"","publisher":{"@id":"https:\/\/thecodest.co\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/thecodest.co\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"is"},{"@type":"Organization","@id":"https:\/\/thecodest.co\/#organization","name":"The Codest","url":"https:\/\/thecodest.co\/","logo":{"@type":"ImageObject","inLanguage":"is","@id":"https:\/\/thecodest.co\/#\/schema\/logo\/image\/","url":"https:\/\/thecodest.co\/app\/uploads\/2024\/03\/thecodest-logo.svg","contentUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/03\/thecodest-logo.svg","width":144,"height":36,"caption":"The Codest"},"image":{"@id":"https:\/\/thecodest.co\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/pl.linkedin.com\/company\/codest","https:\/\/clutch.co\/profile\/codest"]},{"@type":"Person","@id":"https:\/\/thecodest.co\/#\/schema\/person\/7e3fe41dfa4f4e41a7baad4c6e0d4f76","name":"thecodest","image":{"@type":"ImageObject","inLanguage":"is","@id":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","caption":"thecodest"},"url":"https:\/\/thecodest.co\/is\/author\/thecodest\/"}]}},"_links":{"self":[{"href":"https:\/\/thecodest.co\/is\/wp-json\/wp\/v2\/posts\/3566","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thecodest.co\/is\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thecodest.co\/is\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thecodest.co\/is\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/thecodest.co\/is\/wp-json\/wp\/v2\/comments?post=3566"}],"version-history":[{"count":10,"href":"https:\/\/thecodest.co\/is\/wp-json\/wp\/v2\/posts\/3566\/revisions"}],"predecessor-version":[{"id":7983,"href":"https:\/\/thecodest.co\/is\/wp-json\/wp\/v2\/posts\/3566\/revisions\/7983"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thecodest.co\/is\/wp-json\/wp\/v2\/media\/3567"}],"wp:attachment":[{"href":"https:\/\/thecodest.co\/is\/wp-json\/wp\/v2\/media?parent=3566"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thecodest.co\/is\/wp-json\/wp\/v2\/categories?post=3566"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thecodest.co\/is\/wp-json\/wp\/v2\/tags?post=3566"}],"curies":[{"name":"vp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}