Sha256: 62815290bf273f383fa30296d87d1cc76161d7ed7f7c001cdbcbe8890a908761

Contents?: true

Size: 1.3 KB

Versions: 30

Compression:

Stored size: 1.3 KB

Contents

# frozen_string_literal: true

class ReeMapper::MapperFactoryProxy
  attr_reader :mapper_factory, :register_as, :strategies, :after_build

  contract(
    Class, # SubclassOf[ReeMapper::MapperFactory],
    Kwargs[
      register_as: Nilor[Symbol]
    ],
    Optblock => Any
  )
  def initialize(mapper_factory, register_as:, &blk)
    @mapper_factory = mapper_factory
    @register_as    = register_as
    @strategies     = []
    @after_build    = blk
  end

  contract(Or[Symbol, ReeMapper::MapperStrategy], Kwargs[dto: Nilor[Class]], Optblock => Or[ReeMapper::MapperFactoryProxy, ReeMapper::Mapper]).throws(ArgumentError)
  def use(strategy_or_method, dto: nil, &blk)
    if strategy_or_method.is_a?(ReeMapper::MapperStrategy)
      strategy = strategy_or_method
    else
      strategy = mapper_factory.strategies.detect { _1.method == strategy_or_method }
      raise ArgumentError, "MapperFactory strategy :#{strategy_or_method} not found" unless strategy
      strategy = Marshal.load(Marshal.dump(strategy))
      strategy.dto = dto if dto
    end

    self.strategies << strategy

    return self unless blk

    mapper = ReeMapper::Mapper.build(strategies)
    mapper_factory.new(mapper).instance_exec(&blk)

    mapper_factory.register(register_as, mapper) if register_as

    after_build&.call(mapper)

    mapper
  end
end

Version data entries

30 entries across 30 versions & 1 rubygems

Version Path
ree_lib-1.0.30 lib/ree_lib/packages/ree_mapper/package/ree_mapper/mapper_factory_proxy.rb
ree_lib-1.0.29 lib/ree_lib/packages/ree_mapper/package/ree_mapper/mapper_factory_proxy.rb
ree_lib-1.0.28 lib/ree_lib/packages/ree_mapper/package/ree_mapper/mapper_factory_proxy.rb
ree_lib-1.0.27 lib/ree_lib/packages/ree_mapper/package/ree_mapper/mapper_factory_proxy.rb
ree_lib-1.0.26 lib/ree_lib/packages/ree_mapper/package/ree_mapper/mapper_factory_proxy.rb
ree_lib-1.0.24 lib/ree_lib/packages/ree_mapper/package/ree_mapper/mapper_factory_proxy.rb
ree_lib-1.0.23 lib/ree_lib/packages/ree_mapper/package/ree_mapper/mapper_factory_proxy.rb
ree_lib-1.0.22 lib/ree_lib/packages/ree_mapper/package/ree_mapper/mapper_factory_proxy.rb
ree_lib-1.0.21 lib/ree_lib/packages/ree_mapper/package/ree_mapper/mapper_factory_proxy.rb
ree_lib-1.0.20 lib/ree_lib/packages/ree_mapper/package/ree_mapper/mapper_factory_proxy.rb
ree_lib-1.0.19 lib/ree_lib/packages/ree_mapper/package/ree_mapper/mapper_factory_proxy.rb
ree_lib-1.0.18 lib/ree_lib/packages/ree_mapper/package/ree_mapper/mapper_factory_proxy.rb
ree_lib-1.0.17 lib/ree_lib/packages/ree_mapper/package/ree_mapper/mapper_factory_proxy.rb
ree_lib-1.0.16 lib/ree_lib/packages/ree_mapper/package/ree_mapper/mapper_factory_proxy.rb
ree_lib-1.0.15 lib/ree_lib/packages/ree_mapper/package/ree_mapper/mapper_factory_proxy.rb
ree_lib-1.0.14 lib/ree_lib/packages/ree_mapper/package/ree_mapper/mapper_factory_proxy.rb
ree_lib-1.0.13 lib/ree_lib/packages/ree_mapper/package/ree_mapper/mapper_factory_proxy.rb
ree_lib-1.0.12 lib/ree_lib/packages/ree_mapper/package/ree_mapper/mapper_factory_proxy.rb
ree_lib-1.0.11 lib/ree_lib/packages/ree_mapper/package/ree_mapper/mapper_factory_proxy.rb
ree_lib-1.0.10 lib/ree_lib/packages/ree_mapper/package/ree_mapper/mapper_factory_proxy.rb