lib/formtastic/helpers/input_helper.rb in formtastic-2.1.0.beta1 vs lib/formtastic/helpers/input_helper.rb in formtastic-2.1.0.rc
- old
+ new
@@ -328,23 +328,39 @@
# input_class(:string) #=> Formtastic::Inputs::StringInput
# input_class(:date) #=> Formtastic::Inputs::DateInput
#
# @example When a top-level class is found
# input_class(:string) #=> StringInput
- # input_class(:awesome) #=> AwesomeInput
+ # input_class(:awesome) #=> AwesomeInput
def input_class(as)
@input_classes_cache ||= {}
@input_classes_cache[as] ||= begin
- begin
- begin
- custom_input_class_name(as).constantize
- rescue NameError
- standard_input_class_name(as).constantize
- end
- rescue NameError
- raise Formtastic::UnknownInputError
- end
+ Rails.application.config.cache_classes ? input_class_with_const_defined(as) : input_class_by_trying(as)
end
+ end
+
+ # prevent exceptions in production environment for better performance
+ def input_class_with_const_defined(as)
+ input_class_name = custom_input_class_name(as)
+
+ if ::Object.const_defined?(input_class_name)
+ input_class_name.constantize
+ elsif Formtastic::Inputs.const_defined?(input_class_name)
+ standard_input_class_name(as).constantize
+ else
+ raise Formtastic::UnknownInputError
+ end
+ end
+
+ # use auto-loading in development environment
+ def input_class_by_trying(as)
+ begin
+ custom_input_class_name(as).constantize
+ rescue NameError
+ standard_input_class_name(as).constantize
+ end
+ rescue NameError
+ raise Formtastic::UnknownInputError
end
# :as => :string # => StringInput
def custom_input_class_name(as)
"#{as.to_s.camelize}Input"