compatible_type
This commit is contained in:
parent
cd2b08e39b
commit
f98d1463a6
4 changed files with 7 additions and 7 deletions
|
@ -182,7 +182,7 @@ class TypesDeChampEditor::ConditionsComponent < ApplicationComponent
|
||||||
end
|
end
|
||||||
|
|
||||||
def current_right_valid?(left, right)
|
def current_right_valid?(left, right)
|
||||||
Logic.compatible_type?(left, right)
|
Logic.compatible_type?(left, right, @upper_tdcs)
|
||||||
end
|
end
|
||||||
|
|
||||||
def add_condition_tag
|
def add_condition_tag
|
||||||
|
|
|
@ -31,7 +31,7 @@ module Logic
|
||||||
in [:number, _]
|
in [:number, _]
|
||||||
end
|
end
|
||||||
|
|
||||||
if !compatible_type?(left, right)
|
if !compatible_type?(left, right, type_de_champs)
|
||||||
right = case left.type(type_de_champs)
|
right = case left.type(type_de_champs)
|
||||||
when :boolean
|
when :boolean
|
||||||
Constant.new(true)
|
Constant.new(true)
|
||||||
|
@ -47,7 +47,7 @@ module Logic
|
||||||
operator_class.new(left, right)
|
operator_class.new(left, right)
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.compatible_type?(left, right)
|
def self.compatible_type?(left, right, type_de_champs)
|
||||||
case [left.type(type_de_champs), right.type(type_de_champs)]
|
case [left.type(type_de_champs), right.type(type_de_champs)]
|
||||||
in [a, ^a] # syntax for same type
|
in [a, ^a] # syntax for same type
|
||||||
true
|
true
|
||||||
|
|
|
@ -6,7 +6,7 @@ class Logic::Eq < Logic::BinaryOperator
|
||||||
.filter { |term| term.type(type_de_champs) == :unmanaged }
|
.filter { |term| term.type(type_de_champs) == :unmanaged }
|
||||||
.map { |term| { type: :unmanaged, stable_id: term.stable_id } }
|
.map { |term| { type: :unmanaged, stable_id: term.stable_id } }
|
||||||
|
|
||||||
if !Logic.compatible_type?(@left, @right)
|
if !Logic.compatible_type?(@left, @right, type_de_champs)
|
||||||
errors << {
|
errors << {
|
||||||
type: :incompatible,
|
type: :incompatible,
|
||||||
stable_id: @left.try(:stable_id),
|
stable_id: @left.try(:stable_id),
|
||||||
|
|
|
@ -60,15 +60,15 @@ describe Logic do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '.compatible_type?' do
|
describe '.compatible_type?' do
|
||||||
it { expect(Logic.compatible_type?(constant(true), constant(true))).to be true }
|
it { expect(Logic.compatible_type?(constant(true), constant(true), [])).to be true }
|
||||||
it { expect(Logic.compatible_type?(constant(1), constant(true))).to be false }
|
it { expect(Logic.compatible_type?(constant(1), constant(true), [])).to be false }
|
||||||
|
|
||||||
context 'with a dropdown' do
|
context 'with a dropdown' do
|
||||||
let(:drop_down) { create(:type_de_champ_drop_down_list) }
|
let(:drop_down) { create(:type_de_champ_drop_down_list) }
|
||||||
let(:first_option) { drop_down.drop_down_list_enabled_non_empty_options.first }
|
let(:first_option) { drop_down.drop_down_list_enabled_non_empty_options.first }
|
||||||
|
|
||||||
it do
|
it do
|
||||||
expect(Logic.compatible_type?(champ_value(drop_down.stable_id), constant('a'))).to be true
|
expect(Logic.compatible_type?(champ_value(drop_down.stable_id), constant('a'), [drop_down])).to be true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue