- Support for schemas in view definitions via
schema do ... end
block (evaluated in the context of the canonical schema) (solnic) - Schemas have their own types with adapter-specific APIs (solnic)
- Schema attributes include meta properties
source
andtarget
(for FKs) (solnic) - Inferred schemas can have explicit attribute definitions for cases where inference didn't work (solnic)
- New schema APIs:
#project
,#rename
,#exclude
,#prefix
,#wrap
and#merge
(solnic) - New schema attribute APIs:
#name
,#aliased
,#aliased?
,#prefixed
,#prefixed?
,#wrapped
,#wrapped?
,#source
,#target
,#primary_key?
,#foreign_key?
(solnic) - Schemas are coercible to arrays that include all attribute types (solnic)
- Automatic relation view projection via
Schema#call
(abstract method for adapters) (solnic) Relation#new(dataset, new_opts)
interface (solnic)Relation#[]
interface for convenient access to schema attributes (solnic)Command
has now support forbefore
andafter
hooks (solnic)- New
Command#before
method for creating a command with before hook(s) at run-time (solnic) - New
Command#after
method for creating a command with after hook(s) at run-time (solnic) - New
Gateway#transaction
method runs code inside a transaction (flash-gordon)
- [BREAKING] All relations have schemas now, empty by default (solnic)
- [BREAKING]
view
DSL is now part of the core relation API (solnic) - [BREAKING]
view
DSL is based on schemas now,header
was replaced withschema
(solnic) - [BREAKING] Deprecated
Command.validator
was removed (solnic) - [internal] Renamed
relation
=>target
meta property in FK types (solnic) - [internal] Use deprecations API from dry-core (flash-gordon)
- [internal] Use common constants from dry-core (EMPTY_HASH, EMPTY_ARRAY etc.) (flash-gordon)
- [internal] Internal ROM modules (array_dataset, enumerable_dataset, auto_curry, and data_proxy) were moved from rom-support to ROM itself (flash-gordon)
- [internal] rom-support dependency was removed (flash-gordon)
- API docs for
ROM::Container
(solnic)
- Custom command input function is no longer overridden by schema hash (solnic)
Relation::Name#to_s
returns a string properly when there is no alias (solnic)
- Support for different auto-registration strategies (janjiss)
- Support for custom component dir names in auto-registration (AMHOL)
- Finalizing schema that is already finalized no longer crashes (flash-gordon)
- Extendible
schema
DSL for relations with attribute and type definitions (solnic) - New command plugin
:schema
which will set up an input handler from schema definition (solnic) - New command option
restrictible
for commands that can use a restricted relation (solnic) - More meaningful exception is raised when trying to access a non-existant command (thiagoa)
Relation::Name
class that contains both relation and dataset names (flash-gordon)Relation::Loaded#pluck
returning values under specified key (solnic)Relation::Loaded#primary_keys
returning a list of primary keys from a materialized relation (solnic)
Command.create_class
for building a command class dynamically (solnic)Command.extend_for_relation
for extending a command with relation view interface (solnic)
- [BREAKING] command graphs return materialized results (a hash or an array) (solnic)
Container#disconnect
properly delegates to gateways (endash)Relation#with
properly carries original options (solnic)- Command pipeline will stop processing if result was
nil
or an empty array (solnic)
- [BREAKING]
ROM.env
is gone (solnic) - [BREAKING]
Update
andDelete
no longer callsassert_tuple_count
more info (solnic) - [BREAKING]
Relation#name
andCommand#name
now returnsRelation::Name
instance (flash-gordon) Command.validator
is now deprecated more info (solnic)Relation.dataset
yields a relation class when block was passed (solnic)Relation#attributes
can return attributes explicitly passed via options (solnic)- Relation
:key_inference
plugin supports schema information from other relations (solnic) auto_registration
coerces its directory to a pathname now (adz)macros
are now enabled by default in in-line setup block (endash)
- Command graph DSL (endash + solnic)
- Command graph now supports update and delete commands (cflipse + solnic)
Gateway.adapter
setting and a correspondingGateway#adapter
reader. Both are necessary to access a migrator (nepalez)ROM::Commands::Result#{success?,failure?}
interface (Snuff)- Imported relation plugins from
rom-repository
:view
for explicit relation view definitionskey_inference
for inferringforeign_key
of a relation
- REMOVED all deprecated APIs (solnic)
- [fixed #306] Inheriting from a misconfigured adapter relation will raise a meaningful error (solnic)
- Command graph will raise
ROM::KeyMissing
command error when a key is missing in the input (solnic) - Command graph no longer rescues from any exception (solnic)
Relation.register_as
properly overrides inherited value (solnic)
This is a small bug-fix release which addresses a couple of issues for inline setup DSL and multi-environments.
- Multi-env setup for adapters with schema-inferration support won't crash (solnic)
- Default adapter is set correctly when many adapters are configured and one is
registered under
:default
name (solnic) - When defining a relation using inline DSL with custom dataset name the relation
name will be correctly set as
register_as
setting (solnic)
- When using inline-setup for env the auto_registration mechanism will be turned on by default (solnic)
- Configuration API for gateways supporting following options:
infer_relations
eithertrue
orfalse
- if disabled schema inference won't be used to automatically set up relations for youinferrable_relations
a list of allowed relations that should be inferrednot_inferrable_relations
a list of relations that should not be inferred
- Global setup with auto-registration ported to the
:auto_registration
environment plugin (AMHOL) - Multi-environment setup possible now via
ROM::Environment
object (AMHOL) - All relations are now lazy with auto-currying enabled (solnic)
- Low-level query DSL provided by adapters is now public but using it directly in application layer is discouraged (solnic)
ROM::Mapper
component extracted into standalonerom-mapper
gem (solnic)- Support libraries extracted to
rom-support
gem (solnic)
register_as
is now properly inferred for relations and their descendants (solnic)- Adapter-specific interface is properly included in relation descendants (solnic)
- Combined commands (aka command graph) properly rejects keys from nested input prior sending the input to individual commands (solnic)
- Composite relation materializes correctly when another composite on the right side became materialized (ie piping relation through a composite relation will work correctly) (solnic)
ROM::CommandError
properly sets original error and backtrace (solnic)
- Internal transproc processor has been updated to the new API (solnic)
- Commands can be combined into a single command that can work with a nested input (solnic)
- New
step
mapper operation that allows multistep transformations inside a single mapper (dekz) - New
ungroup
andunfold
mapper operations inversegroup
andfold
(nepalez) - Support deep nesting of
unwrap
mapper operations (nepalez) - Support usage of
exclude
in a root of the mapper (nepalez) - Support usage of
prefix
andprefix_separator
mapper operations inside blocks (nepalez) - Support renaming of the rest of an attribute after
unwrap
(nepalez)
Repository
class has been renamed toGateway
with proper deprecation warnings (cflipse)combine
in mapper can be used without a block (kwando)wrap
andgroup
in mapper will raise error if:mapper
is set along with block or options (vrish88)
order
memory repository operation sorts tuples containing empty values (nepalez)Mapper::AttributeDSL#embedded
now honorsoption[:type]
when used withoption[:mapper]
(c0)
- Support for passing a block for custom coercion to
attribute
(gotar) fold
mapping operation which groups keys from input tuples to array of values from the first of listed keys (nepalez)- Adapter
Relation
and command classes can specifyadapter
identifier which allows using adapter-specific plugins w/o the need to specify adapter when callinguse
(solnic)
- [rom/memory]
restrict
operation supports array as a value (gotar) - [rom/memory]
restrict
operation supports regexp as a value (gotar)
combine
interface in Relation and Mapper which allows simple and explicit eager-loading that works with all adapters (solnic)reject_keys
option in mapper which will filter out unspecified keys from input tuples (solnic)unwrap
mapping operation (aflatter)- Arbitrary objects can be registered as mappers via
register
in mapping DSL (solnic) - Ability to reuse existing mappers in
group
,wrap
andembedded
mappings (solnic) - Plugin interface for Relation, Mapper and Command (cflipse)
Memory::Dataset
accepts options hash now which makes it more flexible for any adapter that wants to subclass it (solnic)ROM::Memory::Relation#take
(solnic)
- [BREAKING]
Command#call
applies curried args first (solnic) Commands::Update#set
was deprecated in favor ofcall
(solnic)group
mapping reject empty tuples (solnic)
Command
respond to missing properly now (solnic)Mapper::DSL
respond to missing properly now (solnic)
- Fixed all the warnings \o/ (splattael)
- Introduced
Deprecations
helper module (solnic)
- Updated to transproc 0.2.0 (solnic)
CommandRegistry#respond_to_missing?
behavior (hecrj)
- Ability to auto-map command result via
rom.command(:rel_name).as(:mapper_name)
(solnic)
- gemspec no longer specifies required_ruby_version so that rom can be installed on jruby (solnic)
- Obsolete
Env#readers
was removed (splattael)
- It is now possible to define custom relation, mapper and command classes during setup (solnic)
- New
Env#relation
interface for reading and mapping relations which supports:Relation::Lazy
with auto-currying, mapping and composition features (solnic)Relation::Composite
allowing data-pipelining with arbitrary objects (solnic)- Passing a block which yields relation with adapter query DSL available (solnic)
- Relations can be extended with plugins using Options API (solnic)
- Commands are now composable via
>>
operator (solnic) - Mappers support
prefix_separator
option (solnic) - Mappers can be registered under custom names (solnic)
- Relation
dataset
name is inferred from the class name by default (gotar) - Relation can be registered under a custom name via
register_as
option (mcls) - Adapters can use helper modules for datasets:
ArrayDataset
andEnumerableDataset
(solnic) - Adapter interface can now be tested via a lint test (elskwid + solnic + splattael)
tuple_count
interface in AbstractCommand which can be overridden by adapter (solnic)- Custom Inflector API that auto-detects a specific inflection engine (mjtko)
- [BREAKING] Schema DSL was removed - attributes can be specified only in mapper DSL
- [BREAKING] Reader was removed in favor of relation interface with explicit mapping (solnic)
- [BREAKING] Command API was simplified - commands should be accessed directly in
.try
block and default repository can be changed when defining a relation (solnic) .setup
interface requires either an adapter identifier or can accept a repository instance (aflatter)- Adapter interface no longer requires specific constructor to be defined (aflatter)
- Adapters no longer need to handle connection URIs (aflatter)
- Adapter/Repository has been collapsed to just
Repository
(solnic) - Relation no longer needs a header object and only operates on an adapters dataset (solnic)
- Relation no longer uses on Charlatan with method_missing magic (solnic)
- Adapter's dataset no longer requires header (solnic)
- Make storage in memory adapter thread-safe #110 (splattael)
- An Adapter can provide its own Relation subclass with custom behavior (solnic)
- Relation provides its "public interface" using method_added hook (splattael + solnic)
- ROM no longer depends on charlatan, concord and inflecto gems (mjtko + solnic)
- Mapper DSL supports
embedded
interface for nested tuples (solnic) - Support for nested
group
mapping (solnic) - Support for nested
wrap
mapping (solnic) - Support for primitive type coercions (:to_string, :to_integer etc.) (solnic)
- Support for top-level
:prefix
option in mapping DSL (solnic) - Support for top-level
:symbolize_keys
option in mapping DSL (solnic) - Support for
:prefix
option in wrap/group mapping DSL (solnic) - Interface for registering data mapping processors (solnic)
- Remaining relations are automatically setup from the schema (solnic)
- Each relation has now access to other relations (previously they only had access to raw datasets) (solnic)
ROM.setup
supports passing in just an uri which will setup a default repository (solnic)ROM.setup
supports passing in conventional database connection hash (solnic)- Adapters support extra options in addition to the base connection URI (solnic)
- Mapping backend replaced by integration with transproc (solnic)
- Readers no longer expose adapter query DSL (solnic)
- Registry objects raise
ROM::Registry::ElementNotFoundError
when missing element is referenced (rather than raw KeyError) (solnic) - Performance improvements in Reader (solnic)
ROM::RA
was merged into in-memory adapter as this fits there perfectly (solnic)- It is no longer needed to explicitly execute a delete command in try block (solnic)
- Wrap/group skips empty tuples now (solnic)
- Readers raise a meaningful error when relation is missing (solnic)
- Massive code clean-up and rubocop integration (chastell)
- Refactored
Reader
and mapper-specific logic intoMapperRegistry
(solnic)
- Mappers support tuple transformation using wrap and group operations (solnic)
- PORO model builder supports namespaced constants via
name: 'MyApp:Entities::User
(solnic)
ROM::RA
interface is no longer mixed into relations by default (solnic)- ~2.5 x speed up in aggregate mapping (solnic)
- PORO model builder only defines attribute readers now (no writers!) (solnic)
- Registry objects in Env will now raise
KeyError
when unknown name is referenced (solnic)
- Adapter can now implement
Adapter#dataset(name, header)
to return a dataset (solnic) - For multi-step setup the DSL is available in
ROM
too (solnic) - Global environment can be stored via
ROM.finalize
and accessible viaROM.env
(solnic) - Mapper won't infer attributes from the header if
:inherit_header
option is set to false (solnic)
- Schema can be defined in multiple steps (solnic)
- Setting model in mapper DSL is no longer required and defaults to
Hash
(solnic) - Adapter datasets no longer have to return headers when they are provided by schema (solnic)
- Command API (solnic)
- Setup DSL is now available within the
ROM.setup
block (solnic) - Support for setting up a logger for an adapter (solnic)
- New
Adapter#dataset?(name)
which every adapter must implement (solnic)
- method-missing in
Repository
andEnv
kindly callssuper
(solnic)
- Abstract
Adapter
defines:connection
reader so it doesn't have to be defined in adapter descendants (solnic)
- attributes for
group
mapping operation can be specified without options (solnic) - attributes for
wrap
mapping operation can be specified without options (solnic) Env
uses Equalizer (solnic)- boot dsl methods return self (solnic)
- when schema is missing booting will gracefuly skip building relations and mappers (solnic)
- in-memory join handles one-to-many and many-to-one correctly (solnic)
This version is a rewrite that introduces a new, simplified architecture based on a new adapter interface.
- [feature] added :rename option to schema attribute DSL (solnic)
- [feature] added support for join, group, wrap, project and rename operations (solnic)
- [feature] added support for setting domain object loading strategy (solnic)
- [feature] Environment.setup can be used with a block to define schema and mapping (solnic)
- [feature] added public interface for building mappers (see Mapper.build) (solnic)
- [feature] added support for mapping embedded objects using wrap/group (solnic)
- [feature] environment exposes mapper registry via Environment#mappers (solnic)
- [BREAKING] rom-relation, rom-mapper and rom-session were merged into rom project (solnic)
- [BREAKING] changed mapping DSL (users do...end => relation(:users) do...end) (solnic)
- [BREAKING] added :from option to mapping DSL which replaced :to (solnic)
- [internal] mappers are now backed by morpher (solnic)
- [internal] renaming and optimizing relations happens on the schema level now (solnic)
- [internal] environment will raise if unknown relation is referenced via
Environment#[]
(solnic)
- [updated] rom-relation
- [updated] rom-relation
- [updated] rom-session
First public release