5
0
Fork 0
mirror of https://0xacab.org/sutty/sutty synced 2024-11-22 07:06:22 +00:00

WIP creación de sitios

This commit is contained in:
f 2019-07-11 16:00:28 -03:00
parent 166b549d63
commit 237cfb4a5e
No known key found for this signature in database
GPG key ID: 2AE5A13E321F953D
11 changed files with 177 additions and 2 deletions

View file

@ -2,3 +2,4 @@ SECRET_KEY_BASE=
IMAP_SERVER= IMAP_SERVER=
DEFAULT_FROM= DEFAULT_FROM=
DEVISE_PEPPER= DEVISE_PEPPER=
SKEL_SUTTY=https://0xacab.org/sutty/skel.sutty.nl

View file

@ -53,6 +53,8 @@ gem 'mini_magick'
gem 'pundit' gem 'pundit'
gem 'rails-i18n' gem 'rails-i18n'
gem 'rails_warden' gem 'rails_warden'
gem 'rugged'
gem 'validates_hostname'
gem 'whenever', require: false gem 'whenever', require: false
group :development, :test do group :development, :test do
@ -82,3 +84,8 @@ group :development do
gem 'spring' gem 'spring'
gem 'spring-watcher-listen', '~> 2.0.0' gem 'spring-watcher-listen', '~> 2.0.0'
end end
group :test do
gem 'database_cleaner'
gem 'factory_bot_rails'
end

View file

@ -98,6 +98,7 @@ GEM
ruby-enum (~> 0.5) ruby-enum (~> 0.5)
concurrent-ruby (1.1.5) concurrent-ruby (1.1.5)
crass (1.0.4) crass (1.0.4)
database_cleaner (1.7.0)
devise (4.6.2) devise (4.6.2)
bcrypt (~> 3.0) bcrypt (~> 3.0)
orm_adapter (~> 0.1) orm_adapter (~> 0.1)
@ -127,6 +128,11 @@ GEM
actionmailer (>= 4.0, < 6) actionmailer (>= 4.0, < 6)
activesupport (>= 4.0, < 6) activesupport (>= 4.0, < 6)
execjs (2.7.0) execjs (2.7.0)
factory_bot (5.0.2)
activesupport (>= 4.2.0)
factory_bot_rails (5.0.2)
factory_bot (~> 5.0.2)
railties (>= 4.2.0)
fastimage (2.1.5) fastimage (2.1.5)
ffi (1.11.1) ffi (1.11.1)
font-awesome-rails (4.7.0.4) font-awesome-rails (4.7.0.4)
@ -286,6 +292,7 @@ GEM
ruby_parser (3.13.1) ruby_parser (3.13.1)
sexp_processor (~> 4.9) sexp_processor (~> 4.9)
rubyzip (1.2.2) rubyzip (1.2.2)
rugged (0.28.2)
safe_yaml (1.0.5) safe_yaml (1.0.5)
sass (3.7.4) sass (3.7.4)
sass-listen (~> 4.0.0) sass-listen (~> 4.0.0)
@ -344,6 +351,9 @@ GEM
unf_ext unf_ext
unf_ext (0.0.7.5) unf_ext (0.0.7.5)
unicode-display_width (1.5.0) unicode-display_width (1.5.0)
validates_hostname (1.0.8)
activerecord (>= 3.0)
activesupport (>= 3.0)
warden (1.2.8) warden (1.2.8)
rack (>= 2.0.6) rack (>= 2.0.6)
web-console (3.7.0) web-console (3.7.0)
@ -376,6 +386,7 @@ DEPENDENCIES
carrierwave-bombshelter carrierwave-bombshelter
carrierwave-i18n carrierwave-i18n
commonmarker commonmarker
database_cleaner
devise devise
devise-i18n devise-i18n
devise_invitable devise_invitable
@ -383,6 +394,7 @@ DEPENDENCIES
ed25519 ed25519
email_address email_address
exception_notification exception_notification
factory_bot_rails
font-awesome-rails font-awesome-rails
friendly_id friendly_id
haml-rails haml-rails
@ -400,6 +412,7 @@ DEPENDENCIES
rails_warden rails_warden
rbnacl (< 5.0) rbnacl (< 5.0)
rubocop rubocop
rugged
sass-rails (~> 5.0) sass-rails (~> 5.0)
selenium-webdriver selenium-webdriver
spring spring
@ -407,6 +420,7 @@ DEPENDENCIES
sqlite3 (~> 1.3.6) sqlite3 (~> 1.3.6)
turbolinks (~> 5) turbolinks (~> 5)
uglifier (>= 1.3.0) uglifier (>= 1.3.0)
validates_hostname
web-console (>= 3.3.0) web-console (>= 3.3.0)
whenever whenever

View file

@ -5,6 +5,8 @@
class Site < ApplicationRecord class Site < ApplicationRecord
include FriendlyId include FriendlyId
validates :name, uniqueness: true, hostname: true
friendly_id :name, use: %i[finders] friendly_id :name, use: %i[finders]
has_many :roles has_many :roles

View file

@ -0,0 +1,9 @@
# frozen_string_literal: true
# Los nombres de los sitios son únicos
class AddUniqueToSiteName < ActiveRecord::Migration[5.2]
def change
remove_index :sites, :name
add_index :sites, :name, unique: true
end
end

View file

@ -12,7 +12,7 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20_190_706_002_615) do ActiveRecord::Schema.define(version: 20_190_711_183_726) do
create_table 'roles', force: :cascade do |t| create_table 'roles', force: :cascade do |t|
t.datetime 'created_at', null: false t.datetime 'created_at', null: false
t.datetime 'updated_at', null: false t.datetime 'updated_at', null: false
@ -29,7 +29,7 @@ ActiveRecord::Schema.define(version: 20_190_706_002_615) do
t.datetime 'created_at', null: false t.datetime 'created_at', null: false
t.datetime 'updated_at', null: false t.datetime 'updated_at', null: false
t.string 'name' t.string 'name'
t.index ['name'], name: 'index_sites_on_name' t.index ['name'], name: 'index_sites_on_name', unique: true
end end
create_table 'usuaries', force: :cascade do |t| create_table 'usuaries', force: :cascade do |t|

107
doc/crear_sitios.md Normal file
View file

@ -0,0 +1,107 @@
# Crear sitios
Para que les usuaries puedan crear sitios, vamos a tener el siguiente
flujo:
* Nombre del sitio, en minúsculas, sin puntos.
* Descripción, una descripción de qué hace el sitio para Sutty y otres
usuaries del sitio.
* Plantilla. Lista de plantillas disponibles, con captura, nombre, link
a vista previa, link a autore, licencia y usos posibles (blogs, medios
alternativos, denuncias, etc.)
Tengo mi propio diseño! Explicar que vamos a dar esta posibilidad más
adelante, pero que necesitamos financiamiento. Esto permitiría
agregar un repositorio o gema de plantilla.
* Licencia. Elegir la licencia del contenido de un listado con
licencias piolas:
* PPL
* CC-BY
* CC-BY-SA
* CC-0
* Lugares donde se van a subir los sitios. Por defecto nombre.sutty.nl,
otras opciones en un desplegable:
* Tengo mi propio dominio: Explica que todavía no tenemos esto
autogestionado pero que si quieren apoyar el trabajo que hacemos
pueden donarnos o ponerse en contacto.
Más adelante pide los dominios, explica cómo comprarlos en njal.la y
qué información poner los DNS para poder alojarlos. Cuando Sutty
tenga su propio DNS, indica los NS.
* Neocities: Explicar qué es neocities y permitir agregar una cuenta.
Podríamos varias pero queremos estar bien con neocities y además no
tiene mucho sentido tener varias páginas en el mismo host.
Pedir usuarie y contraseña o API key. Dar link directo a dónde
sacar la API key y explicar para qué es.
**En realidad esta sería nuestra primera opción?**
* Zip: Descargar el sitio en un archivo zip, proponiendo posibles usos
offline (raspberries, etc!)
Da una URL desde donde se puede descargar el sitio.
* SSH/SFTP: Explicar que permite enviar el sitio a servidores propios.
Permite agregar varios servidores, pide usuario, dominio y puerto.
Da la llave pública SSH de Sutty y explica cómo agregarla al
servidor remoto. También da un link de descarga para que puedan
hacer ssh-copy-id.
**Esto todavía no**
* IPFS: Da la opción de activar/desactivar soporte para IPFS.
Explica qué es y para qué sirve. Vincula a documentación sobre
instalar IPFS de escritorio y cómo pinear el hash de sutty, instalar
el companion, etc.
**Esto todavía no**
* Torrent: Genera un torrent y lo siembra.
**Esto todavía no**
* Syncthing: Explica qué es y da la ID del nodo introductor de Sutty.
**Esto todavía no**
* Zeronet: Idem syncthing?
**Esto todavía no**
* Archive.org
**Esto todavía no**
* Crear sitio!
## Sitios
Tenemos un sitio esqueleto que tiene lo básico para salir andando:
* Gemas de Jekyll
* Gemas de Sutty
* Gemas de Temas
* Esqueleto de la configuración
* Directorios base (con i18n también)
El sitio esqueleto es un repositorio Git que se clona al directorio del
sitio. Esto permite luego pullear actualizaciones desde el esqueleto a
los sitios, esperamos que sin conflictos!
## Plantillas
Las plantillas son plantillas Jekyll adaptadas a Sutty. Vamos a empezar
adaptando las que estén disponibles en <https://jekyllthemes.org/> y
otras fuentes, agregando features de Sutty y simplificando donde haga
falta (algunas plantillas tienen requisitos extraños).
Las plantillas se instalan como gemas en los sitios, de forma que
podemos cambiarla desde las opciones del sitio luego.

14
test/factories/rol.rb Normal file
View file

@ -0,0 +1,14 @@
# frozen_string_literal: true
FactoryBot.define do
factory :rol do
usuarie
site
rol { 'usuarie' }
temporal { false }
factory :rol_invitade do
rol { 'invitade' }
end
end
end

7
test/factories/site.rb Normal file
View file

@ -0,0 +1,7 @@
# frozen_string_literal: true
FactoryBot.define do
factory :site do
name { SecureRandom.hex }
end
end

View file

@ -0,0 +1,9 @@
# frozen_string_literal: true
FactoryBot.define do
factory :usuarie do
email { SecureRandom.hex + '@sutty.nl' }
password { SecureRandom.hex }
confirmed_at { Date.today }
end
end

View file

@ -4,8 +4,12 @@ require File.expand_path('../config/environment', __dir__)
require 'rails/test_help' require 'rails/test_help'
require 'open3' require 'open3'
# rubocop:disable Style/ClassAndModuleChildren
class ActiveSupport::TestCase class ActiveSupport::TestCase
include FactoryBot::Syntax::Methods
# Resetear el repositorio a su estado original antes de leerlo # Resetear el repositorio a su estado original antes de leerlo
#
# TODO mover a Site.reset! cuando empecemos a trabajar con git
def reset_git_repo(path) def reset_git_repo(path)
Dir.chdir(path) do Dir.chdir(path) do
Open3.popen3('git reset --hard') do |_, _, _, thread| Open3.popen3('git reset --hard') do |_, _, _, thread|
@ -15,3 +19,4 @@ class ActiveSupport::TestCase
end end
end end
end end
# rubocop:enable Style/ClassAndModuleChildren