Files
fetsite/lib/flagable.rb
2015-08-05 11:03:06 +02:00

73 lines
2.3 KiB
Ruby

module Flagable
module ActsAsFlagableController
extend ActiveSupport::Concern
included do
end
module ClassMethods
def acts_as_flagable(options={})
include Flagable::ActsAsFlagableController::LocalInstanceMethods
extend Flagable::ActsAsFlagableController::LocalClassMethods
end
end
module LocalClassMethods
end
module LocalInstanceMethods
def flag
fi = controller_path.classify.constantize::FLAG_ICONS
@obj=controller_path.classify.constantize.find(params[:id])
lflag=("flag_"+params[:flag]).to_sym
authorize! lflag, @obj
unless params[:flag].nil? || params[:flag].empty? || params[:value].nil?
if @obj.respond_to?(lflag.to_s+"=")
@obj.send(lflag.to_s+"=",params[:value]=="true")
@obj.save
end
end
respond_to do |format|
format.html {render partial: "flags/flaglink", locals: {flag: params[:flag],icon: fi[params[:flag]]}}
format.js {render partial: "flags/flag", locals: {flag: params[:flag], icon: fi[params[:flag]]}}
end
end
end
end
module ActsAsFlagableRecord
extend ActiveSupport::Concern
included do
end
module ClassMethods
def acts_as_flagable(options={})
include Flagable::ActsAsFlagableRecord::LocalInstanceMethods
#extend class methods
end
end
module LocalInstanceMethods
def get_flag(flag)
v= @obj.send("flag_"+flag.to_s) if @obj.respond_to?("flag_"+flag.to_s)
v= false if v.nil?
v
end
def flaglinkid(flag)
return self.class.to_s.gsub("::","_") + "_" + self.id.to_s + "_flag_"+flag.to_s
end
end
end
module FlagableHelper
def flag_link(obj, flag, text="")
flag=flag.to_s
fi = obj.class::FLAG_ICONS
fc = obj.class::FLAG_CONFIRM
value=obj.send("flag_"+flag)
cstyle=(value) ? "true" :"false"
link_to ff_icon(fi[flag]), url_for({controller: obj.class.name.tableize,action: :flag, flag: flag, value: !value, theme: nil, locale: nil, id: obj.id}), remote: true, class:("flag-"+cstyle +" flag-"+flag + "-"+cstyle ), id: obj.flaglinkid(flag), data: { confirm: (((!fc.nil? && fc["flag_"+flag].nil?) ? fc["flag_"+flag].nil? : nil)) }
end
end
end
ActionView::Base.send :include, Flagable::FlagableHelper