We’re happy to announce the first stable release of rom core gem. It took us a little over a year to discover and implement the core interfaces that allow building rom adapters and extensions. Since no significant changes had to be made for many months and there are no outstanding issues - rom 1.0.0 is now available.

Following gems have been updated and released:

What Does This Release Mean?

This is a huge milestone even though it doesn’t change a lot from the usage point of view. Having a stable set of core interfaces will make it easier to develop adapters and extensions and get them to a stable state, too. Up until now every ROM release was huge, including lots of changes in many places, multiple gems were released at the same time. These kind of releases are hard to manage and it’s also difficult to provide information about individual changes and improvements without overwhelming current users and potential new users.

Now, with the stable rom core, we can focus on individual adapters and extensions. Release them separately, and probably more often. It will also make it simpler to explain and document changes and improvements.

What Happens Next?

First of all, we’re working on updating rom-rb.org, which will have a new design and content - as the documentation is currently being rewritten. The initial set of docs was too focused on shared, lower-level APIs, mixed with adapter-specific APIs, which was confusing. New docs will focus on high-level guides specific to individual adapters, so it will be much easier to understand how to use ROM in a specific context.

As far as individual gems go, here’s a rough plan:

  • rom
    • Relation schema support that can be used by commands and for migrations
    • Shared database migration interfaces for all adapters
  • rom-sql
    • Improvements in the query DSL, especially when it comes to building complex joins. We’re still using Sequel but that may be changed in the near future.
    • Support for prepared statements
    • Built-in types for relation schemas specific to individual databases
  • rom-repository
    • Support for commands
    • Setup interface, that would make it simple to quickly configure gateway connection and fetch data
    • Support for dry-data structs and values
  • rom-model
    • ActiveModel::Validations will be replaced by dry-validation
    • ROM::Model::Attributes will be deprecated in favor of dry-validation schemas
  • rom-rails
    • Rewrite on top of dry-component
    • ROM::Model::Form will be deprecated

Apart from these improvements, there will be smaller clean ups, refactorings and performance tweaks.

The following adapters are looking for contributors and/or maintainers:

Please get in touch if your’re interested in helping out :)

Towards rom 2.0, Stable Adapters and Repository

Further development of adapters and repository will very likely require changes in some of the core public APIs. Expect an evolution though, not a revolution. Some features will be introduced during 1.x.y upgrades, like relation schema, but any public API change will require a major version bump since rom follows SemVer. It’s probably safe to assume this will happen later this year.

rom 2.0.0 will be a base for the first stable releases of individual adapters and extensions. That’s why it is so important to focus on other adapters, not just rom-sql, to see what kind of improvements are needed and whether it’s going to break any public APIs.

Providing Feedback And Reporting Issues

If you have found an issue or you’re seeking help, there are number of ways you can get in touch:

  • Report an issue on GitHub, preferably in the issue tracker for the specific rom project. If you’re not sure which one it is - don’t worry and report it in the main rom issue tracker
  • Ask for help in the gitter channel
  • Post a message on our forum

If you’ve got feedback regarding documentation and/or the website, please report an issue in the rom-rb.org repo.

Thank You!

I’d like to use this opportunity to simply say “Thank You!” to everybody involved with the project. Many people have been supporting ROM in various ways, either by contributing bug fixes, adding features or making huge refactorings. There are also many people who have been very helpful in the gitter channel, providing support for others who were trying out ROM.

Really special thanks go to early adopters and contributors:

  • Alexander Flatter - for adopting rom very early, helping with API design, contributing code and supporting users in the channel
  • Andrew Kozin - for helping with rom-mapper, creating rom-migrator, rom-cassandra and rom-kafka
  • Andy Holland - for helping with rom core, creating rom-http and being supportive in the channel
  • Chris Flipse - who helped by providing patches and helping me with rom-rails and rom-yaml
  • Christopher Swasey - for his insane effort to refactor and improve rom setup interfaces
  • Don Morrison - for supporting me in the very early days of ROM, helping with adapter interface, documentation, rom-rb website and release announcements
  • Hannes Nevalainen - for testing things out early, providing awesome feedback and contributing to different rom projects
  • Mark Rickerby - who built rom-neo4j and helped with other projects, rom-rb website and release announcements
  • Oskar Szrajer - who helped a lot with rom-sql, rom-yesql, other adapters and patches in multiple rom projects as well as helped promoting rom at local Ruby meetups AND by providing support in our gitter channel
  • Peter Suschlik - for helping with performance improvements, support libs and helping with PRs. Peter is currently #3 comitter :)
  • Robin Miller - for helping with the new documentation and providing great feedback

I’m terribly sorry if I missed somebody! Thank you so much for helping with this enormous effort!

Happy 2016 :)