diff options
| -rw-r--r-- | app/models/custom_field.rb | 20 | ||||
| -rw-r--r-- | spec/models/custom_field_spec.rb | 20 |
2 files changed, 27 insertions, 13 deletions
diff --git a/app/models/custom_field.rb b/app/models/custom_field.rb index 5a7c1954c..279f7cb39 100644 --- a/app/models/custom_field.rb +++ b/app/models/custom_field.rb @@ -20,16 +20,20 @@ class CustomField < ActiveRecord::Base @custom_field = custom_field @raw_value = value @owner = owner + @errors = [] + @validated = false + @valid = false end - %i(code name field_type options).each do |attr| - define_method attr do - @custom_field.send(attr) - end + delegate :code, :name, :field_type, :options, to: :@custom_field + + def validate + @valid = true end def valid? - true + validate unless @validated + @valid end def value @@ -46,9 +50,11 @@ class CustomField < ActiveRecord::Base @raw_value.to_i end - def valid? - unless ActiveRecord::Base::NumericalityValidator.new(attributes: 42).send(:parse_raw_value_as_an_integer, @raw_value).present? + def validate + @valid = true + unless @raw_value =~ /\A\d*\Z/ @owner.errors.add errors_key, "'#{@raw_value}' is not a valid integer" + @valid = false end end end diff --git a/spec/models/custom_field_spec.rb b/spec/models/custom_field_spec.rb index 54a905116..b92bcfbdb 100644 --- a/spec/models/custom_field_spec.rb +++ b/spec/models/custom_field_spec.rb @@ -46,12 +46,20 @@ RSpec.describe CustomField, type: :model do end it "should validate the value" do - vj = build :vehicle_journey, custom_field_values: {energy: "99"} - expect(vj.validate).to be_truthy - - vj = build :vehicle_journey, custom_field_values: {energy: "azerty"} - expect(vj.validate).to be_falsy - expect(vj.errors.messages[:"custom_fields.energy"]).to be_present + { + "99" => true, + "azerty" => false, + "91a" => false, + "a91" => false + }.each do |val, valid| + vj = build :vehicle_journey, custom_field_values: {energy: val} + if valid + expect(vj.validate).to be_truthy + else + expect(vj.validate).to be_falsy + expect(vj.errors.messages[:"custom_fields.energy"]).to be_present + end + end end end |
