Module: Heatwave::TrackingNumber

Defined in:
app/lib/heatwave/tracking_number.rb,
app/lib/heatwave/tracking_number/spec.rb,
app/lib/heatwave/tracking_number/result.rb,
app/lib/heatwave/tracking_number/catalog.rb,
app/lib/heatwave/tracking_number/checksums.rb

Overview

Tracking number parsing, detection, and validation.

Defined Under Namespace

Modules: Checksums Classes: Catalog, Result, Spec

Class Method Summary collapse

Class Method Details

.detect_all(value) ⇒ Array<Result>

Every spec that validates the number. Used when two couriers share a
checksum (Purolator 520-prefix vs FedEx).

Parameters:

  • value (String, nil)

Returns:



27
# File 'app/lib/heatwave/tracking_number.rb', line 27

def detect_all(value) = Catalog.instance.matches(value)

.parse(value) ⇒ Result

Parse a single number. Unmatched input still returns a Result with
valid? == false so callers can branch on the predicate.

Parameters:

  • value (String, nil)

Returns:



20
# File 'app/lib/heatwave/tracking_number.rb', line 20

def parse(value) = Catalog.instance.match(value)

.specs_for(courier_code) ⇒ Array<Spec>

Barcode families for one courier_code (:ups, :canpar, …).

Parameters:

  • courier_code (Symbol, String, nil)

Returns:



33
# File 'app/lib/heatwave/tracking_number.rb', line 33

def specs_for(courier_code) = Catalog.instance.specs_for(courier_code)

.valid_for?(courier_code, value) ⇒ Boolean

Parameters:

  • courier_code (Symbol, String, nil)
  • value (String)

Returns:

  • (Boolean)


38
39
40
# File 'app/lib/heatwave/tracking_number.rb', line 38

def valid_for?(courier_code, value)
  specs_for(courier_code).any? { |spec| spec.valid?(value) }
end