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
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
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