Module: ActiveForm::Mixins::ValidationMethods
- Defined in:
- lib/active_form/mixins/validation_methods.rb
Defined Under Namespace
Modules: ClassMethods
Class Method Summary collapse
Instance Method Summary collapse
- #after_validation(prc = nil, &block) ⇒ Object (also: #after_validation_callback=)
- #all_server_side_validation_advice(builder = create_builder) ⇒ Object
- #clear_validations! ⇒ Object
- #client_side ⇒ Object
- #client_side=(value) ⇒ Object
- #client_side? ⇒ Boolean
- #client_side_options ⇒ Object
- #client_side_validation_advice(builder = create_builder) ⇒ Object
- #define_validation(prc = nil, &block) ⇒ Object (also: #validation=, #validation)
- #define_validator(type, *args, &block) ⇒ Object
- #each_error(&block) ⇒ Object
- #element_errors(first_only = false) ⇒ Object (also: #all_errors, #validation_errors)
- #errors ⇒ Object
- #every_error(&block) ⇒ Object (also: #every_initial_error)
- #format_message(msg = @@default_msg, error_code = 'default', params = []) ⇒ Object
- #gather_validation_advice ⇒ Object
- #get_validation_advice_wrapper ⇒ Object
- #initial_errors ⇒ Object
- #javascript_validation(prc = nil, &block) ⇒ Object (also: #javascript_validation=)
- #javascript_validation_code ⇒ Object
- #message_params ⇒ Object
- #perform_validation ⇒ Object
- #required_message=(str) ⇒ Object
- #reset_after_validation_callback ⇒ Object
- #reset_errors! ⇒ Object
- #reset_javascript_validation ⇒ Object
- #reset_validation ⇒ Object
- #reset_validation_advice_wrapper ⇒ Object
- #server_side_validation_advice(builder = create_builder, first_only = true) ⇒ Object
- #valid? ⇒ Boolean
- #validate ⇒ Object
- #validate! ⇒ Object
- #validate_element ⇒ Object
- #validation_advice(builder = create_builder) ⇒ Object
- #validation_advice_wrapper(prc = nil, &block) ⇒ Object
- #validation_css_class ⇒ Object
- #validation_javascript_definitions ⇒ Object
- #validators ⇒ Object
- #validators_by_type(*types) ⇒ Object
Class Method Details
.included(base) ⇒ Object
3 4 5 |
# File 'lib/active_form/mixins/validation_methods.rb', line 3 def self.included(base) base.send(:extend, ClassMethods) end |
Instance Method Details
#after_validation(prc = nil, &block) ⇒ Object Also known as: after_validation_callback=
209 210 211 |
# File 'lib/active_form/mixins/validation_methods.rb', line 209 def after_validation(prc = nil, &block) define_singleton_method(:after_validation_callback, &(block_given? ? block : prc)) end |
#all_server_side_validation_advice(builder = create_builder) ⇒ Object
57 58 59 |
# File 'lib/active_form/mixins/validation_methods.rb', line 57 def all_server_side_validation_advice(builder = create_builder) server_side_validation_advice(builder, false) end |
#clear_validations! ⇒ Object
158 159 160 161 |
# File 'lib/active_form/mixins/validation_methods.rb', line 158 def clear_validations! reset_errors! recurse(&:clear_validations!) if container? end |
#client_side ⇒ Object
95 96 97 |
# File 'lib/active_form/mixins/validation_methods.rb', line 95 def client_side @client_side_validation ||= false end |
#client_side=(value) ⇒ Object
99 100 101 |
# File 'lib/active_form/mixins/validation_methods.rb', line 99 def client_side=(value) @client_side_validation = value.to_s.to_boolean end |
#client_side? ⇒ Boolean
87 88 89 |
# File 'lib/active_form/mixins/validation_methods.rb', line 87 def client_side? client_side == true || (contained? && container.client_side?) end |
#client_side_options ⇒ Object
91 92 93 |
# File 'lib/active_form/mixins/validation_methods.rb', line 91 def @client_js_options ||= { :stopOnFirst => false, :useTitles => true } end |
#client_side_validation_advice(builder = create_builder) ⇒ Object
61 62 63 64 65 66 67 |
# File 'lib/active_form/mixins/validation_methods.rb', line 61 def client_side_validation_advice(builder = create_builder) gather_validation_advice.each do |adv| attrs = { :id => "advice-#{adv.identifier}-#{adv.element.identifier}", :style => 'display: none', :class => "validation-advice advice-#{adv.code}" } get_validation_advice_wrapper.call(builder, adv, attrs) end builder.target! end |
#define_validation(prc = nil, &block) ⇒ Object Also known as: validation=, validation
169 170 171 |
# File 'lib/active_form/mixins/validation_methods.rb', line 169 def define_validation(prc = nil, &block) define_singleton_method(:validation_handler, &(block_given? ? block : prc)) end |
#define_validator(type, *args, &block) ⇒ Object
7 8 9 10 11 12 |
# File 'lib/active_form/mixins/validation_methods.rb', line 7 def define_validator(type, *args, &block) args.unshift(self) validator = ActiveForm::Validator::build(type, *args, &block) validators << validator validator end |
#each_error(&block) ⇒ Object
123 124 125 |
# File 'lib/active_form/mixins/validation_methods.rb', line 123 def each_error(&block) element_errors.each(&block) end |
#element_errors(first_only = false) ⇒ Object Also known as: all_errors, validation_errors
111 112 113 114 115 |
# File 'lib/active_form/mixins/validation_methods.rb', line 111 def element_errors(first_only = false) elem_errors = first_only ? [errors.first] : errors.all elements.each { |elem| elem_errors += elem.element_errors(first_only) } if container? elem_errors.compact end |
#errors ⇒ Object
107 108 109 |
# File 'lib/active_form/mixins/validation_methods.rb', line 107 def errors @errors ||= ActiveForm::Errors.new(self) end |
#every_error(&block) ⇒ Object Also known as: every_initial_error
127 128 129 |
# File 'lib/active_form/mixins/validation_methods.rb', line 127 def every_error(&block) element_errors(true).each(&block) end |
#format_message(msg = @@default_msg, error_code = 'default', params = []) ⇒ Object
14 15 16 17 18 |
# File 'lib/active_form/mixins/validation_methods.rb', line 14 def (msg = @@default_msg, error_code = 'default', params = []) msg = (localize(name, "validates_#{error_code}") || msg) if localized? mparams = + params sprintf(msg || '', *mparams) end |
#gather_validation_advice ⇒ Object
69 70 71 72 73 |
# File 'lib/active_form/mixins/validation_methods.rb', line 69 def gather_validation_advice adv = validators.inject([]) { |ary, v| v.advice.keys.sort.inject(ary) { |a, key| a << v.advice[key] unless v.advice[key].blank? } } each { |elem| adv += elem.gather_validation_advice } if container? adv.compact end |
#get_validation_advice_wrapper ⇒ Object
24 25 26 27 28 29 30 31 32 |
# File 'lib/active_form/mixins/validation_methods.rb', line 24 def get_validation_advice_wrapper if respond_to?(:advice_wrapper) method_to_proc(:advice_wrapper) elsif self.class.respond_to?(:advice_wrapper) self.class.method_to_proc(:advice_wrapper) else self.class.method_to_proc(:default_validation_advice_wrapper) end end |
#initial_errors ⇒ Object
119 120 121 |
# File 'lib/active_form/mixins/validation_methods.rb', line 119 def initial_errors element_errors(true) end |
#javascript_validation(prc = nil, &block) ⇒ Object Also known as: javascript_validation=
191 192 193 |
# File 'lib/active_form/mixins/validation_methods.rb', line 191 def javascript_validation(prc = nil, &block) define_singleton_method(:js_validation_generator, &(block_given? ? block : prc)) end |
#javascript_validation_code ⇒ Object
179 180 181 182 183 184 185 186 187 188 189 |
# File 'lib/active_form/mixins/validation_methods.rb', line 179 def javascript_validation_code return nil unless respond_to?(:js_validation_generator) || self.class.respond_to?(:js_validation_generator) vparams = { :name => identifier.dasherize, :msg => "#{label}: validation failed" } code = JavascriptAttribute.new js_validation_generator(self, code, vparams) if respond_to?(:js_validation_generator) self.class.js_validation_generator(self, code, vparams) if self.class.respond_to?(:js_validation_generator) return nil if code.empty? class_name = "validate-#{vparams[:name]}" css_class << class_name unless container? || css_class.include?(class_name) %|Validation.add('#{class_name}', "#{vparams[:msg]}", function (v) {\n #{code}\n});| end |
#message_params ⇒ Object
20 21 22 |
# File 'lib/active_form/mixins/validation_methods.rb', line 20 def [label, element_value] end |
#perform_validation ⇒ Object
149 150 151 152 153 154 155 156 |
# File 'lib/active_form/mixins/validation_methods.rb', line 149 def perform_validation reset_errors! each { |elem| elem.perform_validation } if container? validators.each(&:validate) validate_element after_validation_callback(self) if respond_to?(:after_validation_callback) return true # so you can write perform_validation && valid? end |
#required_message=(str) ⇒ Object
39 40 41 42 |
# File 'lib/active_form/mixins/validation_methods.rb', line 39 def (str) validator = self.validators_by_type('required').first validator. = str unless validator.nil? end |
#reset_after_validation_callback ⇒ Object
214 215 216 |
# File 'lib/active_form/mixins/validation_methods.rb', line 214 def reset_after_validation_callback undefine_singleton_method(:after_validation_callback) rescue nil end |
#reset_errors! ⇒ Object
132 133 134 |
# File 'lib/active_form/mixins/validation_methods.rb', line 132 def reset_errors! errors.reset end |
#reset_javascript_validation ⇒ Object
196 197 198 |
# File 'lib/active_form/mixins/validation_methods.rb', line 196 def reset_javascript_validation undefine_singleton_method(:js_validation_generator) rescue nil end |
#reset_validation ⇒ Object
175 176 177 |
# File 'lib/active_form/mixins/validation_methods.rb', line 175 def reset_validation undefine_singleton_method(:validation_handler) rescue nil end |
#reset_validation_advice_wrapper ⇒ Object
205 206 207 |
# File 'lib/active_form/mixins/validation_methods.rb', line 205 def reset_validation_advice_wrapper undefine_singleton_method(:advice_wrapper) rescue nil end |
#server_side_validation_advice(builder = create_builder, first_only = true) ⇒ Object
50 51 52 53 54 55 |
# File 'lib/active_form/mixins/validation_methods.rb', line 50 def server_side_validation_advice(builder = create_builder, first_only = true) element_errors(first_only).inject('') do |str, error| attrs = { :id => "advice-#{error.identifier}-#{error.element.identifier}", :class => "validation-advice advice-#{error.code}" } get_validation_advice_wrapper.call(builder, error, attrs) end end |
#valid? ⇒ Boolean
136 137 138 |
# File 'lib/active_form/mixins/validation_methods.rb', line 136 def valid? initial_errors.empty? end |
#validate ⇒ Object
140 141 142 |
# File 'lib/active_form/mixins/validation_methods.rb', line 140 def validate perform_validation && valid? end |
#validate! ⇒ Object
144 145 146 147 |
# File 'lib/active_form/mixins/validation_methods.rb', line 144 def validate! return true if validate raise ActiveForm::ValidationException end |
#validate_element ⇒ Object
163 164 165 166 167 |
# File 'lib/active_form/mixins/validation_methods.rb', line 163 def validate_element internal_validation(self) if respond_to?(:internal_validation) validation_handler(self) if respond_to?(:validation_handler) self.class.validation_handler(self) if self.class.respond_to?(:validation_handler) end |
#validation_advice(builder = create_builder) ⇒ Object
44 45 46 47 48 |
# File 'lib/active_form/mixins/validation_methods.rb', line 44 def validation_advice(builder = create_builder) str = server_side_validation_advice(builder) str << client_side_validation_advice(builder) if client_side? str end |
#validation_advice_wrapper(prc = nil, &block) ⇒ Object
200 201 202 |
# File 'lib/active_form/mixins/validation_methods.rb', line 200 def validation_advice_wrapper(prc = nil, &block) define_singleton_method(:advice_wrapper, &(block_given? ? block : prc)) end |
#validation_css_class ⇒ Object
75 76 77 78 79 |
# File 'lib/active_form/mixins/validation_methods.rb', line 75 def validation_css_class css = validators.inject(CssAttribute.new) { |cs, v| cs << "#{v.identifier}" } each { |elem| css += elem.validation_css_class } if container? css.compact end |
#validation_javascript_definitions ⇒ Object
81 82 83 84 85 |
# File 'lib/active_form/mixins/validation_methods.rb', line 81 def validation_javascript_definitions js = validators.inject([]) { |ary, v| ary << v.javascript_definition }.compact.join("\n") each { |elem| js += elem.validation_javascript_definitions } if container? js end |
#validators ⇒ Object
103 104 105 |
# File 'lib/active_form/mixins/validation_methods.rb', line 103 def validators @validators ||= [] end |
#validators_by_type(*types) ⇒ Object
34 35 36 37 |
# File 'lib/active_form/mixins/validation_methods.rb', line 34 def validators_by_type(*types) types.map(&:to_s) self.validators.find_all { |v| types.include?(v.code) } end |