Class: LcpRuby::Permissions::DefinitionValidator

Inherits:
Object
  • Object
show all
Defined in:
lib/lcp_ruby/permissions/definition_validator.rb

Constant Summary collapse

VALID_CRUD_ACTIONS =
%w[index show create update destroy].freeze

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(hash) ⇒ DefinitionValidator

Returns a new instance of DefinitionValidator.



24
25
26
27
# File 'lib/lcp_ruby/permissions/definition_validator.rb', line 24

def initialize(hash)
  @hash = hash
  @errors = []
end

Class Method Details

.install!(model_class) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/lcp_ruby/permissions/definition_validator.rb', line 6

def self.install!(model_class)
  fields = LcpRuby.configuration.permission_model_fields.transform_keys(&:to_s)
  definition_field = fields["definition"]

  model_class.validate do |record|
    raw = record.public_send(definition_field)
    next if raw.blank?

    hash = raw.is_a?(String) ? JSON.parse(raw) : raw
    validator = DefinitionValidator.new(hash)
    validator.validate.each do |error|
      record.errors.add(definition_field, error)
    end
  rescue JSON::ParserError => e
    record.errors.add(definition_field, "contains invalid JSON: #{e.message}")
  end
end

Instance Method Details

#validateObject



29
30
31
32
33
34
35
36
37
38
# File 'lib/lcp_ruby/permissions/definition_validator.rb', line 29

def validate
  @errors = []

  validate_roles
  validate_default_role
  validate_field_overrides
  validate_record_rules

  @errors
end