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)


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

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)


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

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)


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

def destroyable?
  protector_meta.destroyable?
end

#protector_changedObject

Gathers real changed values bypassing restrictions



88
89
90
# File 'lib/protector/adapters/active_record/base.rb', line 88

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

#protector_meta(subject = protector_subject) ⇒ Object

Storage for DSL::Meta::Box



93
94
95
# File 'lib/protector/adapters/active_record/base.rb', line 93

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)


112
113
114
# File 'lib/protector/adapters/active_record/base.rb', line 112

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)


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

def visible?
  return true unless protector_meta.scoped?

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