Merge pull request #2937 from tchak/champ-nombre

Champ IntegerNumber and DecimalNumber
This commit is contained in:
Paul Chavard 2018-11-06 11:43:55 +01:00 committed by GitHub
commit 7ef381b130
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
15 changed files with 103 additions and 1 deletions

View file

@ -3,7 +3,8 @@ module TypeDeChampHelper
TypeDeChamp.type_champs.fetch(:piece_justificative) => :champ_pj?,
TypeDeChamp.type_champs.fetch(:siret) => :champ_siret?,
TypeDeChamp.type_champs.fetch(:linked_drop_down_list) => :champ_linked_dropdown?,
TypeDeChamp.type_champs.fetch(:carte) => :champ_carte?
TypeDeChamp.type_champs.fetch(:carte) => :champ_carte?,
TypeDeChamp.type_champs.fetch(:integer_number) => :champ_integer_number?
}
def tdc_options

View file

@ -0,0 +1,7 @@
class Champs::DecimalNumberChamp < Champ
validates :value, numericality: { allow_nil: true }
def value_for_export
value.to_f
end
end

View file

@ -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

View file

@ -8,6 +8,8 @@ class TypeDeChamp < ApplicationRecord
date: 'date',
datetime: 'datetime',
number: 'number',
decimal_number: 'decimal_number',
integer_number: 'integer_number',
checkbox: 'checkbox',
civilite: 'civilite',
email: 'email',

View file

@ -0,0 +1,2 @@
class TypesDeChamp::DecimalNumberTypeDeChamp < TypesDeChamp::TypeDeChampBase
end

View file

@ -0,0 +1,2 @@
class TypesDeChamp::IntegerNumberTypeDeChamp < TypesDeChamp::TypeDeChampBase
end

View file

@ -0,0 +1,7 @@
class Champs::DecimalNumberChampSerializer < ChampSerializer
def value
if object.value.present?
object.value.to_f
end
end
end

View file

@ -0,0 +1,7 @@
class Champs::IntegerNumberChampSerializer < ChampSerializer
def value
if object.value.present?
object.value.to_i
end
end
end

View file

@ -0,0 +1,4 @@
= form.number_field :value,
step: :any,
placeholder: champ.libelle,
required: champ.mandatory?

View file

@ -0,0 +1,3 @@
= form.number_field :value,
placeholder: champ.libelle,
required: champ.mandatory?

View file

@ -15,6 +15,8 @@ Flipflop.configure do
title: "Champ double menu déroulant"
feature :champ_carte,
title: "Champ Carte"
feature :champ_integer_number,
title: "Champ nombre entier"
end
feature :web_hook

View file

@ -10,6 +10,8 @@ fr:
date: 'Date'
datetime: 'Date et Heure'
number: 'Nombre entier'
decimal_number: 'Nombre décimal'
integer_number: 'Nombre entier'
checkbox: 'Case à cocher'
civilite: 'Civilité'
email: 'Email'

View file

@ -18,6 +18,12 @@ FactoryBot.define do
factory :type_de_champ_number do
type_champ { TypeDeChamp.type_champs.fetch(:number) }
end
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

View file

@ -0,0 +1,25 @@
require 'spec_helper'
describe Champs::DecimalNumberChamp do
subject { Champs::DecimalNumberChamp.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 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

View file

@ -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