Skip to content

Instantly share code, notes, and snippets.

@stefanoverna
Last active August 29, 2015 13:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save stefanoverna/9974466 to your computer and use it in GitHub Desktop.
Save stefanoverna/9974466 to your computer and use it in GitHub Desktop.
class CreateBooking
class LimitReached < RuntimeError; end
class AlreadyBooked < RuntimeError; end
include ActiveModel::Validations
include ActiveModel::Conversion
extend ActiveModel::Naming
attr_reader :slot_id
attr_reader :book_cart
validate :check_bookings_limit
validate :check_member_already_booked
validate :check_cart_can_be_booked
def initialize(params = {})
@params = params
end
def member
raise "Not implemented"
end
def slot
@slot ||= Slot.find(params[:slot_id])
end
def available?
bookings.count < slot.bookings_limit
end
def member_already_booked?
member_booking.present?
end
def bookings
slot.bookings
end
def member_booking
bookings.where(member: member).first
end
def execute
return false unless valid?
Booking.create!(slot: slot, member: member)
end
end
class CreateBookingWithMember < CreateBooking
def initialize(member, params)
super(params)
@member = member
end
def member
@member
end
end
class CreateBookingWithPin < CreateBooking
validates :pin, presence: true
validate :check_member_exists
def pin
params[:pin]
end
def member
@member ||= Member.where(pin: pin).first
end
private
def check_member_exists
unless member
errors.add(:pin, 'Invalid PIN!')
end
end
end
class CreateBookingWithMemberId < CreateBooking
validates :member_id, presence: true
validate :check_member_exists
def member_id
params[:member_id]
end
def member
@member ||= Member.where(id: member_id).first
end
private
def check_member_exists
unless member
errors.add(:member_id, 'Invalid Member!')
end
end
end
class Totem::BaseController < ApplicationController
before_action :ensure_totem_mode_is_enabled!
private
def fetch_latest_posts
@latest_posts = Post.by_date.published.limit(5)
end
def ensure_totem_mode_is_enabled!
if params[:totem_mode] == ENV['PRESHARED_TOTEM_KEY']
session[:totem_mode] = true
end
unless session[:totem_mode]
redirect_to members_root_path, alert: I18n.t('flash.already_signed_in')
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment