class TLAW::ParamSet

Represents set of param current API endpoint or namespace have. You'll never instantiate it directly, just look at {DSL#param} for param creation. But probably you could make use of knowledge of this class' API when deep investigating what's going on, like:

“`ruby params = api.namespaces.endpoints.param_set p [params.count, params.names, params.describe] “`

Attributes

parent[RW]

Public Class Methods

new() click to toggle source
# File lib/tlaw/param_set.rb, line 14
def initialize
  @params = {}
end

Public Instance Methods

[](name) click to toggle source
# File lib/tlaw/param_set.rb, line 30
def [](name)
  @params[name]
end
add(name, **opts) click to toggle source
# File lib/tlaw/param_set.rb, line 18
def add(name, **opts)
  # Not updating parent param, just make sure it exists
  return if @parent && @parent.all_params[name]

  @params[name] =
    if @params[name]
      @params[name].merge(**opts)
    else
      Param.make(name, **opts)
    end
end
all_params() click to toggle source
# File lib/tlaw/param_set.rb, line 77
def all_params
  (@parent ? @parent.all_params : {}).merge(@params)
end
describe() click to toggle source
# File lib/tlaw/param_set.rb, line 62
def describe
  Util::Description.new(ordered.map(&:describe).join("\n"))
end
empty?() click to toggle source
# File lib/tlaw/param_set.rb, line 46
def empty?
  @params.empty? && (!@parent || @parent.empty?)
end
inspect() click to toggle source
# File lib/tlaw/param_set.rb, line 81
def inspect
  "#<#{self.class.name} #{names.join(', ')}"\
    "#{" (parent=#{parent.inspect})" if parent && !parent.empty?}>"
end
Also aliased as: to_s
names() click to toggle source
# File lib/tlaw/param_set.rb, line 42
def names
  @params.keys
end
process(**input) click to toggle source
# File lib/tlaw/param_set.rb, line 66
def process(**input)
  validate_unknown(input)

  all_params
    .map { |name, dfn| [name, dfn, input[name]] }
    .tap(&method(:validate_required))
    .reject { |*, val| val.nil? }
    .map { |_name, dfn, val| [dfn.field, dfn.convert_and_format(val)] }
    .to_h
end
to_a() click to toggle source
# File lib/tlaw/param_set.rb, line 34
def to_a
  @params.values
end
to_code() click to toggle source
# File lib/tlaw/param_set.rb, line 50
def to_code
  ordered.map(&:to_code).join(', ')
end
to_h() click to toggle source
# File lib/tlaw/param_set.rb, line 38
def to_h
  @params
end
to_hash_code(values = nil) click to toggle source
# File lib/tlaw/param_set.rb, line 54
def to_hash_code(values = nil)
  if values
    names.map { |n| "#{n}: #{values[n].inspect}" }.join(', ')
  else
    names.map { |n| "#{n}: #{n}" }.join(', ')
  end
end
to_s()
Alias for: inspect

Private Instance Methods

ordered() click to toggle source
# File lib/tlaw/param_set.rb, line 104
def ordered
  @params.values
         .partition(&:keyword?).reverse.map { |args|
           args.partition(&:required?)
         }.flatten
end
validate_required(definitions_and_params) click to toggle source
# File lib/tlaw/param_set.rb, line 97
def validate_required(definitions_and_params)
  definitions_and_params.each do |name, dfn, val|
    dfn.required? && val.nil? and
      fail ArgumentError, "Required parameter #{name} is missing"
  end
end
validate_unknown(input) click to toggle source
# File lib/tlaw/param_set.rb, line 90
def validate_unknown(input)
  (input.keys - all_params.keys).tap { |unknown|
    unknown.empty? or
      fail(ArgumentError, "Unknown parameters: #{unknown.join(', ')}")
  }
end