Skip to content

Instantly share code, notes, and snippets.

class SitesController < ApplicationController
before_action :find_site, only: [:show]
def show
if @site.nil?
@site = Site.new(name: @slug)
if @site.save
flash.now[:notice] = "Your site is ready. Hi #{@slug} :)"
else
@eri-b
eri-b / site.rb
Last active September 14, 2019 16:46
class Site < ApplicationRecord
before_create :lock_init
VALID_NAME_REGEX = /\A[a-zA-Z\d\-]+\z/i # letters, numbers, dashes
validates :name, presence: true, uniqueness: true, length: { maximum: 50 }, format: { with: VALID_NAME_REGEX }
has_secure_password validations: false
private
def lock_init
self.locked = false
class SitesController < ApplicationController
before_action :find_site, only: [:show, :add_password, :remove_password]
before_action :unlocked?, only: [:add_password, :remove_password]
before_action :have_posts?, only: [:add_password]
def show
...
end
class Site < ApplicationRecord
before_save { self.name = name.downcase }
before_create :lock_init
VALID_NAME_REGEX = /\A[a-zA-Z\d\-]+\z/i # letters, numbers, dashes
validates :name, presence: true, uniqueness: true, length: { maximum: 50 }, format: { with: VALID_NAME_REGEX }
has_secure_password validations: false
private
<%= form_for @site, url: site_pass_path(@site.name), method: :patch do |f| %>
<%= f.label :password %>
<%= f.password_field :password %>
<%= f.submit "Add password" %>
<% end %>
<%= form_for(:session, url: unlock_path) do |f| %>
<%= f.label :password %>
<%= f.password_field :password %>
<%= f.hidden_field :site, value: @site.name %>
<%= f.submit "Unlock" %>
<% end %>
@eri-b
eri-b / sessions.rb
Last active September 13, 2019 22:50
class SessionsController < ApplicationController
def create
site = Site.find_by(name: params[:session][:site])
if site && site.authenticate(params[:session][:password])
session[site.name.to_sym] = "session-unlocked"
redirect_to main_path(site.name), notice: 'Logged in. Free to add/delete posts'
else
flash.now[:danger] = 'Invalid password'
redirect_to main_path(site.name), notice: 'Incorrect password'
# sites_controller.rb
def unlocked?
if private?
redirect_to main_path(@site.name), notice: 'Site is locked.'
end
end
@eri-b
eri-b / posts.rb
Last active September 17, 2019 23:17
class PostsController < ApplicationController
before_action :editable?, only: [:create]
def create
@site = Site.find_by(name: params[:post][:site])
@post = @site.posts.build(post_params)
if @post.save
redirect_to main_path(@post.site.name)
@eri-b
eri-b / expired.rb
Last active September 13, 2019 23:03
class SitesController < ApplicationController
...
private
def find_site
@slug = params[:id].downcase
@site = Site.find_by(name: @slug)
if @site.present?