github-release-party 0.3.3 → 0.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/github-release-party.rb +89 -45
- data/lib/github-release-party/tasks/heroku.rb +11 -5
- data/lib/github-release-party/version.rb +2 -4
- metadata +2 -17
- metadata.gz.sig +0 -0
- data/lib/http.rb +0 -143
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 46459e03534d4da5df10a808417f51a63861b1afe9ed97d3d800fe99a66473f3
         | 
| 4 | 
            +
              data.tar.gz: 0ca9805a23cbe728b590f670d20e5775f1c38b567f076451fe3677af006c41d5
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: '08fe94d85b1a42f13691b5a48350e2f2b7b9f5d82be8997870bf36fb583879a1ca004e6165f6f3e88ade5a30e2d4de144cab2ab138419fe64a4e4cf971d48fce'
         | 
| 7 | 
            +
              data.tar.gz: 24c33ae1483107e18925678c27058a098cd298f69e16e9b50cc0dc7cf006fd3f8a9522a8a98ec9968395a4c8472a58aec379daf0ef7777295d1cd67837db0f39
         | 
    
        checksums.yaml.gz.sig
    CHANGED
    
    | Binary file | 
    
        data.tar.gz.sig
    CHANGED
    
    | Binary file | 
    
        data/lib/github-release-party.rb
    CHANGED
    
    | @@ -1,65 +1,44 @@ | |
| 1 | 
            -
            require_relative "http"
         | 
| 2 1 | 
             
            require_relative "github-release-party/version"
         | 
| 3 2 |  | 
| 4 | 
            -
            class GithubReleaseParty | 
| 5 | 
            -
               | 
| 6 | 
            -
             | 
| 7 | 
            -
              HEADERS = {
         | 
| 8 | 
            -
                "User-Agent" => "github-release-party/#{GithubReleaseParty::VERSION}",
         | 
| 9 | 
            -
              }
         | 
| 10 | 
            -
             | 
| 11 | 
            -
              def initialize
         | 
| 12 | 
            -
                return unless self.class.env_ok
         | 
| 13 | 
            -
                @releases = []
         | 
| 3 | 
            +
            class GithubReleaseParty
         | 
| 4 | 
            +
              def self.releases
         | 
| 5 | 
            +
                releases = []
         | 
| 14 6 | 
             
                page = 1
         | 
| 15 7 | 
             
                while true
         | 
| 16 | 
            -
                  r =  | 
| 17 | 
            -
                   | 
| 8 | 
            +
                  r = GitHub.get("/repos/#{repo}/releases?page=#{page}")
         | 
| 9 | 
            +
                  if !r.success?
         | 
| 10 | 
            +
                    puts "Error occurred when fetching releases:"
         | 
| 11 | 
            +
                    puts error(r)
         | 
| 12 | 
            +
                    abort
         | 
| 13 | 
            +
                  end
         | 
| 18 14 | 
             
                  break if r.json.length == 0
         | 
| 19 | 
            -
             | 
| 20 | 
            -
                  @releases = @releases + r.json
         | 
| 15 | 
            +
                  releases = releases + r.json
         | 
| 21 16 | 
             
                  page += 1
         | 
| 22 17 | 
             
                end
         | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
              def update_or_create(tag_name, name, message)
         | 
| 26 | 
            -
                release = @releases.find { |rel| rel["tag_name"] == tag_name }
         | 
| 27 | 
            -
                if release
         | 
| 28 | 
            -
                  self.class.update(release["id"], name, message)
         | 
| 29 | 
            -
                else
         | 
| 30 | 
            -
                  self.class.create(tag_name, name, message)
         | 
| 31 | 
            -
                end
         | 
| 18 | 
            +
                return releases
         | 
| 32 19 | 
             
              end
         | 
| 33 20 |  | 
| 34 21 | 
             
              def self.update(id, name, message)
         | 
| 35 | 
            -
                 | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 38 | 
            -
             | 
| 39 | 
            -
                    name: name,
         | 
| 40 | 
            -
                    body: message
         | 
| 41 | 
            -
                  }.to_json
         | 
| 42 | 
            -
                })
         | 
| 22 | 
            +
                r = GitHub.patch("/repos/#{repo}/releases/#{id}", {
         | 
| 23 | 
            +
                  name: name,
         | 
| 24 | 
            +
                  body: message
         | 
| 25 | 
            +
                }.to_json)
         | 
| 43 26 | 
             
                if r.success?
         | 
| 44 27 | 
             
                  puts "GitHub release #{name} updated!"
         | 
| 45 28 | 
             
                else
         | 
| 46 | 
            -
                  puts "Failed to update GitHub release #{ | 
| 29 | 
            +
                  puts "Failed to update GitHub release #{name}!"
         | 
| 47 30 | 
             
                  puts error(r)
         | 
| 48 31 | 
             
                end
         | 
| 49 32 | 
             
              end
         | 
| 50 33 |  | 
| 51 34 | 
             
              def self.create(tag_name, name, message)
         | 
| 52 | 
            -
                return unless env_ok
         | 
| 53 | 
            -
             | 
| 54 35 | 
             
                body = {
         | 
| 55 36 | 
             
                  tag_name: tag_name,
         | 
| 56 37 | 
             
                  name: name,
         | 
| 57 38 | 
             
                  body: message
         | 
| 58 39 | 
             
                }
         | 
| 59 40 |  | 
| 60 | 
            -
                r = post("/repos/#{repo}/releases",  | 
| 61 | 
            -
                  body: body.to_json
         | 
| 62 | 
            -
                })
         | 
| 41 | 
            +
                r = GitHub.post("/repos/#{repo}/releases", body.to_json)
         | 
| 63 42 | 
             
                if r.success?
         | 
| 64 43 | 
             
                  puts "GitHub release #{tag_name} created!"
         | 
| 65 44 | 
             
                else
         | 
| @@ -76,16 +55,13 @@ class GithubReleaseParty < HTTP | |
| 76 55 | 
             
                end
         | 
| 77 56 | 
             
              end
         | 
| 78 57 |  | 
| 79 | 
            -
              def self. | 
| 58 | 
            +
              def self.check_env!
         | 
| 80 59 | 
             
                if !ENV["GITHUB_RELEASE_TOKEN"]
         | 
| 81 | 
            -
                   | 
| 82 | 
            -
                  return false
         | 
| 60 | 
            +
                  abort "Configure GITHUB_RELEASE_TOKEN to create GitHub releases. See https://github.com/stefansundin/github-release-party#setup"
         | 
| 83 61 | 
             
                end
         | 
| 84 62 | 
             
                if !repo
         | 
| 85 | 
            -
                   | 
| 86 | 
            -
                  return false
         | 
| 63 | 
            +
                  abort "Can't find the GitHub repo. Please use the remote 'origin'."
         | 
| 87 64 | 
             
                end
         | 
| 88 | 
            -
                return true
         | 
| 89 65 | 
             
              end
         | 
| 90 66 |  | 
| 91 67 | 
             
              def self.repo
         | 
| @@ -95,6 +71,74 @@ class GithubReleaseParty < HTTP | |
| 95 71 | 
             
              private
         | 
| 96 72 |  | 
| 97 73 | 
             
              def self.error(r)
         | 
| 98 | 
            -
                "#{r. | 
| 74 | 
            +
                "#{r.request_uri}: #{r.code}: #{r.body}\nHeaders: #{r.headers.to_json}"
         | 
| 75 | 
            +
              end
         | 
| 76 | 
            +
             | 
| 77 | 
            +
              class GitHub
         | 
| 78 | 
            +
                def self.get(*args)
         | 
| 79 | 
            +
                  request(:request_get, *args)
         | 
| 80 | 
            +
                end
         | 
| 81 | 
            +
             | 
| 82 | 
            +
                def self.post(*args)
         | 
| 83 | 
            +
                  request(:request_post, *args)
         | 
| 84 | 
            +
                end
         | 
| 85 | 
            +
             | 
| 86 | 
            +
                def self.patch(*args)
         | 
| 87 | 
            +
                  request(:patch, *args)
         | 
| 88 | 
            +
                end
         | 
| 89 | 
            +
             | 
| 90 | 
            +
                private
         | 
| 91 | 
            +
             | 
| 92 | 
            +
                def self.request(method, request_uri, body=nil)
         | 
| 93 | 
            +
                  opts = {
         | 
| 94 | 
            +
                    use_ssl: true,
         | 
| 95 | 
            +
                    open_timeout: 10,
         | 
| 96 | 
            +
                    read_timeout: 10,
         | 
| 97 | 
            +
                  }
         | 
| 98 | 
            +
                  Net::HTTP.start("api.github.com", 443, opts) do |http|
         | 
| 99 | 
            +
                    headers = {
         | 
| 100 | 
            +
                      "Authorization" => "token #{ENV["GITHUB_RELEASE_TOKEN"]}",
         | 
| 101 | 
            +
                      "User-Agent" => "github-release-party/#{GithubReleaseParty::VERSION}",
         | 
| 102 | 
            +
                    }
         | 
| 103 | 
            +
                    if method == :request_post or method == :patch
         | 
| 104 | 
            +
                      # response = http.send(:request_get, "/", headers)
         | 
| 105 | 
            +
                      response = http.send(method, request_uri, body, headers)
         | 
| 106 | 
            +
                    else
         | 
| 107 | 
            +
                      response = http.send(method, request_uri, headers)
         | 
| 108 | 
            +
                    end
         | 
| 109 | 
            +
                    return HTTPResponse.new(response, request_uri)
         | 
| 110 | 
            +
                  end
         | 
| 111 | 
            +
                end
         | 
| 112 | 
            +
              end
         | 
| 113 | 
            +
             | 
| 114 | 
            +
              class HTTPResponse
         | 
| 115 | 
            +
                def initialize(response, request_uri)
         | 
| 116 | 
            +
                  @response = response
         | 
| 117 | 
            +
                  @request_uri = request_uri
         | 
| 118 | 
            +
                end
         | 
| 119 | 
            +
             | 
| 120 | 
            +
                def request_uri
         | 
| 121 | 
            +
                  @request_uri
         | 
| 122 | 
            +
                end
         | 
| 123 | 
            +
             | 
| 124 | 
            +
                def body
         | 
| 125 | 
            +
                  @response.body
         | 
| 126 | 
            +
                end
         | 
| 127 | 
            +
             | 
| 128 | 
            +
                def json
         | 
| 129 | 
            +
                  @json ||= JSON.parse(@response.body)
         | 
| 130 | 
            +
                end
         | 
| 131 | 
            +
             | 
| 132 | 
            +
                def headers
         | 
| 133 | 
            +
                  @response.to_hash
         | 
| 134 | 
            +
                end
         | 
| 135 | 
            +
             | 
| 136 | 
            +
                def code
         | 
| 137 | 
            +
                  @response.code.to_i
         | 
| 138 | 
            +
                end
         | 
| 139 | 
            +
             | 
| 140 | 
            +
                def success?
         | 
| 141 | 
            +
                  @response.is_a?(Net::HTTPSuccess)
         | 
| 142 | 
            +
                end
         | 
| 99 143 | 
             
              end
         | 
| 100 144 | 
             
            end
         | 
| @@ -54,7 +54,7 @@ end | |
| 54 54 |  | 
| 55 55 | 
             
            desc "Deploy a new version to Heroku"
         | 
| 56 56 | 
             
            task :deploy do
         | 
| 57 | 
            -
               | 
| 57 | 
            +
              GithubReleaseParty.check_env!
         | 
| 58 58 | 
             
              ver = heroku_push() or abort("Deploy failed.")
         | 
| 59 59 | 
             
              hash = `git rev-parse HEAD`.strip
         | 
| 60 60 | 
             
              github_tag(hash, ver)
         | 
| @@ -63,7 +63,7 @@ end | |
| 63 63 | 
             
            namespace :deploy do
         | 
| 64 64 | 
             
              desc "Deploy a new version to Heroku using --force"
         | 
| 65 65 | 
             
              task :force do
         | 
| 66 | 
            -
                 | 
| 66 | 
            +
                GithubReleaseParty.check_env!
         | 
| 67 67 | 
             
                ver = heroku_push(%w[--force]) or abort("Deploy failed.")
         | 
| 68 68 | 
             
                hash = `git rev-parse HEAD`.strip
         | 
| 69 69 | 
             
                github_tag(hash, ver)
         | 
| @@ -71,7 +71,7 @@ namespace :deploy do | |
| 71 71 |  | 
| 72 72 | 
             
              desc "Tag last release"
         | 
| 73 73 | 
             
              task :tag do
         | 
| 74 | 
            -
                 | 
| 74 | 
            +
                GithubReleaseParty.check_env!
         | 
| 75 75 |  | 
| 76 76 | 
             
                # get heroku version number
         | 
| 77 77 | 
             
                begin
         | 
| @@ -87,7 +87,8 @@ namespace :deploy do | |
| 87 87 |  | 
| 88 88 | 
             
              desc "Rebuild all the release tags"
         | 
| 89 89 | 
             
              task :retag do
         | 
| 90 | 
            -
                 | 
| 90 | 
            +
                GithubReleaseParty.check_env!
         | 
| 91 | 
            +
                releases = GithubReleaseParty.releases
         | 
| 91 92 | 
             
                repo = GithubReleaseParty.repo
         | 
| 92 93 |  | 
| 93 94 | 
             
                tags = `git tag -l heroku/v* --sort=version:refname`.split("\n")
         | 
| @@ -116,7 +117,12 @@ namespace :deploy do | |
| 116 117 | 
             
                  abort if not success
         | 
| 117 118 |  | 
| 118 119 | 
             
                  # update or create GitHub release
         | 
| 119 | 
            -
                   | 
| 120 | 
            +
                  release = releases.find { |rel| rel["tag_name"] == tag_name }
         | 
| 121 | 
            +
                  if release
         | 
| 122 | 
            +
                    GithubReleaseParty.update(release["id"], ver, message)
         | 
| 123 | 
            +
                  else
         | 
| 124 | 
            +
                    GithubReleaseParty.create(tag_name, ver, message)
         | 
| 125 | 
            +
                  end
         | 
| 120 126 | 
             
                end
         | 
| 121 127 |  | 
| 122 128 | 
             
                puts
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: github-release-party
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.3. | 
| 4 | 
            +
              version: 0.3.4
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Stefan Sundin
         | 
| @@ -31,7 +31,7 @@ cert_chain: | |
| 31 31 | 
             
              E04BZKo2WzOTzSDymo97Yu4YFgyc98umMyeaCvPk4YmdNzqSanAXpY2bnsyu0CF5
         | 
| 32 32 | 
             
              Td0=
         | 
| 33 33 | 
             
              -----END CERTIFICATE-----
         | 
| 34 | 
            -
            date: 2019-09 | 
| 34 | 
            +
            date: 2019-12-09 00:00:00.000000000 Z
         | 
| 35 35 | 
             
            dependencies:
         | 
| 36 36 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 37 37 | 
             
              name: rake
         | 
| @@ -47,20 +47,6 @@ dependencies: | |
| 47 47 | 
             
                - - ">="
         | 
| 48 48 | 
             
                  - !ruby/object:Gem::Version
         | 
| 49 49 | 
             
                    version: '12'
         | 
| 50 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 51 | 
            -
              name: addressable
         | 
| 52 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 53 | 
            -
                requirements:
         | 
| 54 | 
            -
                - - "~>"
         | 
| 55 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 56 | 
            -
                    version: '2'
         | 
| 57 | 
            -
              type: :runtime
         | 
| 58 | 
            -
              prerelease: false
         | 
| 59 | 
            -
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 60 | 
            -
                requirements:
         | 
| 61 | 
            -
                - - "~>"
         | 
| 62 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 63 | 
            -
                    version: '2'
         | 
| 64 50 | 
             
            description: I use this gem to automatically create GitHub releases when I deploy
         | 
| 65 51 | 
             
              to Heroku. See the GitHub page for usage.
         | 
| 66 52 | 
             
            email:
         | 
| @@ -72,7 +58,6 @@ files: | |
| 72 58 | 
             
            - lib/github-release-party.rb
         | 
| 73 59 | 
             
            - lib/github-release-party/tasks/heroku.rb
         | 
| 74 60 | 
             
            - lib/github-release-party/version.rb
         | 
| 75 | 
            -
            - lib/http.rb
         | 
| 76 61 | 
             
            homepage: https://github.com/stefansundin/github-release-party
         | 
| 77 62 | 
             
            licenses:
         | 
| 78 63 | 
             
            - GPL-3.0
         | 
    
        metadata.gz.sig
    CHANGED
    
    | Binary file | 
    
        data/lib/http.rb
    DELETED
    
    | @@ -1,143 +0,0 @@ | |
| 1 | 
            -
            # frozen_string_literal: true
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            require "net/http"
         | 
| 4 | 
            -
            require "addressable/uri"
         | 
| 5 | 
            -
            require "json"
         | 
| 6 | 
            -
             | 
| 7 | 
            -
            class HTTP
         | 
| 8 | 
            -
              def self.request(method, url, options={body: nil, headers: nil, query: nil})
         | 
| 9 | 
            -
                relative_url = (url[0] == "/")
         | 
| 10 | 
            -
             | 
| 11 | 
            -
                if defined?(self::BASE_URL) and relative_url
         | 
| 12 | 
            -
                  url = self::BASE_URL+url
         | 
| 13 | 
            -
                end
         | 
| 14 | 
            -
             | 
| 15 | 
            -
                if defined?(self::PARAMS) and relative_url
         | 
| 16 | 
            -
                  if url["?"]
         | 
| 17 | 
            -
                    url += "&"+self::PARAMS
         | 
| 18 | 
            -
                  else
         | 
| 19 | 
            -
                    url += "?"+self::PARAMS
         | 
| 20 | 
            -
                  end
         | 
| 21 | 
            -
                end
         | 
| 22 | 
            -
             | 
| 23 | 
            -
                if options[:query]
         | 
| 24 | 
            -
                  params = options[:query].map { |k,v| "#{k}=#{v}" }.join("&")
         | 
| 25 | 
            -
                  if url["?"]
         | 
| 26 | 
            -
                    url += "&"+params
         | 
| 27 | 
            -
                  else
         | 
| 28 | 
            -
                    url += "?"+params
         | 
| 29 | 
            -
                  end
         | 
| 30 | 
            -
                end
         | 
| 31 | 
            -
             | 
| 32 | 
            -
                uri = Addressable::URI.parse(url).normalize
         | 
| 33 | 
            -
                opts = {
         | 
| 34 | 
            -
                  use_ssl: uri.scheme == "https",
         | 
| 35 | 
            -
                  open_timeout: 10,
         | 
| 36 | 
            -
                  read_timeout: 10,
         | 
| 37 | 
            -
                }
         | 
| 38 | 
            -
                Net::HTTP.start(uri.host, uri.port, opts) do |http|
         | 
| 39 | 
            -
                  headers = {}
         | 
| 40 | 
            -
                  headers.merge!(self::HEADERS) if defined?(self::HEADERS) and relative_url
         | 
| 41 | 
            -
                  headers.merge!(options[:headers]) if options[:headers]
         | 
| 42 | 
            -
                  if method == :request_post or method == :patch
         | 
| 43 | 
            -
                    response = http.send(method, uri.request_uri, options[:body], headers)
         | 
| 44 | 
            -
                  else
         | 
| 45 | 
            -
                    response = http.send(method, uri.request_uri, headers)
         | 
| 46 | 
            -
                  end
         | 
| 47 | 
            -
                  return HTTPResponse.new(response, uri.to_s)
         | 
| 48 | 
            -
                end
         | 
| 49 | 
            -
              end
         | 
| 50 | 
            -
             | 
| 51 | 
            -
              def self.get(*args)
         | 
| 52 | 
            -
                request(:request_get, *args)
         | 
| 53 | 
            -
              end
         | 
| 54 | 
            -
             | 
| 55 | 
            -
              def self.post(*args)
         | 
| 56 | 
            -
                request(:request_post, *args)
         | 
| 57 | 
            -
              end
         | 
| 58 | 
            -
             | 
| 59 | 
            -
              def self.patch(*args)
         | 
| 60 | 
            -
                request(:patch, *args)
         | 
| 61 | 
            -
              end
         | 
| 62 | 
            -
            end
         | 
| 63 | 
            -
             | 
| 64 | 
            -
            class HTTPResponse
         | 
| 65 | 
            -
              def initialize(response, url)
         | 
| 66 | 
            -
                @response = response
         | 
| 67 | 
            -
                @url = url
         | 
| 68 | 
            -
              end
         | 
| 69 | 
            -
             | 
| 70 | 
            -
              def raw
         | 
| 71 | 
            -
                @response
         | 
| 72 | 
            -
              end
         | 
| 73 | 
            -
             | 
| 74 | 
            -
              def url
         | 
| 75 | 
            -
                @url
         | 
| 76 | 
            -
              end
         | 
| 77 | 
            -
             | 
| 78 | 
            -
              def body
         | 
| 79 | 
            -
                @response.body
         | 
| 80 | 
            -
              end
         | 
| 81 | 
            -
             | 
| 82 | 
            -
              def json
         | 
| 83 | 
            -
                @json ||= JSON.parse(@response.body)
         | 
| 84 | 
            -
              end
         | 
| 85 | 
            -
             | 
| 86 | 
            -
              def parsed_response
         | 
| 87 | 
            -
                json
         | 
| 88 | 
            -
              end
         | 
| 89 | 
            -
             | 
| 90 | 
            -
              def headers
         | 
| 91 | 
            -
                @response.header
         | 
| 92 | 
            -
              end
         | 
| 93 | 
            -
             | 
| 94 | 
            -
              def code
         | 
| 95 | 
            -
                @response.code.to_i
         | 
| 96 | 
            -
              end
         | 
| 97 | 
            -
             | 
| 98 | 
            -
              def success?
         | 
| 99 | 
            -
                @response.is_a?(Net::HTTPSuccess)
         | 
| 100 | 
            -
              end
         | 
| 101 | 
            -
             | 
| 102 | 
            -
              def redirect?
         | 
| 103 | 
            -
                @response.is_a?(Net::HTTPRedirection)
         | 
| 104 | 
            -
              end
         | 
| 105 | 
            -
             | 
| 106 | 
            -
              def redirect_url
         | 
| 107 | 
            -
                raise("not a redirect") if !redirect?
         | 
| 108 | 
            -
                url = @response.header["location"]
         | 
| 109 | 
            -
                if url[0] == "/"
         | 
| 110 | 
            -
                  # relative redirect
         | 
| 111 | 
            -
                  uri = Addressable::URI.parse(@url)
         | 
| 112 | 
            -
                  url = uri.scheme + "://" + uri.host + url
         | 
| 113 | 
            -
                elsif /^https?:\/\/./ !~ url
         | 
| 114 | 
            -
                  raise("bad redirect: #{url}")
         | 
| 115 | 
            -
                end
         | 
| 116 | 
            -
                Addressable::URI.parse(url).normalize.to_s # Some redirects do not url encode properly, such as http://amzn.to/2aDg49F
         | 
| 117 | 
            -
              end
         | 
| 118 | 
            -
             | 
| 119 | 
            -
              def redirect_same_origin?
         | 
| 120 | 
            -
                return false if !redirect?
         | 
| 121 | 
            -
                uri = Addressable::URI.parse(@url).normalize
         | 
| 122 | 
            -
                new_uri = Addressable::URI.parse(redirect_url).normalize
         | 
| 123 | 
            -
                uri.origin == new_uri.origin
         | 
| 124 | 
            -
              end
         | 
| 125 | 
            -
            end
         | 
| 126 | 
            -
             | 
| 127 | 
            -
            class HTTPError < StandardError
         | 
| 128 | 
            -
              def initialize(obj)
         | 
| 129 | 
            -
                @obj = obj
         | 
| 130 | 
            -
              end
         | 
| 131 | 
            -
             | 
| 132 | 
            -
              def request
         | 
| 133 | 
            -
                @obj
         | 
| 134 | 
            -
              end
         | 
| 135 | 
            -
             | 
| 136 | 
            -
              def data
         | 
| 137 | 
            -
                @obj.json
         | 
| 138 | 
            -
              end
         | 
| 139 | 
            -
             | 
| 140 | 
            -
              def message
         | 
| 141 | 
            -
                "#{@obj.code}: #{@obj.body}"
         | 
| 142 | 
            -
              end
         | 
| 143 | 
            -
            end
         |