mirror of
https://github.com/codeninjasllc/discourse.git
synced 2024-11-23 23:58:31 -05:00
Add comments about the IPAddr hack
This commit is contained in:
parent
e45ab7d4a8
commit
8724b2e2b6
2 changed files with 11 additions and 4 deletions
|
@ -14,9 +14,9 @@ class ScreenedIpAddress < ActiveRecord::Base
|
||||||
match_for_ip_address(ip_address) || create(opts.slice(:action_type).merge(ip_address: ip_address))
|
match_for_ip_address(ip_address) || create(opts.slice(:action_type).merge(ip_address: ip_address))
|
||||||
end
|
end
|
||||||
|
|
||||||
# @Neil please review, in rails 4 when setting an ip address attribute a conversion takes place
|
# In Rails 4.0.0, validators are run to handle invalid assignments to inet columns (as they should).
|
||||||
# this may explode meaning you will never even reach the validator
|
# In Rails 4.0.1, an exception is raised before validation happens, so we need this hack for
|
||||||
# We can work around the issue like so, but I wonder if the spec is valid
|
# inet/cidr columns:
|
||||||
def ip_address=(val)
|
def ip_address=(val)
|
||||||
write_attribute(:ip_address, val)
|
write_attribute(:ip_address, val)
|
||||||
rescue IPAddr::InvalidAddressError
|
rescue IPAddr::InvalidAddressError
|
||||||
|
|
|
@ -4,8 +4,15 @@ class IpAddressFormatValidator < ActiveModel::EachValidator
|
||||||
|
|
||||||
def validate_each(record, attribute, value)
|
def validate_each(record, attribute, value)
|
||||||
if rails4?
|
if rails4?
|
||||||
# In Rails 4, ip_address will be nil if an invalid IP address was assigned.
|
# In Rails 4.0.0, ip_address will be nil if an invalid IP address was assigned.
|
||||||
# https://github.com/jetthoughts/rails/commit/0aa95a71b04f2893921c58a7c1d9fca60dbdcbc2
|
# https://github.com/jetthoughts/rails/commit/0aa95a71b04f2893921c58a7c1d9fca60dbdcbc2
|
||||||
|
|
||||||
|
# BUT: in Rails 4.0.1, validators don't get a chance to
|
||||||
|
# run before IPAddr::InvalidAddressError is raised.
|
||||||
|
# I don't see what broke it in rails 4.0.1...
|
||||||
|
# So this validator doesn't actually do anything anymore.
|
||||||
|
# But let's keep it in case a future version of rails fixes the problem and allows
|
||||||
|
# validators to work on inet and cidr columns.
|
||||||
if record.ip_address.nil?
|
if record.ip_address.nil?
|
||||||
record.errors.add(attribute, :invalid)
|
record.errors.add(attribute, :invalid)
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue