GitHub PullRequestReviewCommentEvent at 2014-09-22 18:39:46
Repository: foxkit
Actor: houndci
Payload: {"action":"created","comment":{"url":"https://api.github.com/repos/williamherry/foxkit/pulls/comments/17868869","id":17868869,"diff_hunk":"@@ -0,0 +1,452 @@\n+require \"spec_helper\"\n+\n+describe Foxkit::Client do\n+\n+  describe \"module configuration\" do\n+\n+    before do\n+      Foxkit.reset!\n+      Foxkit.configure do |config|\n+        Foxkit::Configurable.keys.each do |key|\n+          config.send(\"#{key}=\", \"Some #{key}\")\n+        end\n+      end\n+    end\n+\n+    after do\n+      Foxkit.reset!\n+    end\n+\n+    it \"inherits the module configuration\" do\n+      client = Foxkit::Client.new\n+      Foxkit::Configurable.keys.each do |key|\n+        expect(client.instance_variable_get(:\"@#{key}\")).to eq(\"Some #{key}\")\n+      end\n+    end\n+\n+    describe \"with class level configuration\" do\n+\n+      before do\n+        @opts = {\n+          :connection_options => {:ssl => {:verify => false}},\n+          :per_page => 40,\n+          :login    => \"william\",\n+          :password => \"il0veruby\"\n+        }\n+      end\n+\n+      it \"overrides module configuration\" do\n+        client = Foxkit::Client.new(@opts)\n+        expect(client.per_page).to eq(40)\n+        expect(client.login).to eq(\"william\")\n+        expect(client.instance_variable_get(:\"@password\")).to eq(\"il0veruby\")\n+        expect(client.auto_paginate).to eq(Foxkit.auto_paginate)\n+      end\n+\n+      it \"can set configuration after initialization\" do\n+        client = Foxkit::Client.new\n+        client.configure do |config|\n+          @opts.each do |key, value|\n+            config.send(\"#{key}=\", value)\n+          end\n+        end\n+        expect(client.per_page).to eq(40)\n+        expect(client.login).to eq(\"william\")\n+        expect(client.instance_variable_get(:\"@password\")).to eq(\"il0veruby\")\n+        expect(client.auto_paginate).to eq(Foxkit.auto_paginate)\n+      end\n+\n+      it \"masks passwords on inspect\" do\n+        client = Foxkit::Client.new(@opts)\n+        inspected = client.inspect\n+        expect(inspected).not_to include(\"il0veruby\")\n+      end\n+\n+      describe \"with .netrc\" do\n+        before do\n+          File.chmod(0600, File.join(fixture_path, \".netrc\"))\n+        end\n+\n+        it \"can read .netrc files\" do\n+          Foxkit.reset!\n+          client = Foxkit::Client.new(:netrc => true, :netrc_file => File.join(fixture_path, \".netrc\"))\n+          expect(client.login).to eq(\"william\")\n+          expect(client.instance_variable_get(:\"@password\")).to eq(\"il0veruby\")\n+        end\n+\n+        it \"can read non-standard API endpoint creds from .netrc\" do\n+          Foxkit.reset!\n+          client = Foxkit::Client.new(:netrc => true, :netrc_file => File.join(fixture_path, '.netrc'), :api_endpoint => 'http://gitlab.dev')\n+          expect(client.login).to eq(\"defunkt\")\n+          expect(client.instance_variable_get(:\"@password\")).to eq(\"il0veruby\")\n+        end\n+      end\n+    end\n+  end\n+\n+  describe \"authentication\" do\n+    before do\n+      Foxkit.reset!\n+      @client = Foxkit.client\n+    end\n+\n+    describe \"with module level config\" do\n+      before do\n+        Foxkit.reset!\n+      end\n+\n+      it \"sets basic auth creds with .configure\" do\n+        Foxkit.configure do |config|\n+          config.login = \"william\"\n+          config.password = \"il0veruby\"\n+        end\n+        expect(Foxkit.client).to be_basic_authenticated\n+      end\n+\n+      it \"sets basic auth creds with module methods\" do\n+        Foxkit.login = 'william'\n+        Foxkit.password = 'il0veruby'\n+        expect(Foxkit.client).to be_basic_authenticated\n+      end\n+    end\n+\n+    describe \"with class level config\" do\n+      it \"sets basic auth creds with .configure\" do\n+        @client.configure do |config|\n+          config.login = \"william\"\n+          config.password = \"il0veruby\"\n+        end\n+        expect(@client).to be_basic_authenticated\n+      end\n+\n+      it \"sets basic auth creds with instance methods\" do\n+        @client.login = 'william'\n+        @client.password = 'il0veruby'\n+        expect(@client).to be_basic_authenticated\n+      end\n+    end\n+\n+    describe \"when basic authenticated\" do\n+      it \"makes authenticated calls\" do\n+        Foxkit.configure do |config|\n+          config.login = \"william\"\n+          config.password = \"il0veruby\"\n+        end\n+\n+        root_request = stub_get(\"https://william:il0veruby@gitlab.com/\")\n+        Foxkit.client.get(\"/\")\n+        assert_requested root_request\n+      end\n+    end\n+  end\n+\n+  describe \".agent\" do\n+    before do\n+      Foxkit.reset!\n+    end\n+\n+    it \"acts like a Sawyer agent\" do\n+      expect(Foxkit.client.agent).to respond_to :start\n+    end\n+\n+    it \"caches the agent\" do\n+      agent = Foxkit.client.agent\n+      expect(agent.object_id).to eq (Foxkit.client.agent.object_id)\n+    end\n+  end\n+\n+  describe \".get\", :vcr do\n+    before(:each) do\n+      Foxkit.reset!\n+    end\n+    it \"handles query params\" do\n+      Foxkit.private_token = \"6FpzmcU5A1FXgTWMXyMA\"\n+      Foxkit.get \"/api/v3/projects\", :foo => \"bar\"\n+      assert_requested :get, \"https://gitlab.com/api/v3/projects?foo=bar\"\n+    end\n+    it \"handles headers\" do\n+      request = stub_get(\"/zen\").\n+        with(:query => {:foo => \"bar\"}, :headers => {:accept => \"text/plain\"})\n+      Foxkit.get \"/zen\", :foo => \"bar\", :accept => \"text/plain\"\n+      assert_requested request\n+    end\n+  end # .get\n+\n+  describe \".head\", :vcr do\n+    it \"handles query params\" do\n+      Foxkit.reset!\n+      Foxkit.private_token = \"6FpzmcU5A1FXgTWMXyMA\"\n+      Foxkit.head \"/api/v3/projects\", :foo => \"bar\"\n+      assert_requested :head, \"https://gitlab.com/api/v3/projects?foo=bar\"\n+    end\n+    it \"handles headers\" do\n+      Foxkit.reset!\n+      request = stub_head(\"/zen\").\n+        with(:query => {:foo => \"bar\"}, :headers => {:accept => \"text/plain\"})\n+      Foxkit.head \"/zen\", :foo => \"bar\", :accept => \"text/plain\"\n+      assert_requested request\n+    end\n+  end # .head\n+\n+  describe \"when making requests\" do\n+    before do\n+      Foxkit.reset!\n+      @client = Foxkit.client\n+    end\n+    it \"Accepts application/json by default\" do\n+      VCR.use_cassette 'root' do\n+        root_request = stub_get(\"/\").\n+          with(:headers => {:accept => \"application/json\"})\n+        @client.get \"/\"\n+        assert_requested root_request\n+        expect(@client.last_response.status).to eq(200)\n+      end\n+    end\n+    it \"allows Accept'ing another media type\" do\n+      root_request = stub_get(\"/\").\n+        with(:headers => {:accept => \"application/vnd.gitlab.beta.diff+json\"})\n+      @client.get \"/\", :accept => \"application/vnd.gitlab.beta.diff+json\"\n+      assert_requested root_request\n+      expect(@client.last_response.status).to eq(200)\n+    end\n+    it \"sets a default user agent\" do\n+      root_request = stub_get(\"/\").\n+        with(:headers => {:user_agent => Foxkit::Default.user_agent})\n+      @client.get \"/\"\n+      assert_requested root_request\n+      expect(@client.last_response.status).to eq(200)\n+    end\n+    it \"sets a custom user agent\" do\n+      user_agent = \"Mozilla/5.0 I am Spartacus!\"\n+      root_request = stub_get(\"/\").\n+        with(:headers => {:user_agent => user_agent})\n+      client = Foxkit::Client.new(:user_agent => user_agent)\n+      client.get \"/\"\n+      assert_requested root_request\n+      expect(client.last_response.status).to eq(200)\n+    end\n+    it \"sets a proxy server\" do\n+      Foxkit.configure do |config|\n+        config.proxy = 'http://proxy.example.com:80'\n+      end\n+      conn = Foxkit.client.send(:agent).instance_variable_get(:\"@conn\")\n+      expect(conn.proxy[:uri].to_s).to eq('http://proxy.example.com')\n+    end\n+    it \"passes along request headers for POST\" do\n+      headers = {\"X-GitLab-Foo\" => \"bar\"}\n+      root_request = stub_post(\"/\").\n+        with(:headers => headers).\n+        to_return(:status => 201)\n+      client = Foxkit::Client.new\n+      client.post \"/\", :headers => headers\n+      assert_requested root_request\n+      expect(client.last_response.status).to eq(201)\n+    end\n+  end\n+\n+\n+  describe \"auto pagination\", :vcr do\n+    before do\n+      Foxkit.reset!\n+      Foxkit.configure do |config|\n+        config.auto_paginate = true\n+        config.per_page = 1\n+        config.private_token = \"6FpzmcU5A1FXgTWMXyMA\"\n+      end\n+    end\n+\n+    after do\n+      Foxkit.reset!\n+    end\n+\n+    it \"fetches all the pages\" do\n+      url = '/api/v3/projects?per_page=1'\n+      Foxkit.client.paginate url\n+      assert_requested :get, gitlab_url(url)\n+      (2..3).each do |i|\n+        assert_requested :get, gitlab_url(\"#{url}&page=#{i}\")\n+      end\n+    end\n+\n+    it \"accepts a block for custom result concatination\" do\n+      results = Foxkit.client.paginate(\"/api/v3/projects\",\n+        :per_page => 1) { |data, last_response|\n+        data.concat last_response.data\n+      }\n+\n+      expect(results.size).to eq(3)\n+    end\n+  end\n+\n+  context \"error handling\" do\n+    before do\n+      Foxkit.reset!\n+      VCR.turn_off!\n+    end\n+\n+    after do\n+      VCR.turn_on!\n+    end\n+\n+    it \"raises on 404\" do\n+      stub_get('/booya').to_return(:status => 404)\n+      expect { Foxkit.get('/booya') }.to raise_error Foxkit::NotFound\n+    end\n+\n+    it \"raises on 500\" do\n+      stub_get('/boom').to_return(:status => 500)\n+      expect { Foxkit.get('/boom') }.to raise_error Foxkit::InternalServerError\n+    end\n+\n+    it \"includes a message\" do\n+      stub_get('/boom').\n+        to_return \\\n+        :status => 422,\n+        :headers => {\n+          :content_type => \"application/json\",\n+        },\n+        :body => {:message => \"No repository found for hubtopic\"}.to_json\n+      begin\n+        Foxkit.get('/boom')\n+      rescue Foxkit::UnprocessableEntity => e\n+        expect(e.message).to include(\"GET https://gitlab.com/boom: 422 - No repository found\")\n+      end\n+    end\n+\n+    it \"includes an error\" do\n+      stub_get('/boom').\n+        to_return \\\n+        :status => 422,\n+        :headers => {\n+          :content_type => \"application/json\",\n+        },\n+        :body => {:error => \"No repository found for hubtopic\"}.to_json\n+      begin\n+        Foxkit.get('/boom')\n+      rescue Foxkit::UnprocessableEntity => e\n+        expect(e.message).to include(\"GET https://gitlab.com/boom: 422 - Error: No repository found\")\n+      end\n+    end\n+\n+    it \"includes an error summary\" do\n+      stub_get('/boom').\n+        to_return \\\n+        :status => 422,\n+        :headers => {\n+          :content_type => \"application/json\",\n+        },\n+        :body => {\n+          :message => \"Validation Failed\",\n+          :errors => [\n+            :resource => \"Issue\",\n+            :field    => \"title\",\n+            :code     => \"missing_field\"\n+          ]\n+        }.to_json\n+      begin\n+        Foxkit.get('/boom')\n+      rescue Foxkit::UnprocessableEntity => e\n+        expect(e.message).to include(\"GET https://gitlab.com/boom: 422 - Validation Failed\")\n+        expect(e.message).to include(\"  resource: Issue\")\n+        expect(e.message).to include(\"  field: title\")\n+        expect(e.message).to include(\"  code: missing_field\")\n+      end\n+    end\n+\n+    it \"exposes errors array\" do\n+      stub_get('/boom').\n+        to_return \\\n+        :status => 422,\n+        :headers => {\n+          :content_type => \"application/json\",\n+        },\n+        :body => {\n+          :message => \"Validation Failed\",\n+          :errors => [\n+            :resource => \"Issue\",\n+            :field    => \"title\",\n+            :code     => \"missing_field\"\n+          ]\n+        }.to_json\n+      begin\n+        Foxkit.get('/boom')\n+      rescue Foxkit::UnprocessableEntity => e\n+        expect(e.errors.first[:resource]).to eq(\"Issue\")\n+        expect(e.errors.first[:field]).to eq(\"title\")\n+        expect(e.errors.first[:code]).to eq(\"missing_field\")\n+      end\n+    end\n+\n+    it \"knows the difference between Forbidden and rate limiting\" do\n+      stub_get('/some/admin/stuffs').to_return(:status => 403)\n+      expect { Foxkit.get('/some/admin/stuffs') }.to raise_error Foxkit::Forbidden\n+\n+      stub_get('/users/mojomobo').to_return \\\n+        :status => 403,\n+        :headers => {\n+          :content_type => \"application/json\",\n+        },\n+        :body => {:message => \"API rate limit exceeded\"}.to_json\n+      expect { Foxkit.get('/users/mojomobo') }.to raise_error Foxkit::TooManyRequests\n+\n+      stub_get('/user').to_return \\\n+        :status => 403,\n+        :headers => {\n+          :content_type => \"application/json\",\n+        },\n+        :body => {:message => \"Maximum number of login attempts exceeded\"}.to_json","path":"spec/foxkit/client_spec.rb","position":397,"original_position":397,"commit_id":"000d5d8b627bdacf227f48533dbb5819721a4374","original_commit_id":"000d5d8b627bdacf227f48533dbb5819721a4374","user":{"login":"houndci","id":6697940,"avatar_url":"https://avatars.githubusercontent.com/u/6697940?v=2","gravatar_id":"","url":"https://api.github.com/users/houndci","html_url":"https://github.com/houndci","followers_url":"https://api.github.com/users/houndci/followers","following_url":"https://api.github.com/users/houndci/following{/other_user}","gists_url":"https://api.github.com/users/houndci/gists{/gist_id}","starred_url":"https://api.github.com/users/houndci/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/houndci/subscriptions","organizations_url":"https://api.github.com/users/houndci/orgs","repos_url":"https://api.github.com/users/houndci/repos","events_url":"https://api.github.com/users/houndci/events{/privacy}","received_events_url":"https://api.github.com/users/houndci/received_events","type":"User","site_admin":false},"body":"Line is too long. [82/80]<br>Use the new Ruby 1.9 hash syntax.<br>Space inside { missing.<br>Space inside } missing.","created_at":"2014-09-22T18:39:46Z","updated_at":"2014-09-22T18:39:46Z","html_url":"https://github.com/williamherry/foxkit/pull/1#discussion_r17868869","pull_request_url":"https://api.github.com/repos/williamherry/foxkit/pulls/1","_links":{"self":{"href":"https://api.github.com/repos/williamherry/foxkit/pulls/comments/17868869"},"html":{"href":"https://github.com/williamherry/foxkit/pull/1#discussion_r17868869"},"pull_request":{"href":"https://api.github.com/repos/williamherry/foxkit/pulls/1"}}},"pull_request":{"url":"https://api.github.com/repos/williamherry/foxkit/pulls/1","id":21544148,"html_url":"https://github.com/williamherry/foxkit/pull/1","diff_url":"https://github.com/williamherry/foxkit/pull/1.diff","patch_url":"https://github.com/williamherry/foxkit/pull/1.patch","issue_url":"https://api.github.com/repos/williamherry/foxkit/issues/1","number":1,"state":"open","locked":false,"title":"foxkit client shared code","user":{"login":"williamherry","id":1032483,"avatar_url":"https://avatars.githubusercontent.com/u/1032483?v=2","gravatar_id":"","url":"https://api.github.com/users/williamherry","html_url":"https://github.com/williamherry","followers_url":"https://api.github.com/users/williamherry/followers","following_url":"https://api.github.com/users/williamherry/following{/other_user}","gists_url":"https://api.github.com/users/williamherry/gists{/gist_id}","starred_url":"https://api.github.com/users/williamherry/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/williamherry/subscriptions","organizations_url":"https://api.github.com/users/williamherry/orgs","repos_url":"https://api.github.com/users/williamherry/repos","events_url":"https://api.github.com/users/williamherry/events{/privacy}","received_events_url":"https://api.github.com/users/williamherry/received_events","type":"User","site_admin":false},"body":"","created_at":"2014-09-21T02:50:21Z","updated_at":"2014-09-22T18:39:46Z","closed_at":null,"merged_at":null,"merge_commit_sha":"2e254cc8bbb747316cf96bd4f1fec1e4478e6b96","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/williamherry/foxkit/pulls/1/commits","review_comments_url":"https://api.github.com/repos/williamherry/foxkit/pulls/1/comments","review_comment_url":"https://api.github.com/repos/williamherry/foxkit/pulls/comments/{number}","comments_url":"https://api.github.com/repos/williamherry/foxkit/issues/1/comments","statuses_url":"https://api.github.com/repos/williamherry/foxkit/statuses/000d5d8b627bdacf227f48533dbb5819721a4374","head":{"label":"williamherry:feature/client_shared_code","ref":"feature/client_shared_code","sha":"000d5d8b627bdacf227f48533dbb5819721a4374","user":{"login":"williamherry","id":1032483,"avatar_url":"https://avatars.githubusercontent.com/u/1032483?v=2","gravatar_id":"","url":"https://api.github.com/users/williamherry","html_url":"https://github.com/williamherry","followers_url":"https://api.github.com/users/williamherry/followers","following_url":"https://api.github.com/users/williamherry/following{/other_user}","gists_url":"https://api.github.com/users/williamherry/gists{/gist_id}","starred_url":"https://api.github.com/users/williamherry/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/williamherry/subscriptions","organizations_url":"https://api.github.com/users/williamherry/orgs","repos_url":"https://api.github.com/users/williamherry/repos","events_url":"https://api.github.com/users/williamherry/events{/privacy}","received_events_url":"https://api.github.com/users/williamherry/received_events","type":"User","site_admin":false},"repo":{"id":24255766,"name":"foxkit","full_name":"williamherry/foxkit","owner":{"login":"williamherry","id":1032483,"avatar_url":"https://avatars.githubusercontent.com/u/1032483?v=2","gravatar_id":"","url":"https://api.github.com/users/williamherry","html_url":"https://github.com/williamherry","followers_url":"https://api.github.com/users/williamherry/followers","following_url":"https://api.github.com/users/williamherry/following{/other_user}","gists_url":"https://api.github.com/users/williamherry/gists{/gist_id}","starred_url":"https://api.github.com/users/williamherry/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/williamherry/subscriptions","organizations_url":"https://api.github.com/users/williamherry/orgs","repos_url":"https://api.github.com/users/williamherry/repos","events_url":"https://api.github.com/users/williamherry/events{/privacy}","received_events_url":"https://api.github.com/users/williamherry/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/williamherry/foxkit","description":"foxkit","fork":false,"url":"https://api.github.com/repos/williamherry/foxkit","forks_url":"https://api.github.com/repos/williamherry/foxkit/forks","keys_url":"https://api.github.com/repos/williamherry/foxkit/keys{/key_id}","collaborators_url":"https://api.github.com/repos/williamherry/foxkit/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/williamherry/foxkit/teams","hooks_url":"https://api.github.com/repos/williamherry/foxkit/hooks","issue_events_url":"https://api.github.com/repos/williamherry/foxkit/issues/events{/number}","events_url":"https://api.github.com/repos/williamherry/foxkit/events","assignees_url":"https://api.github.com/repos/williamherry/foxkit/assignees{/user}","branches_url":"https://api.github.com/repos/williamherry/foxkit/branches{/branch}","tags_url":"https://api.github.com/repos/williamherry/foxkit/tags","blobs_url":"https://api.github.com/repos/williamherry/foxkit/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/williamherry/foxkit/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/williamherry/foxkit/git/refs{/sha}","trees_url":"https://api.github.com/repos/williamherry/foxkit/git/trees{/sha}","statuses_url":"https://api.github.com/repos/williamherry/foxkit/statuses/{sha}","languages_url":"https://api.github.com/repos/williamherry/foxkit/languages","stargazers_url":"https://api.github.com/repos/williamherry/foxkit/stargazers","contributors_url":"https://api.github.com/repos/williamherry/foxkit/contributors","subscribers_url":"https://api.github.com/repos/williamherry/foxkit/subscribers","subscription_url":"https://api.github.com/repos/williamherry/foxkit/subscription","commits_url":"https://api.github.com/repos/williamherry/foxkit/commits{/sha}","git_commits_url":"https://api.github.com/repos/williamherry/foxkit/git/commits{/sha}","comments_url":"https://api.github.com/repos/williamherry/foxkit/comments{/number}","issue_comment_url":"https://api.github.com/repos/williamherry/foxkit/issues/comments/{number}","contents_url":"https://api.github.com/repos/williamherry/foxkit/contents/{+path}","compare_url":"https://api.github.com/repos/williamherry/foxkit/compare/{base}...{head}","merges_url":"https://api.github.com/repos/williamherry/foxkit/merges","archive_url":"https://api.github.com/repos/williamherry/foxkit/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/williamherry/foxkit/downloads","issues_url":"https://api.github.com/repos/williamherry/foxkit/issues{/number}","pulls_url":"https://api.github.com/repos/williamherry/foxkit/pulls{/number}","milestones_url":"https://api.github.com/repos/williamherry/foxkit/milestones{/number}","notifications_url":"https://api.github.com/repos/williamherry/foxkit/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/williamherry/foxkit/labels{/name}","releases_url":"https://api.github.com/repos/williamherry/foxkit/releases{/id}","created_at":"2014-09-20T06:33:41Z","updated_at":"2014-09-20T08:25:43Z","pushed_at":"2014-09-22T18:39:32Z","git_url":"git://github.com/williamherry/foxkit.git","ssh_url":"git@github.com:williamherry/foxkit.git","clone_url":"https://github.com/williamherry/foxkit.git","svn_url":"https://github.com/williamherry/foxkit","homepage":null,"size":0,"stargazers_count":0,"watchers_count":0,"language":"Ruby","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":1,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"base":{"label":"williamherry:master","ref":"master","sha":"11221b932a49f0b39c96ce9f954b11357c1667fb","user":{"login":"williamherry","id":1032483,"avatar_url":"https://avatars.githubusercontent.com/u/1032483?v=2","gravatar_id":"","url":"https://api.github.com/users/williamherry","html_url":"https://github.com/williamherry","followers_url":"https://api.github.com/users/williamherry/followers","following_url":"https://api.github.com/users/williamherry/following{/other_user}","gists_url":"https://api.github.com/users/williamherry/gists{/gist_id}","starred_url":"https://api.github.com/users/williamherry/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/williamherry/subscriptions","organizations_url":"https://api.github.com/users/williamherry/orgs","repos_url":"https://api.github.com/users/williamherry/repos","events_url":"https://api.github.com/users/williamherry/events{/privacy}","received_events_url":"https://api.github.com/users/williamherry/received_events","type":"User","site_admin":false},"repo":{"id":24255766,"name":"foxkit","full_name":"williamherry/foxkit","owner":{"login":"williamherry","id":1032483,"avatar_url":"https://avatars.githubusercontent.com/u/1032483?v=2","gravatar_id":"","url":"https://api.github.com/users/williamherry","html_url":"https://github.com/williamherry","followers_url":"https://api.github.com/users/williamherry/followers","following_url":"https://api.github.com/users/williamherry/following{/other_user}","gists_url":"https://api.github.com/users/williamherry/gists{/gist_id}","starred_url":"https://api.github.com/users/williamherry/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/williamherry/subscriptions","organizations_url":"https://api.github.com/users/williamherry/orgs","repos_url":"https://api.github.com/users/williamherry/repos","events_url":"https://api.github.com/users/williamherry/events{/privacy}","received_events_url":"https://api.github.com/users/williamherry/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/williamherry/foxkit","description":"foxkit","fork":false,"url":"https://api.github.com/repos/williamherry/foxkit","forks_url":"https://api.github.com/repos/williamherry/foxkit/forks","keys_url":"https://api.github.com/repos/williamherry/foxkit/keys{/key_id}","collaborators_url":"https://api.github.com/repos/williamherry/foxkit/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/williamherry/foxkit/teams","hooks_url":"https://api.github.com/repos/williamherry/foxkit/hooks","issue_events_url":"https://api.github.com/repos/williamherry/foxkit/issues/events{/number}","events_url":"https://api.github.com/repos/williamherry/foxkit/events","assignees_url":"https://api.github.com/repos/williamherry/foxkit/assignees{/user}","branches_url":"https://api.github.com/repos/williamherry/foxkit/branches{/branch}","tags_url":"https://api.github.com/repos/williamherry/foxkit/tags","blobs_url":"https://api.github.com/repos/williamherry/foxkit/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/williamherry/foxkit/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/williamherry/foxkit/git/refs{/sha}","trees_url":"https://api.github.com/repos/williamherry/foxkit/git/trees{/sha}","statuses_url":"https://api.github.com/repos/williamherry/foxkit/statuses/{sha}","languages_url":"https://api.github.com/repos/williamherry/foxkit/languages","stargazers_url":"https://api.github.com/repos/williamherry/foxkit/stargazers","contributors_url":"https://api.github.com/repos/williamherry/foxkit/contributors","subscribers_url":"https://api.github.com/repos/williamherry/foxkit/subscribers","subscription_url":"https://api.github.com/repos/williamherry/foxkit/subscription","commits_url":"https://api.github.com/repos/williamherry/foxkit/commits{/sha}","git_commits_url":"https://api.github.com/repos/williamherry/foxkit/git/commits{/sha}","comments_url":"https://api.github.com/repos/williamherry/foxkit/comments{/number}","issue_comment_url":"https://api.github.com/repos/williamherry/foxkit/issues/comments/{number}","contents_url":"https://api.github.com/repos/williamherry/foxkit/contents/{+path}","compare_url":"https://api.github.com/repos/williamherry/foxkit/compare/{base}...{head}","merges_url":"https://api.github.com/repos/williamherry/foxkit/merges","archive_url":"https://api.github.com/repos/williamherry/foxkit/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/williamherry/foxkit/downloads","issues_url":"https://api.github.com/repos/williamherry/foxkit/issues{/number}","pulls_url":"https://api.github.com/repos/williamherry/foxkit/pulls{/number}","milestones_url":"https://api.github.com/repos/williamherry/foxkit/milestones{/number}","notifications_url":"https://api.github.com/repos/williamherry/foxkit/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/williamherry/foxkit/labels{/name}","releases_url":"https://api.github.com/repos/williamherry/foxkit/releases{/id}","created_at":"2014-09-20T06:33:41Z","updated_at":"2014-09-20T08:25:43Z","pushed_at":"2014-09-22T18:39:32Z","git_url":"git://github.com/williamherry/foxkit.git","ssh_url":"git@github.com:williamherry/foxkit.git","clone_url":"https://github.com/williamherry/foxkit.git","svn_url":"https://github.com/williamherry/foxkit","homepage":null,"size":0,"stargazers_count":0,"watchers_count":0,"language":"Ruby","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":1,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/williamherry/foxkit/pulls/1"},"html":{"href":"https://github.com/williamherry/foxkit/pull/1"},"issue":{"href":"https://api.github.com/repos/williamherry/foxkit/issues/1"},"comments":{"href":"https://api.github.com/repos/williamherry/foxkit/issues/1/comments"},"review_comments":{"href":"https://api.github.com/repos/williamherry/foxkit/pulls/1/comments"},"review_comment":{"href":"https://api.github.com/repos/williamherry/foxkit/pulls/comments/{number}"},"commits":{"href":"https://api.github.com/repos/williamherry/foxkit/pulls/1/commits"},"statuses":{"href":"https://api.github.com/repos/williamherry/foxkit/statuses/000d5d8b627bdacf227f48533dbb5819721a4374"}}}}