w
Size: a a a
w
AN
rebase --onto
пересадит тебе коммит3 (или целую ветку) на коммит1reset --hard
отмотает исходную ветку на commit2IN
w
w
w
IN
IN
АД
w
ME
P
A
AG
A
AG
Email = Types::String
.constructor(->(val) { val&.downcase&.strip })
.constrained(format: URI::MailTo::EMAIL_REGEXP)
Phone = Types::String
.constructor(->(val) { "+#{Phony.normalize(val)}" if Phony.plausible?(val) })
.constrained(case: ->(val) { Phony.plausible? val })
TimeZone = Types::String.optional.constructor(
lambda do |val|
ActiveSupport::TimeZone[val]&.tzinfo&.name if val
end
)
AG
AG
optional(:time_zone).maybe(Types::TimeZone)
optional(:email).filled(Types::Email)
required(:phone).filled(Types::Phone)
A