From 83cb61da71ad18b059547d41764ff4380f44eb1a Mon Sep 17 00:00:00 2001 From: Gibheer Date: Mon, 29 Aug 2022 20:53:12 +0200 Subject: [PATCH] prepare for next implementation in go --- Gemfile | 9 -- Gemfile.lock | 34 ------ config.ru | 8 -- config.yml.example | 1 - controller/atom.rb | 7 -- controller/image.rb | 11 -- controller/method_not_allowed.rb | 10 -- controller/post.rb | 63 ----------- controller/route_not_found.rb | 8 -- controller/stylesheet.rb | 8 -- controller/welcome.rb | 7 -- images/irongrip-zero.png | Bin 57404 -> 0 bytes lib/application.rb | 19 ---- lib/boot.rb | 16 --- lib/controller.rb | 12 -- lib/libraries.rb | 9 -- lib/render.rb | 46 -------- lib/renderer.rb | 84 -------------- lib/router.rb | 38 ------- lib/session.rb | 1 - migrations/01_setup.rb | 47 -------- migrations/02_move_to_new.rb | 52 --------- public/images/blub.png | Bin 8525 -> 0 bytes public/images/zero-knowledge.png | Bin 106956 -> 0 bytes templates/error/route_not_found.html.slim | 4 - templates/layout.html.slim | 24 ---- templates/posts/index.atom.slim | 18 --- templates/posts/index.html.slim | 29 ----- templates/stylesheet/index.css.scss | 130 ---------------------- 29 files changed, 695 deletions(-) delete mode 100644 Gemfile delete mode 100644 Gemfile.lock delete mode 100644 config.ru delete mode 100644 config.yml.example delete mode 100644 controller/atom.rb delete mode 100644 controller/image.rb delete mode 100644 controller/method_not_allowed.rb delete mode 100644 controller/post.rb delete mode 100644 controller/route_not_found.rb delete mode 100644 controller/stylesheet.rb delete mode 100644 controller/welcome.rb delete mode 100644 images/irongrip-zero.png delete mode 100644 lib/application.rb delete mode 100644 lib/boot.rb delete mode 100644 lib/controller.rb delete mode 100644 lib/libraries.rb delete mode 100644 lib/render.rb delete mode 100644 lib/renderer.rb delete mode 100644 lib/router.rb delete mode 100644 lib/session.rb delete mode 100644 migrations/01_setup.rb delete mode 100644 migrations/02_move_to_new.rb delete mode 100644 public/images/blub.png delete mode 100644 public/images/zero-knowledge.png delete mode 100644 templates/error/route_not_found.html.slim delete mode 100644 templates/layout.html.slim delete mode 100644 templates/posts/index.atom.slim delete mode 100644 templates/posts/index.html.slim delete mode 100644 templates/stylesheet/index.css.scss diff --git a/Gemfile b/Gemfile deleted file mode 100644 index 367e7c2..0000000 --- a/Gemfile +++ /dev/null @@ -1,9 +0,0 @@ -source 'https://rubygems.org' - -gem 'sequel' -gem 'pg' -gem 'zero', :git => 'https://github.com/libzero/zero.git' -gem 'slim' -gem 'sass' -gem 'kramdown' -gem 'puma' diff --git a/Gemfile.lock b/Gemfile.lock deleted file mode 100644 index 1940430..0000000 --- a/Gemfile.lock +++ /dev/null @@ -1,34 +0,0 @@ -GIT - remote: https://github.com/libzero/zero.git - revision: dde9fc410fb50bc44b128fb1032b15f09c53e0f7 - specs: - zero (0.2.0) - tilt - -GEM - remote: https://rubygems.org/ - specs: - kramdown (1.3.2) - pg (0.17.1) - puma (2.7.1) - rack (>= 1.1, < 2.0) - rack (1.5.2) - sass (3.2.14) - sequel (4.7.0) - slim (2.0.2) - temple (~> 0.6.6) - tilt (>= 1.3.3, < 2.1) - temple (0.6.7) - tilt (2.0.0) - -PLATFORMS - ruby - -DEPENDENCIES - kramdown - pg - puma - sass - sequel - slim - zero! diff --git a/config.ru b/config.ru deleted file mode 100644 index 0ae6374..0000000 --- a/config.ru +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env rackup -require File.expand_path('../lib/boot.rb', __FILE__) - -Renderer.find_templates('templates') -run Application.new(Router, { - :renderer => Renderer, - :query => {} -}) diff --git a/config.yml.example b/config.yml.example deleted file mode 100644 index d98d583..0000000 --- a/config.yml.example +++ /dev/null @@ -1 +0,0 @@ -:db: "postgres://localhost/blogdb" diff --git a/controller/atom.rb b/controller/atom.rb deleted file mode 100644 index 8828ce9..0000000 --- a/controller/atom.rb +++ /dev/null @@ -1,7 +0,0 @@ -module Routes - class Atom - def self.call(session) - Post - end - end -end diff --git a/controller/image.rb b/controller/image.rb deleted file mode 100644 index 3943a41..0000000 --- a/controller/image.rb +++ /dev/null @@ -1,11 +0,0 @@ -module Routes - class Images - def self.call(session) - file = "images/#{session.request.path.gsub(/images/, '')}" - return RouteNotFound unless File.exist?(file) - session.response.body = File.read(file) - session.response.content_type = 'image/png' - nil - end - end -end diff --git a/controller/method_not_allowed.rb b/controller/method_not_allowed.rb deleted file mode 100644 index 1511646..0000000 --- a/controller/method_not_allowed.rb +++ /dev/null @@ -1,10 +0,0 @@ -module Routes - class MethodNotAllowed - def self.call(session) - session.response.status = 405 - session.response.content_type = 'text/html' - session.response.body = 'Method not supported by this resource!' - nil - end - end -end diff --git a/controller/post.rb b/controller/post.rb deleted file mode 100644 index 64c7251..0000000 --- a/controller/post.rb +++ /dev/null @@ -1,63 +0,0 @@ -module Routes - class Post < Controller - PREV_AND_NEXT_QUERY = < ? and released order by written limit 1 - ) younger -SQL - - def self.get(session) - posts = define_posts_query(session) - if session.options[:id] - posts = posts.filter(:posts__id => session.options[:id].to_i) - return RouteNotFound if posts.empty? - set_previous_and_next_post(session, posts) - else - if session.request.params['search'] - posts = load_fulltextsearch(session, posts) - end - page = session.request.params['page'].to_i - per_page = session.request.params['per_page'].to_i - per_page = 10 if per_page && per_page < 1 - set_page_information(session, posts, page, per_page) - posts = posts.limit(per_page).offset(page * per_page) - end - session.options[:posts] = posts - session.options[:render] = 'posts/index' - end - - def self.define_posts_query(session) - posts = DB[:posts]. - filter(:released => true). - select(:posts__id___post_id, :written, :title, :content, :username). - join(:accounts, :id___account_id => :account_id). - reverse_order(:written, :posts__id) - end - - # load posts depending on the pagination - def self.set_page_information(session, posts, page, per_page) - # compute pages - session.options[:page] = page if page - session.options[:query][:per_page] = per_page if per_page - session.options[:pages] = posts.count / per_page - end - - # load a single posts and the ids of the next and previous posts - def self.set_previous_and_next_post(session, posts) - written = posts.first[:written] - session.options[:post_ids_pn] = DB[PREV_AND_NEXT_QUERY, written, written].first - end - - # adjust query to use fulltext search - def self.load_fulltextsearch(session, posts) - session.options[:query][:search] = session.request.params['search'] - posts.filter( - 'posts.search_field @@ to_tsquery(\'english\', ?)', - session.request.params['search'].tr(' ', '&') - ) - end - end -end diff --git a/controller/route_not_found.rb b/controller/route_not_found.rb deleted file mode 100644 index 5d46cce..0000000 --- a/controller/route_not_found.rb +++ /dev/null @@ -1,8 +0,0 @@ -module Routes - class RouteNotFound < Controller - def self.get(session) - session.options[:render] = 'error/route_not_found' - session.response.status = 404 - end - end -end diff --git a/controller/stylesheet.rb b/controller/stylesheet.rb deleted file mode 100644 index fa93ad3..0000000 --- a/controller/stylesheet.rb +++ /dev/null @@ -1,8 +0,0 @@ -module Routes - class Stylesheet - def self.call(session) - session.options[:render] = 'stylesheet/index' - session.options[:renderer] - end - end -end diff --git a/controller/welcome.rb b/controller/welcome.rb deleted file mode 100644 index 2d0467e..0000000 --- a/controller/welcome.rb +++ /dev/null @@ -1,7 +0,0 @@ -module Routes - class Welcome - def self.call(session) - Post - end - end -end diff --git a/images/irongrip-zero.png b/images/irongrip-zero.png deleted file mode 100644 index 52cef972a5159510c8cf26d02732ccde20f2ea1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57404 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%0D@ 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 diff --git a/lib/application.rb b/lib/application.rb deleted file mode 100644 index 563df7f..0000000 --- a/lib/application.rb +++ /dev/null @@ -1,19 +0,0 @@ -class Application - def initialize(start, defaults = {}) - @start = start - @defaults = defaults - end - - def call(env) - session = Session.new( - ::Zero::Request.new(env), - ::Zero::Response.new, - Render.new(@defaults.clone) - ) - worker = @start - while not worker.nil? - worker = worker.call(session) - end - session.response.to_a - end -end diff --git a/lib/boot.rb b/lib/boot.rb deleted file mode 100644 index 3e528c8..0000000 --- a/lib/boot.rb +++ /dev/null @@ -1,16 +0,0 @@ -$LOAD_PATH << File.expand_path('..', __FILE__) - -require 'libraries' -require 'session' -require 'application' -require 'controller' -require 'renderer' -require 'render' -require 'router' - -config = YAML.load_file(File.expand_path('../../config.yml', __FILE__)) -DB = Sequel.connect(config[:db]) - -Dir[File.expand_path('../../controller', __FILE__) + '/**'].each do |controller| - require controller -end diff --git a/lib/controller.rb b/lib/controller.rb deleted file mode 100644 index 8f9dc15..0000000 --- a/lib/controller.rb +++ /dev/null @@ -1,12 +0,0 @@ -class Controller - def self.call(session) - return call_method(session) if respond_to? session.request.method - Routes::MethodNotAllowed.call(session) - end - - def self.call_method(session) - result = send(session.request.method, session) - return result if result.kind_of?(Class) - session.options[:renderer] - end -end diff --git a/lib/libraries.rb b/lib/libraries.rb deleted file mode 100644 index 35cee50..0000000 --- a/lib/libraries.rb +++ /dev/null @@ -1,9 +0,0 @@ -require 'bundler/setup' -require 'yaml' -require 'sass' -require 'tilt' -require 'tilt/sass' -require 'sequel' -require 'zero' -require 'slim' -require 'kramdown' diff --git a/lib/render.rb b/lib/render.rb deleted file mode 100644 index 5acaa46..0000000 --- a/lib/render.rb +++ /dev/null @@ -1,46 +0,0 @@ -# defines a render container with some helper functions to keep the templates -# small -class Render - SLASH = '/' - - def initialize(options) - @options = options - end - - def [](key) - fetch(key) - end - - def []=(key, value) - @options[key] = value - end - - def fetch(key) - @options[key] - end - - def has_key?(key) - @options.has_key?(key) - end - - def options - @options - end - - def link_to(*params) - query = [] - while params.last.kind_of? Hash - query.push params.pop - end - return path(params) if query.empty? - path(params) + '?' + query_string(query) - end - - def path(params) - SLASH + params.join(SLASH) - end - - def query_string(query) - URI.encode_www_form(query.inject(:merge)) - end -end diff --git a/lib/renderer.rb b/lib/renderer.rb deleted file mode 100644 index 9d21605..0000000 --- a/lib/renderer.rb +++ /dev/null @@ -1,84 +0,0 @@ -class Renderer - COMPONENT_MATCHER = %r{/?(?