Some checks failed
Lock Threads / action (push) Has been cancelled
Mark stale issues and pull requests / stale (push) Has been cancelled
Publish Chatwoot EE docker images / build (linux/amd64, ubuntu-latest) (push) Has been cancelled
Publish Chatwoot EE docker images / build (linux/arm64, ubuntu-22.04-arm) (push) Has been cancelled
Publish Chatwoot EE docker images / merge (push) Has been cancelled
Publish Chatwoot CE docker images / build (linux/amd64, ubuntu-latest) (push) Has been cancelled
Publish Chatwoot CE docker images / build (linux/arm64, ubuntu-22.04-arm) (push) Has been cancelled
Publish Chatwoot CE docker images / merge (push) Has been cancelled
Run Chatwoot CE spec / lint-backend (push) Has been cancelled
Run Chatwoot CE spec / lint-frontend (push) Has been cancelled
Run Chatwoot CE spec / frontend-tests (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (0, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (1, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (10, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (11, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (12, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (13, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (14, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (15, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (2, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (3, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (4, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (5, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (6, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (7, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (8, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (9, 16) (push) Has been cancelled
Run Linux nightly installer / nightly (push) Has been cancelled
- Add Logistics component with progress tracking - Add OrderDetail component for order information - Support data-driven steps and actions - Add blue color scale to widget SCSS - Fix node overflow and progress bar rendering issues - Add English translations for dashboard components Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
66 lines
1.8 KiB
Ruby
66 lines
1.8 KiB
Ruby
class AutomationRules::ConditionValidationService
|
|
ATTRIBUTE_MODEL = 'conversation_attribute'.freeze
|
|
|
|
def initialize(rule)
|
|
@rule = rule
|
|
@account = rule.account
|
|
|
|
file = File.read('./lib/filters/filter_keys.yml')
|
|
@filters = YAML.safe_load(file)
|
|
|
|
@conversation_filters = @filters['conversations']
|
|
@contact_filters = @filters['contacts']
|
|
@message_filters = @filters['messages']
|
|
end
|
|
|
|
def perform
|
|
@rule.conditions.each do |condition|
|
|
return false unless valid_condition?(condition) && valid_query_operator?(condition)
|
|
end
|
|
|
|
true
|
|
end
|
|
|
|
private
|
|
|
|
def valid_query_operator?(condition)
|
|
query_operator = condition['query_operator']
|
|
|
|
return true if query_operator.nil?
|
|
return true if query_operator.empty?
|
|
|
|
%w[AND OR].include?(query_operator.upcase)
|
|
end
|
|
|
|
def valid_condition?(condition)
|
|
key = condition['attribute_key']
|
|
|
|
conversation_filter = @conversation_filters[key]
|
|
contact_filter = @contact_filters[key]
|
|
message_filter = @message_filters[key]
|
|
|
|
if conversation_filter || contact_filter || message_filter
|
|
operation_valid?(condition, conversation_filter || contact_filter || message_filter)
|
|
else
|
|
custom_attribute_present?(key, condition['custom_attribute_type'])
|
|
end
|
|
end
|
|
|
|
def operation_valid?(condition, filter)
|
|
filter_operator = condition['filter_operator']
|
|
|
|
# attribute changed is a special case
|
|
return true if filter_operator == 'attribute_changed'
|
|
|
|
filter['filter_operators'].include?(filter_operator)
|
|
end
|
|
|
|
def custom_attribute_present?(attribute_key, attribute_model)
|
|
attribute_model = attribute_model.presence || self.class::ATTRIBUTE_MODEL
|
|
|
|
@account.custom_attribute_definitions.where(
|
|
attribute_model: attribute_model
|
|
).find_by(attribute_key: attribute_key).present?
|
|
end
|
|
end
|