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"