{"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-y-metodos-de-control-de-la-privacidad-menos-conocidos","status":"publish","type":"post","link":"https:\/\/thecodest.co\/es\/blog\/ruby-3-0-ruby-and-lesser-known-privacy-control-methods\/","title":{"rendered":"Ruby 3.0. Ruby y los m\u00e9todos de control de la privacidad menos conocidos"},"content":{"rendered":"<h2 class=\"wp-block-heading\">Soluciones b\u00e1sicas<\/h2>\n\n\n\n<p>Supongamos que estamos utilizando la clase Foo que tiene un m\u00e9todo p\u00fablico y un m\u00e9todo privado:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"ruby\" class=\"language-ruby\">clase Foo\n  def barra\n    :impresionante\n  end\n\n  privado\n\n  def baz\n    :algo_privado\n  end\nend<\/code><\/pre>\n\n\n\n<p>Todo es estupendo, vemos una soluci\u00f3n de este tipo en pr\u00e1cticamente todos los <a href=\"https:\/\/thecodest.co\/es\/dictionary\/why-do-projects-fail\/\">proyecto<\/a>. Ejecutar <code>Foo.new.baz<\/code> provocar\u00e1 el error <em>NoMethodError (m\u00e9todo privado 'baz' llamado para # )<\/em> y eso es lo que quer\u00edamos hacer. \u00bfQu\u00e9 pasa si intentamos cambiar el formato de guardado y a\u00f1adimos private como prefijo en la definici\u00f3n de la clase?<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"ruby\" class=\"language-ruby\">clase Foo\n  def barra\n    :impresionante\n  end\n\n  private def baz\n    :algo_privado\n  end\nend<\/code><\/pre>\n\n\n\n<p>Como se puede ver despu\u00e9s de ejecutar el <a href=\"https:\/\/thecodest.co\/es\/dictionary\/what-is-code-refactoring\/\">c\u00f3digo<\/a>\u00a1funciona de verdad! \u00bfPor qu\u00e9 podemos introducir la visibilidad del m\u00e9todo antes de hacerlo? Porque al definir un m\u00e9todo, def devuelve el nombre del m\u00e9todo como un s\u00edmbolo. Esta expresi\u00f3n no es s\u00f3lo una parte de la sintaxis, sino de facto un m\u00e9todo derivado de la clase M\u00f3dulo y que trata este s\u00edmbolo como un argumento. Para m\u00e1s informaci\u00f3n, consulte la documentaci\u00f3n <a href=\"https:\/\/ruby-doc.org\/core-3.0.0\/Module.html#method-i-private\">en este enlace<\/a>. Ya que empez\u00f3 tan f\u00e1cil con private, vamos a intentar cambiar la visibilidad del m\u00e9todo private.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"ruby\" class=\"language-ruby\">clase Foo\n  def barra\n    :impresionante\n  end\n\n  private def baz\n    :algo_privado\n  end\n\n  p\u00fablico :baz\nend<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u00bfQu\u00e9 ocurrir\u00e1 despu\u00e9s de ejecutar el c\u00f3digo?<\/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; :algo_privado<\/code><\/pre>\n\n\n\n<p>\u00a1\u00c9xito! Nuestro m\u00e9todo de bases se hizo p\u00fablico porque lo hicimos visible dos veces. Por supuesto, la misma operaci\u00f3n se aplica a los m\u00f3dulos.<br>\u200b<br>Genial, pero \u00bfde d\u00f3nde saca <a href=\"https:\/\/thecodest.co\/es\/blog\/why-us-companies-are-opting-for-polish-developers\/\">us<\/a>?<br>\u200b<br>Esta funcionalidad nos aporta mucho porque podemos cambiar libremente la visibilidad de un m\u00e9todo al definirlo, o incluso cambiar la visibilidad de los m\u00e9todos al heredarlos.<\/p>\n\n\n\n<p>Ahora, echemos un vistazo a lo que <a href=\"https:\/\/thecodest.co\/es\/blog\/hire-ror-developer\/\">Ruby<\/a> 2.7 puede hacer en t\u00e9rminos de cambiar la visibilidad de alias y accessors.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"ruby\" class=\"language-ruby\">clase Foo\n  private attr_accessor :impresionante_variable\nfin<\/code><\/pre>\n\n\n\n<p>Desafortunadamente, obtenemos un error ya que el m\u00e9todo privado espera symbols y attr_accessor. El c\u00f3digo devuelve nil y por lo tanto este m\u00e9todo no es compatible con el uso de private en Ruby 2.7. Entonces, \u00bfcu\u00e1les son nuestras opciones?<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Podemos utilizar attr_accessor bajo la palabra clave private para que funcione, es decir, obtendremos un error cuando queramos hacer referencia a la variable <code>asombrosa_variableasombrosa_variable<\/code> m\u00e9todo.<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"ruby\" class=\"language-ruby\">clase Foo\n  privado\n\n  attr_accessor :impresionante_variable\nfin<\/code><\/pre>\n\n\n\n<ol class=\"wp-block-list\" start=\"2\">\n<li>La segunda opci\u00f3n es ejecutar el m\u00e9todo privado en m\u00e9todos generados por <code>atributo_attr<\/code>; en este caso, tambi\u00e9n tenemos que acordarnos de introducir all\u00ed el setter.<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"ruby\" class=\"language-ruby\">clase Foo\n  attr_accessor :variable_asombrosa\n\n  private :awesome_variable, :awesome_variable=\nend<\/code><\/pre>\n\n\n\n<p>Problemas con el <code>attr_ *<\/code> no son los \u00fanicos obst\u00e1culos. Podemos encontrarnos con la misma dificultad cuando queremos crear un alias privado.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"ruby\" class=\"language-ruby\">clase Foo\n  private alias :barra, :barra_impresionante\nfin<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ruby 3.0 y nuestro negocio<\/h2>\n\n\n\n<p>Afortunadamente, Ruby 3.0 introduce un gran cambio ya que los m\u00e9todos de visibilidad pueden tomar array como argumento y los m\u00e9todos alias, attr_ *, pueden reajustar el array con los nombres de los m\u00e9todos que se han definido. Puedes leer m\u00e1s <a href=\"https:\/\/redmine.ruby-lang.org\/issues\/17314\">aqu\u00ed<\/a>.<\/p>\n\n\n\n<p>Ahora, veamos algunos ejemplos en el \u00faltimo euba y comprobemos si realmente se han realizado los cambios y c\u00f3mo podemos utilizarlos.<br>\u200b<br>En el primer ejemplo, vamos a utilizar private antes del accessor attr:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"ruby\" class=\"language-ruby\">clase Foo\n  private attr_accessor :impresionante_variable\nfin<\/code><\/pre>\n\n\n\n<p>Tal llamada no causar\u00e1 errores en el an\u00e1lisis sint\u00e1ctico de la sintaxis y, lo que es importante, el <code>variable_asombrosa<\/code> y<code>awesome_variable =<\/code>se convierten en privados.<br>\u200b<br>El m\u00e9todo alias har\u00e1 lo mismo ya que ahora tambi\u00e9n devuelve un s\u00edmbolo como nombre del nuevo m\u00e9todo y lo hace visible.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"ruby\" class=\"language-ruby\">clase Foo\n  private alias :barra, :barra_impresionante\nfin<\/code><\/pre>\n\n\n\n<p>Un hecho interesante es que tambi\u00e9n podemos profundizar en otros m\u00e9todos, por ejemplo, el impresionante<em>el m\u00f3dulo print puede ser llamado entre private y attr<\/em>es importante que dicho m\u00e9todo devuelva una matriz con los nombres de los m\u00e9todos que se encuentran en el lado derecho de la expresi\u00f3n.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"ruby\" class=\"language-ruby\">clase M\u00f3dulo\n  def impresionante_imprimir(nombres)\n    puts nombres\n    nombres\n  end\nend\nclase 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\">Resumen<\/h2>\n\n\n\n<p>Espero que este art\u00edculo le resulte \u00fatil. En caso de m\u00e1s noticias sobre Ruby 3.0. leer m\u00e1s <a href=\"https:\/\/rubyreferences.github.io\/rubychanges\/3.0.html\">aqu\u00ed<\/a>.<\/p>\n\n\n\n<p>\u00a1Feliz codificaci\u00f3n!<\/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=\"Oferta de desarrollador Ruby\"\/><\/a><\/figure>\n\n\n\n<p><strong>M\u00e1s informaci\u00f3n:<\/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\/\">C\u00e1llate y ll\u00e9vate tu dinero #1: Costes ocultos y agilidad real en el proceso de desarrollo de productos<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/thecodest.co\/blog\/cto-challenges-scale-up-and-growth-of-software-products\/\">CTO retos - ampliaci\u00f3n y crecimiento de productos de software<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Una de las caracter\u00edsticas m\u00e1s queridas de Ruby es su sintaxis muy flexible. Personalmente, me encanta Ruby por la cantidad de posibilidades que tenemos a la hora de definir clases y sus propiedades, y esto es lo que tratar\u00e9 en este art\u00edculo.<\/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\/es\/blog\/ruby-3-0-ruby-y-metodos-de-control-de-la-privacidad-menos-conocidos\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\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\/es\/blog\/ruby-3-0-ruby-y-metodos-de-control-de-la-privacidad-menos-conocidos\/\" \/>\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 minutos\" \/>\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\":\"es\",\"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\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-3-0-ruby-and-lesser-known-privacy-control-methods\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@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\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\",\"name\":\"The Codest\",\"url\":\"https:\\\/\\\/thecodest.co\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@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\":\"es\",\"@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\\\/es\\\/author\\\/thecodest\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Ruby 3.0. Ruby y los m\u00e9todos de control de la privacidad menos conocidos - 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\/es\/blog\/ruby-3-0-ruby-y-metodos-de-control-de-la-privacidad-menos-conocidos\/","og_locale":"es_ES","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\/es\/blog\/ruby-3-0-ruby-y-metodos-de-control-de-la-privacidad-menos-conocidos\/","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 minutos"},"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":"es","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 y los m\u00e9todos de control de la privacidad menos conocidos - 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":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thecodest.co\/blog\/ruby-3-0-ruby-and-lesser-known-privacy-control-methods\/"]}]},{"@type":"ImageObject","inLanguage":"es","@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":"es"},{"@type":"Organization","@id":"https:\/\/thecodest.co\/#organization","name":"The Codest","url":"https:\/\/thecodest.co\/","logo":{"@type":"ImageObject","inLanguage":"es","@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":"es","@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\/es\/author\/thecodest\/"}]}},"_links":{"self":[{"href":"https:\/\/thecodest.co\/es\/wp-json\/wp\/v2\/posts\/3560","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thecodest.co\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thecodest.co\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thecodest.co\/es\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/thecodest.co\/es\/wp-json\/wp\/v2\/comments?post=3560"}],"version-history":[{"count":14,"href":"https:\/\/thecodest.co\/es\/wp-json\/wp\/v2\/posts\/3560\/revisions"}],"predecessor-version":[{"id":7980,"href":"https:\/\/thecodest.co\/es\/wp-json\/wp\/v2\/posts\/3560\/revisions\/7980"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thecodest.co\/es\/wp-json\/wp\/v2\/media\/3561"}],"wp:attachment":[{"href":"https:\/\/thecodest.co\/es\/wp-json\/wp\/v2\/media?parent=3560"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thecodest.co\/es\/wp-json\/wp\/v2\/categories?post=3560"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thecodest.co\/es\/wp-json\/wp\/v2\/tags?post=3560"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}