Module: Grape::DSL::Parameters

Extended by:
ActiveSupport::Concern
Included in:
Validations::ParamsScope
Defined in:
lib/grape/dsl/parameters.rb

Instance Method Summary collapse

Instance Method Details

#all_or_none_of(*attrs) ⇒ Object



71
72
73
# File 'lib/grape/dsl/parameters.rb', line 71

def all_or_none_of(*attrs)
  validates(attrs, all_or_none_of: true)
end

#at_least_one_of(*attrs) ⇒ Object



67
68
69
# File 'lib/grape/dsl/parameters.rb', line 67

def at_least_one_of(*attrs)
  validates(attrs, at_least_one_of: true)
end

#exactly_one_of(*attrs) ⇒ Object



63
64
65
# File 'lib/grape/dsl/parameters.rb', line 63

def exactly_one_of(*attrs)
  validates(attrs, exactly_one_of: true)
end

#group(*attrs, &block) ⇒ Object



75
76
77
# File 'lib/grape/dsl/parameters.rb', line 75

def group(*attrs, &block)
  requires(*attrs, &block)
end

#mutually_exclusive(*attrs) ⇒ Object



59
60
61
# File 'lib/grape/dsl/parameters.rb', line 59

def mutually_exclusive(*attrs)
  validates(attrs, mutual_exclusion: true)
end

#optional(*attrs, &block) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/grape/dsl/parameters.rb', line 37

def optional(*attrs, &block)
  orig_attrs = attrs.clone

  opts = attrs.last.is_a?(Hash) ? attrs.pop : {}
  type = opts[:type]

  # check type for optional parameter group
  if attrs && block_given?
    fail Grape::Exceptions::MissingGroupTypeError.new if type.nil?
    fail Grape::Exceptions::UnsupportedGroupTypeError.new unless [Array, Hash].include?(type)
  end

  if opts[:using]
    require_optional_fields(attrs.first, opts)
  else
    validate_attributes(attrs, opts, &block)

    block_given? ? new_scope(orig_attrs, true, &block) :
        push_declared_params(attrs)
  end
end

#params(params) ⇒ Object



79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/grape/dsl/parameters.rb', line 79

def params(params)
  params = @parent.params(params) if @parent
  if @element
    if params.is_a?(Array)
      params = params.flat_map { |el| el[@element] || {} }
    elsif params.is_a?(Hash)
      params = params[@element] || {}
    else
      params = {}
    end
  end
  params
end

#requires(*attrs, &block) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/grape/dsl/parameters.rb', line 21

def requires(*attrs, &block)
  orig_attrs = attrs.clone

  opts = attrs.last.is_a?(Hash) ? attrs.pop : {}
  opts.merge!(presence: true)

  if opts[:using]
    require_required_and_optional_fields(attrs.first, opts)
  else
    validate_attributes(attrs, opts, &block)

    block_given? ? new_scope(orig_attrs, &block) :
        push_declared_params(attrs)
  end
end

#use(*names) ⇒ Object Also known as: use_scope, includes



8
9
10
11
12
13
14
15
16
17
# File 'lib/grape/dsl/parameters.rb', line 8

def use(*names)
  named_params = Grape::DSL::Configuration.stacked_hash_to_hash(@api.namespace_stackable(:named_params)) || {}
  options = names.last.is_a?(Hash) ? names.pop : {}
  names.each do |name|
    params_block = named_params.fetch(name) do
      fail "Params :#{name} not found!"
    end
    instance_exec(options, &params_block)
  end
end