lib/prefixed_ids.rb in prefixed_ids-1.4.0 vs lib/prefixed_ids.rb in prefixed_ids-1.5.0

- old
+ new

@@ -32,18 +32,20 @@ module Rails extend ActiveSupport::Concern included do class_attribute :_prefix_id + class_attribute :_prefix_id_fallback end class_methods do - def has_prefix_id(prefix, override_find: true, override_param: true, **options) + def has_prefix_id(prefix, override_find: true, override_param: true, fallback: true, **options) include Attribute include Finder if override_find include ToParam if override_param self._prefix_id = PrefixId.new(self, prefix, **options) + self._prefix_id_fallback = fallback # Register with PrefixedIds to support PrefixedIds#find PrefixedIds.models[prefix.to_s] = self end end @@ -70,19 +72,24 @@ ids.map { |id| decode_prefix_id(id) } end end def prefix_id - self.class._prefix_id.encode(id) + _prefix_id.encode(id) end end module Finder extend ActiveSupport::Concern class_methods do def find(*ids) - super(*ids.map { |id| _prefix_id.decode(id, fallback: true) }) + prefix_ids = *ids.map do |id| + prefix_id = _prefix_id.decode(id, fallback: _prefix_id_fallback) + raise Error, "#{id} is not a valid prefix_id" if !_prefix_id_fallback && prefix_id.nil? + prefix_id + end + super(*prefix_ids) end def relation super.tap { |r| r.extend ClassMethods } end