Sha256: c0719e4e1337061a6f6cd6e2dcca442d9219e71dc3597bd047f664ed6d6d3872

Contents?: true

Size: 1.16 KB

Versions: 1

Compression:

Stored size: 1.16 KB

Contents

# frozen_string_literal: true

module BusinessCentral
  module Object
    module URLHelper
      using Refinements::Strings

      def encode_url_object(object)
        URI::RFC2396_Parser.new.escape(object)
      end

      def encode_url_params(query)
        CGI.escape(query)
      end

      def odata_encode(value)
        value = value.dup
        value.gsub!(/'/, "''") if value.instance_of?(String) && value =~ /'/
        value.to_s
      end

      private

      def replace_template_with_value(query, values)
        query = query.dup
        return replace_template_with_hash_values(query, values) if values.first.is_a?(Hash)
        replace_template_with_array_values(query, values)
      end

      def replace_template_with_hash_values(query, values)
        values.first.each do |key, value|
          query.gsub!(/:#{key}/, odata_encode(value))
        end
        query
      end

      def replace_template_with_array_values(query, values)
        query.scan(/\?/).each_with_index do |_character, index|
          character_position = query =~ /\?/
          query[character_position] = odata_encode(values[index])
        end
        query
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
business-central-2.0.0 lib/business_central/object/url_helper.rb