Module: ActsAsSourceable::HelperMethods
- Defined in:
- lib/acts_as_sourceable/acts_as_sourceable.rb
Class Method Summary collapse
-
.garbage_collect ⇒ Object
Removes registry entries that no longer belong to a sourceable, item, collection, or holding institution.
Class Method Details
.garbage_collect ⇒ Object
Removes registry entries that no longer belong to a sourceable, item, collection, or holding institution
154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 |
# File 'lib/acts_as_sourceable/acts_as_sourceable.rb', line 154 def self.garbage_collect # Remove all registry entries where the sourceable is gone ActsAsSourceable::RegistryEntry.uniq.pluck(:sourceable_type).each do |sourceable_type| sourceable_table_name = sourceable_type.constantize.table_name sourceable_id_sql = ActsAsSourceable::RegistryEntry .select("#{ActsAsSourceable::RegistryEntry.table_name}.id") .where(:sourceable_type => sourceable_type) .joins("LEFT OUTER JOIN #{sourceable_table_name} ON #{sourceable_table_name}.id = #{ActsAsSourceable::RegistryEntry.table_name}.sourceable_id") .where("#{sourceable_table_name}.id IS NULL").to_sql ActsAsSourceable::RegistryEntry.delete_all("id IN (#{sourceable_id_sql})") end # Remove all registry entries where the source is gone ActsAsSourceable::RegistryEntry.uniq.pluck(:source_type).each do |source_type| source_class = source_type.constantize source_table_name = source_class.table_name source_id_sql = ActsAsSourceable::RegistryEntry .select("#{ActsAsSourceable::RegistryEntry.table_name}.id") .where(:source_type => source_type) .joins("LEFT OUTER JOIN #{source_table_name} ON #{source_table_name}.id = #{ActsAsSourceable::RegistryEntry.table_name}.source_id") .where("#{source_table_name}.id IS NULL").to_sql sourceables = ActsAsSourceable::RegistryEntry.where("id IN (#{source_id_sql})").collect(&:sourceable) ActsAsSourceable::RegistryEntry.where("id IN (#{source_id_sql})").delete_all sourceables.each{|sourceable| sourceable.send(:update_sourceable_cache_column) } end end |