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
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