diff --git a/.gitignore b/.gitignore index 68d04874..68879978 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ vendor/ node_modules/ .sass-cache/ +_sites/ diff --git a/_config.yml b/_config.yml new file mode 100644 index 00000000..b388f7fb --- /dev/null +++ b/_config.yml @@ -0,0 +1 @@ +sites_dir: '_sites' diff --git a/_sites/.keep b/_sites/.keep new file mode 100644 index 00000000..e69de29b diff --git a/lib/sutty.rb b/lib/sutty.rb index 47bca4f5..4d5be5ab 100644 --- a/lib/sutty.rb +++ b/lib/sutty.rb @@ -1,25 +1,31 @@ # frozen_string_literal: true -require 'rack-flash' -require 'sinatra/base' -require 'sinatra_warden' -require_relative 'sutty/login' +require 'yaml' +require_relative 'sutty/models/jekyll' +# Sutty module Sutty - # Sutty - class App < Sinatra::Base - use Rack::Flash - use Sutty::Login - register Sinatra::Warden - set :root, File.expand_path(File.join(File.dirname(__FILE__), '..')) + # La raĆ­z + def self.root + @root ||= File.expand_path(File.join(File.dirname(__FILE__), '..')) + end - before do - authorize! '/login' - end + # La configuraciĆ³n + def self.settings + @settings ||= YAML.load(File.read(Sutty.config_file)) + end - get '/' do - haml :index - end + def self.config_file + @config_file ||= File.join(Sutty.root, '_config.yml') + end + + def self.sites_dir + @sites_dir ||= File.join(Sutty.root, Sutty.settings['sites_dir']) + end + + def self.sites + binding.pry + @sites ||= Jekyll.all end end diff --git a/lib/sutty/app.rb b/lib/sutty/app.rb new file mode 100644 index 00000000..e8c0a590 --- /dev/null +++ b/lib/sutty/app.rb @@ -0,0 +1,26 @@ +# frozen_string_literal: true + +require 'rack-flash' +require 'sinatra/base' +require 'sinatra_warden' +require_relative 'login' +require_relative '../sutty' + +module Sutty + # Sutty + class App < Sinatra::Base + use Rack::Flash + use Sutty::Login + register Sinatra::Warden + + set :root, Sutty.root + + before do + authorize! '/login' + end + + get '/' do + haml :index + end + end +end diff --git a/lib/sutty/login.rb b/lib/sutty/login.rb index fd9062bd..7e7710f3 100644 --- a/lib/sutty/login.rb +++ b/lib/sutty/login.rb @@ -4,12 +4,15 @@ require 'net/imap' require 'rack-flash' require 'sinatra/base' require 'sinatra_warden' +require_relative '../sutty' require_relative '../warden/imap' require_relative 'models/usuaria' module Sutty # Login class Login < Sinatra::Base + set :root, Sutty.root + use Rack::Flash register Sinatra::Warden @@ -32,8 +35,6 @@ module Sutty config.failure_app = self end - set :root, File.expand_path(File.join(File.dirname(__FILE__), '..', '..')) - before do @has_cover = true end diff --git a/lib/sutty/models/jekyll.rb b/lib/sutty/models/jekyll.rb new file mode 100644 index 00000000..3499cc6e --- /dev/null +++ b/lib/sutty/models/jekyll.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +module Sutty + # Un sitio jekyll + class Jekyll + # Devuelve todos los sitios dentro de sites_dir como instancias de + # Jekyll + def self.all + Dir.entries(Sutty.sites_dir).map do |j| + # no queremos . ni .. ni archivos ocultos + next if j.start_with? '.' + + _j = File.realpath(File.join(Sutty.sites_dir, j)) + next unless Jekyll.is_jekyll? _j + + Jekyll.new(_j, j) + end.compact + end + + # Comprueba que el directorio parezca ser de jekyll + def self.is_jekyll?(dir) + File.directory?(dir) && File.exists?(File.join(dir, '_config.yml')) + end + + def initialize(dir, name = nil) + @root = dir + @name = name if name + end + + def config + @config ||= YAML.load(File.read(File.join(@root, '_config.yml'))) + end + + def name + @name ||= File.basename(@root) + end + + end +end diff --git a/sutty.rb b/sutty.rb index eb9991e9..07d952e4 100644 --- a/sutty.rb +++ b/sutty.rb @@ -1,4 +1,4 @@ # frozen_string_literal: true require 'pry' unless ENV['RACK_ENV'] == 'production' -require_relative 'lib/sutty' +require_relative 'lib/sutty/app' diff --git a/views/index.haml b/views/index.haml index 3d3f9f06..2a907bb4 100644 --- a/views/index.haml +++ b/views/index.haml @@ -1,3 +1,8 @@ %h1 Hola - = current_user.username + +%table.table.table-striped.table-condensed + %tbody + - Sutty.sites.each do |site| + %tr + %td= site.name