{"action":"created","comment":{"url":"https://api.github.com/repos/JEG2/highline/pulls/comments/32690717","id":32690717,"diff_hunk":"@@ -836,223 +678,91 @@ def unique_answers(list = @answers)\n   #\n   # Raises EOFError if input is exhausted.\n   #\n-  def get_line(  )\n-    if @question.readline\n-      require \"readline\"    # load only if needed\n-\n-      # capture say()'s work in a String to feed to readline()\n-      old_output = @output\n-      @output    = StringIO.new\n-      say(@question)\n-      question = @output.string\n-      @output  = old_output\n-\n-      # prep auto-completion\n-      Readline.completion_proc = lambda do |string|\n-        @question.selection.grep(/\\A#{Regexp.escape(string)}/)\n-      end\n+  def get_line(question)\n+    terminal.get_line(question, self)\n+  end\n+\n+  def get_response_line_mode(question)\n+    if question.echo == true and question.limit.nil?\n+      get_line(question)\n+    else\n+      line = \"\"\n+\n+      terminal.raw_no_echo_mode_exec do\n+        while character = terminal.get_character(@input)\n+          break if character == \"\\n\" or character == \"\\r\"\n+\n+          # honor backspace and delete\n+          if character == \"\\b\"\n+            chopped = line.chop!\n+            output_erase_char if chopped and question.echo\n+          else\n+            line << character\n+            @output.print(line[-1]) if question.echo == true\n+            @output.print(question.echo) if question.echo and question.echo != true\n+          end\n+\n+          @output.flush\n \n-      # work-around ugly readline() warnings\n-      old_verbose = $VERBOSE\n-      $VERBOSE    = nil\n-      raw_answer  = Readline.readline(question, true)\n-      if raw_answer.nil?\n-        if @@track_eof\n-          raise EOFError, \"The input stream is exhausted.\"\n-        else\n-          raw_answer = String.new # Never return nil\n+          break if question.limit and line.size == question.limit\n         end\n       end\n-      answer      = @question.change_case(\n-                        @question.remove_whitespace(raw_answer))\n-      $VERBOSE    = old_verbose\n \n-      answer\n-    else\n-      if JRUBY\n-        statement = format_statement(@question)\n-        raw_answer = @java_console.readLine(statement, nil)\n-\n-        raise EOFError, \"The input stream is exhausted.\" if raw_answer.nil? and\n-                                                            @@track_eof\n+      if question.overwrite\n+        @output.print(\"\\r#{HighLine.Style(:erase_line).code}\")\n+        @output.flush\n       else\n-        raise EOFError, \"The input stream is exhausted.\" if @@track_eof and\n-                                                            @input.eof?\n-        raw_answer = @input.gets\n+        say(\"\\n\")\n       end\n \n-      @question.change_case(@question.remove_whitespace(raw_answer))\n+      question.format_answer(line)\n     end\n   end\n \n-  #\n-  # Return a line or character of input, as requested for this question.\n-  # Character input will be returned as a single character String,\n-  # not an Integer.\n-  #\n-  # This question's _first_answer_ will be returned instead of input, if set.\n-  #\n-  # Raises EOFError if input is exhausted.\n-  #\n-  def get_response(  )\n-    return @question.first_answer if @question.first_answer?\n-\n-    if @question.character.nil?\n-      if @question.echo == true and @question.limit.nil?\n-        get_line\n-      else\n-        raw_no_echo_mode\n-\n-        line            = \"\".encode(Encoding::BINARY)\n-        backspace_limit = 0\n-        begin\n-\n-          while character = get_character(@input)\n-            # honor backspace and delete\n-            if character == 127 or character == 8\n-              line = line.force_encoding(Encoding.default_external)\n-              line.slice!(-1, 1)\n-              backspace_limit -= 1\n-              line = line.force_encoding(Encoding::BINARY)\n-            else\n-              line << character.chr\n-              backspace_limit = line.dup.force_encoding(Encoding.default_external).size\n-            end\n-            # looking for carriage return (decimal 13) or\n-            # newline (decimal 10) in raw input\n-            break if character == 13 or character == 10\n-            if @question.echo != false\n-              if character == 127 or character == 8\n-                # only backspace if we have characters on the line to\n-                # eliminate, otherwise we'll tromp over the prompt\n-                if backspace_limit >= 0 then\n-                  @output.print(\"\\b#{HighLine.Style(:erase_char).code}\")\n-                else\n-                    # do nothing\n-                end\n-              else\n-                line_with_next_char_encoded = line.dup.force_encoding(Encoding.default_external)\n-                # For multi-byte character, does this\n-                #   last character completes the character?\n-                # Then print it.\n-                if line_with_next_char_encoded.valid_encoding?\n-                  if @question.echo == true\n-                    @output.print(line_with_next_char_encoded[-1])\n-                  else\n-                    @output.print(@question.echo)\n-                  end\n-                end\n-              end\n-              @output.flush\n-            end\n-            break if @question.limit and line.size == @question.limit\n-          end\n-        ensure\n-          restore_mode\n-        end\n-        if @question.overwrite\n-          @output.print(\"\\r#{HighLine.Style(:erase_line).code}\")\n-          @output.flush\n-        else\n-          say(\"\\n\")\n-        end\n-\n-        @question.change_case(@question.remove_whitespace(line.force_encoding(Encoding.default_external)))\n-      end\n-    else\n-      if JRUBY #prompt has not been shown\n-        say @question\n-      end\n+  def output_erase_char\n+    @output.print(\"\\b#{HighLine.Style(:erase_char).code}\")\n+  end\n \n-      raw_no_echo_mode\n-      begin\n-        if @question.character == :getc\n-          response = @input.getbyte.chr\n-        else\n-          response = get_character(@input).chr\n-          if @question.overwrite\n-            @output.print(\"\\r#{HighLine.Style(:erase_line).code}\")\n-            @output.flush\n-          else\n-            echo = if @question.echo == true\n-              response\n-            elsif @question.echo != false\n-              @question.echo\n-            else\n-              \"\"\n-            end\n-            say(\"#{echo}\\n\")\n-          end\n-        end\n-      ensure\n-        restore_mode\n-      end\n-      @question.change_case(response)\n+  def get_response_getc_mode(question)\n+    terminal.raw_no_echo_mode_exec do\n+      response = @input.getc\n+      question.format_answer(response)\n     end\n   end\n \n-  #\n-  # Page print a series of at most _page_at_ lines for _output_.  After each\n-  # page is printed, HighLine will pause until the user presses enter/return\n-  # then display the next page of data.\n-  #\n-  # Note that the final page of _output_ is *not* printed, but returned\n-  # instead.  This is to support any special handling for the final sequence.\n-  #\n-  def page_print( output )\n-    lines = output.scan(/[^\\n]*\\n?/)\n-    while lines.size > @page_at\n-      @output.puts lines.slice!(0...@page_at).join\n-      @output.puts\n-      # Return last line if user wants to abort paging\n-      return ([\"...\\n\"] + lines.slice(-2,1)).join unless continue_paging?\n+  def get_response_character_mode(question)\n+    terminal.raw_no_echo_mode_exec do\n+      response = terminal.get_character(@input)\n+      if question.overwrite\n+        erase_current_line\n+      else\n+        echo = get_echo(question, response)\n+        say(\"#{echo}\\n\")\n+      end\n+      question.format_answer(response)\n     end\n-    return lines.join\n   end\n \n-  #\n-  # Ask user if they wish to continue paging output. Allows them to type \"q\" to\n-  # cancel the paging process.\n-  #\n-  def continue_paging?\n-    command = HighLine.new(@input, @output).ask(\n-      \"-- press enter/return to continue or q to stop -- \"\n-    ) { |q| q.character = true }\n-    command !~ /\\A[qQ]\\Z/  # Only continue paging if Q was not hit.\n+  def erase_current_line\n+    @output.print(\"\\r#{HighLine.Style(:erase_line).code}\")\n+    @output.flush\n   end\n \n-  #\n-  # Wrap a sequence of _lines_ at _wrap_at_ characters per line.  Existing\n-  # newlines will not be affected by this process, but additional newlines\n-  # may be added.\n-  #\n-  def wrap( text )\n-    wrapped = [ ]\n-    text.each_line do |line|\n-      # take into account color escape sequences when wrapping\n-      wrap_at = @wrap_at + (line.length - actual_length(line))\n-      while line =~ /([^\\n]{#{wrap_at + 1},})/\n-        search  = $1.dup\n-        replace = $1.dup\n-        if index = replace.rindex(\" \", wrap_at)\n-          replace[index, 1] = \"\\n\"\n-          replace.sub!(/\\n[ \\t]+/, \"\\n\")\n-          line.sub!(search, replace)\n-        else\n-          line[$~.begin(1) + wrap_at, 0] = \"\\n\"\n-        end\n-      end\n-      wrapped << line\n+  def get_echo(question, response)\n+    if question.echo == true\n+      response\n+    elsif question.echo != false\n+      question.echo\n+    else\n+      \"\"\n     end\n-    return wrapped.join\n   end\n \n-  #\n-  # Returns the length of the passed +string_with_escapes+, minus and color\n-  # sequence escapes.\n-  #\n-  def actual_length( string_with_escapes )\n-    string_with_escapes.to_s.gsub(/\\e\\[\\d{1,2}m/, \"\").length\n+  public :get_response_character_mode, :get_response_line_mode","path":"lib/highline.rb","position":1043,"original_position":1043,"commit_id":"4081a804495034217a63eb90bf80c0a6f290fb34","original_commit_id":"4081a804495034217a63eb90bf80c0a6f290fb34","user":{"login":"abinoam","id":551790,"avatar_url":"https://avatars.githubusercontent.com/u/551790?v=3","gravatar_id":"","url":"https://api.github.com/users/abinoam","html_url":"https://github.com/abinoam","followers_url":"https://api.github.com/users/abinoam/followers","following_url":"https://api.github.com/users/abinoam/following{/other_user}","gists_url":"https://api.github.com/users/abinoam/gists{/gist_id}","starred_url":"https://api.github.com/users/abinoam/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/abinoam/subscriptions","organizations_url":"https://api.github.com/users/abinoam/orgs","repos_url":"https://api.github.com/users/abinoam/repos","events_url":"https://api.github.com/users/abinoam/events{/privacy}","received_events_url":"https://api.github.com/users/abinoam/received_events","type":"User","site_admin":false},"body":"Pointing those to me is making me see how much garbage we let behind when trying to keep the pace!!! :smiley: Thank you!","created_at":"2015-06-18T00:40:33Z","updated_at":"2015-06-18T00:40:33Z","html_url":"https://github.com/JEG2/highline/pull/140#discussion_r32690717","pull_request_url":"https://api.github.com/repos/JEG2/highline/pulls/140","_links":{"self":{"href":"https://api.github.com/repos/JEG2/highline/pulls/comments/32690717"},"html":{"href":"https://github.com/JEG2/highline/pull/140#discussion_r32690717"},"pull_request":{"href":"https://api.github.com/repos/JEG2/highline/pulls/140"}}},"pull_request":{"url":"https://api.github.com/repos/JEG2/highline/pulls/140","id":37612261,"html_url":"https://github.com/JEG2/highline/pull/140","diff_url":"https://github.com/JEG2/highline/pull/140.diff","patch_url":"https://github.com/JEG2/highline/pull/140.patch","issue_url":"https://api.github.com/repos/JEG2/highline/issues/140","number":140,"state":"open","locked":false,"title":"Develop Release 2.0.0-develop.1","user":{"login":"abinoam","id":551790,"avatar_url":"https://avatars.githubusercontent.com/u/551790?v=3","gravatar_id":"","url":"https://api.github.com/users/abinoam","html_url":"https://github.com/abinoam","followers_url":"https://api.github.com/users/abinoam/followers","following_url":"https://api.github.com/users/abinoam/following{/other_user}","gists_url":"https://api.github.com/users/abinoam/gists{/gist_id}","starred_url":"https://api.github.com/users/abinoam/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/abinoam/subscriptions","organizations_url":"https://api.github.com/users/abinoam/orgs","repos_url":"https://api.github.com/users/abinoam/repos","events_url":"https://api.github.com/users/abinoam/events{/privacy}","received_events_url":"https://api.github.com/users/abinoam/received_events","type":"User","site_admin":false},"body":"Hi @JEG2 and all HighLine users and contributors,\r\n\r\nI'm pretty excited to open this PR and I would really appreciate any feedback.\r\n\r\nI have used some metrics to keep track of the progress. From the results, the ones I should point are:\r\n* Flay (duplication) now is 1/5 of what it is on master.\r\n* Flog of 15% higher (complexity) is now 1/3 of what it is on master.\r\n* Flog average is now is now 1/2 of what it is on master.\r\n\r\nThere's still a lot of work to be done, but I think it's time for this milestone.\r\n\r\nCopy of the Changelog bellow\r\n\r\n### 2.0.0-develop.1 / 2015-06-11\r\n\r\nThis is the first development version of the 2.0.0 series. It's the begining of a refactoring phase on HighLine development cycle.\r\n\r\n#### SOME HISTORY\r\n\r\nIn 2014 I emailed James Edward Gray II (@JEG2) about HighLine. One of his ideas was to completely refactor the library so that it could be easier to reuse and improve it. I've began my contributions to HighLine trying to fix some of the open issues at that time so that we could \"freeze\" a stable version of HighLine that people could rely on. Then I've began to study HighLine source code with James' help and started to refactor some parts of the code.\r\n\r\n#### NOTES\r\n\r\n* This release differs from current master branch by more than 180 commits.\r\n* The main changes will be only summarized bellow (as there are many, and a detailed description of each is not productive).\r\n* You could try `git log -p` to see all of them.\r\n* During the last commits, all possible efforts were taken to preserve the tests passing status.\r\n* 100% test passing gives you no guarantee that this new version will work for you. This happens for many reasons. One of them is that we don't currently have 100% test coverage.\r\n* So, this version is not suitable for use in production.\r\n* [Metric_fu](https://github.com/metricfu/metric_fu) and [Code Climate](https://codeclimate.com/github/abinoam/highline) were used here not to strictly \"guide\" what should be changed, but to have some way to objectively measure the progresses made so far.\r\n\r\n#### CHANGES SUMMARY\r\n* Extracted a lot of smaller methods from bigger ones\r\n* Extracted smaller classes/modules from bigger ones, so they could be self contained with less external dependencies as possible, for example:\r\n  * HighLine::Statement\r\n  * HighLine::List\r\n  * HighLine::ListRenderer\r\n  * HighLine::TemplateRenderer\r\n  * HighLine::Question::AnswerConverter\r\n  * HighLine::Terminal\r\n  * HighLine::Terminal::UnixStty\r\n  * HighLine::Paginator\r\n  * HighLine::Wrapper\r\n* After extracting each class/module some refactoring were applied to them lowering code complexity\r\n\r\n#### METRICS SUMMARY\r\nSome of the metrics used to track progress are summarized bellow. Some of them have got a lot better as Flay, Flog and Reek, others like Cane haven't (probably because we didn't commented out the new code yet)\r\n\r\n__CODECLIMATE__\r\n\r\n* GPA: 3.60 -> 3.67 (higher is better)\r\n\r\n__CANE__ - reports code quality threshold violations (lower is better)\r\n\r\n* Total 92 -> 105\r\n  * Methods exceeding allowed Abc complexity: 14 -> 10\r\n  * Lines violating style requirements: 69 -> 72\r\n  * Class definitions requiring comments: 9 -> 23\r\n\r\n__FLAY__ - analyzes ruby code for structural similarities (code duplication - lower is better)\r\n\r\n* Total: 490 -> 94\r\n\r\n__FLOG__ - measures code complexity (lower is better)\r\n\r\n* Top 5% average: 127.9458 -> 40.99812\r\n* Average: 17.37982 -> 7.663875\r\n* Total: 2158.5 -> 1969.6\r\n\r\n__REEK__ - detects common code smells in ruby code (lower is better)\r\n\r\n* DuplicateMethodCall: 144 -> 54\r\n* TooManyStatements: 26 -> 30\r\n\r\nHooking everyone that has had a recent interaction with HighLine. Hope to get feedback from you all.\r\ncc: @practicingruby @KrauseFx @elyscape @viyh @markwetter @M1chael @muflax @brandondrew @danielpclark @FooBarWidget @ezekg @maxlinc @donaldguy @flower-pot @dantman @mickeyreiss @zdennis @mvastola @kachick @davispuh @stomar @alexch","created_at":"2015-06-12T23:08:00Z","updated_at":"2015-06-18T00:40:33Z","closed_at":null,"merged_at":null,"merge_commit_sha":"047de01d837bc899677a58499bfe27580dadc7d6","assignee":{"login":"JEG2","id":5639,"avatar_url":"https://avatars.githubusercontent.com/u/5639?v=3","gravatar_id":"","url":"https://api.github.com/users/JEG2","html_url":"https://github.com/JEG2","followers_url":"https://api.github.com/users/JEG2/followers","following_url":"https://api.github.com/users/JEG2/following{/other_user}","gists_url":"https://api.github.com/users/JEG2/gists{/gist_id}","starred_url":"https://api.github.com/users/JEG2/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JEG2/subscriptions","organizations_url":"https://api.github.com/users/JEG2/orgs","repos_url":"https://api.github.com/users/JEG2/repos","events_url":"https://api.github.com/users/JEG2/events{/privacy}","received_events_url":"https://api.github.com/users/JEG2/received_events","type":"User","site_admin":false},"milestone":null,"commits_url":"https://api.github.com/repos/JEG2/highline/pulls/140/commits","review_comments_url":"https://api.github.com/repos/JEG2/highline/pulls/140/comments","review_comment_url":"https://api.github.com/repos/JEG2/highline/pulls/comments{/number}","comments_url":"https://api.github.com/repos/JEG2/highline/issues/140/comments","statuses_url":"https://api.github.com/repos/JEG2/highline/statuses/4081a804495034217a63eb90bf80c0a6f290fb34","head":{"label":"abinoam:feat_refac_ask","ref":"feat_refac_ask","sha":"4081a804495034217a63eb90bf80c0a6f290fb34","user":{"login":"abinoam","id":551790,"avatar_url":"https://avatars.githubusercontent.com/u/551790?v=3","gravatar_id":"","url":"https://api.github.com/users/abinoam","html_url":"https://github.com/abinoam","followers_url":"https://api.github.com/users/abinoam/followers","following_url":"https://api.github.com/users/abinoam/following{/other_user}","gists_url":"https://api.github.com/users/abinoam/gists{/gist_id}","starred_url":"https://api.github.com/users/abinoam/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/abinoam/subscriptions","organizations_url":"https://api.github.com/users/abinoam/orgs","repos_url":"https://api.github.com/users/abinoam/repos","events_url":"https://api.github.com/users/abinoam/events{/privacy}","received_events_url":"https://api.github.com/users/abinoam/received_events","type":"User","site_admin":false},"repo":{"id":21955198,"name":"highline","full_name":"abinoam/highline","owner":{"login":"abinoam","id":551790,"avatar_url":"https://avatars.githubusercontent.com/u/551790?v=3","gravatar_id":"","url":"https://api.github.com/users/abinoam","html_url":"https://github.com/abinoam","followers_url":"https://api.github.com/users/abinoam/followers","following_url":"https://api.github.com/users/abinoam/following{/other_user}","gists_url":"https://api.github.com/users/abinoam/gists{/gist_id}","starred_url":"https://api.github.com/users/abinoam/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/abinoam/subscriptions","organizations_url":"https://api.github.com/users/abinoam/orgs","repos_url":"https://api.github.com/users/abinoam/repos","events_url":"https://api.github.com/users/abinoam/events{/privacy}","received_events_url":"https://api.github.com/users/abinoam/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/abinoam/highline","description":"A higher level command-line oriented interface.","fork":true,"url":"https://api.github.com/repos/abinoam/highline","forks_url":"https://api.github.com/repos/abinoam/highline/forks","keys_url":"https://api.github.com/repos/abinoam/highline/keys{/key_id}","collaborators_url":"https://api.github.com/repos/abinoam/highline/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/abinoam/highline/teams","hooks_url":"https://api.github.com/repos/abinoam/highline/hooks","issue_events_url":"https://api.github.com/repos/abinoam/highline/issues/events{/number}","events_url":"https://api.github.com/repos/abinoam/highline/events","assignees_url":"https://api.github.com/repos/abinoam/highline/assignees{/user}","branches_url":"https://api.github.com/repos/abinoam/highline/branches{/branch}","tags_url":"https://api.github.com/repos/abinoam/highline/tags","blobs_url":"https://api.github.com/repos/abinoam/highline/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/abinoam/highline/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/abinoam/highline/git/refs{/sha}","trees_url":"https://api.github.com/repos/abinoam/highline/git/trees{/sha}","statuses_url":"https://api.github.com/repos/abinoam/highline/statuses/{sha}","languages_url":"https://api.github.com/repos/abinoam/highline/languages","stargazers_url":"https://api.github.com/repos/abinoam/highline/stargazers","contributors_url":"https://api.github.com/repos/abinoam/highline/contributors","subscribers_url":"https://api.github.com/repos/abinoam/highline/subscribers","subscription_url":"https://api.github.com/repos/abinoam/highline/subscription","commits_url":"https://api.github.com/repos/abinoam/highline/commits{/sha}","git_commits_url":"https://api.github.com/repos/abinoam/highline/git/commits{/sha}","comments_url":"https://api.github.com/repos/abinoam/highline/comments{/number}","issue_comment_url":"https://api.github.com/repos/abinoam/highline/issues/comments{/number}","contents_url":"https://api.github.com/repos/abinoam/highline/contents/{+path}","compare_url":"https://api.github.com/repos/abinoam/highline/compare/{base}...{head}","merges_url":"https://api.github.com/repos/abinoam/highline/merges","archive_url":"https://api.github.com/repos/abinoam/highline/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/abinoam/highline/downloads","issues_url":"https://api.github.com/repos/abinoam/highline/issues{/number}","pulls_url":"https://api.github.com/repos/abinoam/highline/pulls{/number}","milestones_url":"https://api.github.com/repos/abinoam/highline/milestones{/number}","notifications_url":"https://api.github.com/repos/abinoam/highline/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/abinoam/highline/labels{/name}","releases_url":"https://api.github.com/repos/abinoam/highline/releases{/id}","created_at":"2014-07-17T19:43:38Z","updated_at":"2015-04-24T18:26:52Z","pushed_at":"2015-06-15T16:16:07Z","git_url":"git://github.com/abinoam/highline.git","ssh_url":"git@github.com:abinoam/highline.git","clone_url":"https://github.com/abinoam/highline.git","svn_url":"https://github.com/abinoam/highline","homepage":"","size":2122,"stargazers_count":0,"watchers_count":0,"language":"Ruby","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"JEG2:v2.0.0-develop","ref":"v2.0.0-develop","sha":"22e4fdfaee6d4d2ccbfa318fc4083cde05280843","user":{"login":"JEG2","id":5639,"avatar_url":"https://avatars.githubusercontent.com/u/5639?v=3","gravatar_id":"","url":"https://api.github.com/users/JEG2","html_url":"https://github.com/JEG2","followers_url":"https://api.github.com/users/JEG2/followers","following_url":"https://api.github.com/users/JEG2/following{/other_user}","gists_url":"https://api.github.com/users/JEG2/gists{/gist_id}","starred_url":"https://api.github.com/users/JEG2/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JEG2/subscriptions","organizations_url":"https://api.github.com/users/JEG2/orgs","repos_url":"https://api.github.com/users/JEG2/repos","events_url":"https://api.github.com/users/JEG2/events{/privacy}","received_events_url":"https://api.github.com/users/JEG2/received_events","type":"User","site_admin":false},"repo":{"id":119955,"name":"highline","full_name":"JEG2/highline","owner":{"login":"JEG2","id":5639,"avatar_url":"https://avatars.githubusercontent.com/u/5639?v=3","gravatar_id":"","url":"https://api.github.com/users/JEG2","html_url":"https://github.com/JEG2","followers_url":"https://api.github.com/users/JEG2/followers","following_url":"https://api.github.com/users/JEG2/following{/other_user}","gists_url":"https://api.github.com/users/JEG2/gists{/gist_id}","starred_url":"https://api.github.com/users/JEG2/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JEG2/subscriptions","organizations_url":"https://api.github.com/users/JEG2/orgs","repos_url":"https://api.github.com/users/JEG2/repos","events_url":"https://api.github.com/users/JEG2/events{/privacy}","received_events_url":"https://api.github.com/users/JEG2/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/JEG2/highline","description":"A higher level command-line oriented interface.","fork":false,"url":"https://api.github.com/repos/JEG2/highline","forks_url":"https://api.github.com/repos/JEG2/highline/forks","keys_url":"https://api.github.com/repos/JEG2/highline/keys{/key_id}","collaborators_url":"https://api.github.com/repos/JEG2/highline/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/JEG2/highline/teams","hooks_url":"https://api.github.com/repos/JEG2/highline/hooks","issue_events_url":"https://api.github.com/repos/JEG2/highline/issues/events{/number}","events_url":"https://api.github.com/repos/JEG2/highline/events","assignees_url":"https://api.github.com/repos/JEG2/highline/assignees{/user}","branches_url":"https://api.github.com/repos/JEG2/highline/branches{/branch}","tags_url":"https://api.github.com/repos/JEG2/highline/tags","blobs_url":"https://api.github.com/repos/JEG2/highline/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/JEG2/highline/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/JEG2/highline/git/refs{/sha}","trees_url":"https://api.github.com/repos/JEG2/highline/git/trees{/sha}","statuses_url":"https://api.github.com/repos/JEG2/highline/statuses/{sha}","languages_url":"https://api.github.com/repos/JEG2/highline/languages","stargazers_url":"https://api.github.com/repos/JEG2/highline/stargazers","contributors_url":"https://api.github.com/repos/JEG2/highline/contributors","subscribers_url":"https://api.github.com/repos/JEG2/highline/subscribers","subscription_url":"https://api.github.com/repos/JEG2/highline/subscription","commits_url":"https://api.github.com/repos/JEG2/highline/commits{/sha}","git_commits_url":"https://api.github.com/repos/JEG2/highline/git/commits{/sha}","comments_url":"https://api.github.com/repos/JEG2/highline/comments{/number}","issue_comment_url":"https://api.github.com/repos/JEG2/highline/issues/comments{/number}","contents_url":"https://api.github.com/repos/JEG2/highline/contents/{+path}","compare_url":"https://api.github.com/repos/JEG2/highline/compare/{base}...{head}","merges_url":"https://api.github.com/repos/JEG2/highline/merges","archive_url":"https://api.github.com/repos/JEG2/highline/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/JEG2/highline/downloads","issues_url":"https://api.github.com/repos/JEG2/highline/issues{/number}","pulls_url":"https://api.github.com/repos/JEG2/highline/pulls{/number}","milestones_url":"https://api.github.com/repos/JEG2/highline/milestones{/number}","notifications_url":"https://api.github.com/repos/JEG2/highline/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/JEG2/highline/labels{/name}","releases_url":"https://api.github.com/repos/JEG2/highline/releases{/id}","created_at":"2009-02-02T16:25:53Z","updated_at":"2015-06-17T23:37:45Z","pushed_at":"2015-06-15T16:16:07Z","git_url":"git://github.com/JEG2/highline.git","ssh_url":"git@github.com:JEG2/highline.git","clone_url":"https://github.com/JEG2/highline.git","svn_url":"https://github.com/JEG2/highline","homepage":"","size":2214,"stargazers_count":601,"watchers_count":601,"language":"Ruby","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":74,"mirror_url":null,"open_issues_count":11,"forks":74,"open_issues":11,"watchers":601,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/JEG2/highline/pulls/140"},"html":{"href":"https://github.com/JEG2/highline/pull/140"},"issue":{"href":"https://api.github.com/repos/JEG2/highline/issues/140"},"comments":{"href":"https://api.github.com/repos/JEG2/highline/issues/140/comments"},"review_comments":{"href":"https://api.github.com/repos/JEG2/highline/pulls/140/comments"},"review_comment":{"href":"https://api.github.com/repos/JEG2/highline/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/JEG2/highline/pulls/140/commits"},"statuses":{"href":"https://api.github.com/repos/JEG2/highline/statuses/4081a804495034217a63eb90bf80c0a6f290fb34"}}}}