Sha256: ea175cc72d1bb32ec9a793d4020b12259b87f9d79d5ecb52bb7037d1acf026fe

Contents?: true

Size: 1.57 KB

Versions: 16

Compression:

Stored size: 1.57 KB

Contents

module Cloudinary
  module BaseConfig
    def load_from_url(url)
      return unless url && !url.empty?

      parsed_url = URI.parse(url)
      scheme = parsed_url.scheme.to_s.downcase

      if expected_scheme != scheme
        raise(CloudinaryException,
              "Invalid #{env_url} scheme. Expecting to start with '#{expected_scheme}://'")
      end

      update(config_from_parsed_url(parsed_url))
      setup_from_parsed_url(parsed_url)
    end

    def update(new_config = {})
      new_config.each{ |k,v| public_send(:"#{k}=", v) unless v.nil?}
    end

    def load_config_from_env
      raise NotImplementedError
    end

    private

    def config_from_parsed_url(parsed_url)
      raise NotImplementedError
    end

    def env_url
      raise NotImplementedError
    end

    def expected_scheme
      raise NotImplementedError
    end

    def put_nested_key(key, value)
      chain   = key.split(/[\[\]]+/).reject(&:empty?)
      outer   = self
      lastKey = chain.pop
      chain.each do |innerKey|
        inner = outer[innerKey]
        if inner.nil?
          inner           = OpenStruct.new
          outer[innerKey] = inner
        end
        outer = inner
      end
      outer[lastKey] = value
    end

    def is_nested_key?(key)
      /\w+\[\w+\]/ =~ key
    end

    def setup_from_parsed_url(parsed_url)
      parsed_url.query.to_s.split("&").each do |param|
        key, value = param.split("=")
        if is_nested_key? key
          put_nested_key key, value
        else
          update(key => Utils.smart_unescape(value))
        end
      end
    end
  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
cloudinary-2.2.0 lib/cloudinary/base_config.rb
cloudinary-2.1.2 lib/cloudinary/base_config.rb
cloudinary-2.0.2 lib/cloudinary/base_config.rb
cloudinary-2.0.1 lib/cloudinary/base_config.rb
cloudinary-2.0.0 lib/cloudinary/base_config.rb
cloudinary-1.29.0 lib/cloudinary/base_config.rb
cloudinary-1.28.0 lib/cloudinary/base_config.rb
cloudinary-1.27.0 lib/cloudinary/base_config.rb
cloudinary-1.26.0 lib/cloudinary/base_config.rb
cloudinary-1.25.0 lib/cloudinary/base_config.rb
cloudinary-1.24.0 lib/cloudinary/base_config.rb
cloudinary-1.23.0 lib/cloudinary/base_config.rb
cloudinary-1.22.0 lib/cloudinary/base_config.rb
cloudinary-1.21.0 lib/cloudinary/base_config.rb
cloudinary-1.20.0 lib/cloudinary/base_config.rb
cloudinary-1.19.0 lib/cloudinary/base_config.rb