class Paradocs::Extensions::PayloadBuilder

Attributes

result[R]
skip_word[RW]
structure[R]

Public Class Methods

new(schema, skip_word: :skip) click to toggle source
# File lib/paradocs/extensions/payload_builder.rb, line 6
def initialize(schema, skip_word: :skip)
  @structure  = schema.structure
  @skip_word  = skip_word
end

Public Instance Methods

build!(sort_by_schema: false, &block) click to toggle source
# File lib/paradocs/extensions/payload_builder.rb, line 11
def build!(sort_by_schema: false, &block)
  result = structure.all_nested.map { |name, struct| [name, build_simple_structure(struct, &block)] }.to_h
  sort_by_schema ? schema.resolve(result).output : result
end

Private Instance Methods

build_simple_structure(struct, &block) click to toggle source
# File lib/paradocs/extensions/payload_builder.rb, line 18
def build_simple_structure(struct, &block)
  struct.map do |key, value|
    key = key.to_s
    next if key.start_with?(Paradocs.config.meta_prefix) # skip all the meta fields
    ex_value = restore_one(key, value, &block)
    next if ex_value == @skip_word
    key = value[:alias] || key
    [key.to_s, ex_value]
  end.compact.to_h
end
restore_one(key, value) { |key, value, ex_value, skip_word| ... } click to toggle source
# File lib/paradocs/extensions/payload_builder.rb, line 29
def restore_one(key, value, &block)
  default = value[:default]
  ex_value = if value[:structure]
    data = build_simple_structure(value[:structure], &block)
    value[:type] == :array ? [data] : data
  elsif default
    default.is_a?(Proc) ? default.call : default
  elsif value[:options] && !value[:options].empty?
    options = value[:options]
    value[:type] == :array ? options : options.sample
  end
  return ex_value unless block_given?
  yield(key, value, ex_value, @skip_word)
end