Module: Metaractor::Parameters::ClassMethods

Defined in:
lib/metaractor/parameters.rb

Instance Method Summary collapse

Instance Method Details

#optional(*params, **options) ⇒ Object


100
101
102
# File 'lib/metaractor/parameters.rb', line 100

def optional(*params, **options)
  parameters(*params, **options)
end

#parameter(name, **options) ⇒ Object


66
67
68
69
70
71
72
73
74
# File 'lib/metaractor/parameters.rb', line 66

def parameter(name, **options)
  if param = self.parameter_hash[name.to_sym]
    param.merge!(**options)
  else
    Parameter.new(name, **options).tap do |parameter|
      self.parameter_hash[parameter.name] = parameter
    end
  end
end

#parameter_hashObject


82
83
84
# File 'lib/metaractor/parameters.rb', line 82

def parameter_hash
  @parameters ||= {}
end

#parameters(*names, **options) ⇒ Object


76
77
78
79
80
# File 'lib/metaractor/parameters.rb', line 76

def parameters(*names, **options)
  names.each do |name|
    parameter(name, **options)
  end
end

#parameters_in_tree(tree) ⇒ Object


113
114
115
116
117
118
119
# File 'lib/metaractor/parameters.rb', line 113

def parameters_in_tree(tree)
  if tree.respond_to?(:to_h)
    tree.to_h.values.first.to_a.flat_map {|t| parameters_in_tree(t)}
  else
    [tree]
  end
end

#required(*params, **options) ⇒ Object


90
91
92
93
94
95
96
97
98
# File 'lib/metaractor/parameters.rb', line 90

def required(*params, **options)
  if params.empty?
    tree = options
    self.requirement_trees << tree
    parameters(*parameters_in_tree(tree), required: tree)
  else
    parameters(*params, required: true, **options)
  end
end

#requirement_treesObject


86
87
88
# File 'lib/metaractor/parameters.rb', line 86

def requirement_trees
  @requirement_trees ||= []
end

#validate_hooksObject


109
110
111
# File 'lib/metaractor/parameters.rb', line 109

def validate_hooks
  @validate_hooks ||= []
end

#validate_parameters(*hooks, &block) ⇒ Object


104
105
106
107
# File 'lib/metaractor/parameters.rb', line 104

def validate_parameters(*hooks, &block)
  hooks << block if block
  hooks.each {|hook| validate_hooks.push(hook) }
end