module T::Props::Optional::DecoratorMethods
def add_prop_definition(prop, rules)
def add_prop_definition(prop, rules) compute_derived_rules(rules) default_setter = T::Props::Private::ApplyDefault.for(decorated_class, rules) if default_setter @props_with_defaults ||= {} @props_with_defaults[prop] = default_setter props_without_defaults&.delete(prop) # Handle potential override rules[DEFAULT_SETTER_RULE_KEY] = default_setter else @props_without_defaults ||= {} @props_without_defaults[prop] = rules.fetch(:setter_proc) props_with_defaults&.delete(prop) # Handle potential override end super end
def compute_derived_rules(rules)
def compute_derived_rules(rules) rules[:fully_optional] = !T::Props::Utils.need_nil_write_check?(rules) rules[:need_nil_read_check] = T::Props::Utils.need_nil_read_check?(rules) end
def get_default(rules, instance_class)
def get_default(rules, instance_class) rules[DEFAULT_SETTER_RULE_KEY]&.default end
def has_default?(rules)
def has_default?(rules) rules.include?(DEFAULT_SETTER_RULE_KEY) end
def prop_optional?(prop)
def prop_optional?(prop) prop_rules(prop)[:fully_optional] end
def prop_validate_definition!(name, cls, rules, type)
def prop_validate_definition!(name, cls, rules, type) result = super if rules.key?(:default) && rules.key?(:factory) raise ArgumentError.new("Setting both :default and :factory is invalid. See: go/chalk-docs") end result end
def valid_rule_key?(key)
def valid_rule_key?(key) super || VALID_RULE_KEYS[key] end