module Rack::Cargo::ReferenceResolver
Constants
- PLACEHOLDER_END
- PLACEHOLDER_PATTERN
- PLACEHOLDER_START
- REFERENCING_ENABLED
Public Class Methods
call(request, state)
click to toggle source
# File lib/rack/cargo/reference_resolver.rb, line 13 def call(request, state) REFERENCING_ENABLED.each do |attribute_key| next if request.fetch(attribute_key).nil? element, converted_to_json = get_json_element(request, attribute_key) placeholders = find_placeholders(element) element = replace_placeholders(element, placeholders, state) element = JSON.parse(element) if converted_to_json request.store(attribute_key, element) end end
Private Class Methods
find_placeholders(element)
click to toggle source
# File lib/rack/cargo/reference_resolver.rb, line 52 def find_placeholders(element) element.scan(PLACEHOLDER_PATTERN).flatten end
get_json_element(request, attribute_key)
click to toggle source
# File lib/rack/cargo/reference_resolver.rb, line 56 def get_json_element(request, attribute_key) element_copy = request.fetch(attribute_key).dup if element_copy.is_a?(String) [element_copy, false] else [element_copy.to_json, true] end end
replace_placeholders(element, placeholders, state)
click to toggle source
# File lib/rack/cargo/reference_resolver.rb, line 29 def replace_placeholders(element, placeholders, state) previous_responses = state.fetch(:previous_responses) placeholders.each do |placeholder| value_path = value_path_for(placeholder) value = previous_responses.dig(*value_path) next unless value replacement_regex = replacement_regex_for(placeholder) element = element.gsub(replacement_regex, value.to_s) end element end
replacement_regex_for(placeholder)
click to toggle source
# File lib/rack/cargo/reference_resolver.rb, line 48 def replacement_regex_for(placeholder) /#{PLACEHOLDER_START}#{placeholder}#{PLACEHOLDER_END}/ end
value_path_for(placeholder)
click to toggle source
# File lib/rack/cargo/reference_resolver.rb, line 44 def value_path_for(placeholder) placeholder.split(".").map(&:to_s).insert(1, REQUEST_BODY) end