class ActiveGraphql::Client::Actions::Action

Base class for query/mutation action objects

Attributes

client[R]
input_attributes[R]
meta_attributes[R]
name[R]
output_values[R]
type[R]

Public Class Methods

new(name:, client:, output_values: [], input_attributes: {}, meta_attributes: {}) click to toggle source
# File lib/active_graphql/client/actions/action.rb, line 21
def initialize(name:, client:, output_values: [], input_attributes: {}, meta_attributes: {})
  @name = name
  @output_values = output_values
  @input_attributes = input_attributes
  @meta_attributes = meta_attributes
  @client = client
end

Public Instance Methods

graphql_variables() click to toggle source
# File lib/active_graphql/client/actions/action.rb, line 78
def graphql_variables
  variable_attributes(input_attributes)
end
input(**extra_input_attributes)
Alias for: where
inspect() click to toggle source
# File lib/active_graphql/client/actions/action.rb, line 29
def inspect
  "#<#{self.class} " \
    "name: #{name.inspect}, " \
    "input: #{input_attributes.inspect}, " \
    "output: #{output_values.inspect}, " \
    "meta: #{meta_attributes.inspect}" \
    '>'
end
meta(new_attributes) click to toggle source
# File lib/active_graphql/client/actions/action.rb, line 51
def meta(new_attributes)
  chain(meta_attributes: meta_attributes.merge(new_attributes))
end
output(*array_outputs, **hash_outputs)
Alias for: select
reselect(*array_outputs, **hash_outputs) click to toggle source
# File lib/active_graphql/client/actions/action.rb, line 55
def reselect(*array_outputs, **hash_outputs)
  outputs = join_array_and_hash(*array_outputs, **hash_outputs)
  chain(output_values: outputs)
end
response() click to toggle source
# File lib/active_graphql/client/actions/action.rb, line 47
def response
  client.post(self)
end
rewhere(**input_attributes) click to toggle source
# File lib/active_graphql/client/actions/action.rb, line 38
def rewhere(**input_attributes)
  chain(input_attributes: input_attributes)
end
select(*array_outputs, **hash_outputs) click to toggle source
# File lib/active_graphql/client/actions/action.rb, line 60
def select(*array_outputs, **hash_outputs)
  full_array_outputs = (output_values + array_outputs).uniq
  reselect(*full_array_outputs, **hash_outputs)
end
Also aliased as: output
to_graphql() click to toggle source
# File lib/active_graphql/client/actions/action.rb, line 66
        def to_graphql
          assert_format

          <<~TXT
            #{type}#{wrapped_header formatted_variable_headers} {
              #{name}#{wrapped_header formatted_inputs} {
                #{formatted_outputs}
              }
            }
          TXT
        end
where(**extra_input_attributes) click to toggle source
# File lib/active_graphql/client/actions/action.rb, line 42
def where(**extra_input_attributes)
  rewhere(**input_attributes, **extra_input_attributes)
end
Also aliased as: input

Private Instance Methods

assert_format() click to toggle source
# File lib/active_graphql/client/actions/action.rb, line 100
def assert_format
  return unless output_values.empty?

  raise(
    InvalidActionError,
    'at least one return value must be set. Do `query.select(:fields_to_return)` to do so'
  )
end
chain(**new_values) click to toggle source
# File lib/active_graphql/client/actions/action.rb, line 109
def chain(**new_values)
  self.class.new(
    name: name,
    output_values: output_values,
    input_attributes: input_attributes,
    meta_attributes: meta_attributes,
    client: client,
    **new_values
  )
end
formatted_inputs() click to toggle source
# File lib/active_graphql/client/actions/action.rb, line 88
def formatted_inputs
  FormatInputs.new(input_attributes).call
end
formatted_outputs() click to toggle source
# File lib/active_graphql/client/actions/action.rb, line 92
def formatted_outputs
  FormatOutputs.new(output_values).call
end
formatted_variable_headers() click to toggle source
# File lib/active_graphql/client/actions/action.rb, line 96
def formatted_variable_headers
  FormatVariableInputs.new(graphql_variables).call
end
join_array_and_hash(*array, **hash) click to toggle source
# File lib/active_graphql/client/actions/action.rb, line 84
def join_array_and_hash(*array, **hash)
  array + hash.map { |k, v| { k => v } }
end
wrapped_header(header_text) click to toggle source
# File lib/active_graphql/client/actions/action.rb, line 120
def wrapped_header(header_text)
  return '' if header_text.empty?

  "(#{header_text})"
end