Module: GS1::Definitions::ClassMethods

Defined in:
lib/gs1/definitions.rb

Overview

Adding defintion class methods.

Constant Summary collapse

DEFINITIONS =
%i[check_digit date date_month_based length separator].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#definitionsObject (readonly)

Returns the value of attribute definitions.



16
17
18
# File 'lib/gs1/definitions.rb', line 16

def definitions
  @definitions
end

Instance Method Details

#allowed_lengthsObject



87
88
89
# File 'lib/gs1/definitions.rb', line 87

def allowed_lengths
  lengths[:allowed]
end

#barcode_lengthObject



79
80
81
# File 'lib/gs1/definitions.rb', line 79

def barcode_length
  lengths[:barcode]
end

#barcode_max_lengthObject



83
84
85
# File 'lib/gs1/definitions.rb', line 83

def barcode_max_length
  lengths[:max_barcode]
end

#define(key, options = {}) ⇒ Object

Raises:



20
21
22
23
24
25
26
# File 'lib/gs1/definitions.rb', line 20

def define(key, options = {})
  raise UnknownDefinition, "#{key} is not a valid definition" unless DEFINITIONS.include?(key)

  @definitions ||= {}

  definitions[key] = send("normalize_#{key}_options", options)
end

#lengthsObject



91
92
93
# File 'lib/gs1/definitions.rb', line 91

def lengths
  definitions[:length] || raise(MissingLengthDefinition)
end

#normalize_check_digit_options(_options) ⇒ Object

Currently no support for options.



29
30
31
# File 'lib/gs1/definitions.rb', line 29

def normalize_check_digit_options(_options)
  {}
end

#normalize_date_month_based_options(_options) ⇒ Object

Currently no support for options.



39
40
41
# File 'lib/gs1/definitions.rb', line 39

def normalize_date_month_based_options(_options)
  {}
end

#normalize_date_options(_options) ⇒ Object

Currently no support for options.



34
35
36
# File 'lib/gs1/definitions.rb', line 34

def normalize_date_options(_options)
  {}
end

#normalize_length_options(options) ⇒ Object

Defaults barcode length to allowed length if not explicitly defined, only if there is one significant allowed.



50
51
52
53
54
55
56
# File 'lib/gs1/definitions.rb', line 50

def normalize_length_options(options)
  options[:allowed] = normalize_multiple_option(options[:allowed] || options[:barcode])
  options[:barcode] = normalize_singlural_option(options[:barcode])
  options[:max_barcode] = options[:allowed]&.last

  options
end

#normalize_multiple_option(option_value) ⇒ Object



58
59
60
61
62
63
64
65
# File 'lib/gs1/definitions.rb', line 58

def normalize_multiple_option(option_value)
  case option_value
  when nil then nil
  when Range then option_value.to_a
  when Array then option_value
  else [option_value]
  end
end

#normalize_separator_options(_options) ⇒ Object

Boolean value



44
45
46
# File 'lib/gs1/definitions.rb', line 44

def normalize_separator_options(_options)
  true
end

#normalize_singlural_option(option_value) ⇒ Object



67
68
69
70
71
72
73
# File 'lib/gs1/definitions.rb', line 67

def normalize_singlural_option(option_value)
  return unless option_value

  raise InvalidDefinitionType unless option_value.is_a?(Numeric)

  option_value
end

#separator?Boolean

Returns:

  • (Boolean)


75
76
77
# File 'lib/gs1/definitions.rb', line 75

def separator?
  definitions[:separator]
end