diff options
Diffstat (limited to 'es/docs/developers')
-rw-r--r-- | es/docs/developers/api.md | 87 | ||||
-rw-r--r-- | es/docs/developers/directory_structure.md | 216 | ||||
-rw-r--r-- | es/docs/developers/i18n.md | 176 | ||||
-rw-r--r-- | es/docs/developers/index.md | 80 | ||||
-rw-r--r-- | es/docs/developers/overview.md | 49 |
5 files changed, 608 insertions, 0 deletions
diff --git a/es/docs/developers/api.md b/es/docs/developers/api.md new file mode 100644 index 000000000..dd4d66ac9 --- /dev/null +++ b/es/docs/developers/api.md @@ -0,0 +1,87 @@ +--- +layout: es/page +title: API +--- + +# API de Alaveteli + +<p class="lead"> + Existen dos partes del API para acceder a datos o insertarlos programáticamente: el API de lectura y el API de escritura. +</p> + +## API de lectura + +Se proporciona a través de las versiones JSON de la mayoría de las entidades del sistema, así como mediante +fuentes de difusión Atom para las entidades de listados: + +### Fuentes de difusión Atom + +Hay fuentes Atom en la mayoría de páginas que incluyen listados de solicitudes de información pública, +que pueden utilizarse para recibir actualizaciones y enlaces en formato XML. Puede encontrar la URL de la fuente Atom de +las siguientes maneras: + +* Busque los enlaces de la fuente RSS. +* Examine la etiqueta `<link rel="alternate" type="application/atom+xml">` en el encabezado del código HTML. +* Añada `/feed` al inicio de otra URL. + +Incluso las solicitudes complejas de búsqueda cuentan con fuentes Atom. Puede utilizarlas de múltiples maneras, +por ejemplo, para realizar búsquedas por autoridad, por tipo de archivo, por intervalo de fechas o por estado. +Consulte los consejos de búsqueda avanzada para obtener más información. + +### Datos JSON estructurados + +Hay unas cuantas páginas con versiones JSON, que permiten descargar información sobre +objetos de forma estructurada. Puede encontrarlas de los siguientes modos: + +* Añada `.json` al final de la URL. +* Busque la etiqueta `<link rel="alternate" type="application/json">` en el encabezado del código HTML. + +Los usuarios, autoridades y solicitudes disponen de versiones JSON que contienen información +básica sobre ellos. Cada fuente Atom tiene su equivalente en JSON, que incluye información +sobre el listado de eventos de la fuente. + +### Iniciar nuevas solicitudes programáticamente + +Para animar a los usuarios a crear enlaces hacia una autoridad pública en particular, utilice direcciones URL +con el formato `http://<susitio>/new/<nombre_url_organismopublico>`. Estos son los +parámetros que puede añadir a estas URL, ya sea propiamente en la URL o a partir de un formulario: + +* `title`: resumen por defecto de la nueva solicitud. +* `default_letter`: texto por defecto del cuerpo de la carta. El saludo y la firma locales lo rodean. +* `body`: constituye una alternativa a `default_letter` y permite editar el texto completo de la solicitud, permitiendo modificar el saludo y la firma. +* `tags`: lista de etiquetas separada por espacios que permite encontrar y enlazar cualquier solicitud realizada posteriormente, por ejemplo `openlylocal spending_id:12345`. El símbolo `:` indica que se trata de una etiqueta de máquina. Los valores de las etiquetas de máquina también pueden incluir puntos, útiles para identificadores URI. + +## API de escritura + +El API de escritura está diseñada para ser utilizada por organismos públicos al crear sus propias +solicitudes en el sistema. Actualmente se utiliza en el software de [registro de información +pública](https://github.com/mysociety/foi-register) de mySociety para soportar el uso de +Alaveteli como registro de divulgación para toda actividad de información pública procedente de +un organismo público en concreto. + +Todas las solicitudes deben incluir una clave del API como una variable `k`. Esta clave puede visualizarse +en cada una de las páginas de la autoridad desde la interfaz de administración. Otras variables deben +enviarse como se indica a continuación: + +* `/api/v2/request`: ENVÍA los siguientes datos json como una variable de tipo formulario `json` para crear una nueva solicitud: + * `title`: título de la solicitud. + * `body`: cuerpo de la solicitud. + * `external_user_name`: nombre de la persona que ha originado la solicitud. + * `external_url`: URL donde puede encontrarse una copia canónica de la solicitud + Devuelve contenido JSON con una `url` para la nueva solicitud junto con su `id`. +* `/api/v2/request/<id>.json`: RECIBE toda la información sobre una solicitud. +* `/api/v2/request/<id>.json`: ENVÍA correspondencia adicional respecto a una solicitud: + * Como variable de tipo formulario `json`: + * `direction`: `request` (solicitud procedente del usuario, por ejemplo, como seguimiento, recordatorio, etc.) o `response` (respuesta procedente de la autoridad). + * `body`: mensaje. + * `state`: opcional, permite que la autoridad incluya un valor de estado `state` de solicitud al enviar una actualización. Valores permitidos: `waiting_response` (esperando respuesta), `rejected` (rechazada), `successful` (satisfactoria) y `partially_successful` (parcialmente satisfactoria). Solo se utiliza en dirección `response` (respuesta). + * `sent_at`: hora en la que se ha enviado la correspondencia en formato ISO-8601. + * (Opcionalmente) la variable `attachments` (adjuntos) como `multipart/form-data`: + * Elementos adjuntos en la correspondencia. Solo pueden adjuntarse en mensajes en dirección `response` (respuesta). +* `/api/v2/request/<id>/update.json`: ENVÍA un nuevo estado para la solicitud: + * Como variable de tipo formulario `json`: + * `state`: estimación por parte del usuario del `state` (estado) de una solicitud que ha recibido una respuesta de la autoridad. Valores permitidos: `waiting_response` (esperando respuesta), `rejected` (rechazada), `successful` (satisfactoria) y `partially_successful` (parcialmente satisfactoria). Solo debería utilizarse para comentarios por parte del usuario; si una autoridad desea actualizar el estado `state`, debe utilizar `/api/v2/request/<id>.json` en su lugar. + + + + diff --git a/es/docs/developers/directory_structure.md b/es/docs/developers/directory_structure.md new file mode 100644 index 000000000..cd8ac358c --- /dev/null +++ b/es/docs/developers/directory_structure.md @@ -0,0 +1,216 @@ +--- +layout: es/page +title: Estructura de directorios +--- + + +# Estructura de directorios de Alaveteli + +<p class="lead">Esta página ofrece una vista general sobre dónde encontrar distintos datos en +los directorios de Alaveteli.</p> + +Si solo está instalando Alaveteli, **probablemente nunca necesite preocuparse de esto**; +es bastante más práctico cuando un desarrollador planea llevar a cabo cambios más +significativos en el código. No necesita estar familiarizado con +Ruby para realizar la instalación o aplicar [modificaciones básicas en +ella]({{ page.baseurl }}/docs/customising/). + +<!-- (y en caso de hacerlo, +recuerde consultar la página sobre [cómo comentar los cambios realizados]({{ page.baseurl }}/feeding-back)).--> + +Alaveteli utiliza Ruby on Rails, una infraestructura web de tipo «modelo-vista-controlador» común; +si está familiarizado con Rails, ya conocerá estos detalles. Para obtener más información +sobre la estructura de Rails, consulte el [sitio web de Ruby on Rails](http://guides.rubyonrails.org/getting_started.html). + +## Directorios principales y funciones de cada uno de ellos + +<dl class="dir-structure"> + <dt> + app + </dt> + <dd> + <p><em>núcleo del código de aplicación de Alaveteli</em></p> + <dl> + <dt> + assets + </dt> + <dd> + <em>recursos estáticos que requieren una compilación previa para poder dar servicio</em> + <dl> + <dt> + fonts + </dt> + <dt> + images + </dt> + <dt> + javascripts + </dt> + <dt class="last"> + stylesheets + </dt> + <dd class="last"> + <p><em>hojas de estilo en formato CSS o <a href="http://sass-lang.com/">SCSS</a></em></p> + <p>Las hojas de estilo SCSS se compilan como CSS.</p> + </dd> + </dl> + </dd> + <dt> + controllers + </dt> + <dt> + helpers + </dt> + <dt> + mailers + </dt> + <dt> + models + </dt> + <dt class="last"> + views + </dt> + </dl> + </dd> + <dt>cache + </dt> + <dd><p><em>archivos temporales de descarga, datos adjuntos y plantillas</em></p> + </dd> + <dt> + commonlib + </dt> + <dd> + <p><em>librería de funciones comunes de mySociety</em></p> + <p> + Mantenemos una <a href="https://github.com/mysociety/commonlib">librería + común</a>, que utilizamos en muchos de nuestros proyectos (no solo en + Alaveteli). Está implementada como un <a + href="http://git-scm.com/book/en/Git-Tools-Submodules">submódulo de git</a> + para que Alaveteli la contenga aunque el código sea independiente. Normalmente no + es necesario tener nada de esto en cuenta (ya que git lo gestiona automáticamente), + pero si realmente <em>necesita</em> cambiar algo al respecto, tenga en cuenta que + se trata de un repositorio independiente. + </p> + </dd> + <dt> + config + </dt> + <dd> + <p><em>archivos de configuración</em></p> + <p> + El archivo primario de configuración es <code>general.yml</code>. Este archivo no se halla en el + repositorio de git (ya que contendrá información específica de su instalación, incluida la + contraseña de la base de datos), pero hay archivos de ejemplo. + </p> + </dd> + <dt> + db + </dt> + <dd> + <p><em>archivos de base de datos</em></p> + <dl> + <dt class="last"> + migrate + </dt> + <dd class="last"> + Migración de Rails (actualización del esquema de la base de datos hacia arriba + o abajo a medida que se desarrolla el código). + </dd> + </dl> + </dd> + <dt> + doc + </dt> + <dd> + <p><em>documentación</em></p> + <p> + Se trata de información técnica adicional añadida a la <a + href="{{ page.baseurl }}/docs/">documentación principal</a> (la que + está leyendo actualmente), que se almacena en el repositorio de git, + en la rama <code>gh-pages</code> y se publica como páginas de GitHub. + </p> + </dd> + <dt> + lib + </dt> + <dd> + <p><em>librerías personalizadas</em></p> + <dl> + <dt> + tasks + </dt> + <dd>Tareas de <a href="http://guides.rubyonrails.org/command_line.html#rake">Rake</a>. + </dd> + <dt class="last"> + themes + </dt> + <dd class="last">Aquí vive su tema de Alaveteli. + </dd> + </dl> + </dd> + <dt> + locale + </dt> + <dd> + <p><em>traducciones (internacionalización/i18n)</em></p> + <p> + Las cadenas de texto de traducción se almacenan en archivos <code>.po</code> dentro de directorios específicos para + la localización y codificación. Por ejemplo, <code>es/</code> contiene las traducciones para el sitio en español. + </p> + </dd> + <dt> + log + </dt> + <dd> + <p><em>archivos de registro de aplicación</em></p> + </dd> + <dt> + public + </dt> + <dd> <p><em>archivos estáticos que pueden dar servicio directamente</em></p> + </dd> + <dt> + script + </dt> + <dd> + <p><em>shell scripts para el servidor</em></p> + <p> + Por ejemplo, <code>alert-overdue-requests</code> ejecuta el script + que encuentra solicitudes que han superado el límite de tiempo y las envía por + correo electrónico. + </p> + </dd> + <dt> + spec + </dt> + <dd> + <p><em>pruebas</em></p> + <p> + El entorno de pruebas de Alaveteli funciona con <a href="http://rspec.info/">rspec</a>. + </p> + </dd> + <dt> + tmp + </dt> + <dd> + <p> + <em>archivos temporales</em> + </p> + </dd> + <dt class="last"> + vendor + </dt> + <dd class="last"> + <p><em>software de terceros</em></p> + <dl> + <dt class="last">bundle</dt> + <dd class="last"> + <p> + <em>paquete de gems necesario para ejecutar Alaveteli</em> + </p> + </dd> + </dl> + </dd> +</dl> + +Hemos omitido algunos subdirectorios menos importantes para mantener la claridad. diff --git a/es/docs/developers/i18n.md b/es/docs/developers/i18n.md new file mode 100644 index 000000000..5110959fc --- /dev/null +++ b/es/docs/developers/i18n.md @@ -0,0 +1,176 @@ +--- +layout: es/page +title: Internacionalización (para desarrolladores) +--- + +# Internacionalización en el código + +<p class="lead"> + Esta página describe algunos aspectos técnicos de la internacionalización del + código de Alaveteli. Está principalmente dirigida a desarrolladores que están trabajando + en la base del código; si tan solo desea traducir Alaveteli a su idioma, consulte la + <a href="{{ page.baseurl }}/docs/customising/translation">traducción de Alaveteli</a> + en su lugar. +</p> + +## Notas de implementación + +Las traducciones implementadas para el proyecto se hallan en ``locale/``. + +Recomendamos que las traducciones se lleven a cabo en +[Transifex](https://www.transifex.net/projects/p/alaveteli/), +debido a que los traductores pueden trabajar a través de su interfaz gráfica en lugar de tener que editar +<a href="{{ page.baseurl }}/docs/glossary/#po" class="glossary__link">archivos `.po` y `.pot`</a> +directamente. Básicamente, Transifex tan solo captura el trabajo de los traductores y lo convierte +en los archivos que Alaveteli necesita (mediante el uso de gettext). + +### Cómo obtener las últimas traducciones en su sitio web + +Por ejemplo, para implementar traducciones en inglés y español a la vez: + + * Asegúrese de que los archivos `.po` correspondientes se hallan en ```locale/en/app.po``` y ```locale/es/app.po``` + (por ejemplo, descargándolos desde Transifex). + * Asigne a <code><a href="{{ page.baseurl }}/docs/customising/config/#available_locales">AVAILABLE_LOCALES</a></code> + el valor <code>en es</code>. + +### Qué hacer si no dispone de las traducciones completas para una versión anterior de Alaveteli + +Antes de elaborar una nueva versión de Alaveteli los archivos de traducción se +extraen de Transifex y se añaden al directorio ``locale/`` de Alaveteli en +github, donde se hallan las traducciones más completas para la versión anterior. +Después los archivos ubicados en Transifex se actualizan con las nuevas cadenas de texto +que necesitan ser traducidas para la nueva actualización. En este punto también se eliminan las cadenas de texto +anteriores que ya no se utilizan en la nueva versión. La última +[etiqueta de versión](https://github.com/mysociety/alaveteli/releases) +para una actualización en github debería contener las traducciones más completas procedentes de Transifex para dicha +versión. + +Si utiliza una versión antigua de Alaveteli y desea añadir o modificar las traducciones, +puede editar los archivos .po directamente utilizando un programa local, como +[PoEdit](http://poedit.net/). + +### Cómo añadir nuevas cadenas de texto a la traducción + +Necesita hacer esto en caso de que haya añadido al código nuevas cadenas de texto que necesiten traducirse +(o si ha modificado alguna cadena ya existente). + +Para actualizar los +<a href="{{ page.baseurl }}/docs/glossary/#po" class="glossary__link">archivos `.po` o `.pot`</a> +para cada idioma, ejecute el comando: + + bundle exec rake gettext:store_model_attributes + +seguido del comando: + + bundle exec rake gettext:find + +Si `gettext:find` solo crea el archivo `locale/im-config.pot`, necesitará aplicar +la acción unset a la variable de entorno `TEXTDOMAIN` e intentarlo de nuevo. + +Para obtener más información sobre las traducciones, consulte la página de +[traducción de Alaveteli]({{ page.baseurl }}/docs/customising/translation/). + + +## Detalles de implementación técnica + +### Obtener la localización actual + +Este es un tema complejo debido a que existen dos métodos rivales para definir una +combinación de localización y territorio. El método mediante POSIX (y gettext y Transifex) es +de tipo `en_GB` y el método mediante Rails, de tipo `en-US`. Debido a que utilizamos gettext y +Transifex para las traducciones, debemos lidiar con ambos. + + * Para la versión de localización de Rails seleccionada actualmente, utilice `I18n.locale`. + * Para la versión de localización de POSIX, utilice `FastGettext.locale`. + +## I18n en plantillas + +Antes de añadir cadenas de texto i18n a la fuente, debería leer las +[guías de internacionalización](http://mysociety.github.io/internationalization.html) +que se aplican en todos nuestros proyectos. + +Algunos consejos para añadir cadenas de texto al código de Alaveteli: + +* Cadenas simples: ```<% = _("String to translate") %>``` +* Cadenas que incluyen variables: ayude al traductor mediante la inserción de cadenas + que puedan ser interpoladas, de forma que la variable tenga un significado. Por ejemplo, + ```<%= "Nothing found for '" + h(@query) + "'" %>``` puede convertirse en ```<%= + _("Nothing found for '{{search_terms}}'", :search_terms => h(@query)) %>``` +* Cadenas que incluyen números: ```<%= n_('%d request', '%d requests', @quantity) % @quantity %>``` +* Permitimos algo de código HTML entre líneas cuando proporciona un contexto con significado, por ejemplo: + +``` +_('<a href="{{browse_url}}">Browse all</a> or <a href="{{add_url}}">ask us to add it</a>.', + :browse_url => @browse_url, :add_url => @add_url) +``` + +Pueden aplicarse normas similares a cadenas de texto en el código fuente en Ruby. + +## Acceso programático a entidades PublicBody traducidas + +Además de las plantillas, la única área adicional de i18n actualmente implementada es la de entidades +PublicBody. + +La implementación permite obtener distintas localizaciones de una entidad PublicBody, como: + +```ruby + PublicBody.with_locale("es") do + puts PublicBody.find(230).name + end +``` + +Normalmente este es todo el código que necesita conocer. Existe un método +```self.locale_from_params()```, disponible en todos los modelos, que devuelve una localización +especificada como ```locale=xx``` en la cadena de búsqueda y que retorna a la localización +por defecto, que puede utilizar en conjunto con el método ```with_locale``` +superior. Todas las uniones en las tablas internas de traducción deberían ser gestionadas +normalmente de forma automática, pero existen algunas excepciones, indicadas a continuación. + +### Sobrescribir los mutadores de campos del modelo + +Internamente utilizamos el [complemento Globalize](https://github.com/globalize/globalize) +para localizar campos del modelo. Cuando la columna «foo» ha sido marcada en el modelo como +```:translates```, Globalize sobrescribe ```foo.baz = 12``` para establecer el valor en la columna +```baz``` de la tabla ```foo_translations```. + +Uno de los efectos secundarios de la forma en que esta tarea se lleva a cabo consiste en que, si +desea sobrescribir un mutador de atributo específico, necesitará llamar explícitamente a la maquinaria +de Globalize, más o menos de esta manera: + +```ruby + def name=(name) + globalize.write(self.class.locale || I18n.locale, "name", name) + self["name"] = short_name + # your other stuff here + end +``` + +### Búsqueda + +Los métodos mágicos ```find_first_by_<attr>``` y ```find_all_by_<attr>``` +deberían funcionar. Si desea realizar una búsqueda más programática, necesita unir +la tabla de traducción, por ejemplo: + +```ruby + query = "#{translated_attr_name(someattr) = ? AND #{translated_attr_name('locale')} IN (?)" + locales = Globalize.fallbacks(locale || I18n.locale).map(&:to_s) + find( + :first, + :joins => :translations, + :conditions => [query, value, locales], + :readonly => false + ) +``` + +Es posible que también necesite efectuar algunas uniones o condiciones SQL de bajo nivel. Consulte +```PublicBodyController.list``` para ver un ejemplo de una consulta con una condición explícitamente +dependiente de la localización (busque la variable ```locale_condition```) + +## Traducción y actualizaciones + +El gestor de actualizaciones forzará una detención de la traducción justo antes de que se finalice una nueva +versión. Durante este tiempo, si su trabajo está programado para ser incluido en dicha versión, +no debe introducir nuevas cadenas en el código. Esta detención ofrece a los traductores el tiempo necesario +para completar y revisar sus traducciones respecto a todas las cadenas de texto conocidas. +Consulte más información sobre la [traducción de Alaveteli]({{ page.baseurl }}/docs/customising/translation/). + diff --git a/es/docs/developers/index.md b/es/docs/developers/index.md new file mode 100644 index 000000000..3b7b0eee1 --- /dev/null +++ b/es/docs/developers/index.md @@ -0,0 +1,80 @@ +--- +layout: es/page +title: Para desarrolladores +--- + +# Información para desarrolladores + +<p class="lead"> + Alaveteli es un proyecto de código abierto. Los desarrolladores a tiempo completo de mySociety junto con desarrolladores de todo el mundo contribuyen de forma activa en la base del código. Estos enlaces y notas le ayudarán si también desea ayudar. +</p> + +* El software está escrito en **Ruby on Rails 3.x**. Soportamos postgresql como + sistema gestor de base de datos. Se necesita un agente de transferencia de correo (MTA) + configurado, como exim, para analizar los correos recibidos. Disponemos de servidores de + producción implementados en Debian (Squeeze y Wheezy) y en Ubuntu (12.04 LTS). Por motivos + de rendimiento, recomendamos el uso de [Varnish](https://www.varnish-cache.org). + +* Para ayudarle a entender qué hace el código, le recomendamos que lea esta [vista general + de alto nivel]({{ page.baseurl }}/docs/developers/overview/), que incluye un esquema de + los modelos y las relaciones entre ellos. + +* Consulte la [documentación del API]({{ page.baseurl }}/docs/developers/api/) para averiguar + cómo extraer e introducir datos en Alaveteli. + +* Si necesita modificar o añadir cadenas de texto en la interfaz, consulte nuestras [guías + de internacionalización](http://mysociety.github.io/internationalization.html), + donde encontrará notas sobre nuestro uso de `gettext`. + +* Utilizamos el [modelo de ramas de flujo + de git](http://nvie.com/posts/a-successful-git-branching-model/) con un pequeño cambio: + actualmente nuestra rama `develop` se denomina `rails-3-develop`, por lo que + la última versión de desarrollo siempre se halla en la + [rama + rails-3-develop](https://github.com/mysociety/alaveteli/tree/rails-3-develop). La última + versión estable se encuentra siempre en la [rama + maestra](https://github.com/mysociety/alaveteli). Si tiene previsto colaborar en + la elaboración del software, es posible que las [extensiones de flujo de + git](https://github.com/nvie/gitflow) le resultes prácticas. + +* La instalación del software es un tanto compleja, pero poco a poco se vuelve más sencilla. + Si utiliza Debian o Ubuntu, debería poder poner en funcionamiento una versión en varias horas. + Si dispone de su propio servidor, ejecute el + [script de instalación]({{ page.baseurl }}/docs/installing/script/) o siga las + indicaciones de + [instalación manual]({{ page.baseurl }}/docs/installing/manual_install/). + Alternativamente existe una [AMI EC2 de Alaveteli]({{ page.baseurl }}/docs/installing/ami/) + que puede ayudarle a ponerlo en marcha rápidamente. + [Póngase en contacto]({{ page.baseurl }}/community/) a través de la lista de correo del proyecto o mediante IRC + para obtener ayuda. + +* Un paso inicial estándar en la personalización de su implementación es la [escritura de un + tema]({{ page.baseurl }}/docs/customising/themes/). **Si solo va a leer un apartado, + ¡que sea este!** + +* Al igual que numerosos sitios construidos con Ruby on Rails, el software no proporciona un rendimiento muy elevado (consulte + [estas notas sobre los problemas de rendimiento](https://github.com/mysociety/alaveteli/wiki/Performance-issues) recopiladas a través del tiempo con + WhatDoTheyKnow). El sitio funcionará sobre un servidor con 512 MB de memoria RAM, pero se recomienda un mínimo + de 2 GB. La implementación detrás de [Varnish](https://www.varnish-cache.org) también resulta esencial. Consulte las + [buenas prácticas en el servidor de producción]({{ page.baseurl }}/docs/running/server/) para obtener más información. + +* Existe un conjunto de [proposiciones de mejora](https://github.com/mysociety/alaveteli/wiki/Proposals-for-enhancements), + tales como un mayor número de funcionalidades centradas en el usuario, pero consulte también... + +* ...las [publicaciones de github](https://github.com/mysociety/alaveteli/issues). Marcamos + las publicaciones con la etiqueta **suitable for volunteers** (adecuada para voluntarios) cuando creemos que + son especialmente adecuadas para quien busca una tarea relativamente pequeña a la que dedicarse. + +* Intentamos garantizar que cada modificación confirmada cuente con su publicación correspondiente en el gestor. + Así los registros de modificaciones se vuelven más sencillos, pues podemos reunir todos los cambios propios de + una actualización concreta respecto a un objetivo intermedio en el gestor de publicaciones, [como esta actualización + 0.4](https://github.com/mysociety/alaveteli/issues?milestone=7&state=closed). + +* Si experimenta problemas de memoria, consulte [esta publicación del blog sobre estrategias utilizadas + anteriormente](https://www.mysociety.org/2009/09/17/whatdotheyknow-growing-pains-and-ruby-memory-leaks/). + +* Si edita el código en un Mac, consulte estas [notas de instalación en MacOS X]({{ page.baseurl }}/docs/installing/macos/). <!-- [[OS X Quickstart]] --> + +* Intentamos seguir unas buenas prácticas similares en todos nuestros proyectos: visite + [mysociety.github.io](http://mysociety.github.io/) para obtener información sobre temas tales como nuestros + [estándares de código](http://mysociety.github.io/coding-standards.html). diff --git a/es/docs/developers/overview.md b/es/docs/developers/overview.md new file mode 100644 index 000000000..c24474e4f --- /dev/null +++ b/es/docs/developers/overview.md @@ -0,0 +1,49 @@ +--- +layout: es/page +title: Vista general de alto nivel +--- + +# Vista general de alto nivel + +<p class="lead"> + Esta página describe el proceso y las entidades que forman Alaveteli. + Es una vista de alto nivel sobre cómo trabaja Alaveteli para ayudarle a orientarse respecto al código. +</p> + +_Consulte también el [esquema](#esquema) en la parte inferior de esta página._ + +La entidad principal es **InfoRequest**, que representa una solicitud de información por parte de un +**User** a un **PublicBody**. Una nueva InfoRequest resulta en un **OutgoingMessage** inicial, que +representa el primer correo electrónico. + +Una vez elaborada una InfoRequest, se monitoriza su estado mediante **InfoRequestEvents**. Por +ejemplo, el estado inicial de una nueva InfoRequest es `awaiting_response` y cuenta con un +InfoRequestEvent asociado del tipo `initial_request`. Un evento de InfoRequest puede disponer de +un OutgoingMessage o de un IncomingMessage, así como no tener ninguno asociado. + +Las respuestas son recibidas por el sistema mediante el flujo de mensajes de correo de tipo raw (representados por **RawEmail**) +desde el MTA en un script ubicado en `scripts/mailin`. Esta acción analiza el correo, intenta identificar la +InfoRequest asociada y genera un **IncomingMessage**, que hace referencia tanto al RawEmail como a la InfoRequest. + +Cualquier User puede elaborar **Comments** en las InfoRequests. + +Todos los eventos (por ejemplo, Comments y OutgoingMessages) son monitorizados en InfoRequestEvent. + +Una **TrackThing** consiste en una búsqueda delimitada que permite a los usuarios recibir alertas cuando se encuentran +eventos coincidentes con sus criterios. (Su funcionamiento cambió después de que lo lanzáramos, así que +aún existe código obsoleto propio de características que hemos descartado). + +El **MailServerLog** representa los archivos de registro analizados por el MTA. Las entradas del +MailServerLog son creadas por un administrador de tipo cron que ejecuta +`scripts/load-mail-server-logs`. Esta acción comprueba los correos entrantes y los asocia con las +InfoRequests; después `script/check-recent-requests-send` comprueba estos registros para garantizar que +cuentan con información de remitente (envelope-from) en el encabezado (con el objetivo de combatir el spam). + +## Esquema + +<a href="{{ site.baseurl }}assets/img/railsmodels.png"><img src="{{ site.baseurl }}assets/img/railsmodels.png"></a> + +Este esquema de los modelos de Rails fue generado a partir del código el 19 de diciembre de 2012 utilizando +[Railroad](http://railroad.rubyforge.org/). + +El comando de railroad es: `railroad -M | dot -Tpng > railsmodels.png` |