class ActiveGraphql::Client::Adapters::FormatMultipartVariables

Converts deeply nested File instances to Faraday::UploadIO

Attributes

variables[R]

Public Class Methods

new(variables) click to toggle source
# File lib/active_graphql/client/adapters/format_multipart_variables.rb, line 14
def initialize(variables)
  @variables = variables
end

Public Instance Methods

call() click to toggle source
# File lib/active_graphql/client/adapters/format_multipart_variables.rb, line 18
def call
  deep_transform_values(variables) do |variable|
    variable_value(variable)
  end
end

Private Instance Methods

deep_transform_values(hash) { |val| ... } click to toggle source
# File lib/active_graphql/client/adapters/format_multipart_variables.rb, line 28
def deep_transform_values(hash, &block)
  return hash unless hash.is_a?(Hash)

  hash.transform_values do |val|
    if val.is_a?(Hash)
      deep_transform_values(val, &block)
    else
      yield(val)
    end
  end
end
file_variable_value(file) click to toggle source
# File lib/active_graphql/client/adapters/format_multipart_variables.rb, line 52
def file_variable_value(file)
  content_type = MIME::Types.type_for(file.path).first
  return Faraday::UploadIO.new(file.path, content_type) if content_type

  raise NoMimeTypeException, "Unable to determine mime type for #{file.path}"
end
variable_value(variable) click to toggle source
# File lib/active_graphql/client/adapters/format_multipart_variables.rb, line 40
def variable_value(variable)
  if variable.is_a?(Array)
    variable.map { |it| variable_value(it) }
  elsif variable.is_a?(Hash)
    variable.transform_values { |it| variable_value(it) }
  elsif variable.is_a?(File)
    file_variable_value(variable)
  else
    variable
  end
end