lib/eddy/models/element/dt.rb in eddy-0.5.1 vs lib/eddy/models/element/dt.rb in eddy-0.6.0

- old
+ new

@@ -1,100 +1,102 @@ require "time" module Eddy - module Element - # Date in `YYMMDD` or `CCYYMMDD` format based on EDI version being used (DLMS Baseline is 004010) - # - # Values for this type are generated from a *UTC* formatted [Time][time] object. - # - # [time]: https://ruby-doc.org/stdlib-2.6.5/libdoc/time/rdoc/Time.html - class DT < Base + module Models + module Element + # Date in `YYMMDD` or `CCYYMMDD` format based on EDI version being used (DLMS Baseline is 004010) + # + # Values for this type are generated from a *UTC* formatted [Time][time] object. + # + # [time]: https://ruby-doc.org/stdlib-2.6.5/libdoc/time/rdoc/Time.html + class DT < Base - # Format for the date. Valid values: `:yymmdd` or `:ccyymmdd` - # @return [Symbol<:yymmdd, :ccyymmdd>] - attr_reader :fmt + # Format for the date. Valid values: `:yymmdd` or `:ccyymmdd` + # @return [Symbol<:yymmdd, :ccyymmdd>] + attr_reader :fmt - # @param min [Integer] (nil) - # @param max [Integer] (nil) - # @param req [String] (nil) - # @param ref [String] (nil) - # @param val [Time] (nil) A *UTC* formatted Time object. - # @param fmt [Symbol] (nil) Format for the date. Valid values: `:yymmdd` or `:ccyymmdd`. - # @return [void] - def initialize( - min: nil, - max: nil, - req: nil, - ref: nil, - val: nil, - fmt: nil - ) - @type = "DT" - @min = min - @max = max - self.req = req - self.ref = ref - if fmt.nil? - raise ArgumentError, "DT elements require either a `fmt` value, or `min` and `max` values." if min.nil? || max.nil? - @fmt = determine_format() - else - self.fmt = fmt + # @param min [Integer] (nil) + # @param max [Integer] (nil) + # @param req [String] (nil) + # @param ref [String] (nil) + # @param val [Time] (nil) A *UTC* formatted Time object. + # @param fmt [Symbol] (nil) Format for the date. Valid values: `:yymmdd` or `:ccyymmdd`. + # @return [void] + def initialize( + min: nil, + max: nil, + req: nil, + ref: nil, + val: nil, + fmt: nil + ) + @type = "DT" + @min = min + @max = max + self.req = req + self.ref = ref + if fmt.nil? + raise ArgumentError, "DT elements require either a `fmt` value, or `min` and `max` values." if min.nil? || max.nil? + @fmt = determine_format() + else + self.fmt = fmt + end + self.value = val end - self.value = val - end - # @raise [Eddy::Errors::ElementNilValueError] If the element is required and no value has been set. - # @return [String] - def value() - if @val.nil? - case self.req - when "M" then raise Eddy::Errors::ElementNilValueError.new(element: self) - when "O", "C" then return "" - else raise Eddy::Errors::Error, "Invalid req value: #{self.req}" + # @raise [Eddy::Errors::ElementNilValueError] If the element is required and no value has been set. + # @return [String] + def value() + if @val.nil? + case self.req + when "M" then raise Eddy::Errors::ElementNilValueError.new(element: self) + when "O", "C" then return "" + else raise Eddy::Errors::Error, "Invalid req value: #{self.req}" + end end + case self.fmt + when :yymmdd then return Eddy::Util::Time.yymmdd(@val) + when :ccyymmdd then return Eddy::Util::Time.ccyymmdd(@val) + else raise Eddy::Errors::Error "invalid fmt value for DT object" + end end - case self.fmt - when :yymmdd then return Eddy::Util::Time.yymmdd(@val) - when :ccyymmdd then return Eddy::Util::Time.ccyymmdd(@val) - else raise Eddy::Errors::Error "invalid fmt value for DT object" - end - end - # @raise [ElementValidationError] Unless passed a *UTC* formatted `Time` object. - # @param arg [Time] A *UTC* formatted [Time](https://ruby-doc.org/stdlib-2.6.5/libdoc/time/rdoc/Time.html) object. - # @return [void] - def value=(arg) - if arg.nil? + # @raise [ElementValidationError] Unless passed a *UTC* formatted `Time` object. + # @param arg [Time] A *UTC* formatted [Time](https://ruby-doc.org/stdlib-2.6.5/libdoc/time/rdoc/Time.html) object. + # @return [void] + def value=(arg) + if arg.nil? + @val = arg + return + end + raise Eddy::Errors::TypeValidationError.new(element: self, arg: arg) unless arg.is_a?(Time) + raise Eddy::Errors::ElementValidationError.new("Argument passed is not in UTC format", element: self) unless arg.utc?() @val = arg - return end - raise Eddy::Errors::TypeValidationError.new(element: self, arg: arg) unless arg.is_a?(Time) - raise Eddy::Errors::ElementValidationError.new("Argument passed is not in UTC format", element: self) unless arg.utc?() - @val = arg - end - # @param fmt [Symbol] - # @return [void] - def fmt=(fmt) - return if fmt.nil? - fmt = fmt.to_sym.downcase - raise ArgumentError, "Invalid fmt for DT value: #{fmt}" unless accepted_formats.include?(fmt) - @fmt = fmt - end + # @param fmt [Symbol] + # @return [void] + def fmt=(fmt) + return if fmt.nil? + fmt = fmt.to_sym.downcase + raise ArgumentError, "Invalid fmt for DT value: #{fmt}" unless accepted_formats.include?(fmt) + @fmt = fmt + end - # @return [Array<Symbol>] - def accepted_formats() - return [:yymmdd, :ccyymmdd] - end + # @return [Array<Symbol>] + def accepted_formats() + return [:yymmdd, :ccyymmdd] + end - # @return [Symbol] - def determine_format() - case self.max - when 6 then return :yymmdd - when 8 then return :ccyymmdd - else raise Eddy::Errors::Error, "unable to determine format for dt element" + # @return [Symbol] + def determine_format() + case self.max + when 6 then return :yymmdd + when 8 then return :ccyymmdd + else raise Eddy::Errors::Error, "unable to determine format for dt element" + end end - end + end end end end