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
-
.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(…)`.
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 |