Sha256: 2115d5ded3792a9c3653323d6697dfcd40dd9c48c73447ac6343d4289511e0a2

Contents?: true

Size: 1.3 KB

Versions: 3

Compression:

Stored size: 1.3 KB

Contents

module WirecardSepa
  module Utils
    class Template
      attr_reader :request

      def initialize(request)
        @request = request
      end

      def to_xml
        xml_template = File.open template_path, "r:UTF-8", &:read
        xml_template.gsub(/{{\w+}}/, request_params)#.tap { byebug }
      end

      private

      def request_params
        params_without_custom_fields.each_with_object({}) do |(k,v), h|
          h["{{#{k.upcase}}}"] = v
        end.merge('{{CUSTOM_FIELDS}}' => custom_fields_xml)
      end

      def params_without_custom_fields
        request.params.reject { |k,_| k == :custom_fields }
      end

      def template_path
        File.expand_path "../../../templates/#{template_file}", __FILE__
      end

      def template_file
        request.class.name.
          gsub(/(.)([A-Z])/, '\1_\2').
          gsub('::_', '/').
          downcase + '.xml'
      end

      def custom_fields_xml
        # TODO: Refactor me :>
        custom_fields = request.params[:custom_fields] || Hash.new
        return '' if custom_fields.empty?
        fields_xml = custom_fields.map do |k,v|
          "  <custom-field field-name=\"#{k}\" field-value=\"#{v}\"/>\n"
        end.join.to_s
        '<custom-fields>' "\n" +
        "  #{fields_xml}" +
        '  </custom-fields>'
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
wirecard_sepa-0.1.1 lib/wirecard_sepa/utils/template.rb
wirecard_sepa-0.1.0 lib/wirecard_sepa/utils/template.rb
wirecard_sepa-0.0.5 lib/wirecard_sepa/utils/template.rb