![Create React App Officially Deprecated Amid React 19 Compatibility Issues](https://cdn.sanity.io/images/cgdhsj6q/production/04fa08cf844d798abc0e1a6391c129363cc7e2ab-1024x1024.webp?w=400&fit=max&auto=format)
Security News
Create React App Officially Deprecated Amid React 19 Compatibility Issues
Create React App is officially deprecated due to React 19 issues and lack of maintenance—developers should switch to Vite or other modern alternatives.
Plain Old Ruby Objects + Rails Validations = self-checking Ruby objects. Here's a quick example of a common case: a class with an immutable, required, type-checked attribute:
class Person < ValidatedObject::Base
validated_attr :name, type: String, presence: true
end
# Using it
me = Person.new(name: 'Robb')
I use classes like these as Data Transfer Objects at my system boundaries.
This is a small layer around ActiveModel::Validations. (About 25 lines of code.) So if you know how to use Rails Validations, you're good to go. I wrote this to help with CSV data imports and website microdata generation.
All of the ActiveModel::Validations are available, plus a new one, TypeValidator
.
class Dog < ValidatedObject::Base
# Plain old Ruby
attr_accessor :name, :birthday
# Plain old Rails
validates :name, presence: true
# A new type-validation if you'd like to use it
validates :birthday, type: Date, allow_nil: true # Strongly typed but optional
end
We can make it immutable with attr_reader
:
class ImmutableDog < ValidatedObject::Base
attr_reader :name, :birthday
validates :name, presence: true
validates :birthday, type: Date, allow_nil: true
end
attr_reader
followed byvalidates
is such a common pattern that there's a second DSL which wraps them up into one call:validates_attr
.
Here's the immutable version of Dog
re-written with the simplified DSL:
class ImmutableDog < ValidatedObject::Base
validates_attr :name, presence: true
validates_attr :birthday, type: Date, allow_nil: true
end
type:
checkThe included TypeValidator
is what enables type: Date
, above. All classes can be checked, as well as a pseudo-class Boolean
. E.g.:
#...
validates :premium_membership, type: Boolean
#...
# This Dog instance validates itself at the end of instantiation.
spot = Dog.new(name: 'Spot')
# We can also explicitly test for validity because all of
# ActiveModel::Validations is available.
spot.valid? # => true
spot.birthday = Date.new(2015, 1, 23)
spot.valid? # => true
Any of the standard Validations methods can be
used to test an instance, plus the custom check_validations!
convenience method:
spot.birthday = '2015-01-23'
spot.valid? # => false
spot.check_validations! # => ArgumentError: Birthday is a String, not a Date
Note the clear, explicit error message. These are great when reading a log file following a data import. It describes all the invalid conditions. Let's test it by making another attribute invalid:
spot.name = nil
spot.check_validations! # => ArgumentError: Name can't be blank; Birthday is a String, not a Date
I often use a validated object in a loop to import data, e.g.:
# Import a CSV file of dogs
dogs = []
csv.next_row do |row|
begin
dogs << Dog.new(name: row.name)
rescue ArgumentError => e
logger.warn(e)
end
end
The result is that dogs
is an array of guaranteed valid Dog objects. And the
error log lists unparseable rows with good info for tracking down problems in
the data.
My Schema.org microdata generation gem uses ValidatedObjects to recursively create well formed HTML / JSON-LD.
Add this line to your application's Gemfile:
gem 'validated_object'
And then execute:
$ bundle
Or install it yourself as:
$ gem install validated_object
(TODO: Verify these instructions.) After checking out the repo, run bin/setup
to install dependencies. Then, run rake spec
to run the tests. You can also
run bin/console
for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install
. To
release a new version, update the version number in version.rb
, and then run
bundle exec rake release
, which will create a git tag for the version, push
git commits and tags, and push the .gem
file to
rubygems.org.
Bug reports and pull requests are welcome on GitHub.
The gem is available as open source under the terms of the MIT License.
FAQs
Unknown package
We found that validated_object demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Create React App is officially deprecated due to React 19 issues and lack of maintenance—developers should switch to Vite or other modern alternatives.
Security News
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
Security News
The Linux Foundation is warning open source developers that compliance with global sanctions is mandatory, highlighting legal risks and restrictions on contributions.