Sha256: f8cbc80fd73fce615b64e804cc924536fce494f835389156a11034e46d25ad04

Contents?: true

Size: 489 Bytes

Versions: 1

Compression:

Stored size: 489 Bytes

Contents

require "dry-initializer"
require "rails"

# Define a dispatcher for `:model` and `:find_by` options
rails_dispatcher = lambda do |model: nil, find_by: :id, **options|
  return options unless model

  model   = model.constantize if model.is_a? String
  coercer = lambda do |value|
    return value if value.instance_of? model
    model.find_by(find_by => value)
  end

  options.merge(type: coercer)
end

# Register a dispatcher
Dry::Initializer::Attribute.dispatchers << rails_dispatcher

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
dry-initializer-rails-1.0.0 lib/dry/initializer/rails.rb