File: conditionals.rb

package info (click to toggle)
ruby-client-side-validations 23.1.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 272 kB
  • sloc: ruby: 788; javascript: 671; makefile: 2
file content (38 lines) | stat: -rw-r--r-- 991 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# frozen_string_literal: true

module ClientSideValidations
  module ActiveModel
    module Conditionals
      private

      def run_conditionals(conditionals, conditional_type)
        Array.wrap(conditionals).all? do |conditional|
          value = run_one_conditional(conditional)
          if conditional_type == :unless
            !value
          else
            value
          end
        end
      end

      def run_one_conditional(conditional)
        case conditional
        when ::Proc
          case conditional.arity
          when 0
            instance_exec(&conditional)
          when 1
            instance_exec(self, &conditional)
          else
            raise ArgumentError, 'Missing argument'
          end
        when Symbol
          send conditional
        else
          raise ArgumentError, "Unknown conditional #{conditional}. If supported by ActiveModel/ActiveRecord open a bug for client_side_validations gem."
        end
      end
    end
  end
end