Module: Pubid::Components::Factory

Defined in:
lib/pubid/components/factory.rb

Overview

Coerces loose primitive kwargs (matching pubid 1.x’s ‘Identifier.create` signature) into the structured Component objects pubid 2.x expects.

Used by per-flavor ‘.create` factories.

Constant Summary collapse

COERCERS =

Per-kwarg coercer. Returns a Component, or an Array<Component> for collection attributes such as ‘languages`.

{
  publisher: ->(v) { Publisher.new(body: v.to_s) },
  number:    ->(v) { Code.new(value: v.to_s) },
  part:      ->(v) { Code.new(value: v.to_s) },
  subpart:   ->(v) { Code.new(value: v.to_s) },
  year:      ->(v) { Date.new(year: v.to_s) },
  edition:   ->(v) { Edition.new(number: v) },
  language:  ->(v) { [Language.new(code: v.to_s)] },
}.freeze
KEY_RENAMES =

1.x kwarg name → 2.x attribute name. Applied after coercion.

{
  year: :date,
  language: :languages,
}.freeze

Class Method Summary collapse

Class Method Details

.from_hash(opts) ⇒ Object

Convert a hash of 1.x-style primitive kwargs into a hash of 2.x-style Component-valued attributes ready for ‘<IdentifierClass>.new(…)`.

Unknown keys pass through unchanged; nil values are dropped.



39
40
41
42
43
44
45
46
47
# File 'lib/pubid/components/factory.rb', line 39

def self.from_hash(opts)
  opts.each_with_object({}) do |(k, v), out|
    next if v.nil?

    target = KEY_RENAMES.fetch(k, k)
    coercer = COERCERS[k]
    out[target] = coercer ? coercer.call(v) : v
  end
end