wayfarer 0.4.8 → 0.4.9

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.
Files changed (610) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/release.yaml +0 -2
  3. data/Gemfile.lock +1 -1
  4. data/docs/guides/networking/custom_adapters.md +93 -86
  5. data/docs/guides/networking/http.md +1 -1
  6. data/docs/guides/routing.md +1 -1
  7. data/lib/wayfarer/middleware/base.rb +0 -4
  8. data/lib/wayfarer/middleware/controller.rb +1 -1
  9. data/lib/wayfarer/networking/context.rb +1 -1
  10. data/lib/wayfarer/networking/ferrum.rb +1 -1
  11. data/lib/wayfarer/networking/pool.rb +3 -9
  12. data/lib/wayfarer/networking/strategy.rb +6 -2
  13. data/lib/wayfarer/parsing.rb +1 -1
  14. data/lib/wayfarer.rb +9 -4
  15. data/rake/release.rake +0 -6
  16. data/spec/wayfarer/integration/page_spec.rb +9 -9
  17. data/spec/wayfarer/integration/parsing_spec.rb +3 -2
  18. data/spec/wayfarer/integration/stage_spec.rb +3 -3
  19. data/spec/wayfarer/middleware/controller_spec.rb +3 -4
  20. data/spec/wayfarer/networking/context_spec.rb +3 -2
  21. data/spec/wayfarer/networking/pool_spec.rb +1 -1
  22. data/spec/wayfarer/networking/strategy.rb +2 -2
  23. data/wayfarer.gemspec +1 -1
  24. metadata +1 -1172
  25. data/lib/wayfarer/middleware/lazy.rb +0 -11
  26. data/spec/support/static/git-scm.com/assets/application-38b0d42ff05ffea45841edebbd14b75b89585646153808e82907c2c5c11f324b.js +0 -772
  27. data/spec/support/static/git-scm.com/assets/application-cafcf280f67db0e6d8168ba98a38da878769a9d5f37793b68ffb963a02d185e0.css +0 -1
  28. data/spec/support/static/git-scm.com/assets/modernize-b3ebe0c31c24f230dc62179d3e1030d2e57a53b1668d9382c0a27dbd44a94beb.js +0 -20
  29. data/spec/support/static/git-scm.com/book/en/v2/Appendix-A:-Git-in-Other-Environments-Git-in-Bash.html +0 -751
  30. data/spec/support/static/git-scm.com/book/en/v2/Appendix-A:-Git-in-Other-Environments-Git-in-PowerShell.html +0 -804
  31. data/spec/support/static/git-scm.com/book/en/v2/Appendix-A:-Git-in-Other-Environments-Git-in-Sublime-Text.html +0 -728
  32. data/spec/support/static/git-scm.com/book/en/v2/Appendix-A:-Git-in-Other-Environments-Git-in-Visual-Studio-Code.html +0 -751
  33. data/spec/support/static/git-scm.com/book/en/v2/Appendix-A:-Git-in-Other-Environments-Git-in-Visual-Studio.html +0 -740
  34. data/spec/support/static/git-scm.com/book/en/v2/Appendix-A:-Git-in-Other-Environments-Git-in-Zsh.html +0 -765
  35. data/spec/support/static/git-scm.com/book/en/v2/Appendix-A:-Git-in-Other-Environments-Graphical-Interfaces.html +0 -931
  36. data/spec/support/static/git-scm.com/book/en/v2/Appendix-A:-Git-in-Other-Environments-Summary.html +0 -702
  37. data/spec/support/static/git-scm.com/book/en/v2/Appendix-B:-Embedding-Git-in-your-Applications-Command-line-Git.html +0 -720
  38. data/spec/support/static/git-scm.com/book/en/v2/Appendix-B:-Embedding-Git-in-your-Applications-Dulwich.html +0 -746
  39. data/spec/support/static/git-scm.com/book/en/v2/Appendix-B:-Embedding-Git-in-your-Applications-JGit.html +0 -889
  40. data/spec/support/static/git-scm.com/book/en/v2/Appendix-B:-Embedding-Git-in-your-Applications-Libgit2.html +0 -1003
  41. data/spec/support/static/git-scm.com/book/en/v2/Appendix-B:-Embedding-Git-in-your-Applications-go-git.html +0 -792
  42. data/spec/support/static/git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Administration.html +0 -745
  43. data/spec/support/static/git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Basic-Snapshotting.html +0 -840
  44. data/spec/support/static/git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Branching-and-Merging.html +0 -829
  45. data/spec/support/static/git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Debugging.html +0 -731
  46. data/spec/support/static/git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Email.html +0 -766
  47. data/spec/support/static/git-scm.com/book/en/v2/Appendix-C:-Git-Commands-External-Systems.html +0 -721
  48. data/spec/support/static/git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Getting-and-Creating-Projects.html +0 -746
  49. data/spec/support/static/git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Inspection-and-Comparison.html +0 -735
  50. data/spec/support/static/git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Patching.html +0 -742
  51. data/spec/support/static/git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Plumbing-Commands.html +0 -715
  52. data/spec/support/static/git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Setup-and-Config.html +0 -863
  53. data/spec/support/static/git-scm.com/book/en/v2/Appendix-C:-Git-Commands-Sharing-and-Updating-Projects.html +0 -802
  54. data/spec/support/static/git-scm.com/book/en/v2/Customizing-Git-An-Example-Git-Enforced-Policy.html +0 -1200
  55. data/spec/support/static/git-scm.com/book/en/v2/Customizing-Git-Git-Attributes.html +0 -1134
  56. data/spec/support/static/git-scm.com/book/en/v2/Customizing-Git-Git-Configuration.html +0 -1315
  57. data/spec/support/static/git-scm.com/book/en/v2/Customizing-Git-Git-Hooks.html +0 -876
  58. data/spec/support/static/git-scm.com/book/en/v2/Customizing-Git-Summary.html +0 -704
  59. data/spec/support/static/git-scm.com/book/en/v2/Distributed-Git-Contributing-to-a-Project.html +0 -1667
  60. data/spec/support/static/git-scm.com/book/en/v2/Distributed-Git-Distributed-Workflows.html +0 -859
  61. data/spec/support/static/git-scm.com/book/en/v2/Distributed-Git-Maintaining-a-Project.html +0 -1354
  62. data/spec/support/static/git-scm.com/book/en/v2/Distributed-Git-Summary.html +0 -704
  63. data/spec/support/static/git-scm.com/book/en/v2/Getting-Started-A-Short-History-of-Git.html +0 -735
  64. data/spec/support/static/git-scm.com/book/en/v2/Getting-Started-About-Version-Control.html +0 -783
  65. data/spec/support/static/git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup.html +0 -889
  66. data/spec/support/static/git-scm.com/book/en/v2/Getting-Started-Getting-Help.html +0 -750
  67. data/spec/support/static/git-scm.com/book/en/v2/Getting-Started-Installing-Git.html +0 -879
  68. data/spec/support/static/git-scm.com/book/en/v2/Getting-Started-Summary.html +0 -704
  69. data/spec/support/static/git-scm.com/book/en/v2/Getting-Started-The-Command-Line.html +0 -711
  70. data/spec/support/static/git-scm.com/book/en/v2/Getting-Started-What-is-Git?.html +0 -857
  71. data/spec/support/static/git-scm.com/book/en/v2/Git-Basics-Getting-a-Git-Repository.html +0 -816
  72. data/spec/support/static/git-scm.com/book/en/v2/Git-Basics-Git-Aliases.html +0 -775
  73. data/spec/support/static/git-scm.com/book/en/v2/Git-Basics-Recording-Changes-to-the-Repository.html +0 -1432
  74. data/spec/support/static/git-scm.com/book/en/v2/Git-Basics-Summary.html +0 -703
  75. data/spec/support/static/git-scm.com/book/en/v2/Git-Basics-Tagging.html +0 -1049
  76. data/spec/support/static/git-scm.com/book/en/v2/Git-Basics-Undoing-Things.html +0 -998
  77. data/spec/support/static/git-scm.com/book/en/v2/Git-Basics-Viewing-the-Commit-History.html +0 -1172
  78. data/spec/support/static/git-scm.com/book/en/v2/Git-Basics-Working-with-Remotes.html +0 -983
  79. data/spec/support/static/git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging.html +0 -1102
  80. data/spec/support/static/git-scm.com/book/en/v2/Git-Branching-Branch-Management.html +0 -946
  81. data/spec/support/static/git-scm.com/book/en/v2/Git-Branching-Branches-in-a-Nutshell.html +0 -1020
  82. data/spec/support/static/git-scm.com/book/en/v2/Git-Branching-Branching-Workflows.html +0 -786
  83. data/spec/support/static/git-scm.com/book/en/v2/Git-Branching-Rebasing.html +0 -1028
  84. data/spec/support/static/git-scm.com/book/en/v2/Git-Branching-Remote-Branches.html +0 -1009
  85. data/spec/support/static/git-scm.com/book/en/v2/Git-Branching-Summary.html +0 -705
  86. data/spec/support/static/git-scm.com/book/en/v2/Git-Internals-Environment-Variables.html +0 -1009
  87. data/spec/support/static/git-scm.com/book/en/v2/Git-Internals-Git-Objects.html +0 -1209
  88. data/spec/support/static/git-scm.com/book/en/v2/Git-Internals-Git-References.html +0 -939
  89. data/spec/support/static/git-scm.com/book/en/v2/Git-Internals-Maintenance-and-Data-Recovery.html +0 -1086
  90. data/spec/support/static/git-scm.com/book/en/v2/Git-Internals-Packfiles.html +0 -876
  91. data/spec/support/static/git-scm.com/book/en/v2/Git-Internals-Plumbing-and-Porcelain.html +0 -745
  92. data/spec/support/static/git-scm.com/book/en/v2/Git-Internals-Summary.html +0 -708
  93. data/spec/support/static/git-scm.com/book/en/v2/Git-Internals-The-Refspec.html +0 -872
  94. data/spec/support/static/git-scm.com/book/en/v2/Git-Internals-Transfer-Protocols.html +0 -1043
  95. data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Advanced-Merging.html +0 -1605
  96. data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Bundling.html +0 -888
  97. data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Credential-Storage.html +0 -1035
  98. data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Debugging-with-Git.html +0 -861
  99. data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Interactive-Staging.html +0 -920
  100. data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Replace.html +0 -949
  101. data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Rerere.html +0 -983
  102. data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Reset-Demystified.html +0 -1236
  103. data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Revision-Selection.html +0 -1178
  104. data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Rewriting-History.html +0 -1182
  105. data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Searching.html +0 -875
  106. data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Signing-Your-Work.html +0 -922
  107. data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Stashing-and-Cleaning.html +0 -1039
  108. data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Submodules.html +0 -1864
  109. data/spec/support/static/git-scm.com/book/en/v2/Git-Tools-Summary.html +0 -705
  110. data/spec/support/static/git-scm.com/book/en/v2/Git-and-Other-Systems-Git-as-a-Client.html +0 -2656
  111. data/spec/support/static/git-scm.com/book/en/v2/Git-and-Other-Systems-Migrating-to-Git.html +0 -1741
  112. data/spec/support/static/git-scm.com/book/en/v2/Git-and-Other-Systems-Summary.html +0 -703
  113. data/spec/support/static/git-scm.com/book/en/v2/Git-on-the-Server-Generating-Your-SSH-Public-Key.html +0 -759
  114. data/spec/support/static/git-scm.com/book/en/v2/Git-on-the-Server-Getting-Git-on-a-Server.html +0 -827
  115. data/spec/support/static/git-scm.com/book/en/v2/Git-on-the-Server-Git-Daemon.html +0 -775
  116. data/spec/support/static/git-scm.com/book/en/v2/Git-on-the-Server-GitLab.html +0 -872
  117. data/spec/support/static/git-scm.com/book/en/v2/Git-on-the-Server-GitWeb.html +0 -776
  118. data/spec/support/static/git-scm.com/book/en/v2/Git-on-the-Server-Setting-Up-the-Server.html +0 -870
  119. data/spec/support/static/git-scm.com/book/en/v2/Git-on-the-Server-Smart-HTTP.html +0 -789
  120. data/spec/support/static/git-scm.com/book/en/v2/Git-on-the-Server-Summary.html +0 -709
  121. data/spec/support/static/git-scm.com/book/en/v2/Git-on-the-Server-The-Protocols.html +0 -963
  122. data/spec/support/static/git-scm.com/book/en/v2/Git-on-the-Server-Third-Party-Hosted-Options.html +0 -711
  123. data/spec/support/static/git-scm.com/book/en/v2/GitHub-Account-Setup-and-Configuration.html +0 -858
  124. data/spec/support/static/git-scm.com/book/en/v2/GitHub-Contributing-to-a-Project.html +0 -1502
  125. data/spec/support/static/git-scm.com/book/en/v2/GitHub-Maintaining-a-Project.html +0 -1218
  126. data/spec/support/static/git-scm.com/book/en/v2/GitHub-Managing-an-organization.html +0 -797
  127. data/spec/support/static/git-scm.com/book/en/v2/GitHub-Scripting-GitHub.html +0 -1059
  128. data/spec/support/static/git-scm.com/book/en/v2/GitHub-Summary.html +0 -704
  129. data/spec/support/static/git-scm.com/book/en/v2/ch00/_abort_merge.html +0 -1605
  130. data/spec/support/static/git-scm.com/book/en/v2/ch00/_add_email_addresses.html +0 -858
  131. data/spec/support/static/git-scm.com/book/en/v2/ch00/_advanced_merging.html +0 -1605
  132. data/spec/support/static/git-scm.com/book/en/v2/ch00/_an_example_git_enforced_policy.html +0 -1200
  133. data/spec/support/static/git-scm.com/book/en/v2/ch00/_annotated_tags.html +0 -1049
  134. data/spec/support/static/git-scm.com/book/en/v2/ch00/_api_comment.html +0 -1059
  135. data/spec/support/static/git-scm.com/book/en/v2/ch00/_bare_repo.html +0 -827
  136. data/spec/support/static/git-scm.com/book/en/v2/ch00/_basic_branching.html +0 -1102
  137. data/spec/support/static/git-scm.com/book/en/v2/ch00/_basic_merge_conflicts.html +0 -1102
  138. data/spec/support/static/git-scm.com/book/en/v2/ch00/_basic_merging.html +0 -1102
  139. data/spec/support/static/git-scm.com/book/en/v2/ch00/_binary_search.html +0 -861
  140. data/spec/support/static/git-scm.com/book/en/v2/ch00/_branch_management.html +0 -946
  141. data/spec/support/static/git-scm.com/book/en/v2/ch00/_branch_references.html +0 -1178
  142. data/spec/support/static/git-scm.com/book/en/v2/ch00/_build_number.html +0 -1354
  143. data/spec/support/static/git-scm.com/book/en/v2/ch00/_bundling.html +0 -888
  144. data/spec/support/static/git-scm.com/book/en/v2/ch00/_changing_multiple.html +0 -1182
  145. data/spec/support/static/git-scm.com/book/en/v2/ch00/_checking_out_conflicts.html +0 -1605
  146. data/spec/support/static/git-scm.com/book/en/v2/ch00/_checking_out_remotes.html +0 -1354
  147. data/spec/support/static/git-scm.com/book/en/v2/ch00/_checking_status.html +0 -1432
  148. data/spec/support/static/git-scm.com/book/en/v2/ch00/_cloning_submodules.html +0 -1864
  149. data/spec/support/static/git-scm.com/book/en/v2/ch00/_commit_guidelines.html +0 -1667
  150. data/spec/support/static/git-scm.com/book/en/v2/ch00/_commit_ranges.html +0 -1178
  151. data/spec/support/static/git-scm.com/book/en/v2/ch00/_commit_status.html +0 -1059
  152. data/spec/support/static/git-scm.com/book/en/v2/ch00/_committing_changes.html +0 -1432
  153. data/spec/support/static/git-scm.com/book/en/v2/ch00/_contrib_file.html +0 -1218
  154. data/spec/support/static/git-scm.com/book/en/v2/ch00/_contributing_project.html +0 -1667
  155. data/spec/support/static/git-scm.com/book/en/v2/ch00/_create_new_branch.html +0 -1020
  156. data/spec/support/static/git-scm.com/book/en/v2/ch00/_credential_caching.html +0 -1035
  157. data/spec/support/static/git-scm.com/book/en/v2/ch00/_custom_importer.html +0 -1741
  158. data/spec/support/static/git-scm.com/book/en/v2/ch00/_data_recovery.html +0 -1086
  159. data/spec/support/static/git-scm.com/book/en/v2/ch00/_delete_branches.html +0 -1009
  160. data/spec/support/static/git-scm.com/book/en/v2/ch00/_editor.html +0 -889
  161. data/spec/support/static/git-scm.com/book/en/v2/ch00/_eg_task_lists.html +0 -1502
  162. data/spec/support/static/git-scm.com/book/en/v2/ch00/_email_hooks.html +0 -876
  163. data/spec/support/static/git-scm.com/book/en/v2/ch00/_email_notification.html +0 -1502
  164. data/spec/support/static/git-scm.com/book/en/v2/ch00/_email_notifications.html +0 -1218
  165. data/spec/support/static/git-scm.com/book/en/v2/ch00/_email_pr.html +0 -1218
  166. data/spec/support/static/git-scm.com/book/en/v2/ch00/_enforcing_commit_message_format.html +0 -1200
  167. data/spec/support/static/git-scm.com/book/en/v2/ch00/_example_markdown.html +0 -1502
  168. data/spec/support/static/git-scm.com/book/en/v2/ch00/_external_merge_tools.html +0 -1315
  169. data/spec/support/static/git-scm.com/book/en/v2/ch00/_fetch_and_push_on_different_repositories.html +0 -1502
  170. data/spec/support/static/git-scm.com/book/en/v2/ch00/_fetching_and_pulling.html +0 -983
  171. data/spec/support/static/git-scm.com/book/en/v2/ch00/_file_annotation.html +0 -861
  172. data/spec/support/static/git-scm.com/book/en/v2/ch00/_first_time.html +0 -889
  173. data/spec/support/static/git-scm.com/book/en/v2/ch00/_generate_ssh_key.html +0 -759
  174. data/spec/support/static/git-scm.com/book/en/v2/ch00/_getting_a_repo.html +0 -816
  175. data/spec/support/static/git-scm.com/book/en/v2/ch00/_getting_git_on_a_server.html +0 -827
  176. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_aliases.html +0 -775
  177. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_am.html +0 -1354
  178. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_amend.html +0 -1182
  179. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_branches_overview.html +0 -1020
  180. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_clean.html +0 -1039
  181. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_cloning.html +0 -816
  182. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_commit_objects.html +0 -1209
  183. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_config.html +0 -1315
  184. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_diff_staged.html +0 -1432
  185. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_gc.html +0 -1086
  186. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_grep.html +0 -875
  187. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_help.html +0 -750
  188. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_hooks.html +0 -876
  189. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_mv.html +0 -1432
  190. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_p4.html +0 -1741
  191. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_p4_branches.html +0 -2656
  192. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_reflog.html +0 -1178
  193. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_refs.html +0 -939
  194. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_reset.html +0 -1236
  195. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_stashing.html +0 -1039
  196. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_submodules.html +0 -1864
  197. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_svn.html +0 -2656
  198. data/spec/support/static/git-scm.com/book/en/v2/ch00/_git_tagging.html +0 -1049
  199. data/spec/support/static/git-scm.com/book/en/v2/ch00/_gitlab_groups_section.html +0 -872
  200. data/spec/support/static/git-scm.com/book/en/v2/ch00/_ignoring.html +0 -1432
  201. data/spec/support/static/git-scm.com/book/en/v2/ch00/_inspecting_remote.html +0 -983
  202. data/spec/support/static/git-scm.com/book/en/v2/ch00/_integration_manager.html +0 -859
  203. data/spec/support/static/git-scm.com/book/en/v2/ch00/_interactive_staging.html +0 -920
  204. data/spec/support/static/git-scm.com/book/en/v2/ch00/_keyword_expansion.html +0 -1134
  205. data/spec/support/static/git-scm.com/book/en/v2/ch00/_libgit2_bindings.html +0 -1003
  206. data/spec/support/static/git-scm.com/book/en/v2/ch00/_manual_remerge.html +0 -1605
  207. data/spec/support/static/git-scm.com/book/en/v2/ch00/_md_code.html +0 -1502
  208. data/spec/support/static/git-scm.com/book/en/v2/ch00/_md_drag.html +0 -1502
  209. data/spec/support/static/git-scm.com/book/en/v2/ch00/_md_emoji.html +0 -1502
  210. data/spec/support/static/git-scm.com/book/en/v2/ch00/_md_quote.html +0 -1502
  211. data/spec/support/static/git-scm.com/book/en/v2/ch00/_merge_button.html +0 -1218
  212. data/spec/support/static/git-scm.com/book/en/v2/ch00/_merge_log.html +0 -1605
  213. data/spec/support/static/git-scm.com/book/en/v2/ch00/_merge_rebase_work.html +0 -1028
  214. data/spec/support/static/git-scm.com/book/en/v2/ch00/_new_repo_dropdown.html +0 -1218
  215. data/spec/support/static/git-scm.com/book/en/v2/ch00/_not_center.html +0 -1218
  216. data/spec/support/static/git-scm.com/book/en/v2/ch00/_org_page.html +0 -797
  217. data/spec/support/static/git-scm.com/book/en/v2/ch00/_other_client_hooks.html +0 -876
  218. data/spec/support/static/git-scm.com/book/en/v2/ch00/_p4_git_fusion.html +0 -2656
  219. data/spec/support/static/git-scm.com/book/en/v2/ch00/_patches_from_email.html +0 -1354
  220. data/spec/support/static/git-scm.com/book/en/v2/ch00/_personal_avatar.html +0 -858
  221. data/spec/support/static/git-scm.com/book/en/v2/ch00/_plumbing_porcelain.html +0 -745
  222. data/spec/support/static/git-scm.com/book/en/v2/ch00/_pr_closed.html +0 -1502
  223. data/spec/support/static/git-scm.com/book/en/v2/ch00/_pr_discussion.html +0 -1502
  224. data/spec/support/static/git-scm.com/book/en/v2/ch00/_pr_fail.html +0 -1502
  225. data/spec/support/static/git-scm.com/book/en/v2/ch00/_pr_final.html +0 -1502
  226. data/spec/support/static/git-scm.com/book/en/v2/ch00/_pr_references.html +0 -1502
  227. data/spec/support/static/git-scm.com/book/en/v2/ch00/_pr_references_render.html +0 -1502
  228. data/spec/support/static/git-scm.com/book/en/v2/ch00/_pr_refs.html +0 -1218
  229. data/spec/support/static/git-scm.com/book/en/v2/ch00/_pre_merge_rebase_work.html +0 -1028
  230. data/spec/support/static/git-scm.com/book/en/v2/ch00/_preparing_release.html +0 -1354
  231. data/spec/support/static/git-scm.com/book/en/v2/ch00/_private_team.html +0 -1667
  232. data/spec/support/static/git-scm.com/book/en/v2/ch00/_project_over_email.html +0 -1667
  233. data/spec/support/static/git-scm.com/book/en/v2/ch00/_public_project.html +0 -1667
  234. data/spec/support/static/git-scm.com/book/en/v2/ch00/_publishing_submodules.html +0 -1864
  235. data/spec/support/static/git-scm.com/book/en/v2/ch00/_pushing_branches.html +0 -1009
  236. data/spec/support/static/git-scm.com/book/en/v2/ch00/_pushing_refspecs.html +0 -872
  237. data/spec/support/static/git-scm.com/book/en/v2/ch00/_pushing_remotes.html +0 -983
  238. data/spec/support/static/git-scm.com/book/en/v2/ch00/_rebase_cherry_pick.html +0 -1354
  239. data/spec/support/static/git-scm.com/book/en/v2/ch00/_rebase_peril.html +0 -1028
  240. data/spec/support/static/git-scm.com/book/en/v2/ch00/_rebase_rebase.html +0 -1028
  241. data/spec/support/static/git-scm.com/book/en/v2/ch00/_rebase_rebase_work.html +0 -1028
  242. data/spec/support/static/git-scm.com/book/en/v2/ch00/_rebasing.html +0 -1028
  243. data/spec/support/static/git-scm.com/book/en/v2/ch00/_refspec.html +0 -872
  244. data/spec/support/static/git-scm.com/book/en/v2/ch00/_remote_branches.html +0 -1009
  245. data/spec/support/static/git-scm.com/book/en/v2/ch00/_remote_repos.html +0 -983
  246. data/spec/support/static/git-scm.com/book/en/v2/ch00/_removing_file_every_commit.html +0 -1182
  247. data/spec/support/static/git-scm.com/book/en/v2/ch00/_removing_files.html +0 -1432
  248. data/spec/support/static/git-scm.com/book/en/v2/ch00/_removing_objects.html +0 -1086
  249. data/spec/support/static/git-scm.com/book/en/v2/ch00/_replace.html +0 -949
  250. data/spec/support/static/git-scm.com/book/en/v2/ch00/_reverse_commit.html +0 -1605
  251. data/spec/support/static/git-scm.com/book/en/v2/ch00/_revision_selection.html +0 -1178
  252. data/spec/support/static/git-scm.com/book/en/v2/ch00/_rewriting_history.html +0 -1182
  253. data/spec/support/static/git-scm.com/book/en/v2/ch00/_searching.html +0 -875
  254. data/spec/support/static/git-scm.com/book/en/v2/ch00/_service_config.html +0 -1059
  255. data/spec/support/static/git-scm.com/book/en/v2/ch00/_services_hooks.html +0 -1059
  256. data/spec/support/static/git-scm.com/book/en/v2/ch00/_setting_up_server.html +0 -870
  257. data/spec/support/static/git-scm.com/book/en/v2/ch00/_sharing_tags.html +0 -1049
  258. data/spec/support/static/git-scm.com/book/en/v2/ch00/_signing.html +0 -922
  259. data/spec/support/static/git-scm.com/book/en/v2/ch00/_signing_commits.html +0 -922
  260. data/spec/support/static/git-scm.com/book/en/v2/ch00/_squashing.html +0 -1182
  261. data/spec/support/static/git-scm.com/book/en/v2/ch00/_starting_submodules.html +0 -1864
  262. data/spec/support/static/git-scm.com/book/en/v2/ch00/_subtree_merge.html +0 -1605
  263. data/spec/support/static/git-scm.com/book/en/v2/ch00/_switching_branches.html +0 -1020
  264. data/spec/support/static/git-scm.com/book/en/v2/ch00/_tagging_releases.html +0 -1354
  265. data/spec/support/static/git-scm.com/book/en/v2/ch00/_task_list_progress.html +0 -1502
  266. data/spec/support/static/git-scm.com/book/en/v2/ch00/_team_page.html +0 -797
  267. data/spec/support/static/git-scm.com/book/en/v2/ch00/_the_index.html +0 -1236
  268. data/spec/support/static/git-scm.com/book/en/v2/ch00/_the_shortlog.html +0 -1354
  269. data/spec/support/static/git-scm.com/book/en/v2/ch00/_topic_branch.html +0 -786
  270. data/spec/support/static/git-scm.com/book/en/v2/ch00/_tracking_branches.html +0 -1009
  271. data/spec/support/static/git-scm.com/book/en/v2/ch00/_tracking_files.html +0 -1432
  272. data/spec/support/static/git-scm.com/book/en/v2/ch00/_tree_objects.html +0 -1209
  273. data/spec/support/static/git-scm.com/book/en/v2/ch00/_triple_dot.html +0 -1178
  274. data/spec/support/static/git-scm.com/book/en/v2/ch00/_undoing.html +0 -998
  275. data/spec/support/static/git-scm.com/book/en/v2/ch00/_unstaging.html +0 -998
  276. data/spec/support/static/git-scm.com/book/en/v2/ch00/_viewing_history.html +0 -1172
  277. data/spec/support/static/git-scm.com/book/en/v2/ch00/_web_hook.html +0 -1059
  278. data/spec/support/static/git-scm.com/book/en/v2/ch00/_what_is_introduced.html +0 -1354
  279. data/spec/support/static/git-scm.com/book/en/v2/ch00/ch01-getting-started.html +0 -783
  280. data/spec/support/static/git-scm.com/book/en/v2/ch00/ch02-git-basics-chapter.html +0 -816
  281. data/spec/support/static/git-scm.com/book/en/v2/ch00/ch03-git-branching.html +0 -1020
  282. data/spec/support/static/git-scm.com/book/en/v2/ch00/ch05-distributed-git.html +0 -859
  283. data/spec/support/static/git-scm.com/book/en/v2/ch00/ch06-github.html +0 -858
  284. data/spec/support/static/git-scm.com/book/en/v2/ch00/ch06-github_flow.html +0 -1502
  285. data/spec/support/static/git-scm.com/book/en/v2/ch00/ch10-git-internals.html +0 -745
  286. data/spec/support/static/git-scm.com/book/en/v2/ch00/ch_core_editor.html +0 -863
  287. data/spec/support/static/git-scm.com/book/en/v2/ch00/divergent_history.html +0 -1020
  288. data/spec/support/static/git-scm.com/book/en/v2/ch00/double_dot.html +0 -1178
  289. data/spec/support/static/git-scm.com/book/en/v2/ch00/filters_a.html +0 -1134
  290. data/spec/support/static/git-scm.com/book/en/v2/ch00/filters_b.html +0 -1134
  291. data/spec/support/static/git-scm.com/book/en/v2/ch00/limit_options.html +0 -1172
  292. data/spec/support/static/git-scm.com/book/en/v2/ch00/log_options.html +0 -1172
  293. data/spec/support/static/git-scm.com/book/en/v2/ch00/merwf_a.html +0 -1354
  294. data/spec/support/static/git-scm.com/book/en/v2/ch00/merwf_b.html +0 -1354
  295. data/spec/support/static/git-scm.com/book/en/v2/ch00/merwf_c.html +0 -1354
  296. data/spec/support/static/git-scm.com/book/en/v2/ch00/merwf_d.html +0 -1354
  297. data/spec/support/static/git-scm.com/book/en/v2/ch00/merwf_e.html +0 -1354
  298. data/spec/support/static/git-scm.com/book/en/v2/ch00/merwf_f.html +0 -1354
  299. data/spec/support/static/git-scm.com/book/en/v2/ch00/oh_my_zsh_git.html +0 -765
  300. data/spec/support/static/git-scm.com/book/en/v2/ch00/pretty_format.html +0 -1172
  301. data/spec/support/static/git-scm.com/book/en/v2/ch00/psp_b.html +0 -1667
  302. data/spec/support/static/git-scm.com/book/en/v2/ch00/rbdiag_e.html +0 -1028
  303. data/spec/support/static/git-scm.com/book/en/v2/ch00/rbdiag_g.html +0 -1028
  304. data/spec/support/static/git-scm.com/book/en/v2/ch00/rbdiag_h.html +0 -1028
  305. data/spec/support/static/git-scm.com/book/en/v2/ch00/rbdiag_i.html +0 -1028
  306. data/spec/support/static/git-scm.com/book/en/v2/ch00/rebasing-merging-example.html +0 -1028
  307. data/spec/support/static/git-scm.com/book/en/v2/ch00/ref_rerere.html +0 -983
  308. data/spec/support/static/git-scm.com/book/en/v2/ch00/ref_the_ref.html +0 -939
  309. data/spec/support/static/git-scm.com/book/en/v2/ch00/wfdiag_b.html +0 -859
  310. data/spec/support/static/git-scm.com/book/en/v2/ch00/wfdiag_c.html +0 -859
  311. data/spec/support/static/git-scm.com/book/en/v2/ch00/what_is_git_section.html +0 -857
  312. data/spec/support/static/git-scm.com/book/en/v2/images/2fa-1.png +0 -0
  313. data/spec/support/static/git-scm.com/book/en/v2/images/account-settings.png +0 -0
  314. data/spec/support/static/git-scm.com/book/en/v2/images/advance-master.png +0 -0
  315. data/spec/support/static/git-scm.com/book/en/v2/images/advance-testing.png +0 -0
  316. data/spec/support/static/git-scm.com/book/en/v2/images/areas.png +0 -0
  317. data/spec/support/static/git-scm.com/book/en/v2/images/avatar-crop.png +0 -0
  318. data/spec/support/static/git-scm.com/book/en/v2/images/basic-branching-1.png +0 -0
  319. data/spec/support/static/git-scm.com/book/en/v2/images/basic-branching-2.png +0 -0
  320. data/spec/support/static/git-scm.com/book/en/v2/images/basic-branching-3.png +0 -0
  321. data/spec/support/static/git-scm.com/book/en/v2/images/basic-branching-4.png +0 -0
  322. data/spec/support/static/git-scm.com/book/en/v2/images/basic-branching-5.png +0 -0
  323. data/spec/support/static/git-scm.com/book/en/v2/images/basic-branching-6.png +0 -0
  324. data/spec/support/static/git-scm.com/book/en/v2/images/basic-merging-1.png +0 -0
  325. data/spec/support/static/git-scm.com/book/en/v2/images/basic-merging-2.png +0 -0
  326. data/spec/support/static/git-scm.com/book/en/v2/images/basic-rebase-1.png +0 -0
  327. data/spec/support/static/git-scm.com/book/en/v2/images/basic-rebase-2.png +0 -0
  328. data/spec/support/static/git-scm.com/book/en/v2/images/basic-rebase-3.png +0 -0
  329. data/spec/support/static/git-scm.com/book/en/v2/images/basic-rebase-4.png +0 -0
  330. data/spec/support/static/git-scm.com/book/en/v2/images/benevolent-dictator.png +0 -0
  331. data/spec/support/static/git-scm.com/book/en/v2/images/blink-01-start.png +0 -0
  332. data/spec/support/static/git-scm.com/book/en/v2/images/blink-02-pr.png +0 -0
  333. data/spec/support/static/git-scm.com/book/en/v2/images/blink-03-pull-request-open.png +0 -0
  334. data/spec/support/static/git-scm.com/book/en/v2/images/blink-04-email.png +0 -0
  335. data/spec/support/static/git-scm.com/book/en/v2/images/blink-04-pr-comment.png +0 -0
  336. data/spec/support/static/git-scm.com/book/en/v2/images/blink-05-general-comment.png +0 -0
  337. data/spec/support/static/git-scm.com/book/en/v2/images/blink-06-final.png +0 -0
  338. data/spec/support/static/git-scm.com/book/en/v2/images/branch-and-history.png +0 -0
  339. data/spec/support/static/git-scm.com/book/en/v2/images/branch_widget_mac.png +0 -0
  340. data/spec/support/static/git-scm.com/book/en/v2/images/branch_widget_win.png +0 -0
  341. data/spec/support/static/git-scm.com/book/en/v2/images/centralized.png +0 -0
  342. data/spec/support/static/git-scm.com/book/en/v2/images/centralized_workflow.png +0 -0
  343. data/spec/support/static/git-scm.com/book/en/v2/images/checkout-master.png +0 -0
  344. data/spec/support/static/git-scm.com/book/en/v2/images/clean.png +0 -0
  345. data/spec/support/static/git-scm.com/book/en/v2/images/collaborators.png +0 -0
  346. data/spec/support/static/git-scm.com/book/en/v2/images/commit-and-tree.png +0 -0
  347. data/spec/support/static/git-scm.com/book/en/v2/images/commits-and-parents.png +0 -0
  348. data/spec/support/static/git-scm.com/book/en/v2/images/data-model-1.png +0 -0
  349. data/spec/support/static/git-scm.com/book/en/v2/images/data-model-2.png +0 -0
  350. data/spec/support/static/git-scm.com/book/en/v2/images/data-model-3.png +0 -0
  351. data/spec/support/static/git-scm.com/book/en/v2/images/data-model-4.png +0 -0
  352. data/spec/support/static/git-scm.com/book/en/v2/images/deltas.png +0 -0
  353. data/spec/support/static/git-scm.com/book/en/v2/images/distributed.png +0 -0
  354. data/spec/support/static/git-scm.com/book/en/v2/images/double-dot.png +0 -0
  355. data/spec/support/static/git-scm.com/book/en/v2/images/email-settings.png +0 -0
  356. data/spec/support/static/git-scm.com/book/en/v2/images/forkbutton.png +0 -0
  357. data/spec/support/static/git-scm.com/book/en/v2/images/git-bash.png +0 -0
  358. data/spec/support/static/git-scm.com/book/en/v2/images/git-diff-check.png +0 -0
  359. data/spec/support/static/git-scm.com/book/en/v2/images/git-fusion-boot.png +0 -0
  360. data/spec/support/static/git-scm.com/book/en/v2/images/git-fusion-perforce-graph.png +0 -0
  361. data/spec/support/static/git-scm.com/book/en/v2/images/git-gui.png +0 -0
  362. data/spec/support/static/git-scm.com/book/en/v2/images/git-instaweb.png +0 -0
  363. data/spec/support/static/git-scm.com/book/en/v2/images/git-osx-installer.png +0 -0
  364. data/spec/support/static/git-scm.com/book/en/v2/images/github_mac.png +0 -0
  365. data/spec/support/static/git-scm.com/book/en/v2/images/github_win.png +0 -0
  366. data/spec/support/static/git-scm.com/book/en/v2/images/gitk.png +0 -0
  367. data/spec/support/static/git-scm.com/book/en/v2/images/gitlab-groups.png +0 -0
  368. data/spec/support/static/git-scm.com/book/en/v2/images/gitlab-menu.png +0 -0
  369. data/spec/support/static/git-scm.com/book/en/v2/images/gitlab-users.png +0 -0
  370. data/spec/support/static/git-scm.com/book/en/v2/images/head-to-master.png +0 -0
  371. data/spec/support/static/git-scm.com/book/en/v2/images/head-to-testing.png +0 -0
  372. data/spec/support/static/git-scm.com/book/en/v2/images/integration-manager.png +0 -0
  373. data/spec/support/static/git-scm.com/book/en/v2/images/interesting-rebase-1.png +0 -0
  374. data/spec/support/static/git-scm.com/book/en/v2/images/interesting-rebase-2.png +0 -0
  375. data/spec/support/static/git-scm.com/book/en/v2/images/interesting-rebase-3.png +0 -0
  376. data/spec/support/static/git-scm.com/book/en/v2/images/interesting-rebase-4.png +0 -0
  377. data/spec/support/static/git-scm.com/book/en/v2/images/interesting-rebase-5.png +0 -0
  378. data/spec/support/static/git-scm.com/book/en/v2/images/jb.png +0 -0
  379. data/spec/support/static/git-scm.com/book/en/v2/images/large-merges-1.png +0 -0
  380. data/spec/support/static/git-scm.com/book/en/v2/images/large-merges-2.png +0 -0
  381. data/spec/support/static/git-scm.com/book/en/v2/images/lifecycle.png +0 -0
  382. data/spec/support/static/git-scm.com/book/en/v2/images/local.png +0 -0
  383. data/spec/support/static/git-scm.com/book/en/v2/images/lr-branches-1.png +0 -0
  384. data/spec/support/static/git-scm.com/book/en/v2/images/lr-branches-2.png +0 -0
  385. data/spec/support/static/git-scm.com/book/en/v2/images/maint-01-email.png +0 -0
  386. data/spec/support/static/git-scm.com/book/en/v2/images/maint-02-merge.png +0 -0
  387. data/spec/support/static/git-scm.com/book/en/v2/images/maint-03-email-resp.png +0 -0
  388. data/spec/support/static/git-scm.com/book/en/v2/images/maint-04-target.png +0 -0
  389. data/spec/support/static/git-scm.com/book/en/v2/images/maint-05-mentions.png +0 -0
  390. data/spec/support/static/git-scm.com/book/en/v2/images/maint-06-unsubscribe.png +0 -0
  391. data/spec/support/static/git-scm.com/book/en/v2/images/maint-07-notifications.png +0 -0
  392. data/spec/support/static/git-scm.com/book/en/v2/images/maint-08-notifications-page.png +0 -0
  393. data/spec/support/static/git-scm.com/book/en/v2/images/maint-09-contrib.png +0 -0
  394. data/spec/support/static/git-scm.com/book/en/v2/images/maint-10-default-branch.png +0 -0
  395. data/spec/support/static/git-scm.com/book/en/v2/images/maint-11-transfer.png +0 -0
  396. data/spec/support/static/git-scm.com/book/en/v2/images/managed-team-1.png +0 -0
  397. data/spec/support/static/git-scm.com/book/en/v2/images/managed-team-2.png +0 -0
  398. data/spec/support/static/git-scm.com/book/en/v2/images/managed-team-3.png +0 -0
  399. data/spec/support/static/git-scm.com/book/en/v2/images/managed-team-flow.png +0 -0
  400. data/spec/support/static/git-scm.com/book/en/v2/images/markdown-01-example.png +0 -0
  401. data/spec/support/static/git-scm.com/book/en/v2/images/markdown-02-tasks.png +0 -0
  402. data/spec/support/static/git-scm.com/book/en/v2/images/markdown-03-task-summary.png +0 -0
  403. data/spec/support/static/git-scm.com/book/en/v2/images/markdown-04-fenced-code.png +0 -0
  404. data/spec/support/static/git-scm.com/book/en/v2/images/markdown-05-quote.png +0 -0
  405. data/spec/support/static/git-scm.com/book/en/v2/images/markdown-06-emoji-complete.png +0 -0
  406. data/spec/support/static/git-scm.com/book/en/v2/images/markdown-07-emoji.png +0 -0
  407. data/spec/support/static/git-scm.com/book/en/v2/images/markdown-08-drag-drop.png +0 -0
  408. data/spec/support/static/git-scm.com/book/en/v2/images/mentions-01-syntax.png +0 -0
  409. data/spec/support/static/git-scm.com/book/en/v2/images/mentions-02-render.png +0 -0
  410. data/spec/support/static/git-scm.com/book/en/v2/images/mentions-03-closed.png +0 -0
  411. data/spec/support/static/git-scm.com/book/en/v2/images/merging-workflows-1.png +0 -0
  412. data/spec/support/static/git-scm.com/book/en/v2/images/merging-workflows-2.png +0 -0
  413. data/spec/support/static/git-scm.com/book/en/v2/images/merging-workflows-3.png +0 -0
  414. data/spec/support/static/git-scm.com/book/en/v2/images/merging-workflows-4.png +0 -0
  415. data/spec/support/static/git-scm.com/book/en/v2/images/merging-workflows-5.png +0 -0
  416. data/spec/support/static/git-scm.com/book/en/v2/images/new-repo.png +0 -0
  417. data/spec/support/static/git-scm.com/book/en/v2/images/neworg.png +0 -0
  418. data/spec/support/static/git-scm.com/book/en/v2/images/newrepo.png +0 -0
  419. data/spec/support/static/git-scm.com/book/en/v2/images/newrepoform.png +0 -0
  420. data/spec/support/static/git-scm.com/book/en/v2/images/orgs-01-page.png +0 -0
  421. data/spec/support/static/git-scm.com/book/en/v2/images/orgs-02-teams.png +0 -0
  422. data/spec/support/static/git-scm.com/book/en/v2/images/orgs-03-audit.png +0 -0
  423. data/spec/support/static/git-scm.com/book/en/v2/images/p4merge.png +0 -0
  424. data/spec/support/static/git-scm.com/book/en/v2/images/perils-of-rebasing-1.png +0 -0
  425. data/spec/support/static/git-scm.com/book/en/v2/images/perils-of-rebasing-2.png +0 -0
  426. data/spec/support/static/git-scm.com/book/en/v2/images/perils-of-rebasing-3.png +0 -0
  427. data/spec/support/static/git-scm.com/book/en/v2/images/perils-of-rebasing-4.png +0 -0
  428. data/spec/support/static/git-scm.com/book/en/v2/images/perils-of-rebasing-5.png +0 -0
  429. data/spec/support/static/git-scm.com/book/en/v2/images/posh-git.png +0 -0
  430. data/spec/support/static/git-scm.com/book/en/v2/images/pr-01-fail.png +0 -0
  431. data/spec/support/static/git-scm.com/book/en/v2/images/pr-02-merge-fix.png +0 -0
  432. data/spec/support/static/git-scm.com/book/en/v2/images/public-small-1.png +0 -0
  433. data/spec/support/static/git-scm.com/book/en/v2/images/public-small-2.png +0 -0
  434. data/spec/support/static/git-scm.com/book/en/v2/images/public-small-3.png +0 -0
  435. data/spec/support/static/git-scm.com/book/en/v2/images/rebasing-1.png +0 -0
  436. data/spec/support/static/git-scm.com/book/en/v2/images/rebasing-2.png +0 -0
  437. data/spec/support/static/git-scm.com/book/en/v2/images/remote-branches-1.png +0 -0
  438. data/spec/support/static/git-scm.com/book/en/v2/images/remote-branches-2.png +0 -0
  439. data/spec/support/static/git-scm.com/book/en/v2/images/remote-branches-3.png +0 -0
  440. data/spec/support/static/git-scm.com/book/en/v2/images/remote-branches-4.png +0 -0
  441. data/spec/support/static/git-scm.com/book/en/v2/images/remote-branches-5.png +0 -0
  442. data/spec/support/static/git-scm.com/book/en/v2/images/replace1.png +0 -0
  443. data/spec/support/static/git-scm.com/book/en/v2/images/replace2.png +0 -0
  444. data/spec/support/static/git-scm.com/book/en/v2/images/replace3.png +0 -0
  445. data/spec/support/static/git-scm.com/book/en/v2/images/replace4.png +0 -0
  446. data/spec/support/static/git-scm.com/book/en/v2/images/replace5.png +0 -0
  447. data/spec/support/static/git-scm.com/book/en/v2/images/reposettingslink.png +0 -0
  448. data/spec/support/static/git-scm.com/book/en/v2/images/rerere1.png +0 -0
  449. data/spec/support/static/git-scm.com/book/en/v2/images/rerere2.png +0 -0
  450. data/spec/support/static/git-scm.com/book/en/v2/images/rerere3.png +0 -0
  451. data/spec/support/static/git-scm.com/book/en/v2/images/reset-checkout.png +0 -0
  452. data/spec/support/static/git-scm.com/book/en/v2/images/reset-ex1.png +0 -0
  453. data/spec/support/static/git-scm.com/book/en/v2/images/reset-ex2.png +0 -0
  454. data/spec/support/static/git-scm.com/book/en/v2/images/reset-ex3.png +0 -0
  455. data/spec/support/static/git-scm.com/book/en/v2/images/reset-ex4.png +0 -0
  456. data/spec/support/static/git-scm.com/book/en/v2/images/reset-ex5.png +0 -0
  457. data/spec/support/static/git-scm.com/book/en/v2/images/reset-ex6.png +0 -0
  458. data/spec/support/static/git-scm.com/book/en/v2/images/reset-hard.png +0 -0
  459. data/spec/support/static/git-scm.com/book/en/v2/images/reset-mixed.png +0 -0
  460. data/spec/support/static/git-scm.com/book/en/v2/images/reset-path1.png +0 -0
  461. data/spec/support/static/git-scm.com/book/en/v2/images/reset-path2.png +0 -0
  462. data/spec/support/static/git-scm.com/book/en/v2/images/reset-path3.png +0 -0
  463. data/spec/support/static/git-scm.com/book/en/v2/images/reset-soft.png +0 -0
  464. data/spec/support/static/git-scm.com/book/en/v2/images/reset-squash-r1.png +0 -0
  465. data/spec/support/static/git-scm.com/book/en/v2/images/reset-squash-r2.png +0 -0
  466. data/spec/support/static/git-scm.com/book/en/v2/images/reset-squash-r3.png +0 -0
  467. data/spec/support/static/git-scm.com/book/en/v2/images/reset-start.png +0 -0
  468. data/spec/support/static/git-scm.com/book/en/v2/images/reset-workflow.png +0 -0
  469. data/spec/support/static/git-scm.com/book/en/v2/images/scripting-01-services.png +0 -0
  470. data/spec/support/static/git-scm.com/book/en/v2/images/scripting-02-email-service.png +0 -0
  471. data/spec/support/static/git-scm.com/book/en/v2/images/scripting-03-webhook.png +0 -0
  472. data/spec/support/static/git-scm.com/book/en/v2/images/scripting-04-webhook-debug.png +0 -0
  473. data/spec/support/static/git-scm.com/book/en/v2/images/scripting-05-access-token.png +0 -0
  474. data/spec/support/static/git-scm.com/book/en/v2/images/scripting-06-comment.png +0 -0
  475. data/spec/support/static/git-scm.com/book/en/v2/images/scripting-07-status.png +0 -0
  476. data/spec/support/static/git-scm.com/book/en/v2/images/signup.png +0 -0
  477. data/spec/support/static/git-scm.com/book/en/v2/images/small-team-1.png +0 -0
  478. data/spec/support/static/git-scm.com/book/en/v2/images/small-team-2.png +0 -0
  479. data/spec/support/static/git-scm.com/book/en/v2/images/small-team-3.png +0 -0
  480. data/spec/support/static/git-scm.com/book/en/v2/images/small-team-4.png +0 -0
  481. data/spec/support/static/git-scm.com/book/en/v2/images/small-team-5.png +0 -0
  482. data/spec/support/static/git-scm.com/book/en/v2/images/small-team-6.png +0 -0
  483. data/spec/support/static/git-scm.com/book/en/v2/images/small-team-7.png +0 -0
  484. data/spec/support/static/git-scm.com/book/en/v2/images/small-team-flow.png +0 -0
  485. data/spec/support/static/git-scm.com/book/en/v2/images/smudge.png +0 -0
  486. data/spec/support/static/git-scm.com/book/en/v2/images/snapshots.png +0 -0
  487. data/spec/support/static/git-scm.com/book/en/v2/images/ssh-keys.png +0 -0
  488. data/spec/support/static/git-scm.com/book/en/v2/images/topic-branches-1.png +0 -0
  489. data/spec/support/static/git-scm.com/book/en/v2/images/topic-branches-2.png +0 -0
  490. data/spec/support/static/git-scm.com/book/en/v2/images/two-branches.png +0 -0
  491. data/spec/support/static/git-scm.com/book/en/v2/images/undomerge-reset.png +0 -0
  492. data/spec/support/static/git-scm.com/book/en/v2/images/undomerge-revert.png +0 -0
  493. data/spec/support/static/git-scm.com/book/en/v2/images/undomerge-revert2.png +0 -0
  494. data/spec/support/static/git-scm.com/book/en/v2/images/undomerge-revert3.png +0 -0
  495. data/spec/support/static/git-scm.com/book/en/v2/images/undomerge-start.png +0 -0
  496. data/spec/support/static/git-scm.com/book/en/v2/images/your-profile.png +0 -0
  497. data/spec/support/static/git-scm.com/book/en/v2/images/zsh-oh-my.png +0 -0
  498. data/spec/support/static/git-scm.com/book/en/v2/images/zsh-prompt.png +0 -0
  499. data/spec/support/static/git-scm.com/book/en/v2.html +0 -688
  500. data/spec/support/static/git-scm.com/favicon.ico +0 -0
  501. data/spec/support/static/git-scm.com/images/bg/body.jpg +0 -0
  502. data/spec/support/static/git-scm.com/images/bg/isometric-grid.png +0 -0
  503. data/spec/support/static/git-scm.com/images/bg/isometric-grid@2x.png +0 -0
  504. data/spec/support/static/git-scm.com/images/bg/search-header.jpg +0 -0
  505. data/spec/support/static/git-scm.com/images/company-project-logos/android.png +0 -0
  506. data/spec/support/static/git-scm.com/images/company-project-logos/android@2x.png +0 -0
  507. data/spec/support/static/git-scm.com/images/company-project-logos/eclipse.png +0 -0
  508. data/spec/support/static/git-scm.com/images/company-project-logos/eclipse@2x.png +0 -0
  509. data/spec/support/static/git-scm.com/images/company-project-logos/facebook.png +0 -0
  510. data/spec/support/static/git-scm.com/images/company-project-logos/facebook@2x.png +0 -0
  511. data/spec/support/static/git-scm.com/images/company-project-logos/gnome.png +0 -0
  512. data/spec/support/static/git-scm.com/images/company-project-logos/gnome@2x.png +0 -0
  513. data/spec/support/static/git-scm.com/images/company-project-logos/google.png +0 -0
  514. data/spec/support/static/git-scm.com/images/company-project-logos/google@2x.png +0 -0
  515. data/spec/support/static/git-scm.com/images/company-project-logos/kde.png +0 -0
  516. data/spec/support/static/git-scm.com/images/company-project-logos/kde@2x.png +0 -0
  517. data/spec/support/static/git-scm.com/images/company-project-logos/linked-in.png +0 -0
  518. data/spec/support/static/git-scm.com/images/company-project-logos/linked-in@2x.png +0 -0
  519. data/spec/support/static/git-scm.com/images/company-project-logos/linux.png +0 -0
  520. data/spec/support/static/git-scm.com/images/company-project-logos/linux@2x.png +0 -0
  521. data/spec/support/static/git-scm.com/images/company-project-logos/microsoft.png +0 -0
  522. data/spec/support/static/git-scm.com/images/company-project-logos/microsoft@2x.png +0 -0
  523. data/spec/support/static/git-scm.com/images/company-project-logos/netflix.png +0 -0
  524. data/spec/support/static/git-scm.com/images/company-project-logos/netflix@2x.png +0 -0
  525. data/spec/support/static/git-scm.com/images/company-project-logos/perl.png +0 -0
  526. data/spec/support/static/git-scm.com/images/company-project-logos/perl@2x.png +0 -0
  527. data/spec/support/static/git-scm.com/images/company-project-logos/postgresql.png +0 -0
  528. data/spec/support/static/git-scm.com/images/company-project-logos/postgresql@2x.png +0 -0
  529. data/spec/support/static/git-scm.com/images/company-project-logos/qt.png +0 -0
  530. data/spec/support/static/git-scm.com/images/company-project-logos/qt@2x.png +0 -0
  531. data/spec/support/static/git-scm.com/images/company-project-logos/rails.png +0 -0
  532. data/spec/support/static/git-scm.com/images/company-project-logos/rails@2x.png +0 -0
  533. data/spec/support/static/git-scm.com/images/company-project-logos/twitter.png +0 -0
  534. data/spec/support/static/git-scm.com/images/company-project-logos/twitter@2x.png +0 -0
  535. data/spec/support/static/git-scm.com/images/company-project-logos/x.png +0 -0
  536. data/spec/support/static/git-scm.com/images/company-project-logos/x@2x.png +0 -0
  537. data/spec/support/static/git-scm.com/images/epub.png +0 -0
  538. data/spec/support/static/git-scm.com/images/icons/admin-sm.png +0 -0
  539. data/spec/support/static/git-scm.com/images/icons/admin-sm@2x.png +0 -0
  540. data/spec/support/static/git-scm.com/images/icons/apple.png +0 -0
  541. data/spec/support/static/git-scm.com/images/icons/apple@2x.png +0 -0
  542. data/spec/support/static/git-scm.com/images/icons/book.png +0 -0
  543. data/spec/support/static/git-scm.com/images/icons/book@2x.png +0 -0
  544. data/spec/support/static/git-scm.com/images/icons/box.png +0 -0
  545. data/spec/support/static/git-scm.com/images/icons/box@2x.png +0 -0
  546. data/spec/support/static/git-scm.com/images/icons/branch-sm.png +0 -0
  547. data/spec/support/static/git-scm.com/images/icons/branch-sm@2x.png +0 -0
  548. data/spec/support/static/git-scm.com/images/icons/camera-sm.png +0 -0
  549. data/spec/support/static/git-scm.com/images/icons/camera-sm@2x.png +0 -0
  550. data/spec/support/static/git-scm.com/images/icons/chevron-up@2x.png +0 -0
  551. data/spec/support/static/git-scm.com/images/icons/code.png +0 -0
  552. data/spec/support/static/git-scm.com/images/icons/code@2x.png +0 -0
  553. data/spec/support/static/git-scm.com/images/icons/debugging-sm.png +0 -0
  554. data/spec/support/static/git-scm.com/images/icons/debugging-sm@2x.png +0 -0
  555. data/spec/support/static/git-scm.com/images/icons/document.png +0 -0
  556. data/spec/support/static/git-scm.com/images/icons/document@2x.png +0 -0
  557. data/spec/support/static/git-scm.com/images/icons/download.png +0 -0
  558. data/spec/support/static/git-scm.com/images/icons/email-sm.png +0 -0
  559. data/spec/support/static/git-scm.com/images/icons/email-sm@2x.png +0 -0
  560. data/spec/support/static/git-scm.com/images/icons/external-sm.png +0 -0
  561. data/spec/support/static/git-scm.com/images/icons/external-sm@2x.png +0 -0
  562. data/spec/support/static/git-scm.com/images/icons/gui.png +0 -0
  563. data/spec/support/static/git-scm.com/images/icons/gui@2x.png +0 -0
  564. data/spec/support/static/git-scm.com/images/icons/info.png +0 -0
  565. data/spec/support/static/git-scm.com/images/icons/info@2x.png +0 -0
  566. data/spec/support/static/git-scm.com/images/icons/inspection-sm.png +0 -0
  567. data/spec/support/static/git-scm.com/images/icons/inspection-sm@2x.png +0 -0
  568. data/spec/support/static/git-scm.com/images/icons/linux.png +0 -0
  569. data/spec/support/static/git-scm.com/images/icons/linux@2x.png +0 -0
  570. data/spec/support/static/git-scm.com/images/icons/nav-circles.png +0 -0
  571. data/spec/support/static/git-scm.com/images/icons/nav-circles@2x.png +0 -0
  572. data/spec/support/static/git-scm.com/images/icons/patching-sm.png +0 -0
  573. data/spec/support/static/git-scm.com/images/icons/patching-sm@2x.png +0 -0
  574. data/spec/support/static/git-scm.com/images/icons/plumbing-sm.png +0 -0
  575. data/spec/support/static/git-scm.com/images/icons/plumbing-sm@2x.png +0 -0
  576. data/spec/support/static/git-scm.com/images/icons/projects-sm.png +0 -0
  577. data/spec/support/static/git-scm.com/images/icons/projects-sm@2x.png +0 -0
  578. data/spec/support/static/git-scm.com/images/icons/search.png +0 -0
  579. data/spec/support/static/git-scm.com/images/icons/search@2x.png +0 -0
  580. data/spec/support/static/git-scm.com/images/icons/server-admin-sm.png +0 -0
  581. data/spec/support/static/git-scm.com/images/icons/server-admin-sm@2x.png +0 -0
  582. data/spec/support/static/git-scm.com/images/icons/setup-sm.png +0 -0
  583. data/spec/support/static/git-scm.com/images/icons/setup-sm@2x.png +0 -0
  584. data/spec/support/static/git-scm.com/images/icons/sharing-sm.png +0 -0
  585. data/spec/support/static/git-scm.com/images/icons/sharing-sm@2x.png +0 -0
  586. data/spec/support/static/git-scm.com/images/icons/sidebar.png +0 -0
  587. data/spec/support/static/git-scm.com/images/icons/sidebar@2x.png +0 -0
  588. data/spec/support/static/git-scm.com/images/icons/source-code.png +0 -0
  589. data/spec/support/static/git-scm.com/images/icons/source-code@2x.png +0 -0
  590. data/spec/support/static/git-scm.com/images/icons/windows.png +0 -0
  591. data/spec/support/static/git-scm.com/images/icons/windows@2x.png +0 -0
  592. data/spec/support/static/git-scm.com/images/logo@2x.png +0 -0
  593. data/spec/support/static/git-scm.com/images/mobi.png +0 -0
  594. data/spec/support/static/git-scm.com/images/monitor-default.png +0 -0
  595. data/spec/support/static/git-scm.com/images/monitor-default@2x.png +0 -0
  596. data/spec/support/static/git-scm.com/images/monitor-linux.png +0 -0
  597. data/spec/support/static/git-scm.com/images/monitor-linux@2x.png +0 -0
  598. data/spec/support/static/git-scm.com/images/monitor-mac.png +0 -0
  599. data/spec/support/static/git-scm.com/images/monitor-mac@2x.png +0 -0
  600. data/spec/support/static/git-scm.com/images/monitor-windows.png +0 -0
  601. data/spec/support/static/git-scm.com/images/monitor-windows@2x.png +0 -0
  602. data/spec/support/static/git-scm.com/images/pdf.png +0 -0
  603. data/spec/support/static/git-scm.com/images/progit2.png +0 -0
  604. data/spec/support/static/git-scm.com/images/sidebar-divider.png +0 -0
  605. data/spec/support/static/git-scm.com/images/sidebar-divider@2x.png +0 -0
  606. data/spec/support/static/git-scm.com/robots.txt +0 -0
  607. data/spec/support/static/graph/details/a.html +0 -10
  608. data/spec/support/static/graph/details/b.html +0 -10
  609. data/spec/support/static/graph/index.html +0 -20
  610. data/spec/support/static/links/links.html +0 -28
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 677b57fadbc7e01a8adfbc5c2280dfe81aa0de2fce3b778281acc33d42a9a8f3
4
- data.tar.gz: 22c93784493e7a551c19c1f070defa7de8a99d14e8ee740cf866d62dbb9542b9
3
+ metadata.gz: 102ad4ff568c6a84fb710cbb46f3ca4839ce6a319265d33953f5ed601038d95d
4
+ data.tar.gz: 22f2f2460eb814a5534567cfc4222663d5819739df76e8c07bd0e5add4de15ec
5
5
  SHA512:
6
- metadata.gz: 2c232c7760c3914f56b742ddbcdd7f9719e98a02f0019ffc14ec9f883499f63aaa9a92afb95c241b4d79a8369f8fb53727c9d7d5d694b79786a6d90753a9bc3b
7
- data.tar.gz: 680a7e146e41d3eaf9c8bc48362a9ae8d59dd94baf26b436ee14e47329cfd924c83299aef5f59f10c2e1227f8e08170984885341e79222345ab9bbb460da0f1c
6
+ metadata.gz: 7c3c4780264a54b3ffc3b885027affb00d041c7d0d828435987d71d19cdaba03d69a03dda645901abfa59ab8f5b4f702dd85722fec87efb36a08d304a903296b
7
+ data.tar.gz: e05ab817b1125ebc8b644b79ec63e18fce3566ffdf4508e6409d5e8669a060b0bbd88e30a782db7f6abc9555198e1919fbb0feda4d9b75aba8f5b8823592c294
@@ -13,8 +13,6 @@ jobs:
13
13
 
14
14
  - run: docker compose exec -T wayfarer git config --global --add safe.directory /opt/app
15
15
 
16
- - run: git status
17
-
18
16
  - name: Release gem
19
17
  env:
20
18
  GIT_AUTHOR_NAME: Dominic Bauer
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- wayfarer (0.4.8)
4
+ wayfarer (0.4.9)
5
5
  activejob (>= 7.1)
6
6
  addressable (~> 2.8)
7
7
  capybara (~> 3.4)
@@ -1,9 +1,11 @@
1
1
  # User agent API
2
2
 
3
- Wayfarer retrieves web pages with user agents. There are two types of user
4
- agents: __stateful__ browsers which carry state and follow redirects implicitly
5
- as they navigate to a URL, and __stateless__ HTTP clients, which handle
6
- redirects explicitly.
3
+ Wayfarer retrieves URL contents with user agents. It supports two types of user
4
+ agents:
5
+
6
+ * __stateless__ HTTP clients which handle redirects explicitly.
7
+ * __stateful__ browsers which carry state and follow redirects implicitly
8
+ as they navigate to a URL
7
9
 
8
10
  | | Stateless adapters | Stateful adapters |
9
11
  |-------------------|--------------------|-------------------|
@@ -12,151 +14,156 @@ redirects explicitly.
12
14
 
13
15
  Because spawning browser processes or instantiating HTTP clients is expensive,
14
16
  Wayfarer keeps user agents in a pool and reuses them across jobs. This means
15
- that browser state carries over between jobs, as a job checks out a previous
16
- job's user agent. Only on certain irrecoverable errors are individual user agents
17
+ that browser state carries over between jobs, as each job checks out a previous
18
+ job's user agent. When exceptions are raised, you must [handle them](/guides/jobs/#handling-errors).
19
+
20
+ Only on certain irrecoverable errors are individual user agents
17
21
  destroyed and recreated. For example when a browser process crashes, it is
18
22
  replaced with a fresh browser process.
19
23
 
20
- ## Base interface for custom user agents
24
+ ## Implementing the user agent interfaces
21
25
 
22
26
  You implement both stateful and stateless agents by including the
23
- `Wayfarer::Networking::Strategy` module and defining callback methods. The
24
- interfaces for stateful and stateless share the following base methods:
27
+ `Wayfarer::Networking::Strategy` module and defining callback methods:
25
28
 
26
29
  ```mermaid
27
30
  classDiagram
28
- class Square~Shape~{
29
- int id
30
- List~int~ position
31
- setPoints(List~int~ points)
32
- getPoints() List~int~
31
+ class BaseAgent {
32
+ <<Interface>>
33
+ +#create()*
34
+ +#destroy(instance)*
35
+ +::renew_on()$
36
+ }
37
+
38
+ class StatefulAgent {
39
+ <<Interface>>
40
+ +#navigate(instance, url)*
41
+ +#live(instance)*
33
42
  }
34
43
 
35
- Square : -List~string~ messages
36
- Square : +setMessages(List~string~ messages)
37
- Square : +getMessages() List~string~
38
- Square : +getDistanceMatrix() List~List~int~~
44
+ class StatelessAgent {
45
+ <<Interface>>
46
+ +#fetch(instance, url)*
47
+ }
48
+
49
+ BaseAgent |>.. StatefulAgent : implements
50
+ BaseAgent |>.. StatelessAgent : implements
39
51
  ```
40
52
 
41
- * `#create` (__required__): Called when a new instance (browser process or HTTP client) is
42
- needed.
43
- * `#destroy(instance)` (optional): Called when an instance should be destroyed. Browser
44
- processes should be quit, and HTTP clients should be freed.
45
- * `#renew_on` (optional): Returns a list of exception classes upon which the existing
46
- instance gets destroyed and replaced with a newly created one.
53
+ Every user agent implementation must provide the `#create` instance callback
54
+ which returns an initialized user agent. Typically, the optional
55
+ `#destroy(instance)` instance callback is also implemented to free resources
56
+ of an existing user agent.
47
57
 
48
- ## Stateless interface
58
+ Also a class method `::renew_on` can be defined which returns an array of
59
+ exception classes upon which an instance of the user agent should get recreated
60
+ (destroy-and-create).
49
61
 
50
- The stateless interface indicate HTTP 3xx redirect responses explicitly. This is how
51
- Wayfarer provides redirect handling out of the box, as there is a configurable limit
52
- on the number of retries to follow.
62
+ ### Stateless interface
53
63
 
54
- In addition to the base interface, stateless user agents implement `#fetch`
64
+ In addition to the base interface, stateless user agents implement `#fetch(instance, url)`
55
65
  which fetches [pages](../pages) or indicates redirects:
56
66
 
57
- * `#fetch(instance, url)` (__required__): Called to retrieve a URL. Responses with a
67
+ * `#create()` __(required)__
68
+ * `#fetch(instance, url)` __(required)__: Called to retrieve a URL. Responses with a
58
69
  3xx status code must indicate the redirect URL by returning `redirect(url)`, since Wayfarer
59
70
  deals with redirects on your behalf to avoid redirect loops. All other status
60
71
  codes, including 4xx and 5xx, are considered successful and are indicated by calling
61
72
  `success(url:, body:, status_code:, headers:)`.
73
+ * `#destroy(instance)` (optional)
74
+ * `::renew_on` (optional)
62
75
 
63
- ## Stateful interface
76
+ The stateless interface indicate HTTP 3xx redirect responses explicitly. This is how
77
+ Wayfarer provides redirect handling out of the box, as there is a configurable limit
78
+ on the number of retries to follow.
64
79
 
65
- In addition to the base interface, stateful user agents implement two additional
66
- methods:
80
+ !!! info "`redirect(url)` enqueues a task for the URL and stops processing the current task."
67
81
 
68
- * `#navigate(instance, url)` (__required__): Navigates the user agent to the given URL.
69
- Stateful user agents follow redirects implicitly.
70
- * `#live(instance) -> Wayfarer::Page` (__required__): Turns the current user agent state
71
- into a [page](../pages).
82
+ !!! info "Pages with HTTP error status codes get routed"
72
83
 
73
- ## Recreating user agents on error with `#renew_on`
84
+ If a HTTP request to a URL results in an error status code (for example, 404),
85
+ page retrieval is considered successful. This allows job actions to record
86
+ such data.
74
87
 
75
- Agents can optionally implement `#renew_on` to get themselves rereated on
76
- certain errors.
88
+ ### Stateful interface
77
89
 
78
- If `#fetch` or `#navigate` raise an exception and the exception class is listed
79
- in `#renew_on`, the instance is destroyed and recreated.
90
+ In addition to the base interface, stateful user agents implement two additional
91
+ instance callbacks:
80
92
 
81
- * `#renew_on` (optional): A list of exception classes upon which the existing instance gets
82
- destroyed and replaced with a newly created one.
93
+ * `#create()` __(required)__
94
+ * `#navigate(instance, url)` __(required)__: Navigates the user agent to the given URL.
95
+ * `#live(instance)` __(required)__: Turns the current user agent state
96
+ into a [page](../pages) by calling `success(url:, body:, status_code:, headers:)`.
97
+ * `#destroy(instance)` (optional)
98
+ * `::renew_on` (optional)
83
99
 
84
100
  ## Example implementations
85
101
 
86
- === "Stateful"
102
+ === "Stateless"
87
103
 
88
104
  ```ruby
89
- class StatefulAgent
105
+ class StatelessAgent
90
106
  include Wayfarer::Networking::Strategy
91
107
 
92
- # Required methods
93
-
94
- def create
95
- MyBrowser.new
108
+ def self.renew_on # optional
109
+ [MyIrrecoverableError]
96
110
  end
97
111
 
98
- def navigate(browser, url)
99
- browser.goto(url)
112
+ def create # required
113
+ MyClient.new
100
114
  end
101
115
 
102
- def live(browser)
103
- success(url: browser.url,
104
- body: browser.body,
105
- status_code: browser.status_code,
106
- headers: browser.headers)
107
- end
116
+ def fetch(client, url) # required
117
+ response = client.get(url)
108
118
 
109
- # Optional methods
119
+ return redirect(response.redirect_url) if response.redirect?
110
120
 
111
- def destroy(browser)
112
- browser.quit
121
+ success(url: url,
122
+ body: response.body,
123
+ status_code: response.status_code,
124
+ headers: response.headers)
113
125
  end
114
126
 
115
- def renew_on
116
- [MyBrowser::IrrecoverableError]
127
+ def destroy(client) # optional
128
+ client.close
117
129
  end
118
130
  end
119
131
  ```
120
132
 
121
- === "Stateless"
133
+ === "Stateful"
122
134
 
123
135
  ```ruby
124
- class StatelessAgent
136
+ class StatefulAgent
125
137
  include Wayfarer::Networking::Strategy
126
138
 
127
- # Required methods
128
-
129
- def create
130
- MyClient.new
139
+ def self.renew_on # optional
140
+ [MyIrrecoverableError]
131
141
  end
132
142
 
133
- def fetch(client, url)
134
- response = client.get(url)
135
-
136
- return redirect(response.redirect_url) if response.redirect?
137
-
138
- success(url: url,
139
- body: response.body,
140
- status_code: response.status_code,
141
- headers: response.headers)
143
+ def create # required
144
+ MyBrowser.new
142
145
  end
143
146
 
144
- # Optional methods
147
+ def navigate(browser, url) # required
148
+ browser.goto(url)
149
+ end
145
150
 
146
- def destroy(client)
147
- client.close
151
+ def live(browser) # required
152
+ success(url: browser.url,
153
+ body: browser.body,
154
+ status_code: browser.status_code,
155
+ headers: browser.headers)
148
156
  end
149
157
 
150
- def renew_on # optional
151
- [MyClient::IrrecoverableError]
158
+ def destroy(browser) # optional
159
+ browser.quit
152
160
  end
153
161
  end
154
162
  ```
155
163
 
156
-
157
- Register and use the strategy:
164
+ Register and use the agent:
158
165
 
159
166
  ```ruby
160
- Wayfarer::Networking::Pool.registry[:my_agent] = MyAgent.new
167
+ Wayfarer.config[:network][:agents][:my_agent] = MyAgent.new
161
168
  Wayfarer.config[:network][:agent] = :my_agent
162
169
  ```
@@ -6,7 +6,7 @@ also alongside automated browsers.
6
6
  ## Ad-hoc GET requests
7
7
 
8
8
  When automating browsers, it can be useful to additionally retrieve another page
9
- over plain HTTP. Jobs can fetch URLs to [pages](/pages) with `#http`:
9
+ or even the current page over plain HTTP. Jobs can fetch URLs to [pages](/pages) with `#http`:
10
10
 
11
11
  ```ruby
12
12
  class DummyJob < Wayfarer::Base
@@ -9,7 +9,7 @@ Actions are instance methods denoted by symbols, or [handlers](/guides/handlers)
9
9
  By default, Wayfarer [applies some transformations to each URL](../tasks/#url-normalization) to bring it
10
10
  into a canonical form. Routing happens based on this canonical form.
11
11
 
12
- You can always access a task's raw string as it was enqueued with `task.batch`.
12
+ You can always access a task's raw string as it was enqueued with `task.url`.
13
13
 
14
14
  A job's route declarations equate to a predicate tree.
15
15
  When a URL is routed, the predicate tree is searched depth-first. If a
@@ -12,10 +12,6 @@ module Wayfarer
12
12
 
13
13
  Module.new
14
14
  end
15
-
16
- def lazy
17
- Wayfarer::Middleware::Lazy.new(self)
18
- end
19
15
  end
20
16
  end
21
17
  end
@@ -18,7 +18,7 @@ module Wayfarer
18
18
 
19
19
  class_methods do
20
20
  def use(middleware)
21
- chain.push(middleware.lazy)
21
+ chain.push(middleware.new)
22
22
  api(middleware)
23
23
  end
24
24
 
@@ -36,7 +36,7 @@ module Wayfarer
36
36
 
37
37
  def supervise
38
38
  yield
39
- rescue *strategy.renew_on, *Wayfarer.config[:network][:renew_on] => e
39
+ rescue *strategy.class.renew_on, *Wayfarer.config[:network][:renew_on] => e
40
40
  renew # may raise
41
41
  ensure
42
42
  # If renewing raises, re-raise the originally caught exception
@@ -5,7 +5,7 @@ module Wayfarer
5
5
  class Ferrum
6
6
  include Strategy
7
7
 
8
- def renew_on
8
+ def self.renew_on
9
9
  [::Ferrum::DeadBrowserError]
10
10
  end
11
11
 
@@ -10,14 +10,6 @@ module Wayfarer
10
10
  instance_accessor: false,
11
11
  instance_predicate: false
12
12
 
13
- class_attribute :registry,
14
- default: { http: HTTP,
15
- ferrum: Ferrum,
16
- selenium: Selenium,
17
- capybara: Capybara },
18
- instance_accessor: false,
19
- instance_predicate: false
20
-
21
13
  attr_reader :pool
22
14
 
23
15
  def initialize
@@ -43,7 +35,9 @@ module Wayfarer
43
35
  end
44
36
 
45
37
  def strategy
46
- self.class.registry[Wayfarer.config.dig(:network, :agent)].new
38
+ Wayfarer.config.dig(:network, :agent).then do |agent|
39
+ Wayfarer.config.dig(:network, :agents).fetch(agent).new
40
+ end
47
41
  end
48
42
  end
49
43
  end
@@ -3,8 +3,12 @@
3
3
  module Wayfarer
4
4
  module Networking
5
5
  module Strategy
6
- def renew_on
7
- []
6
+ extend ActiveSupport::Concern
7
+
8
+ class_methods do
9
+ def renew_on
10
+ []
11
+ end
8
12
  end
9
13
 
10
14
  def fetch(instance, url)
@@ -12,7 +12,7 @@ module Wayfarer
12
12
 
13
13
  # @!visibility private
14
14
  def parse(body, content_type = FALLBACK_CONTENT_TYPE)
15
- parser, args = Wayfarer.config.dig(:parsing, :registry, content_type)
15
+ parser, args = Wayfarer.config.dig(:parsing, :content_types, content_type)
16
16
  return unless parser
17
17
 
18
18
  parser.parse(body, *args)
data/lib/wayfarer.rb CHANGED
@@ -9,8 +9,7 @@ require "uri"
9
9
  require "yaml"
10
10
 
11
11
  require "active_job"
12
- require "active_support/core_ext/array/wrap"
13
- require "active_support/core_ext/object/deep_dup"
12
+ require "active_support/all"
14
13
  require "capybara"
15
14
  require "connection_pool"
16
15
  require "ferrum"
@@ -42,7 +41,7 @@ module Wayfarer
42
41
  module VERSION
43
42
  MAJOR = 0
44
43
  MINOR = 4
45
- TINY = 8
44
+ TINY = 9
46
45
  STRING = [MAJOR, MINOR, TINY].join(".")
47
46
  end
48
47
 
@@ -53,6 +52,12 @@ module Wayfarer
53
52
  },
54
53
  network: {
55
54
  agent: :http,
55
+ agents: {
56
+ http: Wayfarer::Networking::HTTP,
57
+ ferrum: Wayfarer::Networking::Ferrum,
58
+ selenium: Wayfarer::Networking::Selenium,
59
+ capybara: Wayfarer::Networking::Capybara
60
+ },
56
61
  pool: {
57
62
  size: 1,
58
63
  timeout: 10
@@ -61,7 +66,7 @@ module Wayfarer
61
66
  renew_on: []
62
67
  },
63
68
  parsing: {
64
- registry: {
69
+ content_types: {
65
70
  "application/json" => Wayfarer::Parsing::JSON,
66
71
  "text/html" => [Wayfarer::Parsing::XML, :html],
67
72
  "application/xml" => [Wayfarer::Parsing::XML, :xml]
data/rake/release.rake CHANGED
@@ -12,12 +12,6 @@ namespace :release do
12
12
 
13
13
  raise "Gem version #{gem_version} deviates from library version #{lib_version}" unless gem_version == lib_version
14
14
  end
15
-
16
- task :guard_debug do
17
- sh "git diff --exit-code"
18
- sh "git diff-index --quiet --cached HEAD"
19
- end
20
15
  end
21
16
 
22
17
  Rake::Task[:"release:rubygem_push"].enhance(%i[release:guard_versions])
23
- Rake::Task[:"release:guard_clean"].enhance(%i[release:guard_debug])
@@ -8,7 +8,7 @@ describe "Pages", :redis do
8
8
  mock_handler! :dummy_handler
9
9
  end
10
10
 
11
- let(:url) { test_app_path("git-scm.com/book/en/v2.html") }
11
+ let(:url) { test_app_path("finders.html") }
12
12
 
13
13
  shared_examples "executes" do
14
14
  specify do
@@ -29,14 +29,14 @@ describe "Pages", :redis do
29
29
  route.host test_app_host, to: :index
30
30
 
31
31
  def index
32
- expect(page.url).to eq(test_app_path("git-scm.com/book/en/v2.html"))
32
+ expect(page.url).to eq(test_app_path("finders.html"))
33
33
  expect(page.status_code).to be(200)
34
34
  expect(page.body).not_to be_empty
35
35
  expect(page.headers.count).to be(9)
36
36
 
37
- expect(page.meta.links.all.count).to be(157)
38
- expect(page.meta.links.internal.count).to be(102)
39
- expect(page.meta.links.external.count).to be(55)
37
+ expect(page.meta.links.all.count).to be(6)
38
+ expect(page.meta.links.internal.count).to be(3)
39
+ expect(page.meta.links.external.count).to be(3)
40
40
  end
41
41
  end
42
42
  end
@@ -55,14 +55,14 @@ describe "Pages", :redis do
55
55
  route.to :index
56
56
 
57
57
  def index
58
- expect(page.url).to eq(test_app_path("git-scm.com/book/en/v2.html"))
58
+ expect(page.url).to eq(test_app_path("finders.html"))
59
59
  expect(page.status_code).to be(200)
60
60
  expect(page.body).not_to be_empty
61
61
  expect(page.headers.count).to be(9)
62
62
 
63
- expect(page.meta.links.all.count).to be(157)
64
- expect(page.meta.links.internal.count).to be(102)
65
- expect(page.meta.links.external.count).to be(55)
63
+ expect(page.meta.links.all.count).to be(6)
64
+ expect(page.meta.links.internal.count).to be(3)
65
+ expect(page.meta.links.external.count).to be(3)
66
66
  end
67
67
  end
68
68
 
@@ -72,8 +72,9 @@ describe "Response body parsing", :redis do
72
72
  end
73
73
 
74
74
  before do
75
- Wayfarer.config[:parsing][:registry]["foo/bar"] = parser
76
- Wayfarer.config[:parsing][:registry]["bar/qux"] = [parser_with_options, :ok]
75
+ Wayfarer.config[:parsing][:content_types]["foo/bar"] = parser
76
+ Wayfarer.config[:parsing][:content_types]["bar/qux"] = [parser_with_options, :ok]
77
+
77
78
  DummyJob.class_eval do
78
79
  route.to :index
79
80
 
@@ -3,7 +3,7 @@
3
3
  require "spec_helpers"
4
4
 
5
5
  describe "Staging", :redis do
6
- let(:url) { test_app_path("git-scm.com/book/en/v2.html") }
6
+ let(:url) { test_app_path("finders.html") }
7
7
 
8
8
  before do
9
9
  stub_const("DummyJob", Class.new(ActiveJob::Base).include(Wayfarer::Base))
@@ -27,7 +27,7 @@ describe "Staging", :redis do
27
27
  expect {
28
28
  DummyJob.crawl(url)
29
29
  perform_enqueued_jobs
30
- }.to change(enqueued_jobs, :size).by(157)
30
+ }.to change(enqueued_jobs, :size).by(6)
31
31
  end
32
32
  end
33
33
 
@@ -52,7 +52,7 @@ describe "Staging", :redis do
52
52
  expect {
53
53
  DummyJob.crawl(url)
54
54
  perform_enqueued_jobs
55
- }.to change(enqueued_jobs, :size).by(157)
55
+ }.to change(enqueued_jobs, :size).by(6)
56
56
  end
57
57
  end
58
58
  end
@@ -16,16 +16,15 @@ describe Wayfarer::Middleware::Controller do
16
16
  end
17
17
 
18
18
  describe "::use" do
19
- it "adds middleware" do
19
+ specify do
20
20
  expect {
21
21
  controller.use(middleware)
22
22
  }.to change { controller.chain.middlewares.count }.by(1)
23
23
  end
24
24
 
25
- it "adds lazy middleware" do
25
+ specify :aggregate_failures do
26
26
  controller.use(middleware)
27
- expect(controller.chain.middlewares.last).to be_a(Wayfarer::Middleware::Lazy)
28
- expect(controller.chain.middlewares.last.klass).to be(middleware)
27
+ expect(controller.chain.middlewares.last).to be_a(middleware)
29
28
  expect_any_instance_of(middleware).to receive(:call).with(task) # rubocop:disable RSpec/AnyInstance
30
29
  controller.new.call(task)
31
30
  end
@@ -6,11 +6,12 @@ describe Wayfarer::Networking::Context do
6
6
  subject(:context) { described_class.new(strategy) }
7
7
 
8
8
  let(:instance) { Object.new }
9
+ let(:class_double) { double(renew_on: [renewing_error]) } # # rubocop:disable RSpec/VerifiedDoubles
9
10
  let(:strategy) do
10
11
  double( # rubocop:disable RSpec/VerifiedDoubles
11
12
  create: instance,
12
13
  destroy: nil,
13
- renew_on: [renewing_error],
14
+ class: class_double,
14
15
  fetch: nil,
15
16
  live: nil
16
17
  )
@@ -56,7 +57,7 @@ describe Wayfarer::Networking::Context do
56
57
  end
57
58
 
58
59
  before do
59
- allow(strategy).to receive(:renew_on).and_return([renewing_error, other_error])
60
+ allow(class_double).to receive(:renew_on).and_return([renewing_error, other_error])
60
61
  allow(strategy).to receive(:fetch).and_raise(other_error)
61
62
  end
62
63
 
@@ -54,7 +54,7 @@ describe Wayfarer::Networking::Pool do
54
54
  let(:strategy) { double(create: nil, destroy: nil) } # rubocop:disable RSpec/VerifiedDoubles
55
55
 
56
56
  before do
57
- pool.class.registry[:foobar] = double(new: strategy) # rubocop:disable RSpec/VerifiedDoubles
57
+ Wayfarer.config[:network][:agents][:foobar] = double(new: strategy) # rubocop:disable RSpec/VerifiedDoubles
58
58
  pool.class.finalizer = ->(pool) { pool.reload(&:renew) }
59
59
 
60
60
  Wayfarer.config[:network][:agent] = :foobar
@@ -15,9 +15,9 @@ RSpec.shared_examples "Network strategy" do |options|
15
15
  end
16
16
  # rubocop:enable RSpec/BeforeAfterAll
17
17
 
18
- describe "#renew_on" do
18
+ describe "::renew_on" do
19
19
  it "returns an Array" do
20
- expect(context.strategy.renew_on).to be_an(Array)
20
+ expect(context.strategy.class.renew_on).to be_an(Array)
21
21
  end
22
22
  end
23
23
 
data/wayfarer.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "wayfarer"
5
- s.version = "0.4.8"
5
+ s.version = "0.4.9"
6
6
  s.license = "MIT"
7
7
 
8
8
  s.homepage = "http://github.com/bauerd/wayfarer"