{"id":3560,"date":"2019-09-03T07:23:00","date_gmt":"2019-09-03T07:23:00","guid":{"rendered":"http:\/\/the-codest.localhost\/blog\/ruby-3-0-ruby-and-lesser-known-privacy-control-methods\/"},"modified":"2026-04-27T09:52:00","modified_gmt":"2026-04-27T09:52:00","slug":"ruby-3-0-ruby-ja-vahemman-tunnetut-yksityisyyden-suojan-valvontamenetelmat","status":"publish","type":"post","link":"https:\/\/thecodest.co\/fi\/blog\/ruby-3-0-ruby-and-lesser-known-privacy-control-methods\/","title":{"rendered":"Ruby 3.0. Ruby ja v\u00e4hemm\u00e4n tunnetut yksityisyyden valvontamenetelm\u00e4t"},"content":{"rendered":"<h2 class=\"wp-block-heading\">Perusratkaisut<\/h2>\n\n\n\n<p>Oletetaan, ett\u00e4 k\u00e4yt\u00e4mme luokkaa Foo, jolla on yksi julkinen metodi ja yksi yksityinen metodi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"ruby\" class=\"language-ruby\">luokka Foo\n  def bar\n    :awesome\n  end\n\n  private\n\n  def baz\n    :jotain_yksityist\u00e4\n  end\nend<\/code><\/pre>\n\n\n\n<p>Kaikki on hienoa, n\u00e4emme t\u00e4llaisen ratkaisun l\u00e4hes jokaisessa <a href=\"https:\/\/thecodest.co\/fi\/dictionary\/why-do-projects-fail\/\">projekti<\/a>. K\u00e4ynniss\u00e4 <code>Foo.new.baz<\/code> aiheuttaa virheen <em>NoMethodError (yksityinen menetelm\u00e4 'baz' kutsuttu #:lle )<\/em> ja niin meid\u00e4n oli tarkoitus tehd\u00e4. Mit\u00e4 tapahtuu, jos yrit\u00e4mme muuttaa tallennusmuotoa ja lis\u00e4t\u00e4 luokan m\u00e4\u00e4ritelm\u00e4\u00e4n etuliitteen private?<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"ruby\" class=\"language-ruby\">luokka Foo\n  def bar\n    :awesome\n  end\n\n  private def baz\n    :jotain_yksityist\u00e4\n  end\nend<\/code><\/pre>\n\n\n\n<p>Kuten n\u00e4et, kun olet suorittanut <a href=\"https:\/\/thecodest.co\/fi\/dictionary\/what-is-code-refactoring\/\">koodi<\/a>, se todella toimii! Miksi voimme sy\u00f6tt\u00e4\u00e4 menetelm\u00e4n n\u00e4kyvyyden ennen sen tekemist\u00e4? Koska metodia m\u00e4\u00e4ritett\u00e4ess\u00e4 def palauttaa metodin nimen symbolina. T\u00e4m\u00e4 lauseke ei ole vain osa syntaksia, vaan de facto menetelm\u00e4, joka on johdettu Module-luokasta ja joka k\u00e4sittelee t\u00e4t\u00e4 symbolia argumenttina. Lis\u00e4tietoja on dokumentaatiossa <a href=\"https:\/\/ruby-doc.org\/core-3.0.0\/Module.html#method-i-private\">t\u00e4ss\u00e4 linkiss\u00e4<\/a>. Koska se alkoi niin helposti private-metodilla, yritet\u00e4\u00e4n muuttaa private-metodin n\u00e4kyvyytt\u00e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"ruby\" class=\"language-ruby\">luokka Foo\n  def bar\n    :awesome\n  end\n\n  private def baz\n    :jotain_yksityist\u00e4\n  end\n\n  public :baz\nend<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Mit\u00e4 tapahtuu koodin suorittamisen j\u00e4lkeen?<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"ruby\" class=\"language-ruby\">irb(main):012:0&gt; Foo.new.baz\n=&gt; :jotain_yksityist\u00e4<\/code><\/pre>\n\n\n\n<p>Menestys! Perusmenetelm\u00e4mme tuli julkiseksi, koska teimme sen n\u00e4kyv\u00e4ksi kahdesti. Sama toiminto p\u00e4tee tietysti my\u00f6s moduuleihin.<br>\u200b<br>Hienoa, mutta mist\u00e4 se saa <a href=\"https:\/\/thecodest.co\/fi\/blog\/why-us-companies-are-opting-for-polish-developers\/\">us<\/a>?<br>\u200b<br>T\u00e4m\u00e4 toiminnallisuus antaa meille paljon, koska voimme vapaasti muuttaa metodin n\u00e4kyvyytt\u00e4 m\u00e4\u00e4ritelt\u00e4ess\u00e4 sit\u00e4 tai jopa muuttaa metodien n\u00e4kyvyytt\u00e4 periytett\u00e4ess\u00e4 niit\u00e4.<\/p>\n\n\n\n<p>Katsotaanpa nyt, mit\u00e4 <a href=\"https:\/\/thecodest.co\/fi\/blog\/hire-ror-developer\/\">Ruby<\/a> 2.7 voi muuttaa aliasien ja accessoreiden n\u00e4kyvyytt\u00e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"ruby\" class=\"language-ruby\">luokka Foo\n  private attr_accessor :awesome_variable\nend<\/code><\/pre>\n\n\n\n<p>Valitettavasti saamme virheen, koska yksityinen menetelm\u00e4 odottaa symboleja ja attr_accessoria. Koodi palauttaa nil:n, joten t\u00e4m\u00e4 metodi ei ole yhteensopiva Ruby 2.7:n private-k\u00e4yt\u00f6n kanssa. Mitk\u00e4 ovat siis vaihtoehtomme?<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Voimme k\u00e4ytt\u00e4\u00e4 attr_accessoria private-avainsanan alla saadaksemme sen toimimaan, eli saamme virheen, kun haluamme viitata avainsanaan <code>mahtava_muuttuja mahtava_muuttuja<\/code> menetelm\u00e4.<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"ruby\" class=\"language-ruby\">luokka Foo\n  private\n\n  attr_accessor :awesome_variable\nend<\/code><\/pre>\n\n\n\n<ol class=\"wp-block-list\" start=\"2\">\n<li>Toinen vaihtoehto on suorittaa yksityinen metodi metodeissa, jotka on luotu <code>attr_attribuutti<\/code>; t\u00e4ss\u00e4 tapauksessa meid\u00e4n on my\u00f6s muistettava sy\u00f6tt\u00e4\u00e4 asetin sinne.<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"ruby\" class=\"language-ruby\">luokka Foo\n  attr_accessor :awesome_variable\n\n  private :awesome_variable, :awesome_variable=\nend<\/code><\/pre>\n\n\n\n<p>Ongelmat <code>attr_ *<\/code> menetelm\u00e4t eiv\u00e4t ole ainoat esteet. Samaan vaikeuteen t\u00f6rm\u00e4\u00e4mme, kun haluamme luoda yksityisen aliaksen.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"ruby\" class=\"language-ruby\">luokka Foo\n  private alias :bar, :awesome_bar\nend<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ruby 3.0 ja liiketoimintamme<\/h2>\n\n\n\n<p>Onneksi Ruby 3.0 tuo suuren muutoksen, sill\u00e4 n\u00e4kyvyysmetodit voivat ottaa argumenttina array:n ja metodien alias, attr_ *, voi nollata array:n m\u00e4\u00e4ritettyjen metodien nimill\u00e4. Voit lukea lis\u00e4\u00e4 <a href=\"https:\/\/redmine.ruby-lang.org\/issues\/17314\">t\u00e4\u00e4ll\u00e4<\/a>.<\/p>\n\n\n\n<p>Katsotaanpa nyt muutamia esimerkkej\u00e4 uusimmasta eubasta ja tarkistetaan, onko muutokset todella tehty ja miten voimme k\u00e4ytt\u00e4\u00e4 niit\u00e4.<br>\u200b<br>Ensimm\u00e4isess\u00e4 esimerkiss\u00e4 k\u00e4ytet\u00e4\u00e4n private ennen attr-k\u00e4ytt\u00e4j\u00e4\u00e4:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"ruby\" class=\"language-ruby\">luokka Foo\n  private attr_accessor :awesome_variable\nend<\/code><\/pre>\n\n\n\n<p>T\u00e4llainen kutsu ei aiheuta virheit\u00e4 syntaksin j\u00e4sent\u00e4misess\u00e4 ja, mik\u00e4 on t\u00e4rke\u00e4\u00e4, ett\u00e4 <code>awesome_variable<\/code> ja<code>awesome_variable =<\/code>menetelmist\u00e4 tulee yksityisi\u00e4.<br>\u200b<br>Alias-metodi tekee saman, mutta nyt se my\u00f6s palauttaa symbolin uuden metodin nimeksi ja tekee sen n\u00e4kyv\u00e4ksi.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"ruby\" class=\"language-ruby\">luokka Foo\n  private alias :bar, :awesome_bar\nend<\/code><\/pre>\n\n\n\n<p>Mielenkiintoinen seikka on, ett\u00e4 voimme my\u00f6s syventy\u00e4 muihin menetelmiin, esimerkiksi mahtavaan<em>tulostusmoduulia voidaan kutsua private- ja attr-moduulien v\u00e4lill\u00e4.<\/em>lukija; on t\u00e4rke\u00e4\u00e4, ett\u00e4 t\u00e4llainen metodi palauttaa joukon, jossa on lausekkeen oikealla puolella olevien metodien nimet.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"ruby\" class=\"language-ruby\">luokka Module\n  def awesome_print(nimet)\n    puts names\n    names\n  end\nend\nluokka Foo\n  private awesome_print attr_reader :awesome_bar\nend<span style=\"background-color: initial; font-family: inherit; font-size: inherit;\"> <\/span><\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Yhteenveto<\/h2>\n\n\n\n<p>Toivottavasti l\u00f6yd\u00e4t t\u00e4m\u00e4n artikkelin hy\u00f6dylliseksi! Jos haluat lis\u00e4tietoja Ruby 3.0:sta, lue lis\u00e4\u00e4. <a href=\"https:\/\/rubyreferences.github.io\/rubychanges\/3.0.html\">t\u00e4\u00e4ll\u00e4<\/a>.<\/p>\n\n\n\n<p>Hyv\u00e4\u00e4 koodausta!<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/thecodest.co\/careers#offers]\"><img decoding=\"async\" src=\"\/app\/uploads\/2024\/05\/ruby-1-.png\" alt=\"Ruby-kehitt\u00e4j\u00e4 Tarjous\"\/><\/a><\/figure>\n\n\n\n<p><strong>Lue lis\u00e4\u00e4:<\/strong><\/p>\n\n\n\n<p><a href=\"https:\/\/thecodest.co\/blog\/shut-up-and-take-your-money-1-hidden-costs-and-real-agility-in-product-development-process\/\">Turpa kiinni ja ota rahasi #1: Tuotekehitysprosessin piilokustannukset ja todellinen ketteryys<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/thecodest.co\/blog\/cto-challenges-scale-up-and-growth-of-software-products\/\">CTO:n haasteet - ohjelmistotuotteiden skaalautuminen ja kasvu<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Yksi Rubyn rakastetuimmista ominaisuuksista on sen eritt\u00e4in joustava syntaksi. Itse rakastan Rubya sen vuoksi, miten paljon mahdollisuuksia meill\u00e4 on m\u00e4\u00e4ritell\u00e4 luokkia ja niiden ominaisuuksia, ja juuri t\u00e4t\u00e4 aion k\u00e4sitell\u00e4 t\u00e4ss\u00e4 artikkelissa.<\/p>","protected":false},"author":2,"featured_media":3561,"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-3560","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 3.0. Ruby and lesser known privacy control methods - 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\/fi\/blogi\/ruby-3-0-ruby-ja-vahemman-tunnetut-yksityisyyden-suojan-valvontamenetelmat\/\" \/>\n<meta property=\"og:locale\" content=\"fi_FI\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ruby 3.0. Ruby and lesser known privacy control methods\" \/>\n<meta property=\"og:description\" content=\"One of the most beloved features of Ruby is its very flexible syntax. Personally, I love Ruby for how many possibilities we have in defining classes and their properties, and this is what I will discuss in this article.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/thecodest.co\/fi\/blogi\/ruby-3-0-ruby-ja-vahemman-tunnetut-yksityisyyden-suojan-valvontamenetelmat\/\" \/>\n<meta property=\"og:site_name\" content=\"The Codest\" \/>\n<meta property=\"article:published_time\" content=\"2019-09-03T07:23:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-27T09:52:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/ruby_3.0.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1280\" \/>\n\t<meta property=\"og:image:height\" content=\"720\" \/>\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=\"3 minuuttia\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-3-0-ruby-and-lesser-known-privacy-control-methods\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-3-0-ruby-and-lesser-known-privacy-control-methods\\\/\"},\"author\":{\"name\":\"thecodest\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/person\\\/7e3fe41dfa4f4e41a7baad4c6e0d4f76\"},\"headline\":\"Ruby 3.0. Ruby and lesser known privacy control methods\",\"datePublished\":\"2019-09-03T07:23:00+00:00\",\"dateModified\":\"2026-04-27T09:52:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-3-0-ruby-and-lesser-known-privacy-control-methods\\\/\"},\"wordCount\":588,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-3-0-ruby-and-lesser-known-privacy-control-methods\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/ruby_3.0.png\",\"articleSection\":[\"Software Development\"],\"inLanguage\":\"fi\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-3-0-ruby-and-lesser-known-privacy-control-methods\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-3-0-ruby-and-lesser-known-privacy-control-methods\\\/\",\"url\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-3-0-ruby-and-lesser-known-privacy-control-methods\\\/\",\"name\":\"Ruby 3.0. Ruby and lesser known privacy control methods - The Codest\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-3-0-ruby-and-lesser-known-privacy-control-methods\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-3-0-ruby-and-lesser-known-privacy-control-methods\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/ruby_3.0.png\",\"datePublished\":\"2019-09-03T07:23:00+00:00\",\"dateModified\":\"2026-04-27T09:52:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-3-0-ruby-and-lesser-known-privacy-control-methods\\\/#breadcrumb\"},\"inLanguage\":\"fi\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-3-0-ruby-and-lesser-known-privacy-control-methods\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fi\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-3-0-ruby-and-lesser-known-privacy-control-methods\\\/#primaryimage\",\"url\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/ruby_3.0.png\",\"contentUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/ruby_3.0.png\",\"width\":1280,\"height\":720},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-3-0-ruby-and-lesser-known-privacy-control-methods\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/thecodest.co\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ruby 3.0. Ruby and lesser known privacy control methods\"}]},{\"@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\":\"fi\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\",\"name\":\"The Codest\",\"url\":\"https:\\\/\\\/thecodest.co\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fi\",\"@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\":\"fi\",\"@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\\\/fi\\\/author\\\/thecodest\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Ruby 3.0. Ruby ja v\u00e4hemm\u00e4n tunnetut yksityisyyden valvontamenetelm\u00e4t - 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\/fi\/blogi\/ruby-3-0-ruby-ja-vahemman-tunnetut-yksityisyyden-suojan-valvontamenetelmat\/","og_locale":"fi_FI","og_type":"article","og_title":"Ruby 3.0. Ruby and lesser known privacy control methods","og_description":"One of the most beloved features of Ruby is its very flexible syntax. Personally, I love Ruby for how many possibilities we have in defining classes and their properties, and this is what I will discuss in this article.","og_url":"https:\/\/thecodest.co\/fi\/blogi\/ruby-3-0-ruby-ja-vahemman-tunnetut-yksityisyyden-suojan-valvontamenetelmat\/","og_site_name":"The Codest","article_published_time":"2019-09-03T07:23:00+00:00","article_modified_time":"2026-04-27T09:52:00+00:00","og_image":[{"width":1280,"height":720,"url":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/ruby_3.0.png","type":"image\/png"}],"author":"thecodest","twitter_card":"summary_large_image","twitter_misc":{"Written by":"thecodest","Est. reading time":"3 minuuttia"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/thecodest.co\/blog\/ruby-3-0-ruby-and-lesser-known-privacy-control-methods\/#article","isPartOf":{"@id":"https:\/\/thecodest.co\/blog\/ruby-3-0-ruby-and-lesser-known-privacy-control-methods\/"},"author":{"name":"thecodest","@id":"https:\/\/thecodest.co\/#\/schema\/person\/7e3fe41dfa4f4e41a7baad4c6e0d4f76"},"headline":"Ruby 3.0. Ruby and lesser known privacy control methods","datePublished":"2019-09-03T07:23:00+00:00","dateModified":"2026-04-27T09:52:00+00:00","mainEntityOfPage":{"@id":"https:\/\/thecodest.co\/blog\/ruby-3-0-ruby-and-lesser-known-privacy-control-methods\/"},"wordCount":588,"commentCount":0,"publisher":{"@id":"https:\/\/thecodest.co\/#organization"},"image":{"@id":"https:\/\/thecodest.co\/blog\/ruby-3-0-ruby-and-lesser-known-privacy-control-methods\/#primaryimage"},"thumbnailUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/ruby_3.0.png","articleSection":["Software Development"],"inLanguage":"fi","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/thecodest.co\/blog\/ruby-3-0-ruby-and-lesser-known-privacy-control-methods\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/thecodest.co\/blog\/ruby-3-0-ruby-and-lesser-known-privacy-control-methods\/","url":"https:\/\/thecodest.co\/blog\/ruby-3-0-ruby-and-lesser-known-privacy-control-methods\/","name":"Ruby 3.0. Ruby ja v\u00e4hemm\u00e4n tunnetut yksityisyyden valvontamenetelm\u00e4t - The Codest","isPartOf":{"@id":"https:\/\/thecodest.co\/#website"},"primaryImageOfPage":{"@id":"https:\/\/thecodest.co\/blog\/ruby-3-0-ruby-and-lesser-known-privacy-control-methods\/#primaryimage"},"image":{"@id":"https:\/\/thecodest.co\/blog\/ruby-3-0-ruby-and-lesser-known-privacy-control-methods\/#primaryimage"},"thumbnailUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/ruby_3.0.png","datePublished":"2019-09-03T07:23:00+00:00","dateModified":"2026-04-27T09:52:00+00:00","breadcrumb":{"@id":"https:\/\/thecodest.co\/blog\/ruby-3-0-ruby-and-lesser-known-privacy-control-methods\/#breadcrumb"},"inLanguage":"fi","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thecodest.co\/blog\/ruby-3-0-ruby-and-lesser-known-privacy-control-methods\/"]}]},{"@type":"ImageObject","inLanguage":"fi","@id":"https:\/\/thecodest.co\/blog\/ruby-3-0-ruby-and-lesser-known-privacy-control-methods\/#primaryimage","url":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/ruby_3.0.png","contentUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/ruby_3.0.png","width":1280,"height":720},{"@type":"BreadcrumbList","@id":"https:\/\/thecodest.co\/blog\/ruby-3-0-ruby-and-lesser-known-privacy-control-methods\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/thecodest.co\/"},{"@type":"ListItem","position":2,"name":"Ruby 3.0. Ruby and lesser known privacy control methods"}]},{"@type":"WebSite","@id":"https:\/\/thecodest.co\/#website","url":"https:\/\/thecodest.co\/","name":"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":"fi"},{"@type":"Organization","@id":"https:\/\/thecodest.co\/#organization","name":"Codest","url":"https:\/\/thecodest.co\/","logo":{"@type":"ImageObject","inLanguage":"fi","@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":"fi","@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\/fi\/author\/thecodest\/"}]}},"_links":{"self":[{"href":"https:\/\/thecodest.co\/fi\/wp-json\/wp\/v2\/posts\/3560","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thecodest.co\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thecodest.co\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thecodest.co\/fi\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/thecodest.co\/fi\/wp-json\/wp\/v2\/comments?post=3560"}],"version-history":[{"count":14,"href":"https:\/\/thecodest.co\/fi\/wp-json\/wp\/v2\/posts\/3560\/revisions"}],"predecessor-version":[{"id":7980,"href":"https:\/\/thecodest.co\/fi\/wp-json\/wp\/v2\/posts\/3560\/revisions\/7980"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thecodest.co\/fi\/wp-json\/wp\/v2\/media\/3561"}],"wp:attachment":[{"href":"https:\/\/thecodest.co\/fi\/wp-json\/wp\/v2\/media?parent=3560"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thecodest.co\/fi\/wp-json\/wp\/v2\/categories?post=3560"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thecodest.co\/fi\/wp-json\/wp\/v2\/tags?post=3560"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}