Class: Stupidedi::Versions::FunctionalGroups::TwoThousandOne::ElementTypes::FixnumVal::NonEmpty

Inherits:
Stupidedi::Versions::FunctionalGroups::TwoThousandOne::ElementTypes::FixnumVal show all
Extended by:
Forwardable, Operators::Binary, Operators::Relational, Operators::Unary
Includes:
Comparable
Defined in:
lib/stupidedi/versions/functional_groups/002001/element_types/fixnum_val.rb

Overview

Non-empty numeric value. Shouldn’t be directly instantiated – instead, use the value constructors.

Instance Attribute Summary collapse

Attributes inherited from Stupidedi::Values::SimpleElementVal

#position, #usage

Instance Method Summary collapse

Methods included from Operators::Binary

binary_operators

Methods included from Operators::Relational

relational_operators

Methods included from Operators::Unary

unary_operators

Methods inherited from Stupidedi::Versions::FunctionalGroups::TwoThousandOne::ElementTypes::FixnumVal

empty, #numeric?, #too_short?, value

Methods inherited from Stupidedi::Values::SimpleElementVal

#allowed?, #component?, #date?, #id?, #leaf?, #numeric?, #simple?, #string?, #time?

Methods inherited from Stupidedi::Values::AbstractElementVal

#element?, #size

Methods inherited from Stupidedi::Values::AbstractVal

#blank?, #characters, #component?, #composite?, #definition, #element?, #functional_group?, #interchange?, #invalid?, #loop?, #present?, #repeated?, #segment?, #separator?, #simple?, #size, #table?, #transaction_set?, #transmission?

Methods included from Color

ansi, #ansi

Constructor Details

#initialize(value, usage, position) ⇒ NonEmpty

Returns a new instance of NonEmpty.



200
201
202
203
# File 'lib/stupidedi/versions/functional_groups/002001/element_types/fixnum_val.rb', line 200

def initialize(value, usage, position)
  @value = value
  super(usage, position)
end

Instance Attribute Details

#valueBigDecimal (readonly)

Returns:



194
195
196
# File 'lib/stupidedi/versions/functional_groups/002001/element_types/fixnum_val.rb', line 194

def value
  @value
end

Instance Method Details

#coerce(other) ⇒ Object



213
214
215
216
217
218
219
220
221
222
# File 'lib/stupidedi/versions/functional_groups/002001/element_types/fixnum_val.rb', line 213

def coerce(other)
  # self', other' = other.coerce(self)
  # self' * other'
  if other.respond_to?(:to_d)
    return copy(:value => other.to_d), self
  else
    raise TypeError,
      "cannot coerce FixnumVal to #{other.class}"
  end
end

#copy(changes = {}) ⇒ NonEmpty

Returns:



206
207
208
209
210
211
# File 'lib/stupidedi/versions/functional_groups/002001/element_types/fixnum_val.rb', line 206

def copy(changes = {})
  NonEmpty.new \
    changes.fetch(:value, @value),
    changes.fetch(:usage, usage),
    changes.fetch(:position, position)
end

#empty?Boolean

Returns:

  • (Boolean)


228
229
230
# File 'lib/stupidedi/versions/functional_groups/002001/element_types/fixnum_val.rb', line 228

def empty?
  false
end

#inspectString

Returns:



233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
# File 'lib/stupidedi/versions/functional_groups/002001/element_types/fixnum_val.rb', line 233

def inspect
  id = definition.bind do |d|
    "[#{'% 5s' % d.id}: #{d.name}]".bind do |s|
      if usage.forbidden?
        ansi.forbidden(s)
      elsif usage.required?
        ansi.required(s)
      else
        ansi.optional(s)
      end
    end
  end

  ansi.element("Nn.value#{id}") << "(#{to_s})"
end

#mapFixnumVal

Returns:



278
279
280
# File 'lib/stupidedi/versions/functional_groups/002001/element_types/fixnum_val.rb', line 278

def map
  FixnumVal.value(yield(@value), usage, position)
end

#to_sString

Returns:



250
251
252
253
# File 'lib/stupidedi/versions/functional_groups/002001/element_types/fixnum_val.rb', line 250

def to_s
  # The number of fractional digits is implied by usage.precision
  (@value * (10 ** definition.precision)).to_i.to_s
end

#to_x12(truncate = true) ⇒ String

Returns:



256
257
258
259
260
261
262
263
264
265
266
267
268
# File 'lib/stupidedi/versions/functional_groups/002001/element_types/fixnum_val.rb', line 256

def to_x12(truncate = true)
  nn   = (@value * (10 ** definition.precision)).to_i
  sign = (nn < 0) ? "-" : ""

  # Leading zeros must be suppressed unless necessary to satisfy a
  # minimum length requirement
  if truncate
    sign << nn.abs.to_s.take(definition.max_length).
                        rjust(definition.min_length, "0")
  else
    sign << nn.abs.to_s.rjust(definition.min_length, "0")
  end
end

#too_long?Boolean

Returns:

  • (Boolean)


270
271
272
273
274
275
# File 'lib/stupidedi/versions/functional_groups/002001/element_types/fixnum_val.rb', line 270

def too_long?
  nn = (@value * (10 ** definition.precision)).to_i

  # The length of a numeric type does not include an optional sign
  definition.max_length < nn.abs.to_s.length
end

#valid?Boolean

Returns:

  • (Boolean)


224
225
226
# File 'lib/stupidedi/versions/functional_groups/002001/element_types/fixnum_val.rb', line 224

def valid?
  true
end