Sha256: 738f4fbf87de8a83c5a4d96fd712e3e0895333406acf5bd4cd892b4189d6ba73

Contents?: true

Size: 1.49 KB

Versions: 4

Compression:

Stored size: 1.49 KB

Contents

module RefererParser
  # This code is actually in `master` branch of
  # https://github.com/snowplow-referer-parser/ruby-referer-parser but
  # has not yet been released. It's used to allow through android-app://
  # URLs.
  decorate Parser do
    # Given a string or URI, return a hash of data
    def parse(obj)
      url = obj.is_a?(URI) ? obj : URI.parse(obj.to_s)

      unless ['android-app', 'http', 'https'].include?(url.scheme)
        raise InvalidUriError, "Only Android-App, HTTP, and HTTPS schemes are supported -- #{url.scheme}"
      end

      data = { known: false, uri: url.to_s }

      domain, name_key = domain_and_name_key_for(url)
      if domain && name_key
        referer_data = @name_hash[name_key]
        data[:known] = true
        data[:source] = referer_data[:source]
        data[:medium] = referer_data[:medium]
        data[:domain] = domain

        # Parse parameters if the referer uses them
        if url.query && referer_data[:parameters]
          query_params = CGI.parse(url.query)
          referer_data[:parameters].each do |param|
            # If there is a matching parameter, get the first non-blank value
            unless (values = query_params[param]).empty?
              data[:term] = values.reject { |v| v.strip == '' }.first
              break if data[:term]
            end
          end
        end
      end

      data
    rescue URI::InvalidURIError
      raise InvalidUriError.new("Unable to parse URI, not a URI? -- #{obj.inspect}", $ERROR_INFO)
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
workarea-core-3.4.45 lib/workarea/ext/referer_parser/parser.decorator
workarea-core-3.4.44 lib/workarea/ext/referer_parser/parser.decorator
workarea-core-3.4.43 lib/workarea/ext/referer_parser/parser.decorator
workarea-core-3.4.42 lib/workarea/ext/referer_parser/parser.decorator