Sha256: 48c83100d18896e09aa5c53dbaebcec3fc1e080bd5b77aba95d1bd5dc5d33d91
Contents?: true
Size: 1.32 KB
Versions: 2
Compression:
Stored size: 1.32 KB
Contents
module Flagable def has_many_flags has_many :flags, :as => :flagable, :dependent => :destroy include FlagableInstanceMethods def find_all_by_flag( flag ) self.joins( :flags ).where( :flags => { :key => flag } ) end def find_by_flag( flag ) find_all_by_flag( flag ).limit( 1 ).readonly( false ).first end end module FlagableInstanceMethods def add_flags( *new_flags ) if new_flags.kind_of? Array for new_flag in new_flags if new_flag.kind_of? String or new_flag.kind_of? Symbol if not self.has_flag? new_flag self.flags.create( key: new_flag.to_sym ) end end end end end def add_flag( new_flag ) self.add_flags new_flag end def remove_flags( *flags_to_remove ) for flag_to_remove in flags_to_remove self.flags.find_all_by_key( flag_to_remove ).each do |flag| flag.destroy end end end def remove_flag( flag_to_remove ) self.remove_flags flag_to_remove end def flags_to_syms self.flags.pluck(:key).map(&:to_sym) end def has_flag?( flag ) self.flags_to_syms.include? flag end end end # The integration in ActiveRecord is done in # config/initializers/active_record_flagable_extension.rb
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
your_platform-1.0.0 | app/models/flagable.rb |
your_platform-0.0.2 | app/models/flagable.rb |