# File lib/active_graphql/model/action_formatter.rb, line 35 def primary_key action.meta_attributes.fetch(:primary_key, 'id').to_s end
class ActiveGraphql::Model::ActionFormatter
reformats action to default format which very opinionated and based in following assumptions:
-
all attributes and fields are camel cased
-
all mutation actions accept one or two fields: id and input (input is everyting except 'id')
-
collection actions are paginated and accepts input attribute `filter`
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