Module: Struct::Validatable::SubclassClassMethods

Defined in:
lib/struct/validatable/subclass_class_methods.rb

Utils collapse

Instance Method Summary collapse

Instance Method Details

#adjustable?(proc) ⇒ Boolean

Parameters:

  • proc (Proc)

Returns:

  • (Boolean)


69
70
71
# File 'lib/struct/validatable/subclass_class_methods.rb', line 69

def adjustable?(proc)
  (Proc === proc) && (proc.arity.abs == 1)
end

#adjuster_for(key) ⇒ Object

Parameters:

  • key (Symbol, String, #to_sym, Integer, #to_int)


22
23
24
# File 'lib/struct/validatable/subclass_class_methods.rb', line 22

def adjuster_for(key)
  @adjusters.fetch(autonym_for_key(key))
end

#autonym_for_index(index) ⇒ Object

Parameters:

  • index (Integer, #to_int)


53
54
55
# File 'lib/struct/validatable/subclass_class_methods.rb', line 53

def autonym_for_index(index)
  members.fetch(index.to_int)
end

#autonym_for_key(key) ⇒ Object

Parameters:

  • key (Symbol, String, #to_sym, Integer, #to_int)


32
33
34
35
36
37
38
39
40
41
# File 'lib/struct/validatable/subclass_class_methods.rb', line 32

def autonym_for_key(key)
  case key
  when ->k { k.respond_to?(:to_sym) }
    autonym_for_member(key)
  when ->k { k.respond_to?(:to_int) }
    members.fetch(key.to_int)
  else
    raise TypeError, key
  end
end

#autonym_for_member(name) ⇒ Object

Parameters:

  • name (Symbol, String, #to_sym)

Raises:

  • (NameError)


44
45
46
47
48
49
50
# File 'lib/struct/validatable/subclass_class_methods.rb', line 44

def autonym_for_member(name)
  name = name.to_sym

  raise NameError, name unless members.include?(name)

  name
end

#condition_for(key) ⇒ Object

Parameters:

  • key (Symbol, String, #to_sym, Integer, #to_int)


10
11
12
# File 'lib/struct/validatable/subclass_class_methods.rb', line 10

def condition_for(key)
  @conditions.fetch(autonym_for_key(key))
end

#conditionable?(obj) ⇒ Boolean

Returns:

  • (Boolean)


57
58
59
60
61
62
63
64
65
66
# File 'lib/struct/validatable/subclass_class_methods.rb', line 57

def conditionable?(obj)
  case obj
  when Proc
    obj.arity.abs == 1
  when Method
    obj.arity.abs <= 1
  else
    obj.respond_to?(:===)
  end
end

#WHEN(pattern, adjuster) ⇒ Proc

Adjuster Builders Apply adjuster when passed pattern.

Parameters:

  • pattern (Proc, Method, #===)
  • adjuster (Proc, #to_proc)

Returns:

  • (Proc)


80
81
82
83
84
85
86
87
88
89
90
# File 'lib/struct/validatable/subclass_class_methods.rb', line 80

def WHEN(pattern, adjuster)
  unless Eqq.pattern?(pattern)
    raise ArgumentError, 'wrong object for pattern'
  end

  unless adjustable?(adjuster)
    raise ArgumentError, 'wrong object for adjuster'
  end

  ->v { _valid?(pattern, v) ? adjuster.call(v) : v }
end

#with_adjuster?(key) ⇒ Boolean

Parameters:

  • key (Symbol, String, #to_sym, Integer, #to_int)

Returns:

  • (Boolean)


27
28
29
# File 'lib/struct/validatable/subclass_class_methods.rb', line 27

def with_adjuster?(key)
  @adjusters.key?(autonym_for_key(key))
end

#with_condition?(key) ⇒ Boolean Also known as: restrict?

Parameters:

  • key (Symbol, String, #to_sym, Integer, #to_int)

Returns:

  • (Boolean)


15
16
17
# File 'lib/struct/validatable/subclass_class_methods.rb', line 15

def with_condition?(key)
  @conditions.key?(autonym_for_key(key))
end