github_api 0.4.1 → 0.4.2
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.
- data/README.md +15 -1
- data/features/cassettes/pagination/repos.yml +174 -0
- data/features/cassettes/pagination/repos/commits.yml +181 -0
- data/features/cassettes/pagination/repos/commits/next.yml +175 -0
- data/features/cassettes/pagination/repos/commits/sha.yml +135 -0
- data/features/cassettes/pagination/repos/commits/sha/next.yml +136 -0
- data/features/cassettes/pagination/repos/diff.yml +169 -0
- data/features/cassettes/pagination/repos/diff/next.yml +132 -0
- data/features/cassettes/pagination/repos/next.yml +172 -0
- data/features/cassettes/repos/tags.yml +35 -0
- data/features/pagination.feature +62 -5
- data/features/repos.feature +6 -4
- data/features/step_definitions/common_steps.rb +8 -0
- data/features/step_definitions/github_api_steps.rb +19 -3
- data/lib/github_api/api.rb +2 -2
- data/lib/github_api/constants.rb +10 -0
- data/lib/github_api/page_iterator.rb +28 -9
- data/lib/github_api/page_uri_processor.rb +21 -0
- data/lib/github_api/paged_request.rb +1 -1
- data/lib/github_api/repos/watching.rb +8 -7
- data/lib/github_api/request.rb +2 -2
- data/lib/github_api/result.rb +13 -5
- data/lib/github_api/version.rb +1 -1
- data/spec/github/page_iterator_spec.rb +73 -5
- data/spec/github/repos/watching_spec.rb +2 -2
- data/spec/github/result_spec.rb +31 -7
- metadata +11 -2
| @@ -0,0 +1,172 @@ | |
| 1 | 
            +
            --- 
         | 
| 2 | 
            +
            - !ruby/struct:VCR::HTTPInteraction 
         | 
| 3 | 
            +
              request: !ruby/struct:VCR::Request 
         | 
| 4 | 
            +
                method: :get
         | 
| 5 | 
            +
                uri: https://api.github.com:443/users/wycats/repos?page=2&per_page=45
         | 
| 6 | 
            +
                body: 
         | 
| 7 | 
            +
                headers: 
         | 
| 8 | 
            +
                  accept-encoding: 
         | 
| 9 | 
            +
                  - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
         | 
| 10 | 
            +
              response: !ruby/struct:VCR::Response 
         | 
| 11 | 
            +
                status: !ruby/struct:VCR::ResponseStatus 
         | 
| 12 | 
            +
                  code: 200
         | 
| 13 | 
            +
                  message: OK
         | 
| 14 | 
            +
                headers: 
         | 
| 15 | 
            +
                  server: 
         | 
| 16 | 
            +
                  - nginx/1.0.4
         | 
| 17 | 
            +
                  date: 
         | 
| 18 | 
            +
                  - Sat, 21 Jan 2012 18:12:45 GMT
         | 
| 19 | 
            +
                  content-type: 
         | 
| 20 | 
            +
                  - application/json; charset=utf-8
         | 
| 21 | 
            +
                  transfer-encoding: 
         | 
| 22 | 
            +
                  - chunked
         | 
| 23 | 
            +
                  connection: 
         | 
| 24 | 
            +
                  - keep-alive
         | 
| 25 | 
            +
                  status: 
         | 
| 26 | 
            +
                  - 200 OK
         | 
| 27 | 
            +
                  x-ratelimit-limit: 
         | 
| 28 | 
            +
                  - "5000"
         | 
| 29 | 
            +
                  etag: 
         | 
| 30 | 
            +
                  - "\"df777443e7302dc24a36ad5383451366\""
         | 
| 31 | 
            +
                  link: 
         | 
| 32 | 
            +
                  - <https://api.github.com/users/wycats/repos?page=3&per_page=45>; rel="next", <https://api.github.com/users/wycats/repos?page=3&per_page=45>; rel="last", <https://api.github.com/users/wycats/repos?page=1&per_page=45>; rel="first", <https://api.github.com/users/wycats/repos?page=1&per_page=45>; rel="prev"
         | 
| 33 | 
            +
                  x-ratelimit-remaining: 
         | 
| 34 | 
            +
                  - "4997"
         | 
| 35 | 
            +
                  content-encoding: 
         | 
| 36 | 
            +
                  - gzip
         | 
| 37 | 
            +
                body: !binary |
         | 
| 38 | 
            +
                  H4sIAAAAAAAAA+1da2/jRpb9KwUDi8kATZtPvQaL2d6ZSfYxDoK0Nx9mMTBo
         | 
| 39 | 
            +
                  iZa4pkiBpOy4B/Pf99wqPkoUxb5lMd8IBEGnQ5bIWzznvm/97z9uskOUPsZF
         | 
| 40 | 
            +
                  cYyKm5X96WYfFmWUPz7lYbre3azSY5J8ujkci120eQzLm9WNa9sLy3Ete/Fg
         | 
| 41 | 
            +
                  +6tgvnK9v918ujkeNmHZXuM4lmNbtvfgeit3tnKWdM06ydLo8ZgnWGZXlodi
         | 
| 42 | 
            +
                  dXe3jcvd8el2ne3v3t7XYVnc7aP8ydpk6+IW/w93FcWuugf//W/t9asL1ydh
         | 
| 43 | 
            +
                  uj2G2wg/8vPx6R0r7MKiecUyP0afbrBKuybrKWiNTfaWJlm4gaTUMus80l+a
         | 
| 44 | 
            +
                  BONYrvNguyvfX7kuvfRzlr/crJ7DpMDv7uM8z3L100q0m6hY5/GhjLMUD4zr
         | 
| 45 | 
            +
                  D3n8ikWbW97Ccr2LcvymrxZT+1TEX3GNH9gBJPSa8qVayeMtfonr18BrRfnN
         | 
| 46 | 
            +
                  6h832zzEb4f5Y7zBw/juwpnNQy9az13XC57C5dxxZu7S9f2lO7OXWCnJtjE9
         | 
| 47 | 
            +
                  t9oK+gxONjc8xLSJ9QYfC7xHtc24tvqt01uKaH3Mo9v6SeSHoS68+9bz/HHz
         | 
| 48 | 
            +
                  r/VXFbr+4ja6DV/CfRjfplF5FxZFVMpPqnqaf3G/j/f4TAr8of41/c+W49u3
         | 
| 49 | 
            +
                  h3SLByVp+P/8dJOGe/qqmg+0+l/zxdKbf+PV8+iQ1a/efuG0F+U+Mdu8bB8d
         | 
| 50 | 
            +
                  1Od9889PHwWwPbdc98FxVo638u2LAHYXD85i5QWrwBTA0a9lEj+ZQPjkjhFB
         | 
| 51 | 
            +
                  fLIuE8YkHufBdVeuvbLnxjAm3hHrLI8EfjxKC4C7EBBHHubv9Fd5uAZXiuc8
         | 
| 52 | 
            +
                  24t70J289nYQ/M6yQb8HxEv0O/bCAPxKDhP8lba5Ev6NMIkbvGDpucYE0O4H
         | 
| 53 | 
            +
                  mwLaW1oSIMqDBiNSil/pMwJjXkEM0NpOQKD3PXBDHzFA9UO5zx6c5cqzV75j
         | 
| 54 | 
            +
                  qNn39IwGml27fkRS0FblUgJeGibPfGUHYAVjSpAwv8e7r8TDLhLfw64SX8pw
         | 
| 55 | 
            +
                  /XIrHsKXSLztwlK8Z0eRRtHmDyKJwlftLzdZ+rtymCBcF58gGRuwDzwYchVF
         | 
| 56 | 
            +
                  zH36M9dAILFMDDEKQ1SiJH6YwUYbNIzOrYN6I9jUUN9wRgxvb2+345DD0rJd
         | 
| 57 | 
            +
                  y/XJpIfZb/uD5OBBb8IINiSHQ3KEQWlk+Z/eolHEf8Fs/CJt6+qLrr0cIxfg
         | 
| 58 | 
            +
                  dHkuV4AjpXXlgkfNzQfJFT8pUazEX16jVND24l+bYxIVoszELstexPFAjJEr
         | 
| 59 | 
            +
                  EwJiK8MkCaUnMeRGuMQONVHAp1BEMZsHJsZEJZaJK0bhilaaRBeug50w5Att
         | 
| 60 | 
            +
                  P9iUod3zG7IGfGLbcoMHe7kKgpXXa1JowQLHX3kLM9Z43Owf86goDayKzi3j
         | 
| 61 | 
            +
                  GRadhbl8Mbec+YONOAkoQ3KmUdTgs/iPh4efxJ/hut+Hh0OUi6c83mwjAX/7
         | 
| 62 | 
            +
                  FX7GaxxKjhikBadlhdZ6mBlwQv3qEyeMwQmaNKWL4S/MXQx9R7isoN/Tywrv
         | 
| 63 | 
            +
                  0e64QWCl/HqNp0EBRMeyZw+2s7IXK7uXFuQ18MOBClymgMGMIcZpXBzCDdvT
         | 
| 64 | 
            +
                  6Fw/qhnRWZvDCQgj2ksL0Rc4G4G98mbGnDCMdRiktQXQeAoO/AeWo1C/zwT0
         | 
| 65 | 
            +
                  q4GuiVJqfn/u2TOzWKK+GyyQ6zdcH0ukKL9L4QDodxcglTHv/mSAT2BHTM0J
         | 
| 66 | 
            +
                  DPQ7mbxhHpfvj1nyvj/E/LTAxTtH0vYX12cBXBebvQqkyWOk9O8RSUxLxBPh
         | 
| 67 | 
            +
                  DfwYr1/Ef8P6j9LfFcpNkDITtczEd8ciTreiROjhPt5skugthENxCEske1IR
         | 
| 68 | 
            +
                  FjAV4GXEqfgZIYnfD5LHrOEOIgwViJyRH8EJMpwLbWKRq1mkV6jEJwGSdTOz
         | 
| 69 | 
            +
                  yGTvWrwkRf+tQxRDjg4j4ai0IYwFOAc+0hEyF9HlGBWWXD7YiNgDUEYcgwRR
         | 
| 70 | 
            +
                  yPUekMJsLh6LSbQlOeQB04A41yWPwYeBII0nI/IIxTGNn2P4BnEKBngO1xHx
         | 
| 71 | 
            +
                  yEv0fvcaJkd4DiUCDsUgDwRuywR+k5NYsHMSUpAT+q9HfyVHArzjzl0bmSKD
         | 
| 72 | 
            +
                  6EGzDSzjobn6N/QN8HlT+YBHxi+SDI40frtwVyEDmBSwjsnyMDApjkmJzO+B
         | 
| 73 | 
            +
                  C/jTy4chX6X5GeUFp6t2UF8t0y0v0OWCAKwWWFQhzW9VF8i0ZLw/JNEepoOM
         | 
| 74 | 
            +
                  FIrsWeyrZxlEe5tccGqtD+XC1PrtD9CLqtKD6h2n2oOq5oJZe9CKUoYF5o5r
         | 
| 75 | 
            +
                  g3sN8K7tBQvx2vVnmK+/nNscXxYU0Da6xb/uPpp+JF8CDj9ihbMVqbZePa+A
         | 
| 76 | 
            +
                  j2tkjY1R+hH1J2zQN5cOA56dS2h/m6nhKUKypESsjXTLR2KCdb1BSZnFdZgK
         | 
| 77 | 
            +
                  RSeIFd7/VWS5+OnP34snpBEKVYeAC2SxwgZGwX2Yv1Cxk8Ce7lH1NZhOgLta
         | 
| 78 | 
            +
                  xRIaf8Bz5lyHAHKZbICrbQAlRWIE33HmgSEjqC3gsYG6dsiox85zbHrUGbiW
         | 
| 79 | 
            +
                  Z1MRoY9M4eUAIFAAJY/YgiMVHi8AiIK2TZlHXLx3Ltcw/0u8/2v1gdb5Q7aS
         | 
| 80 | 
            +
                  76zKAT6VXyDJunig90UJoVZowNPxu/BXO0fEfy9UXSGZ9dsYtQRUWxAKkglw
         | 
| 81 | 
            +
                  fkhg3ufDuG7zAU5bccR19OtXn7B9LbY1SSoL3/btOfaGr/L1veCAXL9+COgw
         | 
| 82 | 
            +
                  BDlARyhbprccMlkvKHXlvMOaR7UwkoQGzjucH4tKoJiKvXP5OMq9sygL55CK
         | 
| 83 | 
            +
                  h8zogzNbBTB1zON/g+D121rhJsPvLBfMbF79PhN4rwev+johSQlef+ajWNAM
         | 
| 84 | 
            +
                  vM0KrCicvndD4AWDMMHrWe6S1JHnVHboJVecSomBcZkB4Grp0rVQQ79GtIkP
         | 
| 85 | 
            +
                  4O4to4G4uzAfyI2EVC21USxuEMiUlOta184SgTdOtB3fQvNKE5ZHwLIuTYnn
         | 
| 86 | 
            +
                  AHB2jKr7unvCU8in+3g9rtGpYgcUQSb/EmUnUv3041q28Dh1DpqL67dttGcj
         | 
| 87 | 
            +
                  Wrt4LCxrS3JQrORhowbHpXCikodCMc/sTiP6RWGJH6M38QP+9EMEMyoEr5EP
         | 
| 88 | 
            +
                  LSjyhr8dDqj39PcEfJVNvz+B/HqQV3JU8LYXRsl49RXQLvBgXe/ZWWBNLXQa
         | 
| 89 | 
            +
                  VjuPqjENcETVAllqs0Ceuerk6cE6MkoemaMeLFIjT5vewiojxJXRt2YE+u5d
         | 
| 90 | 
            +
                  Y6K/uzaHBigAqYlKlTgbKfPP4iks4rWoxSHR/3SMkw2l30MU5oXpBjX+b0LB
         | 
| 91 | 
            +
                  9XK3X9DW6LT+t+uwVf/JrkzEMA4xNB9VZdDP/OXyIxShr2PAFSe3XWkFqPbT
         | 
| 92 | 
            +
                  Hh4ABuCIu1RyZxt0/WX7LRP77ZUt3tXTEEZNq/Tb1fgIp9wimBCRR/PA+rC5
         | 
| 93 | 
            +
                  3ljrTZaMmSPDa0wgvRakSoikumcz35kb6e5qAziKu7r0SgBSJz0KOfAPOk1R
         | 
| 94 | 
            +
                  sTJD6OuyGS6L59CTZxsUx2dpvD3mxz23tqV7/bA6ZofBu8tycerT/AAyyCEZ
         | 
| 95 | 
            +
                  41w3UvACPrKQDgtluX+Otoh7UxeuQLZkI5AKR2oTydc4S6LyEzT2r+Uhe/sk
         | 
| 96 | 
            +
                  9uE6zPHMayFIV2eomUP3/VAKDFivfPQG9TOKwHF89EY4E/qvRn/9uVfKOcCU
         | 
| 97 | 
            +
                  ggD2Ej9SfrIZLCbQfnJ3ZsW3H/5JfvzckOcF48hJRSQd6TCy4quyr34F3jjt
         | 
| 98 | 
            +
                  BsG4rPjVeotT5H0tVHXCXOWq8wv3jaLcL6zNoZDKp0elwBx1EghhGFfJfT6g
         | 
| 99 | 
            +
                  VEa1EMqmO1TEodxVKCGhZJZKaWi+yGUjXuvJpVrHqtWOaxJ0X36iiKspokek
         | 
| 100 | 
            +
                  KjAfLI3C8mdgob1hMUbPE5wzBzXtjtloozx79N8pRdoljSb9hmk+SDobFNMd
         | 
| 101 | 
            +
                  wryI/o/bsHt6tWZeXN2re7oyhx7UhCJqu1tQlWEwcouNi5x51yhwuC021dtM
         | 
| 102 | 
            +
                  eL8W760gCeVusLR96nPkWwTaTnDQrV0+indA46RQBGaj9qVSYF3oanWw8A5U
         | 
| 103 | 
            +
                  HpkXpD9g+kwE4/bIRm/3hjE0/NlTcLCrKoQrySBcaa7aB7W21gpr6sa3rzOB
         | 
| 104 | 
            +
                  92rwNt9bZdB7i6W9NIOvvgRLP59u4PUgJjWDyDrq3GSh+sVidlkLhzCAh/4W
         | 
| 105 | 
            +
                  qYqYIOZ794f20pEce21FDmorUcB/gUGOolatbYWXZPssyI8Sb9GT6mxXkfVS
         | 
| 106 | 
            +
                  xtjXWYrBcXmUroct8lYtkxUuu9dc7ogcet8J1lfDWkmRFLJnO3bggGMNFHK1
         | 
| 107 | 
            +
                  ByxtXF07AoplZTrmPzkyP6wK1HpUMUo3kUPzUQSDxiw+ijEP7oXpbWuXjoRi
         | 
| 108 | 
            +
                  bUUOiilg6cvhgXNAGC2GrVvNQ3FYN6jKrDihWY6pyNtWtEHl3M7Ba3Sz43n0
         | 
| 109 | 
            +
                  Z0b/Kb3rhOBrEVxJUTrOC3dBNcF8ANdbwAFwfe1ZZE1+s99qOmE3l0rFRNCm
         | 
| 110 | 
            +
                  ZsreBnY1iUIqaIxjUN3aPAVNT2plz89JnHJz4z23DEOd24TSszAH8ZQV92WL
         | 
| 111 | 
            +
                  f7Dy0b5vPtDqs2wrl+H0n8M4KYQaPXSaHK+EJNU7ptgkMaYB0+DMQTbwvbYJ
         | 
| 112 | 
            +
                  1WtLXefMNLkukYkXxuCF+luvTPaZ4zmOMT9oi7CM9u42jqDwUZ8N0M+o8BXf
         | 
| 113 | 
            +
                  vDLJexU+VbYjkYxWVYNYe04oYGv89tphHmBn5PSfZzGALg0M6JIBQpPyOKnp
         | 
| 114 | 
            +
                  0W0q0T8I6J5cGiZbMpNp8r1OcDx1mX5kwnUtR6nhPS+YEcuaqPhqG3g6vrr4
         | 
| 115 | 
            +
                  XMnjo8lS9a2irfSjaTOlvtQoenSMDk2gU0l2eOCmULZQwg5dZYX51gjWPfeN
         | 
| 116 | 
            +
                  CfGe5Vlw1xU+zd4yhftnccjyUvaW0zB/TTiURlMmgDdIAz3t5gHlcnlGPr4o
         | 
| 117 | 
            +
                  /UcnzX69Zj8XqSyzIfVuNGBGwrm7OWye6N44gqLHtz6Tla9w69GIdWkWPlwE
         | 
| 118 | 
            +
                  nOuAank49wbxuep11TkI+A6/dZhF9/phNuAb/lLozVNwSSCwPLw0xmsgRWY+
         | 
| 119 | 
            +
                  ZGYQ4D1d4/6MRhwaIPwQT8geCdlSlBLRywBnfBhre/q4aDMMkKxuuB7B6jga
         | 
| 120 | 
            +
                  zKVG86iPXpaBIjpZFoOh9SoKz3XgCTtPCCzvIjPdfnrPGMkyxQ6n63KwfCIi
         | 
| 121 | 
            +
                  eCrm3aZUClM55EL+/h4jImRRDALvz3G+x2g5jJnIcJDNPv6qRsugPAaaH1Uz
         | 
| 122 | 
            +
                  YWK9ZXmyERhNC69hj6OFaOjD5bKZNsbXBOlnzKKZExFN9DAOPVRfXEURy5kz
         | 
| 123 | 
            +
                  /wBDtIsYsIR205l/QEUyFAMcw0dQDi5qxaDpAJDeaRRNqp0QZHSklfooN9Er
         | 
| 124 | 
            +
                  CviLkl9ad+m+Ma2C86fiMAqN5EN8RAmMjgEzLq4bJICeKIBjc9tez6Q20cA4
         | 
| 125 | 
            +
                  NKB9KhUVIDhgLz2jyrne3eGbDafPoFXOfTQ8UNXgKwcAKYBL0Cf0y3ZZqpEz
         | 
| 126 | 
            +
                  Se2R+dAcA2WVR/SExmFiEvy7fPuYRHDxGTl8QFJcyMNBECx1V4EWMhjj6Lue
         | 
| 127 | 
            +
                  w69c18giOH+7iRXGYYVeycpyu8XcprNGDAOHPV+7mWfR+0AjMAUFElF/L+dS
         | 
| 128 | 
            +
                  oghgaDydbKDDwAwVbDRxNHAUUJ4ZkYN+x5h8oK/LoQBdPBgFonoHjZpnB02C
         | 
| 129 | 
            +
                  noigYxYvkC80oX4c1NfCJKDP587CbKqNMgKaDeGr/+aW6+MGZMICzj4l/jED
         | 
| 130 | 
            +
                  Q41a60nx6YrfoDJevaLsEYk+FD7ovXVMgPf+AAfpStkjHkrRFCh789DgF2xf
         | 
| 131 | 
            +
                  lQeoPDwVP0CYAGUC6zwriup/ozBIHZ9JxQM0xfIpUv17MvSACAONsUdYQQDb
         | 
| 132 | 
            +
                  WzTofCO72Jb/tcUCZqGFU6lNdDIOnZxJVRoQc+R8jKoD+0BnZjycPchIhgN6
         | 
| 133 | 
            +
                  9yTTfLuQX02gMaoehIvhPmbpo3x9z8R6OL9tRIY5X5zDLsqOcOXAQJz8o04e
         | 
| 134 | 
            +
                  Hs+O6KkfdBcm9QXaW03oHwX9pxIl5C9QGDw3mqslP/3O1rDNis5919sWlTss
         | 
| 135 | 
            +
                  m8tQMOheGmGv2RYqKG/gKqQhutdNsK7fMCLK9WU5+G5lg3JCDPoeOVTgtgBv
         | 
| 136 | 
            +
                  VDx3aq38iOT7TMgeBdm1LFU4YBl8IFTYbAcbzc0d1+OYdBFOXVAnV6FJ9FJ1
         | 
| 137 | 
            +
                  AKY2I4AoqwNMhtfK7+0xLIqoNEotnt4yIpZPF+ag+URC9eheI21No7KyPMRJ
         | 
| 138 | 
            +
                  VmRqyVEdJBbh3To4mIpEg8NqyjgRcSkPt6ITLXFqTYZBHQXOrhHf4dSqYifr
         | 
| 139 | 
            +
                  jfJNlA8fXqWdfdu2DxglFioRTQQxCkG00iSKWNqLhWc0vF5HkJGhr23jCDQh
         | 
| 140 | 
            +
                  m/xofKScca0OsO2GElSTvcwzBCgqllTCVfcvkXWIDxE1EVjyldl6/9KdY5HG
         | 
| 141 | 
            +
                  pfVZ3HEqNnV2oBF3QISXqwig/rsd+Hykn73XBPjrAd8nVGkaLD17Yerp9y3G
         | 
| 142 | 
            +
                  rCzovXWIBuCKcKZlS4gTDZCpUM3R6KUBOtTWpVkb6uDbj9AA2mSs5ziBBvwY
         | 
| 143 | 
            +
                  GZzf/1tQwvmvcIkBkw9kCABT+pT7NB4xUENKxQztyRY+czh+Hupfj/Z+E0GM
         | 
| 144 | 
            +
                  SxCnolUexMy1fcPSo4Hd4nkUAwsMUQYSnwzKoMo8m2Z8IAOB8Tyqt65LGarw
         | 
| 145 | 
            +
                  SBYv4h8VEGNSxiZbc02F9tKWCD4+ljNvl+MgXpcDVRubVyjSD1JD4QsVJRbH
         | 
| 146 | 
            +
                  g+xACPOnGN48fIvPP/2nSKLXKBGKNFGENWg8tNN3qSZZzgkIuOfd0aNMbHA1
         | 
| 147 | 
            +
                  GygpEvBnS4fGIRsUElQ7wEJ4de0IYEaoQE3RRmQLkQBZFNcPZnlwZQBvwWCc
         | 
| 148 | 
            +
                  J2odcXY3e1xP5/Jh7c5vHTx9CBa2dbGAwoxneaJ7UL44hnTi/GrZS/jL/SB6
         | 
| 149 | 
            +
                  e4oFloHLLheofu8Ew1Mn4Yc6CVtREpB91AvOzBx8bS9YaNaubxFNJ0St7u4U
         | 
| 150 | 
            +
                  JG6PxUeLBalmAN1C8tQ6Ou3+UlxfztBGITG8AEOEv1trNMJHkaWOb+Mqb2Ci
         | 
| 151 | 
            +
                  98bxUN+/Pgf/J0ID68mh4sqa500MkYj/kxSLmsaJ/9gf4uRbJ9g1Vn476ocK
         | 
| 152 | 
            +
                  11kdRmcCnchgd7VG7xMq0YKzmPsezUo10PB9a/Hc/947z7hCwbBC4TWn2tIc
         | 
| 153 | 
            +
                  Whz1BhOfmo8Hx/hJEx8pQ3XCPdPEp9fZZ1/ZQzipZeLkBo0j/lR95aZD+M/W
         | 
| 154 | 
            +
                  5PCCEgwdNoCuLVQ9GM8Du8++xkkSinZ6qPhLukWMVHz35RAjF3CfpTjS/vcC
         | 
| 155 | 
            +
                  5gOdv4GTbquzeAaNh54RYQ73VPtWEJMDMApdyC8bspTWA07bMOaIegE+NzR3
         | 
| 156 | 
            +
                  XO8R0GQhmyb7UXcxrH2Z6+56BGq4kGy0xQhPo9kDBGUUvj2bmAna9WNaB9qy
         | 
| 157 | 
            +
                  HPBT3jCgEB81DNSBDxOjQCKNfpTmimDaP7STsCzxfCyPKAnMoyQKi6jAsO4k
         | 
| 158 | 
            +
                  odrAp/ApeafiwWeMhIQfERfyLJ71TnyXZhghSH/75Zcfh7OHrnYmTx0VcLjT
         | 
| 159 | 
            +
                  A5sHnphhFGagva+IYba0HZqvbmg+VCvwmaG+4XpiIN2HmVpIFSAVCNzLjqJe
         | 
| 160 | 
            +
                  YsDQQTQ2YzSB0dgBAkchdeBe6kATgui5bywToWdpDlkoadlyRhsNMddmDjK7
         | 
| 161 | 
            +
                  izCBDCIR/64MAQoRKgtBSWfQHKDzHatsQeNHONxzuCTo9beewD8K+DsilUFC
         | 
| 162 | 
            +
                  1zc68Kd3a5ghhvM9PfMfxhvhTwVzc3kmvPz67UthRb2Y0KR8GJ8oDqNjZxFP
         | 
| 163 | 
            +
                  Lx/RhNAegkUKEAvOMEULMjFCde6wiQXxPylCCvEazZjiB5wWtI/zHO4BDAqK
         | 
| 164 | 
            +
                  Mu5DlBURZ9CxnTAnDlkRo3NzeLhwz9wCd0bTNLghBxLBxBBjMEQlSZk2tB15
         | 
| 165 | 
            +
                  jqqZdVBvBZcR6uvPiADphULOKZDf9zWRBLKZYTSgAREjTDDspNdoUMlCNcms
         | 
| 166 | 
            +
                  9jj4kQR6RuvpuLU20Z7dhli9W/e+YWpgzy66sDqHInSBgSX0WcVMu2HQMujz
         | 
| 167 | 
            +
                  BtitBN3XmmA/Fuyb77D2DtBKMDdrI+rbHBMi0B9hsIEIj8WpEpAWADXcIeeA
         | 
| 168 | 
            +
                  EGLvjGJZTOdCHdoURlAd+HzgP26iNapwoeJMDIHzu8YD/fnaHMgrYwmiQsTF
         | 
| 169 | 
            +
                  XVb1VUalQ59TIZs291FaqkFGMAkO7+UOx7kVO9HKCVXI0kIY5Ait1qgpOGY3
         | 
| 170 | 
            +
                  HGJxTQoTQ4zBEKcClfaBv8CkAlP7oLMxXHbo3HZmLfS5DX//f5g42FyoswAA
         | 
| 171 | 
            +
             | 
| 172 | 
            +
                http_version: "1.1"
         | 
| @@ -165,3 +165,38 @@ | |
| 165 165 | 
             
                  xsti6tGM4iC6Z7zyFx5dGhXAugUOSdO1V1D1YpWpg1f45z9C6mMuZTkAAA==
         | 
| 166 166 |  | 
| 167 167 | 
             
                http_version: "1.1"
         | 
| 168 | 
            +
            - !ruby/struct:VCR::HTTPInteraction 
         | 
| 169 | 
            +
              request: !ruby/struct:VCR::Request 
         | 
| 170 | 
            +
                method: :get
         | 
| 171 | 
            +
                uri: https://api.github.com:443/user/repos
         | 
| 172 | 
            +
                body: 
         | 
| 173 | 
            +
                headers: 
         | 
| 174 | 
            +
                  accept-encoding: 
         | 
| 175 | 
            +
                  - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
         | 
| 176 | 
            +
              response: !ruby/struct:VCR::Response 
         | 
| 177 | 
            +
                status: !ruby/struct:VCR::ResponseStatus 
         | 
| 178 | 
            +
                  code: 401
         | 
| 179 | 
            +
                  message: Unauthorized
         | 
| 180 | 
            +
                headers: 
         | 
| 181 | 
            +
                  server: 
         | 
| 182 | 
            +
                  - nginx/1.0.4
         | 
| 183 | 
            +
                  date: 
         | 
| 184 | 
            +
                  - Sat, 21 Jan 2012 17:44:53 GMT
         | 
| 185 | 
            +
                  content-type: 
         | 
| 186 | 
            +
                  - application/json; charset=utf-8
         | 
| 187 | 
            +
                  connection: 
         | 
| 188 | 
            +
                  - keep-alive
         | 
| 189 | 
            +
                  status: 
         | 
| 190 | 
            +
                  - 401 Unauthorized
         | 
| 191 | 
            +
                  x-ratelimit-limit: 
         | 
| 192 | 
            +
                  - "5000"
         | 
| 193 | 
            +
                  www-authenticate: 
         | 
| 194 | 
            +
                  - Basic realm="GitHub"
         | 
| 195 | 
            +
                  etag: 
         | 
| 196 | 
            +
                  - "\"99852aefab6a0988db8f62bf2fb96f49\""
         | 
| 197 | 
            +
                  x-ratelimit-remaining: 
         | 
| 198 | 
            +
                  - "4999"
         | 
| 199 | 
            +
                  content-length: 
         | 
| 200 | 
            +
                  - "37"
         | 
| 201 | 
            +
                body: "{\"message\":\"Requires authentication\"}"
         | 
| 202 | 
            +
                http_version: "1.1"
         | 
    
        data/features/pagination.feature
    CHANGED
    
    | @@ -1,10 +1,67 @@ | |
| 1 1 | 
             
            Feature: Githu API pagination
         | 
| 2 2 | 
             
              In order to paginate number of received records
         | 
| 3 3 | 
             
              As a user
         | 
| 4 | 
            -
              I want to be able to view them in  | 
| 4 | 
            +
              I want to be able to view them in chunks
         | 
| 5 5 |  | 
| 6 | 
            -
              Scenario:  | 
| 6 | 
            +
              Scenario: Passing per_page param
         | 
| 7 7 | 
             
                Given I have "Github::Repos" instance
         | 
| 8 | 
            -
                 | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 8 | 
            +
                When I am looking for "repos"
         | 
| 9 | 
            +
                And I pass the following request options:
         | 
| 10 | 
            +
                  | user   | per_page |
         | 
| 11 | 
            +
                  | wycats | 45       |
         | 
| 12 | 
            +
                And I make request within a cassette named "pagination/repos"
         | 
| 13 | 
            +
                Then the response should be "200"
         | 
| 14 | 
            +
                And the response type should be "JSON"
         | 
| 15 | 
            +
                And the response should have 45 items
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                When I request "next" page within a cassette named "pagination/repos/next"
         | 
| 18 | 
            +
                Then the response should be "200"
         | 
| 19 | 
            +
                And the response should have 45 items
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              Scenario: Returned paginated resources are different
         | 
| 22 | 
            +
                Given I have "Github::Repos" instance
         | 
| 23 | 
            +
                When I am looking for "repos"
         | 
| 24 | 
            +
                And I pass the following request options:
         | 
| 25 | 
            +
                  | user   |
         | 
| 26 | 
            +
                  | wycats |
         | 
| 27 | 
            +
                And I make request within a cassette named "pagination/repos/diff"
         | 
| 28 | 
            +
                Then the response should be "200"
         | 
| 29 | 
            +
                And the response type should be "JSON"
         | 
| 30 | 
            +
                And the response should have 30 items
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                When I request "next" page within a cassette named "pagination/repos/diff/next"
         | 
| 33 | 
            +
                Then the response should be "200"
         | 
| 34 | 
            +
                And the response should have 30 items
         | 
| 35 | 
            +
                And the response collection of resources is different for "name" attribute
         | 
| 36 | 
            +
             | 
| 37 | 
            +
              Scenario: Calling 'commits' for Github::Repos with per_page param
         | 
| 38 | 
            +
                Given I have "Github::Repos" instance
         | 
| 39 | 
            +
                When I am looking for "commits" with the following params:
         | 
| 40 | 
            +
                  | user          | repo   |
         | 
| 41 | 
            +
                  | peter-murach  | github |
         | 
| 42 | 
            +
                And I pass the following request options:
         | 
| 43 | 
            +
                  | per_page |
         | 
| 44 | 
            +
                  | 45       |
         | 
| 45 | 
            +
                And I make request within a cassette named "pagination/repos/commits"
         | 
| 46 | 
            +
                Then the response should be "200"
         | 
| 47 | 
            +
                And the response type should be "JSON"
         | 
| 48 | 
            +
                And the response should have 45 items
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                When I request "next" page within a cassette named "pagination/repos/commits/next"
         | 
| 51 | 
            +
                Then the response should be "200"
         | 
| 52 | 
            +
                And the response should have 45 items
         | 
| 53 | 
            +
             | 
| 54 | 
            +
              Scenario: Calling 'commits' for Github::Repos returns different collections
         | 
| 55 | 
            +
                Given I have "Github::Repos" instance
         | 
| 56 | 
            +
                When I am looking for "commits" with the following params:
         | 
| 57 | 
            +
                  | user          | repo   |
         | 
| 58 | 
            +
                  | peter-murach  | github |
         | 
| 59 | 
            +
                And I make request within a cassette named "pagination/repos/commits/sha"
         | 
| 60 | 
            +
                Then the response should be "200"
         | 
| 61 | 
            +
                And the response should have 30 items
         | 
| 62 | 
            +
             | 
| 63 | 
            +
                When I request "next" page within a cassette named "pagination/repos/commits/sha/next"
         | 
| 64 | 
            +
                Then the response should be "200"
         | 
| 65 | 
            +
                And the response should have 30 items
         | 
| 66 | 
            +
                And the response collection of resources is different for "sha" attribute
         | 
| 67 | 
            +
             | 
    
        data/features/repos.feature
    CHANGED
    
    | @@ -5,15 +5,16 @@ Feature: Accessing Repos Main API | |
| 5 5 |  | 
| 6 6 | 
             
              Scenario: Returning all repository branches
         | 
| 7 7 | 
             
                Given I have "Github::Repos" instance
         | 
| 8 | 
            -
                 | 
| 8 | 
            +
                When I am looking for "branches" with the following params:
         | 
| 9 9 | 
             
                  | user          | repo   |
         | 
| 10 10 | 
             
                  | peter-murach  | github |
         | 
| 11 11 | 
             
                And I make request within a cassette named "repos/branches"
         | 
| 12 12 | 
             
                Then the response should be "200"
         | 
| 13 | 
            +
                And the response type should be "JSON"
         | 
| 13 14 |  | 
| 14 15 | 
             
              Scenario: Returning all repository tags
         | 
| 15 16 | 
             
                Given I have "Github::Repos" instance
         | 
| 16 | 
            -
                 | 
| 17 | 
            +
                When I am looking for "tags" with the following params:
         | 
| 17 18 | 
             
                  | user          | repo   |
         | 
| 18 19 | 
             
                  | peter-murach  | github |
         | 
| 19 20 | 
             
                And I make request within a cassette named "repos/tags"
         | 
| @@ -21,8 +22,9 @@ Feature: Accessing Repos Main API | |
| 21 22 |  | 
| 22 23 | 
             
              Scenario: Returning all repositories for the user
         | 
| 23 24 | 
             
                Given I have "Github::Repos" instance
         | 
| 24 | 
            -
                 | 
| 25 | 
            +
                When I am looking for "list_repos"
         | 
| 26 | 
            +
                And I pass the following request options:
         | 
| 25 27 | 
             
                  | user          |
         | 
| 26 28 | 
             
                  | peter-murach  |
         | 
| 27 | 
            -
                And I make request  | 
| 29 | 
            +
                And I make request within a cassette named "repos/tags"
         | 
| 28 30 | 
             
                Then the response should be "200"
         | 
| @@ -9,3 +9,11 @@ end | |
| 9 9 | 
             
            Then /^the response should be "([^"]*)"$/ do |expected_response|
         | 
| 10 10 | 
             
              @response.status.should eql expected_response.to_i
         | 
| 11 11 | 
             
            end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            Then /^the response type should be "([^"]*)"$/ do |type|
         | 
| 14 | 
            +
              @response.content_type.should =~ /application\/#{type.downcase}/
         | 
| 15 | 
            +
            end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            Then /^the response should have (\d+) items$/ do |size|
         | 
| 18 | 
            +
              @response.size.should eql size.to_i
         | 
| 19 | 
            +
            end
         | 
| @@ -18,6 +18,16 @@ When /^I will have access to "([^"]*)" API$/ do |api| | |
| 18 18 | 
             
              @response.class.to_s.should match api
         | 
| 19 19 | 
             
            end
         | 
| 20 20 |  | 
| 21 | 
            +
            When /^I am looking for "([^"]*)"$/ do |method|
         | 
| 22 | 
            +
              @method = method
         | 
| 23 | 
            +
            end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
            When /^I pass the following request options:$/ do |table|
         | 
| 26 | 
            +
              table.hashes.each do |options|
         | 
| 27 | 
            +
                @options = options
         | 
| 28 | 
            +
              end
         | 
| 29 | 
            +
            end
         | 
| 30 | 
            +
             | 
| 21 31 | 
             
            When /^I am looking for "([^"]*)" with the following params:$/ do |method, table|
         | 
| 22 32 | 
             
              table.hashes.each do |attributes|
         | 
| 23 33 | 
             
                @method = method.to_sym
         | 
| @@ -26,9 +36,15 @@ When /^I am looking for "([^"]*)" with the following params:$/ do |method, table | |
| 26 36 | 
             
            end
         | 
| 27 37 |  | 
| 28 38 | 
             
            When /^I make request$/ do
         | 
| 29 | 
            -
              @ | 
| 39 | 
            +
              @options ||= {}
         | 
| 40 | 
            +
              @attributes ||= {}
         | 
| 41 | 
            +
              @response = @instance.send @method, *@attributes.values, @options
         | 
| 42 | 
            +
            end
         | 
| 43 | 
            +
             | 
| 44 | 
            +
            When /^I request "([^"]*)" page$/ do |link|
         | 
| 45 | 
            +
              @next_response = @response.send :"#{link}_page"
         | 
| 30 46 | 
             
            end
         | 
| 31 47 |  | 
| 32 | 
            -
             | 
| 33 | 
            -
              @ | 
| 48 | 
            +
            Then /^the response collection of resources is different for "([^"]*)" attribute$/ do |attr|
         | 
| 49 | 
            +
              @next_response.first.send(:"#{attr}").should_not eql @response.first.send(:"#{attr}")
         | 
| 34 50 | 
             
            end
         | 
    
        data/lib/github_api/api.rb
    CHANGED
    
    | @@ -174,8 +174,8 @@ module Github | |
| 174 174 | 
             
                end
         | 
| 175 175 |  | 
| 176 176 | 
             
                def _merge_mime_type(resource, params) # :nodoc:
         | 
| 177 | 
            -
             | 
| 178 | 
            -
             | 
| 177 | 
            +
            #       params['resource'] = resource
         | 
| 178 | 
            +
            #       params['mime_type'] = params['mime_type'] || :raw
         | 
| 179 179 | 
             
                end
         | 
| 180 180 |  | 
| 181 181 | 
             
                # TODO add to core extensions
         | 
    
        data/lib/github_api/constants.rb
    CHANGED
    
    | @@ -11,6 +11,12 @@ module Github | |
| 11 11 |  | 
| 12 12 | 
             
                CONTENT_LENGTH = 'content-length'.freeze
         | 
| 13 13 |  | 
| 14 | 
            +
                ETAG = 'ETag'.freeze
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                SERVER = 'Server'.freeze
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                DATE = 'Date'.freeze
         | 
| 19 | 
            +
             | 
| 14 20 | 
             
                # Link headers
         | 
| 15 21 | 
             
                HEADER_LINK = "Link".freeze
         | 
| 16 22 |  | 
| @@ -34,5 +40,9 @@ module Github | |
| 34 40 |  | 
| 35 41 | 
             
                PARAM_START_PAGE = "start_page".freeze
         | 
| 36 42 |  | 
| 43 | 
            +
                # URI parsing
         | 
| 44 | 
            +
                QUERY_STR_SEP = '?'.freeze
         | 
| 45 | 
            +
             | 
| 46 | 
            +
             | 
| 37 47 | 
             
              end # Constants
         | 
| 38 48 | 
             
            end # Github
         | 
| @@ -1,6 +1,4 @@ | |
| 1 | 
            -
            # encoding: utf-8
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            require 'github_api/utils/url'
         | 
| 1 | 
            +
            # encoding: utf-8 require 'github_api/utils/url'
         | 
| 4 2 |  | 
| 5 3 | 
             
            module Github
         | 
| 6 4 | 
             
              class PageIterator
         | 
| @@ -8,9 +6,6 @@ module Github | |
| 8 6 | 
             
                include Github::Utils::Url
         | 
| 9 7 | 
             
                include Github::PagedRequest
         | 
| 10 8 |  | 
| 11 | 
            -
                # Query string separator
         | 
| 12 | 
            -
                QUERY_STR_SEP = '?'.freeze
         | 
| 13 | 
            -
             | 
| 14 9 | 
             
                # Setup attribute accesor for all the link types
         | 
| 15 10 | 
             
                ATTRIBUTES = [ META_FIRST, META_NEXT, META_PREV, META_LAST ]
         | 
| 16 11 |  | 
| @@ -29,8 +24,21 @@ module Github | |
| 29 24 |  | 
| 30 25 | 
             
                def first
         | 
| 31 26 | 
             
                  return nil unless first_page_uri
         | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 27 | 
            +
             | 
| 28 | 
            +
                  response = if next_page < 1
         | 
| 29 | 
            +
                    parsed_query = parse_query(first_page_uri.split(QUERY_STR_SEP).last)
         | 
| 30 | 
            +
                    params = {}
         | 
| 31 | 
            +
                    if parsed_query.keys.include?('sha')
         | 
| 32 | 
            +
                      params['sha'] = 'master'
         | 
| 33 | 
            +
                    end
         | 
| 34 | 
            +
                    params['per_page'] = parse_per_page_number(first_page_uri)
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                    page_request first_page_uri.split(QUERY_STR_SEP).first, params
         | 
| 37 | 
            +
                  else
         | 
| 38 | 
            +
                    page_request first_page_uri.split(QUERY_STR_SEP)[0],
         | 
| 39 | 
            +
                                       'per_page' => parse_per_page_number(first_page_uri)
         | 
| 40 | 
            +
                  end
         | 
| 41 | 
            +
             | 
| 34 42 | 
             
                  update_page_links response.links
         | 
| 35 43 | 
             
                  response
         | 
| 36 44 | 
             
                end
         | 
| @@ -38,9 +46,20 @@ module Github | |
| 38 46 | 
             
                def next
         | 
| 39 47 | 
             
                  return nil unless has_next?
         | 
| 40 48 |  | 
| 41 | 
            -
                  response =  | 
| 49 | 
            +
                  response = if next_page < 1
         | 
| 50 | 
            +
                    parsed_query = parse_query(next_page_uri.split(QUERY_STR_SEP).last)
         | 
| 51 | 
            +
                    params = {}
         | 
| 52 | 
            +
                    if parsed_query.keys.include?('last_sha')
         | 
| 53 | 
            +
                      params['sha'] = parsed_query['last_sha']
         | 
| 54 | 
            +
                    end
         | 
| 55 | 
            +
                    params['per_page'] = parse_per_page_number(next_page_uri)
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                    page_request next_page_uri.split(QUERY_STR_SEP)[0], params
         | 
| 58 | 
            +
                  else
         | 
| 59 | 
            +
                    page_request next_page_uri.split(QUERY_STR_SEP)[0],
         | 
| 42 60 | 
             
                                            'page' => next_page,
         | 
| 43 61 | 
             
                                            'per_page'=> parse_per_page_number(next_page_uri)
         | 
| 62 | 
            +
                  end
         | 
| 44 63 | 
             
                  update_page_links response.links
         | 
| 45 64 | 
             
                  response
         | 
| 46 65 | 
             
                end
         |