Skip to content

Commit ed591c1

Browse files
authored
Merge pull request #295 from collectiveidea/form-objects-without-model-names
Support form objects that lack model names
2 parents 271c20e + 3fb8085 commit ed591c1

File tree

4 files changed

+31
-6
lines changed

4 files changed

+31
-6
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
## [Pending Release][]
22

33
Bugfixes:
4+
- Allow objects without `model_name`s to act as form objects (#295, @laserlemon)
45
- Your contribution here!
56

67
Features:

lib/bootstrap_form/form_builder.rb

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -425,10 +425,14 @@ def inputs_collection(name, collection, value, text, options = {}, &block)
425425
end
426426

427427
def get_help_text_by_i18n_key(name)
428-
if object
428+
if object
429429

430-
# ActiveModel::Naming 3.X.X does not support .name; it is supported as of 4.X.X
431-
partial_scope = object.class.model_name.respond_to?(:name) ? object.class.model_name.name : object.class.model_name
430+
if object.class.respond_to?(:model_name)
431+
# ActiveModel::Naming 3.X.X does not support .name; it is supported as of 4.X.X
432+
partial_scope = object.class.model_name.respond_to?(:name) ? object.class.model_name.name : object.class.model_name
433+
else
434+
partial_scope = object.class.name
435+
end
432436

433437
underscored_scope = "activerecord.help.#{partial_scope.underscore}"
434438
downcased_scope = "activerecord.help.#{partial_scope.downcase}"
@@ -438,7 +442,7 @@ def get_help_text_by_i18n_key(name)
438442
text
439443
end
440444
help_text
441-
end
445+
end
442446
end
443447

444448
end

test/dummy/app/models/faux_user.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
class FauxUser
2+
attr_accessor :email, :password, :comments, :misc
3+
4+
def initialize(attributes = {})
5+
attributes.each do |name, value|
6+
send("#{name}=", value)
7+
end
8+
end
9+
end

test/special_form_class_models_test.rb

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ def user_klass.model_name
1818
assert_equal expected, @builder.date_field(:misc)
1919
end
2020

21-
2221
test "Nil models are supported for form builder" do
2322
@user = nil
2423
@builder = BootstrapForm::FormBuilder.new(:user, @user, self, {})
@@ -29,4 +28,16 @@ def user_klass.model_name
2928
assert_equal expected, @builder.date_field(:misc)
3029
end
3130

32-
end
31+
test "Objects without model names are supported for form builder" do
32+
user_klass = FauxUser
33+
34+
@user = user_klass.new(email: '[email protected]', password: 'secret', comments: 'my comment')
35+
@builder = BootstrapForm::FormBuilder.new(:user, @user, self, {})
36+
@horizontal_builder = BootstrapForm::FormBuilder.new(:user, @user, self, {layout: :horizontal, label_col: "col-sm-2", control_col: "col-sm-10"})
37+
I18n.backend.store_translations(:en, {activerecord: {help: {faux_user: {password: "A good password should be at least six characters long"}}}})
38+
39+
expected = %{<div class="form-group"><label class="control-label" for="user_misc">Misc</label><input class="form-control" id="user_misc" name="user[misc]" type="date" /></div>}
40+
assert_equal expected, @builder.date_field(:misc)
41+
end
42+
43+
end

0 commit comments

Comments
 (0)