Class: Formeze::Field
Constant Summary
Constants included from Presence
Instance Attribute Summary collapse
-
#name ⇒ Object
readonly
Returns the value of attribute name.
Instance Method Summary collapse
- #accept ⇒ Object
- #accept? ⇒ Boolean
- #acceptable_file?(object) ⇒ Boolean
- #blank_value ⇒ Object
- #defined_if ⇒ Object
- #defined_if? ⇒ Boolean
- #defined_unless ⇒ Object
- #defined_unless? ⇒ Boolean
- #fill_proc ⇒ Object
- #fill_proc? ⇒ Boolean
-
#initialize(name, **options) ⇒ Field
constructor
A new instance of Field.
- #key ⇒ Object
- #key_required? ⇒ Boolean
- #label ⇒ Object
- #maxsize ⇒ Object
- #maxsize? ⇒ Boolean
- #multiline? ⇒ Boolean
- #multiple? ⇒ Boolean
- #no_match?(value) ⇒ Boolean
- #required? ⇒ Boolean
- #too_long?(value) ⇒ Boolean
- #too_short?(value) ⇒ Boolean
- #undefined?(form) ⇒ Boolean
- #validate(value, form) ⇒ Object
- #validate_all(values, form) ⇒ Object
- #values ⇒ Object
- #values? ⇒ Boolean
Methods included from Presence
Constructor Details
#initialize(name, **options) ⇒ Field
Returns a new instance of Field.
8 9 10 |
# File 'lib/formeze/field.rb', line 8 def initialize(name, **) @name, = name, end |
Instance Attribute Details
#name ⇒ Object (readonly)
Returns the value of attribute name.
6 7 8 |
# File 'lib/formeze/field.rb', line 6 def name @name end |
Instance Method Details
#accept ⇒ Object
102 103 104 |
# File 'lib/formeze/field.rb', line 102 def accept @accept ||= .fetch(:accept).split(',').flat_map { |type| MIME::Types[type] } end |
#accept? ⇒ Boolean
98 99 100 |
# File 'lib/formeze/field.rb', line 98 def accept? .key?(:accept) end |
#acceptable_file?(object) ⇒ Boolean
54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/formeze/field.rb', line 54 def acceptable_file?(object) types = MIME::Types.type_for(object.original_filename) if object.content_type == 'application/octet-stream' types.any? { |type| accept.include?(type) } else type = MIME::Types[object.content_type].first accept.include?(type) && types.include?(type) end end |
#blank_value ⇒ Object
118 119 120 |
# File 'lib/formeze/field.rb', line 118 def blank_value [:blank] end |
#defined_if ⇒ Object
134 135 136 |
# File 'lib/formeze/field.rb', line 134 def defined_if .fetch(:defined_if) end |
#defined_if? ⇒ Boolean
130 131 132 |
# File 'lib/formeze/field.rb', line 130 def defined_if? .key?(:defined_if) end |
#defined_unless ⇒ Object
142 143 144 |
# File 'lib/formeze/field.rb', line 142 def defined_unless .fetch(:defined_unless) end |
#defined_unless? ⇒ Boolean
138 139 140 |
# File 'lib/formeze/field.rb', line 138 def defined_unless? .key?(:defined_unless) end |
#fill_proc ⇒ Object
160 161 162 |
# File 'lib/formeze/field.rb', line 160 def fill_proc [:fill] end |
#fill_proc? ⇒ Boolean
156 157 158 |
# File 'lib/formeze/field.rb', line 156 def fill_proc? .key?(:fill) end |
#key ⇒ Object
66 67 68 |
# File 'lib/formeze/field.rb', line 66 def key @key ||= @name.to_s end |
#key_required? ⇒ Boolean
70 71 72 |
# File 'lib/formeze/field.rb', line 70 def key_required? .fetch(:key_required) { true } end |
#label ⇒ Object
74 75 76 |
# File 'lib/formeze/field.rb', line 74 def label .fetch(:label) { Formeze::Labels.translate(name) } end |
#maxsize ⇒ Object
94 95 96 |
# File 'lib/formeze/field.rb', line 94 def maxsize .fetch(:maxsize) end |
#maxsize? ⇒ Boolean
90 91 92 |
# File 'lib/formeze/field.rb', line 90 def maxsize? .key?(:maxsize) end |
#multiline? ⇒ Boolean
82 83 84 |
# File 'lib/formeze/field.rb', line 82 def multiline? .fetch(:multiline) { false } end |
#multiple? ⇒ Boolean
86 87 88 |
# File 'lib/formeze/field.rb', line 86 def multiple? .fetch(:multiple) { false } end |
#no_match?(value) ⇒ Boolean
114 115 116 |
# File 'lib/formeze/field.rb', line 114 def no_match?(value) .key?(:pattern) && value !~ [:pattern] end |
#required? ⇒ Boolean
78 79 80 |
# File 'lib/formeze/field.rb', line 78 def required? .fetch(:required) { true } end |
#too_long?(value) ⇒ Boolean
106 107 108 |
# File 'lib/formeze/field.rb', line 106 def too_long?(value) value.chars.count > .fetch(:maxlength) { 64 } end |
#too_short?(value) ⇒ Boolean
110 111 112 |
# File 'lib/formeze/field.rb', line 110 def too_short?(value) .key?(:minlength) && value.chars.count < .fetch(:minlength) end |
#undefined?(form) ⇒ Boolean
146 147 148 149 150 151 152 153 154 |
# File 'lib/formeze/field.rb', line 146 def undefined?(form) if defined_if? !Formeze::Block.evaluate(form, defined_if) elsif defined_unless? Formeze::Block.evaluate(form, defined_unless) else false end end |
#validate(value, form) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/formeze/field.rb', line 32 def validate(value, form) value = Formeze.scrub(value, [:scrub]) if blank?(value) form.add_error(self, :required) if required? value = blank_value else form.add_error(self, :not_multiline) if !multiline? && value.lines.count > 1 form.add_error(self, :too_long) if too_long?(value) form.add_error(self, :too_short) if too_short?(value) form.add_error(self, :no_match) if no_match?(value) form.add_error(self, :bad_value) if values? && !values.include?(value) end value end |
#validate_all(values, form) ⇒ Object
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/formeze/field.rb', line 12 def validate_all(values, form) size = 0 values.each do |value| if String === value value = validate(value, form) else form.add_error(self, :not_accepted) unless acceptable_file?(value) size += value.size end value = Array(form.send(name)).push(value) if multiple? form.send(:"#{name}=", value) end form.add_error(self, :too_large) if maxsize? && size > maxsize end |
#values ⇒ Object
126 127 128 |
# File 'lib/formeze/field.rb', line 126 def values .fetch(:values) end |
#values? ⇒ Boolean
122 123 124 |
# File 'lib/formeze/field.rb', line 122 def values? .key?(:values) end |