diff --git a/core/lib/rom/transformer.rb b/core/lib/rom/transformer.rb index d72fa09ec..5ef027ec2 100644 --- a/core/lib/rom/transformer.rb +++ b/core/lib/rom/transformer.rb @@ -15,6 +15,31 @@ class Transformer < Transproc::Transformer[ROM::Processor::Transproc::Functions] defines :relation, :register_as + # Configure relation for the transformer + # + # @example with a custom name + # class UsersMapper < ROM::Transformer + # relation :users, as: :json_serializer + # + # map do + # rename_keys user_id: :id + # deep_stringify_keys + # end + # end + # + # users.map_with(:json_serializer) + # + # @param name [Symbol] + # @param options [Hash] + # @option options :as [Symbol] Mapper identifier + # + # @api public + def self.relation(name = Undefined, options = EMPTY_HASH) + return @relation if name.equal?(Undefined) && defined?(@relation) + register_as(options.fetch(:as, name)) + super(name) + end + # Define transformation pipeline # # @example diff --git a/core/spec/integration/transformer_spec.rb b/core/spec/integration/transformer_spec.rb index 0cceb84ed..b28160a91 100644 --- a/core/spec/integration/transformer_spec.rb +++ b/core/spec/integration/transformer_spec.rb @@ -20,8 +20,7 @@ let(:mapper_class) do Class.new(ROM::Transformer) do - relation :users - register_as :default + relation :users, as: :default map do rename_keys user_id: :id