Duplication

"Hetzelfde maar dan anders"

Stel je hebt een mooie website in elkaar geklust...

  • Vertalingen?
  • Input van formulieren opslaan per taal?
  • Duplicatie?
  • Publiceren functionaliteit?
  • Afschermingen binnen de website?
  • Master- en local objecten?
  • Versiebeheer en versies terugzetten?
  • Veranderingen in objecten goed/afkeuren?

Maar de klant vraagt om:

Document

 

Content

Content

Content

Draft

Document

Content

Content

Content

Published

Document

Content

Content

Content

Draft

Document

Content

Content

Content

Published

Document

Content

Content

Content

Draft

Document

Content

Content

Content

Published

Document

Content

Content

Content

Draft

Document

Content

Content

Content

Published

Document

Content

Content

Content

Master object:

Local object 1:

Local object 2:

Draft

Document

Content

Content

Content

Published

Document

Content

Content

Content

Draft

Document

Content

Content

Content

Published

Document

Content

Content

Content

Draft

Document

Content

Content

Content

Published

Document

Content

Content

Content

Master object:

Local object 1:

Local object 2:

Draft

Document

Content

Content

Content

Published

Document

Content

Content

Content

Draft

Document

Content

Content

Content

Published

Document

Content

Content

Content

Draft

Document

Content

Content

Content

Published

Document

Content

Content

Content

Master object:

Local object 1:

Local object 2:

Draft

Document

Content

Content

Content

Published

Document

Content

Content

Content

Draft

Document

Content

Content

Content

Published

Document

Content

Content

Content

Draft

Document

Content

Content

Content

Published

Document

Content

Content

Content

Master object:

Local object 1:

Local object 2:

Versioning:

Hoe is dit overzichtig te implementeren?

  • Welke soorten duplicaties hebben we?

Soorten duplicaties

  • Vertalingen van tekst
  • Vertalingen van input
  • Losgekoppeld dupliceren
  • Gekoppeld dupliceren
  • Versiebeheer simpel
  • Versiebeheer met versies terugzetten

Vertalingen van tekst

  • I18n gem
    • Overzichtelijk met vertaalbestanden
    • Geïntegreerd in Rails

Vertalingen van input

  • globalize gem
    • Officieel gesupporte Rails versies: 4.2.10, 5.1.6, 5.2.1
    • Slaat input op op basis van de ingestelde locale
    • In te stellen welke attributen globaal en locale-afhankelijk zijn
    • Fallbacks zijn in te stellen

Losgekoppeld dupliceren

  • amoeba gem
    • Officieel gesupporte Rails versies: 4.x, 5.0, 5.1
    • Dupliceren van objecten inclusief geassocieerde objecten
    • In te stellen welke attributen wel en niet overgekopieërd moeten worden
    • Geassocieerde objecten zijn te includen/excluden

Gekoppeld dupliceren

  • amoeba gem met koppeling tussen origineel en kloon

Versiebeheer simpel

  • PaperTrail gem (Rails 4.2-6.0(!) ) of Audited gem (Rails 4.2-5.2)
    • Overeenkomsten
      • Beiden slaan de attributen van een object op als een apart versie-object
      • Beiden zijn in staat om versies te instantiëren als objecten
      • Bij beiden is een max_versions in te stellen

Versiebeheer simpel

  • PaperTrail gem (Rails 4.2-6.0(!) ) of Audited gem (Rails 4.2-5.2)
    • Verschillen
      • PaperTrail heeft meer controle over wanneer wel en geen versie opslaan
      • PaperTrail slaat pre-change versie op, Audited post-change
      • Audited kan geassocieerde objecten opslaan
      • Audited slaat attributen standaard op in JSON, PaperTrail in YAML

Versiebeheer met versies terugzetten

  • Audited gem (vanwege opslaan van geassocieerde objecten)
  • Combineren met soft-delete
    • Paranoia gem (Rails 3/4/5) en Discard gem (Rails 4.2, 5.0, 5.1)
      • Paranoia overschrijft ActiveRecord delete en destroy methodes (permanent vernietigen mogelijk met really_delete en really_destroy)
      • Discard heeft discard methode
      • Let op: soft-deleted users kunnen nog inloggen (overschrijf Devise active_for_authentication methode)

Tips om het overzichtelijk te houden:

  • Gebruik duidelijke namen voor variabelen en methodes
  • Methodes om te onderscheiden welk object we hebben
  • Stap tijdig over op soft-deletes wanneer versie terugzetten een mogelijkheid kan zijn
  • Crosslinks tussen gekoppelde objecten, ook tussen geassocieerde objecten
  • max_versions definiëren om database te onderhouden
Made with Slides.com