Module: Clack::Transformers

Defined in:
lib/clack/transformers.rb

Overview

Built-in transformers for normalizing user input. Use these with the ‘transform:` option on prompts.

Transforms are applied after validation passes, so you can validate the raw input and transform it into a normalized form.

Examples:

Using symbol shortcuts (preferred)

Clack.text(message: "Name?", transform: :strip)
Clack.text(message: "Code?", transform: :upcase)

Using module methods

Clack.text(message: "Name?", transform: Clack::Transformers.strip)

Custom transformer

Clack.text(
  message: "Amount?",
  transform: ->(v) { v.to_f.round(2) }
)

Chaining multiple transforms

Clack.text(
  message: "Username?",
  transform: Clack::Transformers.chain(:strip, :downcase)
)

Constant Summary collapse

REGISTRY =

Lookup table for symbol shortcuts

{}

Class Method Summary collapse

Class Method Details

.capitalizeProc

Capitalize first letter, lowercase rest.

Returns:

  • (Proc)

    Transformer proc



77
78
79
# File 'lib/clack/transformers.rb', line 77

def capitalize
  REGISTRY[:capitalize]
end

.chain(*transformers) ⇒ Proc

Combine multiple transformers, applied in order. Accepts symbols or procs.

Examples:

Clack::Transformers.chain(:strip, :downcase)
Clack::Transformers.chain(:strip, ->(v) { v.reverse })

Parameters:

  • transformers (Array<Symbol, Proc>)

    Transformers to combine

Returns:

  • (Proc)

    Combined transformer proc



126
127
128
129
# File 'lib/clack/transformers.rb', line 126

def chain(*transformers)
  resolved = transformers.map { |xform| resolve(xform) }
  ->(value) { resolved.reduce(value) { |val, xform| xform.call(val) } }
end

.compactProc

Remove all whitespace.

Returns:

  • (Proc)

    Transformer proc



95
96
97
# File 'lib/clack/transformers.rb', line 95

def compact
  REGISTRY[:compact]
end

.digits_onlyProc

Extract only digits.

Returns:

  • (Proc)

    Transformer proc



113
114
115
# File 'lib/clack/transformers.rb', line 113

def digits_only
  REGISTRY[:digits_only]
end

.downcaseProc

Convert to lowercase.

Returns:

  • (Proc)

    Transformer proc



65
66
67
# File 'lib/clack/transformers.rb', line 65

def downcase
  REGISTRY[:downcase]
end

.resolve(transformer) ⇒ #call?

Resolve a transformer from a symbol, callable, or return as-is.

Parameters:

  • transformer (Symbol, #call, nil)

    the transformer to resolve

Returns:

  • (#call, nil)

    the resolved transformer



37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/clack/transformers.rb', line 37

def resolve(transformer)
  case transformer
  when Symbol
    REGISTRY[transformer] || raise(ArgumentError,
      "Unknown transformer: #{transformer.inspect}. Available: #{REGISTRY.keys.map(&:inspect).join(", ")}")
  when nil
    nil
  else
    return transformer if transformer.respond_to?(:call)

    raise ArgumentError, "Transform must be a Symbol or respond to #call, got #{transformer.class}"
  end
end

.squishProc

Strip and collapse whitespace to single spaces.

Returns:

  • (Proc)

    Transformer proc



89
90
91
# File 'lib/clack/transformers.rb', line 89

def squish
  REGISTRY[:squish]
end

.stripProc

Strip leading/trailing whitespace.

Returns:

  • (Proc)

    Transformer proc



53
54
55
# File 'lib/clack/transformers.rb', line 53

def strip
  REGISTRY[:strip]
end

.titlecaseProc

Capitalize first letter of each word.

Returns:

  • (Proc)

    Transformer proc



83
84
85
# File 'lib/clack/transformers.rb', line 83

def titlecase
  REGISTRY[:titlecase]
end

.to_floatProc

Parse as float.

Returns:

  • (Proc)

    Transformer proc



107
108
109
# File 'lib/clack/transformers.rb', line 107

def to_float
  REGISTRY[:to_float]
end

.to_integerProc

Parse as integer.

Returns:

  • (Proc)

    Transformer proc



101
102
103
# File 'lib/clack/transformers.rb', line 101

def to_integer
  REGISTRY[:to_integer]
end

.trimProc

Alias for strip (for JS developers).

Returns:

  • (Proc)

    Transformer proc



59
60
61
# File 'lib/clack/transformers.rb', line 59

def trim
  REGISTRY[:trim]
end

.upcaseProc

Convert to uppercase.

Returns:

  • (Proc)

    Transformer proc



71
72
73
# File 'lib/clack/transformers.rb', line 71

def upcase
  REGISTRY[:upcase]
end