Module: Hubbado::Sequence::Controls::Contract

Defined in:
lib/hubbado/sequence/controls/contract.rb

Class Method Summary collapse

Class Method Details

.example(model: nil, valid: true, save_result: true) ⇒ Object



5
6
7
# File 'lib/hubbado/sequence/controls/contract.rb', line 5

def self.example(model: nil, valid: true, save_result: true)
  example_class(valid: valid, save_result: save_result).new(model)
end

.example_class(valid: true, save_result: true) ⇒ Object

Returns a contract class that can be passed to Contract::Build as ‘contract_class:`. The class wraps whatever model is passed to .new.



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
39
40
41
# File 'lib/hubbado/sequence/controls/contract.rb', line 11

def self.example_class(valid: true, save_result: true)
  Class.new do
    attr_reader :model, :validated_with, :deserialized_with, :saved
    attr_accessor :errors

    define_singleton_method(:default_valid) { valid }
    define_singleton_method(:default_save_result) { save_result }

    def initialize(model = nil)
      @model = model
      @valid = self.class.default_valid
      @save_result = self.class.default_save_result
      @errors = @valid ? [] : [:something_invalid]
    end

    def validate(params)
      @validated_with = params
      @valid
    end

    def deserialize(params)
      @deserialized_with = params
      self
    end

    def save
      @saved = true
      @save_result
    end
  end
end