class ActiveGraphql::Model::ActionFormatter

reformats action to default format which very opinionated and based in following assumptions:

github graphql structure was used as inspiration

Attributes

action[R]

Public Class Methods

call(action) click to toggle source
# File lib/active_graphql/model/action_formatter.rb, line 14
def self.call(action)
  new(action).call
end
new(action) click to toggle source
# File lib/active_graphql/model/action_formatter.rb, line 18
def initialize(action)
  @action = action
end

Public Instance Methods

call() click to toggle source
# File lib/active_graphql/model/action_formatter.rb, line 22
def call
  action.class.new(
    name: formatted_name,
    client: action.client,
    output_values: formatted_outputs,
    input_attributes: formatted_inputs.symbolize_keys
  )
end

Private Instance Methods

formatted_inputs() click to toggle source
# File lib/active_graphql/model/action_formatter.rb, line 43
def formatted_inputs
  attributes = action.input_attributes.deep_transform_keys do |key|
    key.to_s.starts_with?('__') ? key : key.to_s.camelize(:lower)
  end

  if mutation?
    formatted_mutation_inputs(attributes)
  else
    attributes
  end
end
formatted_mutation_inputs(attributes) click to toggle source
# File lib/active_graphql/model/action_formatter.rb, line 55
def formatted_mutation_inputs(attributes)
  {
    'input' => attributes.except(primary_key).presence,
    primary_key => attributes[primary_key]
  }.compact
end
formatted_name() click to toggle source
# File lib/active_graphql/model/action_formatter.rb, line 39
def formatted_name
  action.name.camelize(:lower)
end
formatted_output_values(attributes) click to toggle source
# File lib/active_graphql/model/action_formatter.rb, line 83
def formatted_output_values(attributes)
  if attributes.is_a?(Array)
    attributes.map { |it| formatted_output_values(it) }
  elsif attributes.is_a?(Hash)
    attributes
      .transform_keys { |key| formatted_output_values(key) }
      .transform_values { |value| formatted_output_values(value) }
  else
    attributes.to_s.camelize(:lower)
  end
end
formatted_outputs() click to toggle source
# File lib/active_graphql/model/action_formatter.rb, line 70
def formatted_outputs
  outputs = formatted_output_values(action.output_values)

  if paginated?
    {
      edges: { node: outputs },
      pageInfo: [:hasNextPage]
    }
  else
    outputs.is_a?(Hash) ? outputs.symbolize_keys : outputs
  end
end
mutation?() click to toggle source
# File lib/active_graphql/model/action_formatter.rb, line 62
def mutation?
  action.type == :mutation
end
paginated?() click to toggle source
# File lib/active_graphql/model/action_formatter.rb, line 66
def paginated?
  action.meta_attributes[:paginated]
end
primary_key() click to toggle source
# File lib/active_graphql/model/action_formatter.rb, line 35
def primary_key
  action.meta_attributes.fetch(:primary_key, 'id').to_s
end