Class: Tram::Policy

Inherits:
Object
  • Object
show all
Extended by:
Dry::Initializer, DSL
Defined in:
lib/tram/policy.rb,
lib/tram/policy/dsl.rb,
lib/tram/policy/error.rb,
lib/tram/policy/errors.rb,
lib/tram/policy/generator.rb,
lib/tram/policy/inflector.rb,
lib/tram/policy/validator.rb,
lib/tram/policy/validation_error.rb

Overview

Base class for policy objects with composable validation errors

Defined Under Namespace

Modules: DSL, Inflector Classes: Error, Errors, Generator, ValidationError, Validator

Instance Method Summary collapse

Methods included from DSL

[], local_validators, root_scope, validate, validators

Instance Method Details

#errorsTram::Policy::Errors

The collection of validation errors



42
43
44
# File 'lib/tram/policy.rb', line 42

def errors
  @errors ||= Errors.new(self)
end

#inspectString

Human-readable representation of the policy

Examples:

Displays policy name and its attributes

UserPolicy[name: "Andy"].inspect
# => #<UserPolicy["name" => "Andy"]>

Returns:

  • (String)


98
99
100
# File 'lib/tram/policy.rb', line 98

def inspect
  "#<#{self.class.name}[#{__attributes__}]>"
end

#invalid?(&filter) ⇒ Boolean

Checks whether the policy is invalid

Parameters:

  • filter (Proc, nil)

    Block describing **the only errors to count**

Returns:

  • (Boolean)


76
77
78
# File 'lib/tram/policy.rb', line 76

def invalid?(&filter)
  filter ? errors.any?(&filter) : errors.any?
end

#itemsArray<Array>

The array of error items for lazy translation

Returns:

  • (Array<Array>)


50
51
52
# File 'lib/tram/policy.rb', line 50

def items
  errors.items
end

#messagesArray<String>

The array of error messages translated for the current locale

Returns:

  • (Array<String>)


58
59
60
# File 'lib/tram/policy.rb', line 58

def messages
  errors.messages
end

#scopeArray<String>

The scope used for translating error messages

Returns:

  • (Array<String>)


22
23
24
# File 'lib/tram/policy.rb', line 22

def scope
  Array self.class.scope
end

#t(message, options) ⇒ String

Translates a message in the scope of current policy

Parameters:

  • message (#to_s)
  • options (Hash<Symbol, Object>)

Returns:

  • (String)


33
34
35
36
# File 'lib/tram/policy.rb', line 33

def t(message, **options)
  return message.to_s unless message.is_a? Symbol
  I18n.t message, scope: scope, **options
end

#valid?(&filter) ⇒ Boolean

Checks whether the policy is valid

Parameters:

  • filter (Proc, nil)

    Block describing **errors to be skipped**

Returns:

  • (Boolean)


67
68
69
# File 'lib/tram/policy.rb', line 67

def valid?(&filter)
  filter ? errors.reject(&filter).empty? : errors.empty?
end

#validate!(&filter) ⇒ nil

Raises exception if the policy is not valid

Parameters:

  • filter (Proc, nil)

    Block describing **errors to be skipped**

Returns:

  • (nil)

    if the policy is valid

Raises:



86
87
88
# File 'lib/tram/policy.rb', line 86

def validate!(&filter)
  raise ValidationError.new(self, filter) unless valid?(&filter)
end