Class: Lite::Validation::Validator::Coordinator::Builder

Inherits:
Object
  • Object
show all
Includes:
Ruling::Constructors
Defined in:
lib/lite/validation/validator/coordinator/builder.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Ruling::Constructors

#Commit, #Dispute, #Invalidate, #Pass, #Refute

Constructor Details

#initializeBuilder



19
20
21
22
23
# File 'lib/lite/validation/validator/coordinator/builder.rb', line 19

def initialize
  @validation_error_adapter = nil
  @final_error_adapter = nil
  @interface_adapter = nil
end

Class Method Details

.define(&block) ⇒ Object



15
16
17
# File 'lib/lite/validation/validator/coordinator/builder.rb', line 15

def self.define(&block)
  new.tap { _1.instance_eval(&block) }.build
end

Instance Method Details

#buildObject

Raises:



60
61
62
63
64
65
66
67
68
69
# File 'lib/lite/validation/validator/coordinator/builder.rb', line 60

def build
  result = validate
  raise Error, "Builder invalid: #{result.error.message}" unless result.success?

  Coordinator::Instance.new(
    interface: interface_adapter,
    validation_error: validation_error_adapter.build,
    final_error: final_error_adapter
  )
end

#final_error_adapter(*args) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
# File 'lib/lite/validation/validator/coordinator/builder.rb', line 36

def final_error_adapter(*args)
  case args.length
  when 1
    raise(Error, 'Final error adapter already set') unless @final_error_adapter.nil?

    @final_error_adapter = args[0]
  when 0
    @final_error_adapter
  else raise Error, "Unexpected arguments to builder: #{args.inspect}"
  end
end

#interface_adapter(*args) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
# File 'lib/lite/validation/validator/coordinator/builder.rb', line 48

def interface_adapter(*args)
  case args.length
  when 1
    raise(Error, 'Monads adapter already set') unless @interface_adapter.nil?

    @interface_adapter = args[0]

  when 0 then @interface_adapter
  else raise Error, "Unexpected arguments to builder: #{args.inspect}"
  end
end

#validateObject

rubocop:disable Metrics/AbcSize



71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/lite/validation/validator/coordinator/builder.rb', line 71

def validate # rubocop:disable Metrics/AbcSize
  coordinator = Coordinator::Default.instance(Errors::Flat)

  Validator::Node::Root.initial(self, coordinator).at do |builder|
    builder.validate(:interface_adapter) do |adapter|
      Refute(coordinator.internal_error(:value_missing)) if adapter.nil?
    end.validate(:final_error_adapter) do |adapter|
      Refute(coordinator.internal_error(:value_missing)) if adapter.nil?
    end.at(:validation_error_adapter) do |errors|
      errors.validate do |adapter|
        Refute(coordinator.internal_error(:value_missing)) if adapter.nil?
      end.validate(:structured_error) do |proc|
        Refute(coordinator.internal_error(:value_missing)) if proc.nil?
      end
    end
  end.to_result
end

#validation_error_adapter(&block) ⇒ Object



25
26
27
28
29
30
31
32
33
34
# File 'lib/lite/validation/validator/coordinator/builder.rb', line 25

def validation_error_adapter(&block)
  if block
    raise(Error, 'Validation error adapter already set') unless @validation_error_adapter.nil?

    @validation_error_adapter = Errors::Builder.define(&block)

  else
    @validation_error_adapter
  end
end