Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion app/graphql/mutations/namespaces/projects/flows/update.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ class Update < BaseMutation

argument :flow_input, Types::Input::FlowInputType, description: 'The updated flow', required: true

def resolve(flow_id:, flow_input:, **_params)
def resolve(flow_id:, flow_input:)
flow = SagittariusSchema.object_from_id(flow_id)

return { errors: [create_error(:flow_not_found, 'Flow does not exist')] } if flow.nil?
Expand Down
2 changes: 1 addition & 1 deletion app/graphql/types/input/node_parameter_input_type.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ class NodeParameterInputType < Types::BaseInputObject
argument :parameter_definition_id, Types::GlobalIdType[::ParameterDefinition],
required: true, description: 'The identifier of the Parameter Definition'

argument :value, Types::Input::NodeParameterValueInputType, required: false,
argument :value, Types::Input::NodeParameterValueInputType, required: true,
description: 'The value of the parameter'
end
end
Expand Down
10 changes: 6 additions & 4 deletions app/graphql/types/literal_value_type.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,12 @@ class LiteralValueType < Types::BaseObject
description 'Represents a literal value, such as a string or number.'

field :value, GraphQL::Types::JSON,
null: false,
description: 'The literal value itself as JSON.',
method: :itself
null: true,
description: 'The literal value itself as JSON.'

timestamps
# can't use method: :itself on the field because that turns {} into null
def value
object
end
end
end
6 changes: 3 additions & 3 deletions app/graphql/types/node_parameter_type.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,12 @@ class NodeParameterType < Types::BaseObject
field :value, Types::NodeParameterValueType, null: true, description: 'The value of the parameter'

def value
if object.literal_value.present?
object.literal_value
elsif object.reference_value.present?
if object.reference_value.present?
object.reference_value
elsif object.function_value_id.present?
object.function_value
else
object.literal_value
end
end

Expand Down
11 changes: 5 additions & 6 deletions app/models/node_parameter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,12 @@ def to_grpc

param.value = Tucana::Shared::NodeValue.new(literal_value: Tucana::Shared::Value.from_ruby({}))

if literal_value.present?
param.value.literal_value = Tucana::Shared::Value.from_ruby(literal_value)
elsif reference_value.present?
if reference_value.present?
param.value.reference_value = reference_value.to_grpc
elsif function_value.present?
param.value.node_function_id = function_value.id
else
param.value.literal_value = Tucana::Shared::Value.from_ruby(literal_value)
end

param
Expand All @@ -31,9 +31,8 @@ def to_grpc

def only_one_value_present
values = [!literal_value.nil?, reference_value.present?, function_value.present?]
return if values.count(true) == 1
return if values.count(true) <= 1

errors.add(:value,
'Exactly one of literal_value, reference_value, or function_value must be present')
errors.add(:value, 'Only one of literal_value, reference_value, or function_value must be present')
end
end
2 changes: 1 addition & 1 deletion app/models/reference_value.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
class ReferenceValue < ApplicationRecord
belongs_to :node_function # real value association
belongs_to :data_type_identifier
has_many :reference_paths, inverse_of: :reference_value, autosave: true
has_many :reference_paths, inverse_of: :reference_value, autosave: true, dependent: :destroy
has_many :node_parameters, inverse_of: :reference_value

def to_grpc
Expand Down
4 changes: 3 additions & 1 deletion app/services/namespaces/projects/flows/update_service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,9 @@ def update_flow_attributes
end

def update_settings(t)
flow_input.settings&.each do |setting|
return if flow_input.settings.blank?

flow_input.settings.each do |setting|
flow_setting = flow.flow_settings.find_or_initialize_by(flow_setting_id: setting.flow_setting_identifier)
flow_setting.object = setting.value

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# frozen_string_literal: true

class AllowAllNullValuesInNodeParameter < Code0::ZeroTrack::Database::Migration[1.0]
def change
add_check_constraint :node_parameters,
'(num_nonnulls(literal_value, reference_value_id, function_value_id) <= 1)',
name: check_constraint_name(:node_parameters, :value, :at_most_one)

remove_check_constraint :node_parameters,
'(num_nonnulls(literal_value, reference_value_id, function_value_id) = 1)',
name: check_constraint_name(:node_parameters, :value, :one_of)
end
end
1 change: 1 addition & 0 deletions db/schema_migrations/20260121183311
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
44b8e5e992817dec1f464949ee61b1c7937421aec377d3ee8d210ca06c2be9bc
2 changes: 1 addition & 1 deletion db/structure.sql
Original file line number Diff line number Diff line change
Expand Up @@ -596,7 +596,7 @@ CREATE TABLE node_parameters (
created_at timestamp with time zone NOT NULL,
updated_at timestamp with time zone NOT NULL,
parameter_definition_id bigint NOT NULL,
CONSTRAINT check_fdac0ea550 CHECK ((num_nonnulls(literal_value, reference_value_id, function_value_id) = 1))
CONSTRAINT check_46b42221bc CHECK ((num_nonnulls(literal_value, reference_value_id, function_value_id) <= 1))
);

CREATE SEQUENCE node_parameters_id_seq
Expand Down
2 changes: 1 addition & 1 deletion docs/graphql/input_object/nodeparameterinput.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,4 @@ Input type for Node parameter
| Name | Type | Description |
|------|------|-------------|
| `parameterDefinitionId` | [`ParameterDefinitionID!`](../scalar/parameterdefinitionid.md) | The identifier of the Parameter Definition |
| `value` | [`NodeParameterValueInput`](../input_object/nodeparametervalueinput.md) | The value of the parameter |
| `value` | [`NodeParameterValueInput!`](../input_object/nodeparametervalueinput.md) | The value of the parameter |
4 changes: 1 addition & 3 deletions docs/graphql/object/literalvalue.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,5 @@ Represents a literal value, such as a string or number.

| Name | Type | Description |
|------|------|-------------|
| `createdAt` | [`Time!`](../scalar/time.md) | Time when this LiteralValue was created |
| `updatedAt` | [`Time!`](../scalar/time.md) | Time when this LiteralValue was last updated |
| `value` | [`JSON!`](../scalar/json.md) | The literal value itself as JSON. |
| `value` | [`JSON`](../scalar/json.md) | The literal value itself as JSON. |

23 changes: 20 additions & 3 deletions spec/models/node_parameter_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@
it 'validates only one of the value fields is present' do
param = build(
:node_parameter,
literal_value: nil,
reference_value: nil,
literal_value: 1,
reference_value: create(:reference_value),
function_value: nil,
parameter_definition: create(
:parameter_definition,
Expand All @@ -41,7 +41,24 @@
)
expect(param).not_to be_valid
expect(param.errors[:value])
.to include('Exactly one of literal_value, reference_value, or function_value must be present')
.to include('Only one of literal_value, reference_value, or function_value must be present')
end

it 'allows all values to be empty' do
param = build(
:node_parameter,
literal_value: nil,
reference_value: nil,
function_value: nil,
parameter_definition: create(
:parameter_definition,
data_type: create(
:data_type_identifier,
data_type: create(:data_type)
)
)
)
expect(param).to be_valid
end
end
end