module Sinatra::ConstantHandler

Public Instance Methods

enable_constants() click to toggle source
# File lib/sinatra/handlers/constants.rb, line 6
def enable_constants
  p "Enabling constants..."
  ConstantHandler.setup_dir("/app/views/#{Hexacta::GEM_FILE_DIR}/constants")
  ConstantHandler.copy_all_files("/lib/sinatra/views/constants","/app/views/#{Hexacta::GEM_FILE_DIR}/constants")

  before '/constant*' do
    error(403) unless authenticated(User).admin?
  end

  get '/constants' do
    params[:format] = 'group' if params[:format].nil?
    query = Constant.where(:kind => Constant.descendants.collect { |constant_class| constant_class.to_s })
    slim :"#{Hexacta::GEM_FILE_DIR}/constants/#{params[:format]}", locals: { :constants => query.order(:kind,:value).all, :total => query.count, :filters => params, :query => query }
  end

  post '/constant' do
    attributes = params.select { |attribute| Constant.columns.include?(attribute.to_sym) }
    if params[:values].nil?
      constant = Constant.create(attributes)
    else
      for value in params[:values].split(',')
        attributes[:value] = value
        constant = Constant.find_or_create(attributes)
      end
    end
    redirect back
  end

  post '/constants/:id' do |id|
    constant = Constant.find(:id => id.to_i)
    constant.update_fields(params, Constant.columns, :missing=>:skip)
    constant.save #This is import to force before save
    redirect back
  end

  delete '/constants/:id' do |id|
    constant = Constant.find(:id => id.to_i)
    constant.destroy.to_hash.to_json
  end

end