# File lib/http/cookie.rb, line 273
    def parse(set_cookie, origin, options = nil, &block)
      if options
        logger = options[:logger]
        created_at = options[:created_at]
      end
      origin = URI(origin)

      [].tap { |cookies|
        Scanner.new(set_cookie, logger).scan_set_cookie { |name, value, attrs|
          break if name.nil? || name.empty?

          begin
            cookie = new(name, value)
          rescue => e
            logger.warn("Invalid name or value: #{e}") if logger
            next
          end
          cookie.created_at = created_at if created_at
          attrs.each { |aname, avalue|
            begin
              case aname
              when 'domain'
                cookie.for_domain = true
                # The following may negate @for_domain if the value is
                # an eTLD or IP address, hence this order.
                cookie.domain = avalue
              when 'path'
                cookie.path = avalue
              when 'expires'
                # RFC 6265 4.1.2.2
                # The Max-Age attribute has precedence over the Expires
                # attribute.
                cookie.expires = avalue unless cookie.max_age
              when 'max-age'
                cookie.max_age = avalue
              when 'secure'
                cookie.secure = avalue
              when 'httponly'
                cookie.httponly = avalue
              end
            rescue => e
              logger.warn("Couldn't parse #{aname} '#{avalue}': #{e}") if logger
            end
          }

          cookie.origin = origin

          cookie.acceptable? or next

          yield cookie if block_given?

          cookies << cookie
        }
      }
    end