Sha256: 51c56c2de3444590cd29823bcb938ee8cdf571e76b950ddaef078c7366718822

Contents?: true

Size: 1.4 KB

Versions: 8

Compression:

Stored size: 1.4 KB

Contents

module WireClient
  module Converter
    def convert(*attributes, options)
      include InstanceMethods

      method_name = "convert_#{options[:to]}"
      unless InstanceMethods.method_defined?(method_name)
        raise ArgumentError, "Converter '#{options[:to]}' does not exist!"
      end

      attributes.each do |attribute|
        define_method "#{attribute}=" do |value|
          instance_variable_set("@#{attribute}", send(method_name, value))
        end
      end
    end

    module InstanceMethods
      def convert_text(value)
        return unless value.present?
        value.to_s.
          # Replace some special characters described as "Best practices"
          # in Chapter 6.2 of this document:
          # http://www.europeanpaymentscouncil.eu/index.cfm/knowledge-bank/epc-documents/sepa-requirements-for-an-extended-character-set-unicode-subset-best-practices/
          tr('€', 'E').
          gsub('@', '(at)').
          tr('_', '-').

          # Replace linebreaks by spaces
          gsub(/\n+/, ' ').

          # Remove all invalid characters
          gsub(/[^a-zA-Z0-9ÄÖÜäöüß&*$%\ \'\:\?\,\-\(\+\.\)\/]/, '').

          # Remove leading and trailing spaces
          strip
      end

      def convert_decimal(value)
        return unless value.present?
        value = BigDecimal(value.to_f&.to_s)
        value.round(2) if value&.finite? && value.positive?
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
wire_client-0.4.1 lib/wire_client/base/converters.rb
wire_client-0.4.0 lib/wire_client/base/converters.rb
wire_client-0.2.0 lib/wire_client/base/converters.rb
wire_client-0.1.4 lib/wire_client/base/converters.rb
wire_client-0.1.3 lib/wire_client/base/converters.rb
wire_client-0.1.2 lib/wire_client/base/converters.rb
wire_client-0.1.1 lib/wire_client/base/converters.rb
wire_client-0.1.0 lib/wire_client/base/converters.rb