Sha256: 71a2fcb854a0b4d33387e902520aa5916bbf27ba0eba6aed8bc4c5e0bbc5aadb

Contents?: true

Size: 1.85 KB

Versions: 11

Compression:

Stored size: 1.85 KB

Contents

require 'ostruct'

module Uploadcare
  module Parser

    META_URL = /
        (?<uuid>[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12} # base uuid
        ~?(?<count>\d+)?) # optional count
        (?:\/-\/(?<operations>.*?))?\/?$ # optional operations
      /ix

    def self.parse_file_string string
      result = Uploadcare::Parser.parse(string)

      unless result.is_a?(Uploadcare::Parser::File)
        msg = "invalid CDN URL or UUID was given for file: #{uuid_or_cdn_url}."
        if result.is_a?(Uploadcare::Parser::Group)
          msg = msg + "\n Group UUID was given. Try call @api.group if it is what you intended."
        end
        raise msg
      end

      result
    end


    def self.parse_group_string string
      result = Uploadcare::Parser.parse(string)

      unless result.is_a?(Uploadcare::Parser::Group)
        msg = "invalid CDN URL or UUID was given for group: #{uuid_or_cdn_url}."
        if result.is_a?(Uploadcare::Parser::File)
          msg = msg + "\n File UUID was given. Try call @api.file if it is what you intended."
        end
        raise msg
      end

      result
    end

    def self.parse string
      matched = META_URL.match(string)

      # just a simple hash - easy to pass next
      captured = Hash[ matched.names.zip( matched.captures ) ]

      # raise an error if no uuid was given in the sting
      raise "Invalid UUID or url was given" if captured["uuid"].nil?

      # operations sring to array of operations
      if captured["operations"]
        captured["operations"] = captured["operations"].split("/-/")
      else
        captured["operations"] = []
      end

      # if count was given - it is a group
      if captured["count"]
        obj = Group.new captured
      else
        obj = File.new captured
      end
    end

    class File < OpenStruct
    end

    class Group < OpenStruct
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
uploadcare-ruby-2.1.2 lib/uploadcare/utils/parser.rb
uploadcare-ruby-1.2.2 lib/uploadcare/utils/parser.rb
uploadcare-ruby-1.2.1 lib/uploadcare/utils/parser.rb
uploadcare-ruby-2.1.1 lib/uploadcare/utils/parser.rb
uploadcare-ruby-2.0.0 lib/uploadcare/utils/parser.rb
uploadcare-ruby-1.1.0 lib/uploadcare/utils/parser.rb
uploadcare-ruby-1.0.6 lib/uploadcare/utils/parser.rb
uploadcare-ruby-1.0.5 lib/uploadcare/utils/parser.rb
uploadcare-ruby-1.0.4 lib/uploadcare/utils/parser.rb
uploadcare-ruby-1.0.3 lib/uploadcare/utils/parser.rb
uploadcare-ruby-1.0.2 lib/uploadcare/utils/parser.rb