Module: Protector::Adapters::ActiveRecord::Base

Extended by:
ActiveSupport::Concern
Defined in:
lib/protector/adapters/active_record/base.rb

Overview

Patches ActiveRecord::Base

Defined Under Namespace

Modules: ClassMethods

Instance Method Summary collapse

Instance Method Details

#can?(action, field = false) ⇒ Boolean

Returns:

  • (Boolean)


130
131
132
# File 'lib/protector/adapters/active_record/base.rb', line 130

def can?(action, field=false)
  protector_meta.can?(action, field)
end

#creatable?Boolean

Checks if current model can be created in the context of current subject

Returns:

  • (Boolean)


116
117
118
# File 'lib/protector/adapters/active_record/base.rb', line 116

def creatable?
  protector_meta.creatable? protector_changed
end

#destroyable?Boolean

Checks if current model can be destroyed in the context of current subject

Returns:

  • (Boolean)


126
127
128
# File 'lib/protector/adapters/active_record/base.rb', line 126

def destroyable?
  protector_meta.destroyable?
end

#protector_changedObject

Gathers real changed values bypassing restrictions



97
98
99
# File 'lib/protector/adapters/active_record/base.rb', line 97

def protector_changed
  HashWithIndifferentAccess[changed.map { |field| [field, read_attribute(field)] }]
end

#protector_meta(subject = protector_subject) ⇒ Object

Storage for DSL::Meta::Box



102
103
104
# File 'lib/protector/adapters/active_record/base.rb', line 102

def protector_meta(subject=protector_subject)
  @protector_meta ||= self.class.protector_meta.evaluate(subject, self)
end

#updatable?Boolean

Checks if current model can be updated in the context of current subject

Returns:

  • (Boolean)


121
122
123
# File 'lib/protector/adapters/active_record/base.rb', line 121

def updatable?
  protector_meta.updatable? protector_changed
end

#visible?Boolean

Checks if current model can be selected in the context of current subject

Returns:

  • (Boolean)


107
108
109
110
111
112
113
# File 'lib/protector/adapters/active_record/base.rb', line 107

def visible?
  return true unless protector_meta.scoped?

  protector_meta.relation.where(
    self.class.primary_key => id
  ).any?
end