From 074050a91a77fdf95b540519dcdcf2ea9d7e56f3 Mon Sep 17 00:00:00 2001 From: Paul Chavard Date: Wed, 31 Oct 2018 19:48:28 +0100 Subject: [PATCH] Add IntegerNumberChamp --- app/models/champs/integer_number_champ.rb | 7 ++++++ app/models/type_de_champ.rb | 1 + .../integer_number_type_de_champ.rb | 2 ++ .../champs/integer_number_champ_serializer.rb | 7 ++++++ .../editable_champs/_integer_number.html.haml | 3 +++ config/locales/models/type_de_champ/fr.yml | 1 + spec/factories/type_de_champ.rb | 3 +++ .../champs/integer_number_champ_spec.rb | 25 +++++++++++++++++++ 8 files changed, 49 insertions(+) create mode 100644 app/models/champs/integer_number_champ.rb create mode 100644 app/models/types_de_champ/integer_number_type_de_champ.rb create mode 100644 app/serializers/champs/integer_number_champ_serializer.rb create mode 100644 app/views/shared/dossiers/editable_champs/_integer_number.html.haml create mode 100644 spec/models/champs/integer_number_champ_spec.rb diff --git a/app/models/champs/integer_number_champ.rb b/app/models/champs/integer_number_champ.rb new file mode 100644 index 000000000..d1e82ec4a --- /dev/null +++ b/app/models/champs/integer_number_champ.rb @@ -0,0 +1,7 @@ +class Champs::IntegerNumberChamp < Champ + validates :value, numericality: { only_integer: true, allow_nil: true } + + def value_for_export + value.to_i + end +end diff --git a/app/models/type_de_champ.rb b/app/models/type_de_champ.rb index 427e3a552..c2d9a9ae6 100644 --- a/app/models/type_de_champ.rb +++ b/app/models/type_de_champ.rb @@ -9,6 +9,7 @@ class TypeDeChamp < ApplicationRecord datetime: 'datetime', number: 'number', decimal_number: 'decimal_number', + integer_number: 'integer_number', checkbox: 'checkbox', civilite: 'civilite', email: 'email', diff --git a/app/models/types_de_champ/integer_number_type_de_champ.rb b/app/models/types_de_champ/integer_number_type_de_champ.rb new file mode 100644 index 000000000..0eda2c3d5 --- /dev/null +++ b/app/models/types_de_champ/integer_number_type_de_champ.rb @@ -0,0 +1,2 @@ +class TypesDeChamp::IntegerNumberTypeDeChamp < TypesDeChamp::TypeDeChampBase +end diff --git a/app/serializers/champs/integer_number_champ_serializer.rb b/app/serializers/champs/integer_number_champ_serializer.rb new file mode 100644 index 000000000..ac1e03494 --- /dev/null +++ b/app/serializers/champs/integer_number_champ_serializer.rb @@ -0,0 +1,7 @@ +class Champs::IntegerNumberChampSerializer < ChampSerializer + def value + if object.value.present? + object.value.to_i + end + end +end diff --git a/app/views/shared/dossiers/editable_champs/_integer_number.html.haml b/app/views/shared/dossiers/editable_champs/_integer_number.html.haml new file mode 100644 index 000000000..d5aab710a --- /dev/null +++ b/app/views/shared/dossiers/editable_champs/_integer_number.html.haml @@ -0,0 +1,3 @@ += form.number_field :value, + placeholder: champ.libelle, + required: champ.mandatory? diff --git a/config/locales/models/type_de_champ/fr.yml b/config/locales/models/type_de_champ/fr.yml index 52734668a..642e43579 100644 --- a/config/locales/models/type_de_champ/fr.yml +++ b/config/locales/models/type_de_champ/fr.yml @@ -11,6 +11,7 @@ fr: datetime: 'Date et Heure' number: 'Nombre entier' decimal_number: 'Nombre décimal' + integer_number: 'Nombre entier' checkbox: 'Case à cocher' civilite: 'Civilité' email: 'Email' diff --git a/spec/factories/type_de_champ.rb b/spec/factories/type_de_champ.rb index 5e8d5b92e..caf15f043 100644 --- a/spec/factories/type_de_champ.rb +++ b/spec/factories/type_de_champ.rb @@ -21,6 +21,9 @@ FactoryBot.define do factory :type_de_champ_decimal_number do type_champ { TypeDeChamp.type_champs.fetch(:decimal_number) } end + factory :type_de_champ_integer_number do + type_champ { TypeDeChamp.type_champs.fetch(:integer_number) } + end factory :type_de_champ_checkbox do type_champ { TypeDeChamp.type_champs.fetch(:checkbox) } end diff --git a/spec/models/champs/integer_number_champ_spec.rb b/spec/models/champs/integer_number_champ_spec.rb new file mode 100644 index 000000000..957d5e5c6 --- /dev/null +++ b/spec/models/champs/integer_number_champ_spec.rb @@ -0,0 +1,25 @@ +require 'spec_helper' + +describe Champs::IntegerNumberChamp do + subject { Champs::IntegerNumberChamp.new(value: value) } + + describe '#valid?' do + context 'when the value is integer number' do + let(:value) { 2 } + + it { is_expected.to be_valid } + end + + context 'when the value is decimal number' do + let(:value) { 2.6 } + + it { is_expected.to_not be_valid } + end + + context 'when the value is not a number' do + let(:value) { 'toto' } + + it { is_expected.to_not be_valid } + end + end +end