| Class | ActiveLdap::LdifInvalid |
| In: |
lib/active_ldap/base.rb
|
| Parent: | Error |
| NEAREST_MARK | = | "|@|" |
| column | [R] | |
| ldif | [R] | |
| line | [R] | |
| nearest | [R] | |
| reason | [R] |
# File lib/active_ldap/base.rb, line 154
154: def initialize(ldif, reason=nil, line=nil, column=nil)
155: @ldif = ldif
156: @reason = reason
157: @line = line
158: @column = column
159: @nearest = nil
160: if @reason
161: message = _("invalid LDIF: %s:") % @reason
162: else
163: message = _("invalid LDIF:")
164: end
165: if @line and @column
166: @nearest = detect_nearest(@line, @column)
167: snippet = generate_snippet
168: message << "\n#{snippet}\n"
169: end
170: super("#{message}\n#{numbered_ldif}")
171: end
# File lib/active_ldap/base.rb, line 175
175: def detect_nearest(line, column)
176: lines = Compatible.string_to_lines(@ldif).to_a
177: nearest = lines[line - 1] || ""
178: if column - 1 == nearest.size # for JRuby 1.0.2 :<
179: nearest << NEAREST_MARK
180: else
181: nearest[column - 1, 0] = NEAREST_MARK
182: end
183: if nearest == NEAREST_MARK
184: nearest = "#{lines[line - 2]}#{nearest}"
185: end
186: nearest
187: end
# File lib/active_ldap/base.rb, line 189
189: def generate_snippet
190: nearest = @nearest.chomp
191: column_column = ":#{@column}"
192: target_position_info = "#{@line}#{column_column}: "
193: if /\n/ =~ nearest
194: snippet = "%#{Math.log10(@line).truncate}d" % (@line - 1)
195: snippet << " " * column_column.size
196: snippet << ": "
197: snippet << nearest.gsub(/\n/, "\n#{target_position_info}")
198: else
199: snippet = "#{target_position_info}#{nearest}"
200: end
201: snippet
202: end
# File lib/active_ldap/base.rb, line 204
204: def numbered_ldif
205: return @ldif if @ldif.blank?
206: lines = Compatible.string_to_lines(@ldif)
207: format = "%#{Math.log10(lines.size).truncate + 1}d: %s"
208: i = 0
209: lines.collect do |line|
210: i += 1
211: format % [i, line]
212: end.join
213: end