Skip to content

Commit

Permalink
Merge pull request #3378 from codealchemy/html5-number-fields-patches
Browse files Browse the repository at this point in the history
Add HTML5 validation for float-like field types
  • Loading branch information
mshibuya committed Aug 14, 2021
2 parents b67e976 + 6a1a126 commit 2831243
Show file tree
Hide file tree
Showing 8 changed files with 95 additions and 12 deletions.
11 changes: 9 additions & 2 deletions lib/rails_admin/config/fields/types/decimal.rb
@@ -1,12 +1,19 @@
require 'rails_admin/config/fields/base'
require 'rails_admin/config/fields/types/numeric'

module RailsAdmin
module Config
module Fields
module Types
class Decimal < RailsAdmin::Config::Fields::Base
class Decimal < RailsAdmin::Config::Fields::Types::Numeric
# Register field type for the type loader
RailsAdmin::Config::Fields::Types.register(self)

register_instance_option :html_attributes do
{
required: required?,
step: "any",
}
end
end
end
end
Expand Down
11 changes: 9 additions & 2 deletions lib/rails_admin/config/fields/types/float.rb
@@ -1,12 +1,19 @@
require 'rails_admin/config/fields/base'
require 'rails_admin/config/fields/types/numeric'

module RailsAdmin
module Config
module Fields
module Types
class Float < RailsAdmin::Config::Fields::Base
class Float < RailsAdmin::Config::Fields::Types::Numeric
# Register field type for the type loader
RailsAdmin::Config::Fields::Types.register(self)

register_instance_option :html_attributes do
{
required: required?,
step: "any",
}
end
end
end
end
Expand Down
8 changes: 2 additions & 6 deletions lib/rails_admin/config/fields/types/integer.rb
@@ -1,17 +1,13 @@
require 'rails_admin/config/fields/base'
require 'rails_admin/config/fields/types/numeric'

module RailsAdmin
module Config
module Fields
module Types
class Integer < RailsAdmin::Config::Fields::Base
class Integer < RailsAdmin::Config::Fields::Types::Numeric
# Register field type for the type loader
RailsAdmin::Config::Fields::Types.register(self)

register_instance_option :view_helper do
:number_field
end

register_instance_option :sort_reverse? do
serial?
end
Expand Down
18 changes: 18 additions & 0 deletions lib/rails_admin/config/fields/types/numeric.rb
@@ -0,0 +1,18 @@
require 'rails_admin/config/fields/base'

module RailsAdmin
module Config
module Fields
module Types
class Numeric < RailsAdmin::Config::Fields::Base
# Register field type for the type loader
RailsAdmin::Config::Fields::Types.register(self)

register_instance_option :view_helper do
:number_field
end
end
end
end
end
end
2 changes: 1 addition & 1 deletion spec/rails_admin/config/fields/types/decimal_spec.rb
@@ -1,5 +1,5 @@
require 'spec_helper'

RSpec.describe RailsAdmin::Config::Fields::Types::Decimal do
it_behaves_like 'a generic field type', :decimal_field, :decimal
it_behaves_like 'a float-like field type', :float_field
end
2 changes: 1 addition & 1 deletion spec/rails_admin/config/fields/types/float_spec.rb
@@ -1,5 +1,5 @@
require 'spec_helper'

RSpec.describe RailsAdmin::Config::Fields::Types::Float do
it_behaves_like 'a generic field type', :float_field, :float
it_behaves_like 'a float-like field type', :float_field
end
17 changes: 17 additions & 0 deletions spec/rails_admin/config/fields/types/numeric_spec.rb
@@ -0,0 +1,17 @@
require 'spec_helper'

RSpec.describe RailsAdmin::Config::Fields::Types::Numeric do
it_behaves_like 'a generic field type', :integer_field, :integer

subject do
RailsAdmin.config('FieldTest').fields.detect do |f|
f.name == :integer_field
end.with(object: FieldTest.new)
end

describe '#view_helper' do
it "uses the 'number' type input tag" do
expect(subject.view_helper).to eq(:number_field)
end
end
end
38 changes: 38 additions & 0 deletions spec/shared_examples/shared_examples_for_field_types.rb
Expand Up @@ -34,3 +34,41 @@
expect(subject).to be_a(RailsAdmin::Config::Fields::Types::StringLike)
end
end

RSpec.shared_examples 'a float-like field type' do |column_name|
subject do
RailsAdmin.config('FieldTest').fields.detect do |f|
f.name == column_name
end.with(object: FieldTest.new)
end

describe '#html_attributes' do
it 'should contain a step attribute' do
expect(subject.html_attributes[:step]).to eq('any')
end

it 'should contain a falsey required attribute' do
expect(subject.html_attributes[:required]).to be_falsey
end

context 'when the field is required' do
before do
RailsAdmin.config FieldTest do
field column_name, :float do
required true
end
end
end

it 'should contain a truthy required attribute' do
expect(subject.html_attributes[:required]).to be_truthy
end
end
end

describe '#view_helper' do
it "uses the 'number' type input tag" do
expect(subject.view_helper).to eq(:number_field)
end
end
end

0 comments on commit 2831243

Please sign in to comment.