Class: TransitionValidator

Inherits:
ActiveModel::EachValidator
  • Object
show all
Defined in:
lib/transition_validator.rb,
lib/transition_validator/version.rb

Constant Summary collapse

VERSION =
"1.0.2"

Instance Method Summary collapse

Instance Method Details

#transition!(record, attribute, from, to) ⇒ Object



21
22
23
24
25
26
27
28
# File 'lib/transition_validator.rb', line 21

def transition! record, attribute, from, to
  method = "#{from}_to_#{to}_#{attribute}_transition".to_sym
  if record.methods.include?(method) && from != to
    record.send(method)
  else
    true
  end
end

#transition?(record, attribute, from, to) ⇒ Boolean

Returns:

  • (Boolean)


16
17
18
19
# File 'lib/transition_validator.rb', line 16

def transition? record, attribute, from, to
  transitions = record.method("#{attribute}_transitions").call
  (from == to || (transitions.key?(from) && transitions[from].include?(to))) ? true : false
end

#validate_each(record, attribute, value) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
# File 'lib/transition_validator.rb', line 4

def validate_each(record, attribute, value)
  from ||= record.changes[attribute].to_a.first
  to ||= record.changes[attribute].to_a.last
  if transition?(record, attribute, from, to)
    if !transition!(record, attribute, from, to)
      record.errors[attribute] << I18n.t('errors.messages.transition')
    end
  else
    record.errors[attribute] << I18n.t('errors.messages.transition')
  end
end