2012-07-31 08:35:27 +01:00
|
|
|
# -*- encoding : utf-8 -*-
|
|
|
|
class Api::V1::BaseController < ApplicationController
|
2012-09-26 18:15:11 +01:00
|
|
|
#respond_to :json
|
2012-08-31 13:23:44 +01:00
|
|
|
|
2012-10-16 13:35:30 +01:00
|
|
|
helper_method :member_path
|
|
|
|
|
2012-09-27 13:13:59 +01:00
|
|
|
rescue_from CanCan::AccessDenied do |exception|
|
|
|
|
respond_to do |format|
|
2012-10-15 16:49:52 +01:00
|
|
|
format.json { render :json => {:message => t("flash.exception_message")}.to_json, :status => 403 }
|
2012-09-27 13:13:59 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2012-10-15 10:48:25 +01:00
|
|
|
protected
|
|
|
|
|
2012-10-19 12:47:49 +01:00
|
|
|
def set_locale
|
|
|
|
I18n.locale = :en
|
|
|
|
end
|
|
|
|
|
2012-10-15 15:06:08 +01:00
|
|
|
def error_message(subject, message)
|
2012-10-15 19:30:06 +01:00
|
|
|
[message, subject.errors.full_messages].flatten.join('. ')
|
2012-10-15 15:06:08 +01:00
|
|
|
end
|
|
|
|
|
2012-10-16 13:35:30 +01:00
|
|
|
def create_subject(subject)
|
|
|
|
class_name = subject.class.name
|
|
|
|
if subject.save
|
|
|
|
render_json_response subject, "#{class_name} has been created successfully"
|
|
|
|
else
|
|
|
|
render_validation_error subject, "#{class_name} has not been created"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2012-10-17 14:46:16 +01:00
|
|
|
def update_member_in_subject(subject, relation = :relations)
|
|
|
|
role = params[:role]
|
|
|
|
class_name = subject.class.name.downcase
|
|
|
|
if member.present? && role.present? && subject.respond_to?(:owner) && subject.owner != member &&
|
|
|
|
subject.send(relation).by_actor(member).update_all(:role => role)
|
2012-10-17 18:08:21 +01:00
|
|
|
render_json_response subject, "Role for #{member.class.name.downcase} '#{member.id} has been updated in #{class_name} successfully"
|
2012-10-17 14:46:16 +01:00
|
|
|
else
|
2012-10-17 18:08:21 +01:00
|
|
|
render_validation_error subject, "Role for member has not been updated in #{class_name}"
|
2012-10-17 14:46:16 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2012-10-16 14:03:18 +01:00
|
|
|
def add_member_to_subject(subject, role = 'admin')
|
2012-10-15 10:48:25 +01:00
|
|
|
class_name = subject.class.name.downcase
|
2012-10-16 14:03:18 +01:00
|
|
|
if member.present? && subject.add_member(member, role)
|
2012-10-15 10:48:25 +01:00
|
|
|
render_json_response subject, "#{member.class.to_s} '#{member.id}' has been added to #{class_name} successfully"
|
|
|
|
else
|
|
|
|
render_validation_error subject, "Member has not been added to #{class_name}"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def remove_member_from_subject(subject)
|
|
|
|
class_name = subject.class.name.downcase
|
2012-10-16 14:42:52 +01:00
|
|
|
if member.present? && subject.remove_member(member)
|
2012-10-15 10:48:25 +01:00
|
|
|
render_json_response subject, "#{member.class.to_s} '#{member.id}' has been removed from #{class_name} successfully"
|
|
|
|
else
|
|
|
|
render_validation_error subject, "Member has not been removed from #{class_name}"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def destroy_subject(subject)
|
|
|
|
subject.destroy # later with resque
|
|
|
|
render_json_response subject, "#{subject.class.name} has been destroyed successfully"
|
|
|
|
end
|
|
|
|
|
|
|
|
def update_subject(subject)
|
|
|
|
class_name = subject.class.name
|
2013-03-25 15:04:05 +00:00
|
|
|
if subject.update_attributes(params[class_name.underscore.to_sym] || {})
|
2012-10-15 10:48:25 +01:00
|
|
|
render_json_response subject, "#{class_name} has been updated successfully"
|
|
|
|
else
|
|
|
|
render_validation_error subject, "#{class_name} has not been updated"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def paginate_params
|
|
|
|
per_page = params[:per_page].to_i
|
|
|
|
per_page = 20 if per_page < 1
|
|
|
|
per_page = 100 if per_page >100
|
2012-12-04 10:17:48 +00:00
|
|
|
page = params[:page].to_i
|
2012-12-04 11:12:51 +00:00
|
|
|
page = nil if page == 0
|
2012-12-04 10:17:48 +00:00
|
|
|
{:page => page, :per_page => per_page}
|
2012-10-15 10:48:25 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
def render_json_response(subject, message, status = 200)
|
|
|
|
id = status != 200 ? nil : subject.id
|
|
|
|
|
|
|
|
render :json => {
|
2012-10-18 12:22:31 +01:00
|
|
|
subject.class.name.underscore.to_sym => {
|
2012-10-15 10:48:25 +01:00
|
|
|
:id => id,
|
|
|
|
:message => message
|
|
|
|
}
|
|
|
|
}.to_json, :status => status
|
|
|
|
end
|
|
|
|
|
|
|
|
def render_validation_error(subject, message)
|
2012-10-15 15:06:08 +01:00
|
|
|
render_json_response(subject, error_message(subject, message), 422)
|
2012-10-15 10:48:25 +01:00
|
|
|
end
|
|
|
|
|
2012-10-16 13:35:30 +01:00
|
|
|
def member_path(subject)
|
|
|
|
if subject.is_a?(User)
|
|
|
|
api_v1_user_path(subject.id, :format => :json)
|
|
|
|
else
|
|
|
|
api_v1_group_path(subject.id, :format => :json)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2012-10-15 10:48:25 +01:00
|
|
|
private
|
|
|
|
|
|
|
|
def member
|
2012-10-15 11:07:10 +01:00
|
|
|
if @member.blank? && %w(User Group).include?(params[:type])
|
|
|
|
@member = params[:type].constantize.where(:id => params[:member_id]).first
|
2012-10-15 10:48:25 +01:00
|
|
|
end
|
2012-10-15 11:07:10 +01:00
|
|
|
@member
|
|
|
|
end
|
2012-10-15 10:48:25 +01:00
|
|
|
|
2012-07-31 08:35:27 +01:00
|
|
|
end
|