decidim’s software architecture decidim · 2017-11-04 · participatory spacedecidim why: defines...

Post on 25-Jun-2020

6 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

decidim

Decidim’s software architectureGoals & abstractions guiding its development

github.com/josepjaumetwitter.com/josepjaume

decidim

codegram.comgithub.com/codegramtwitter.com/codegram

decidim

da-ce-deemCatalan for: “We decide | let’s decide”

decidim

decidim

decidim

decidim

decidim

decidim

Inspired by consul

decidim

BUT Y?

decidim

Chapter 1: Goals and principles

decidim

configurable collaborableextendabledistributable

decidim

!applicationlibrary

decidim

decidim ~= frameworkdecidim ~= ecosystem

decidim github.com/decidim/decidim

decidim rubygems.org

decidim

Chapter 2: Installation

decidim

ruby & rails 5postgresql

decidim

Generating an application$ gem install decidim

$ decidim jam

decidim

decidim

decidim

Gemfile

decidim

Configuration: config/initializers/decidim.rb

decidim

Customization: app/assets/stylesheets/decidim.scss

decidim

Chapter 3:internals & abstractions

decidim

Organization● Multi-tenancy● Infrastructure sharing● Shared database● Independent data

decidim.rocks

admin

users

...

decidim.ninja

admin

users

...

1..n

admin

decidim_application_instance

decidim

decidim

decidim

Participatory SpaceWhy:

● Defines the terms of participation● Holds functionalities

Implementations:

● Participatory Process● Assembly● Iniciative

decidim.rocks

participatory_process1

step_1 step_n

assembly1

managers

iniciative1

author supporters

iniciative2

author supporters

decidim

ComponentsRegistered against Core

● Participatory spaces hold components

● Mini-applications● Exposed via a manifest

Core components:

● Proposals● Surveys● Participatory Budgets● Meetings● Pages● Accountability

decidim

decidim

decidim

decidim

decidim

decidim

decidim

decidim

Component manifest● Component name● Engines● Configurable settings● Resources● Statistics● Exportable artifacts● Actions

decidim

decidim

decidim-coredecidim-admin

decidim-proposals

decidim-comments decidim-api

decidim-accountability decidim-surveys

decidim

Decidim::AuthorizationDecidim::NotifiableDecidim::CommentableDecidim::ResourceDecidim::Followable

decidim

Decidim::MenuDecidim::FormBuilderDecidim::ExporterDecidim::AuthorableDecidim::Reportable

decidim

good abstractions ==

decidim

/api/graphql

/api/graphql

decidim

Chapter 4:Core development & testing

decidim

Developing

decidim Development application

$ git clone git@github.com:decidim/decidim$ cd decidim$ bundle install$ rake development_app

decidim

decidim

development_app -> ../decidim

decidim

Testing

decidim

rspeccapybara + phantomjs

decidim Testing

$ rake decidim:generate_test_app$ rake test_all…F…….……….………F…..

# alternatively$ cd decidim-proposals$ rspec rspec spec/features/proposals_spec.rb………….F…….F…………..

decidim Continuous Integration

decidim

Chapter 5:Vanity metrics ¯\_(ツ)_/¯

decidim

~ 14 months old

decidim

21 code contributors

decidim

~1.300 PRs merged

decidim

~63k ruby loc~5k typescript loc~2k javascript loc

decidim

~98% test coverage

decidim

~100% documentation

decidim

~ 42 releases

decidim

> 15 working installations

decidim decidim-monitor

decidim

> 10 languages

decidim

~ 40k users

decidim

~ 120 smashed

decidim

future ahead

decidim

thanks! questions?

gitter.im/decidimgithub.com/decidim

top related