Class: TypedEAV::Field::RangeBounded

Inherits:
Base show all
Defined in:
app/models/typed_eav/field/range_bounded.rb

Overview

Intermediate STI base for field families that constrain a single comparable value by ‘min`/`max` bounds.

Leaves: ‘Field::Integer`, `Field::Decimal`, `Field::Date`, `Field::DateTime`. `Field::Percentage` keeps its `< Decimal` chain (so the new full chain is `Percentage < Decimal < RangeBounded < Base`).

Does NOT declare a ‘value_column` — each leaf still owns its typed column (`integer_value`, `decimal_value`, `date_value`, `datetime_value`). The family is identified by “has min/max bounds”, not by storage shape.

Hoists the protected ‘validate_range` / `validate_date_range` / `validate_datetime_range` helpers previously kept on `Field::Base`. Each leaf declares its own `store_accessor` (`:min`/`:max` for Integer/Decimal; `:min_date`/`:max_date` for Date; `:min_datetime`/`:max_datetime` for DateTime) and its own `validates :max, comparison: { greater_than_or_equal_to: :min }` macro using the appropriate key names. Adding the macro to Date/DateTime in-slice closes a latent-bug gap previously only caught on Integer/Decimal.

Public extension point: external authors can subclass this directly if they want a typed numeric/temporal column with min/max guards (see README §“Custom field types”). STI dispatch is unaffected.

Direct Known Subclasses

Date, DateTime, Decimal, Integer

Constant Summary

Constants inherited from Base

Base::RESERVED_NAMES

Constants included from TypedStorage

TypedStorage::DEFAULT_OPERATORS_BY_COLUMN, TypedStorage::FALLBACK_OPERATORS

Method Summary

Methods inherited from Base

#allowed_option_values, #array_field?, #backfill_default!, #cast, #clear_option_cache!, #default_value, #default_value=, export_schema, #field_type_name, import_schema, #insert_at, #move_higher, #move_lower, #move_to_bottom, #move_to_top, #optionable?, #validate_typed_value

Methods included from TypedStorage

#after_snapshot, #apply_default, #before_snapshot, #read_value, #value_changed?, #write_value