Module: Paranoia::Query
- Defined in:
- lib/paranoia.rb
Instance Method Summary collapse
- #only_deleted ⇒ Object (also: #deleted)
- #paranoid? ⇒ Boolean
- #restore(id_or_ids, opts = {}) ⇒ Object
- #with_deleted ⇒ Object
Instance Method Details
#only_deleted ⇒ Object Also known as: deleted
34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/paranoia.rb', line 34 def only_deleted if paranoia_sentinel_value.nil? return with_deleted.where.not(paranoia_column => paranoia_sentinel_value) end # if paranoia_sentinel_value is not null, then it is possible that # some deleted rows will hold a null value in the paranoia column # these will not match != sentinel value because "NULL != value" is # NULL under the sql standard # Scoping with the table_name is mandatory to avoid ambiguous errors when joining tables. scoped_quoted_paranoia_column = "#{connection.quote_table_name(self.table_name)}.#{connection.quote_column_name(paranoia_column)}" with_deleted.where("#{scoped_quoted_paranoia_column} IS NULL OR #{scoped_quoted_paranoia_column} != ?", paranoia_sentinel_value) end |
#paranoid? ⇒ Boolean
25 |
# File 'lib/paranoia.rb', line 25 def paranoid? ; true ; end |
#restore(id_or_ids, opts = {}) ⇒ Object
48 49 50 51 52 53 54 55 56 57 |
# File 'lib/paranoia.rb', line 48 def restore(id_or_ids, opts = {}) ids = Array(id_or_ids).flatten any_object_instead_of_id = ids.any? { |id| ActiveRecord::Base === id } if any_object_instead_of_id ids.map! { |id| ActiveRecord::Base === id ? id.id : id } ActiveSupport::Deprecation.warn("You are passing an instance of ActiveRecord::Base to `restore`. " \ "Please pass the id of the object by calling `.id`") end ids.map { |id| only_deleted.find(id).restore!(opts) } end |
#with_deleted ⇒ Object
27 28 29 30 31 32 |
# File 'lib/paranoia.rb', line 27 def with_deleted if ActiveRecord::VERSION::STRING >= "4.1" return unscope where: paranoia_column end all.tap { |x| x.default_scoped = false } end |