reqcord 0.1.0 → 0.1.1

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 (249) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +8 -0
  3. data/CHANGELOG.md +77 -0
  4. data/Gemfile +5 -0
  5. data/Gemfile.lock +171 -0
  6. data/LICENSE.txt +21 -0
  7. data/README.md +239 -95
  8. data/Rakefile +13 -0
  9. data/docs/configuration.md +319 -0
  10. data/examples/complex-spec-app/.rspec +1 -0
  11. data/examples/complex-spec-app/README.md +21 -0
  12. data/examples/complex-spec-app/app.rb +363 -0
  13. data/examples/complex-spec-app/docs/api/README.md +104 -0
  14. data/examples/complex-spec-app/docs/api/api/v1/admin/products/create.md +117 -0
  15. data/examples/complex-spec-app/docs/api/api/v1/admin/products/destroy.md +51 -0
  16. data/examples/complex-spec-app/docs/api/api/v1/admin/products/index.md +11 -0
  17. data/examples/complex-spec-app/docs/api/api/v1/admin/products/list.md +106 -0
  18. data/examples/complex-spec-app/docs/api/api/v1/auth/index.md +9 -0
  19. data/examples/complex-spec-app/docs/api/api/v1/auth/login.md +76 -0
  20. data/examples/complex-spec-app/docs/api/api/v1/cart-items/create.md +91 -0
  21. data/examples/complex-spec-app/docs/api/api/v1/cart-items/destroy.md +51 -0
  22. data/examples/complex-spec-app/docs/api/api/v1/cart-items/index.md +10 -0
  23. data/examples/complex-spec-app/docs/api/api/v1/carts/checkout.md +102 -0
  24. data/examples/complex-spec-app/docs/api/api/v1/carts/index.md +10 -0
  25. data/examples/complex-spec-app/docs/api/api/v1/carts/show.md +73 -0
  26. data/examples/complex-spec-app/docs/api/api/v1/home/index.md +9 -0
  27. data/examples/complex-spec-app/docs/api/api/v1/home/list.md +47 -0
  28. data/examples/complex-spec-app/docs/api/api/v1/notes/create.md +94 -0
  29. data/examples/complex-spec-app/docs/api/api/v1/notes/index.md +10 -0
  30. data/examples/complex-spec-app/docs/api/api/v1/notes/list.md +61 -0
  31. data/examples/complex-spec-app/docs/api/api/v1/orders/cancel.md +69 -0
  32. data/examples/complex-spec-app/docs/api/api/v1/orders/create.md +150 -0
  33. data/examples/complex-spec-app/docs/api/api/v1/orders/destroy.md +37 -0
  34. data/examples/complex-spec-app/docs/api/api/v1/orders/index.md +13 -0
  35. data/examples/complex-spec-app/docs/api/api/v1/orders/list.md +78 -0
  36. data/examples/complex-spec-app/docs/api/api/v1/orders/show.md +83 -0
  37. data/examples/complex-spec-app/docs/api/api/v1/products/index.md +11 -0
  38. data/examples/complex-spec-app/docs/api/api/v1/products/list.md +83 -0
  39. data/examples/complex-spec-app/docs/api/api/v1/products/search.md +88 -0
  40. data/examples/complex-spec-app/docs/api/api/v1/products/show.md +71 -0
  41. data/examples/complex-spec-app/docs/api/api/v1/profiles/index.md +10 -0
  42. data/examples/complex-spec-app/docs/api/api/v1/profiles/show.md +61 -0
  43. data/examples/complex-spec-app/docs/api/api/v1/profiles/update.md +91 -0
  44. data/examples/complex-spec-app/docs/api/api/v2/products/index.md +9 -0
  45. data/examples/complex-spec-app/docs/api/api/v2/products/list.md +77 -0
  46. data/examples/complex-spec-app/docs/api/curl/api/v1/admin/products/create.sh +18 -0
  47. data/examples/complex-spec-app/docs/api/curl/api/v1/admin/products/destroy.sh +9 -0
  48. data/examples/complex-spec-app/docs/api/curl/api/v1/admin/products/list.sh +9 -0
  49. data/examples/complex-spec-app/docs/api/curl/api/v1/auth/login.sh +9 -0
  50. data/examples/complex-spec-app/docs/api/curl/api/v1/cart-items/create.sh +16 -0
  51. data/examples/complex-spec-app/docs/api/curl/api/v1/cart-items/destroy.sh +9 -0
  52. data/examples/complex-spec-app/docs/api/curl/api/v1/carts/checkout.sh +13 -0
  53. data/examples/complex-spec-app/docs/api/curl/api/v1/carts/show.sh +9 -0
  54. data/examples/complex-spec-app/docs/api/curl/api/v1/home/list.sh +8 -0
  55. data/examples/complex-spec-app/docs/api/curl/api/v1/notes/create.sh +15 -0
  56. data/examples/complex-spec-app/docs/api/curl/api/v1/notes/list.sh +9 -0
  57. data/examples/complex-spec-app/docs/api/curl/api/v1/orders/cancel.sh +9 -0
  58. data/examples/complex-spec-app/docs/api/curl/api/v1/orders/create.sh +29 -0
  59. data/examples/complex-spec-app/docs/api/curl/api/v1/orders/destroy.sh +9 -0
  60. data/examples/complex-spec-app/docs/api/curl/api/v1/orders/list.sh +9 -0
  61. data/examples/complex-spec-app/docs/api/curl/api/v1/orders/show.sh +9 -0
  62. data/examples/complex-spec-app/docs/api/curl/api/v1/products/list.sh +8 -0
  63. data/examples/complex-spec-app/docs/api/curl/api/v1/products/search.sh +8 -0
  64. data/examples/complex-spec-app/docs/api/curl/api/v1/products/show.sh +8 -0
  65. data/examples/complex-spec-app/docs/api/curl/api/v1/profiles/show.sh +9 -0
  66. data/examples/complex-spec-app/docs/api/curl/api/v1/profiles/update.sh +16 -0
  67. data/examples/complex-spec-app/docs/api/curl/api/v2/products/list.sh +8 -0
  68. data/examples/complex-spec-app/docs/api/dataset.json +5116 -0
  69. data/examples/complex-spec-app/docs/api/postman/collection.json +2519 -0
  70. data/examples/complex-spec-app/generate.rb +14 -0
  71. data/examples/complex-spec-app/reqcord.yml +28 -0
  72. data/examples/complex-spec-app/spec/requests/admin_spec.rb +67 -0
  73. data/examples/complex-spec-app/spec/requests/cart_spec.rb +61 -0
  74. data/examples/complex-spec-app/spec/requests/home_and_auth_spec.rb +49 -0
  75. data/examples/complex-spec-app/spec/requests/orders_spec.rb +124 -0
  76. data/examples/complex-spec-app/spec/requests/products_spec.rb +65 -0
  77. data/examples/complex-spec-app/spec/spec_helper.rb +17 -0
  78. data/examples/complex-test-app/README.md +40 -0
  79. data/examples/complex-test-app/app.rb +384 -0
  80. data/examples/complex-test-app/docs/api/README.md +104 -0
  81. data/examples/complex-test-app/docs/api/api/v1/admin/products/create.md +117 -0
  82. data/examples/complex-test-app/docs/api/api/v1/admin/products/destroy.md +51 -0
  83. data/examples/complex-test-app/docs/api/api/v1/admin/products/index.md +11 -0
  84. data/examples/complex-test-app/docs/api/api/v1/admin/products/list.md +106 -0
  85. data/examples/complex-test-app/docs/api/api/v1/auth/index.md +9 -0
  86. data/examples/complex-test-app/docs/api/api/v1/auth/login.md +76 -0
  87. data/examples/complex-test-app/docs/api/api/v1/cart-items/create.md +91 -0
  88. data/examples/complex-test-app/docs/api/api/v1/cart-items/destroy.md +51 -0
  89. data/examples/complex-test-app/docs/api/api/v1/cart-items/index.md +10 -0
  90. data/examples/complex-test-app/docs/api/api/v1/carts/checkout.md +102 -0
  91. data/examples/complex-test-app/docs/api/api/v1/carts/index.md +10 -0
  92. data/examples/complex-test-app/docs/api/api/v1/carts/show.md +73 -0
  93. data/examples/complex-test-app/docs/api/api/v1/home/index.md +9 -0
  94. data/examples/complex-test-app/docs/api/api/v1/home/list.md +47 -0
  95. data/examples/complex-test-app/docs/api/api/v1/notes/create.md +94 -0
  96. data/examples/complex-test-app/docs/api/api/v1/notes/index.md +10 -0
  97. data/examples/complex-test-app/docs/api/api/v1/notes/list.md +61 -0
  98. data/examples/complex-test-app/docs/api/api/v1/orders/cancel.md +69 -0
  99. data/examples/complex-test-app/docs/api/api/v1/orders/create.md +150 -0
  100. data/examples/complex-test-app/docs/api/api/v1/orders/destroy.md +37 -0
  101. data/examples/complex-test-app/docs/api/api/v1/orders/index.md +13 -0
  102. data/examples/complex-test-app/docs/api/api/v1/orders/list.md +71 -0
  103. data/examples/complex-test-app/docs/api/api/v1/orders/show.md +83 -0
  104. data/examples/complex-test-app/docs/api/api/v1/products/index.md +11 -0
  105. data/examples/complex-test-app/docs/api/api/v1/products/list.md +83 -0
  106. data/examples/complex-test-app/docs/api/api/v1/products/search.md +88 -0
  107. data/examples/complex-test-app/docs/api/api/v1/products/show.md +71 -0
  108. data/examples/complex-test-app/docs/api/api/v1/profiles/index.md +10 -0
  109. data/examples/complex-test-app/docs/api/api/v1/profiles/show.md +61 -0
  110. data/examples/complex-test-app/docs/api/api/v1/profiles/update.md +91 -0
  111. data/examples/complex-test-app/docs/api/api/v2/products/index.md +9 -0
  112. data/examples/complex-test-app/docs/api/api/v2/products/list.md +77 -0
  113. data/examples/complex-test-app/docs/api/curl/api/v1/admin/products/create.sh +18 -0
  114. data/examples/complex-test-app/docs/api/curl/api/v1/admin/products/destroy.sh +9 -0
  115. data/examples/complex-test-app/docs/api/curl/api/v1/admin/products/list.sh +9 -0
  116. data/examples/complex-test-app/docs/api/curl/api/v1/auth/login.sh +9 -0
  117. data/examples/complex-test-app/docs/api/curl/api/v1/cart-items/create.sh +16 -0
  118. data/examples/complex-test-app/docs/api/curl/api/v1/cart-items/destroy.sh +9 -0
  119. data/examples/complex-test-app/docs/api/curl/api/v1/carts/checkout.sh +13 -0
  120. data/examples/complex-test-app/docs/api/curl/api/v1/carts/show.sh +9 -0
  121. data/examples/complex-test-app/docs/api/curl/api/v1/home/list.sh +8 -0
  122. data/examples/complex-test-app/docs/api/curl/api/v1/notes/create.sh +15 -0
  123. data/examples/complex-test-app/docs/api/curl/api/v1/notes/list.sh +9 -0
  124. data/examples/complex-test-app/docs/api/curl/api/v1/orders/cancel.sh +9 -0
  125. data/examples/complex-test-app/docs/api/curl/api/v1/orders/create.sh +29 -0
  126. data/examples/complex-test-app/docs/api/curl/api/v1/orders/destroy.sh +9 -0
  127. data/examples/complex-test-app/docs/api/curl/api/v1/orders/list.sh +9 -0
  128. data/examples/complex-test-app/docs/api/curl/api/v1/orders/show.sh +9 -0
  129. data/examples/complex-test-app/docs/api/curl/api/v1/products/list.sh +8 -0
  130. data/examples/complex-test-app/docs/api/curl/api/v1/products/search.sh +8 -0
  131. data/examples/complex-test-app/docs/api/curl/api/v1/products/show.sh +8 -0
  132. data/examples/complex-test-app/docs/api/curl/api/v1/profiles/show.sh +9 -0
  133. data/examples/complex-test-app/docs/api/curl/api/v1/profiles/update.sh +16 -0
  134. data/examples/complex-test-app/docs/api/curl/api/v2/products/list.sh +8 -0
  135. data/examples/complex-test-app/docs/api/dataset.json +5109 -0
  136. data/examples/complex-test-app/docs/api/postman/collection.json +2568 -0
  137. data/examples/complex-test-app/generate.rb +14 -0
  138. data/examples/complex-test-app/reqcord.yml +28 -0
  139. data/examples/complex-test-app/test/integration/admin_test.rb +70 -0
  140. data/examples/complex-test-app/test/integration/cart_test.rb +64 -0
  141. data/examples/complex-test-app/test/integration/home_and_auth_test.rb +53 -0
  142. data/examples/complex-test-app/test/integration/orders_test.rb +127 -0
  143. data/examples/complex-test-app/test/integration/products_test.rb +66 -0
  144. data/examples/reqcord.yml +58 -0
  145. data/examples/spec-app/.rspec +1 -0
  146. data/examples/spec-app/README.md +36 -0
  147. data/examples/spec-app/app.rb +209 -0
  148. data/examples/spec-app/docs/api/README.md +45 -0
  149. data/examples/spec-app/docs/api/api/v1/customers/create.md +95 -0
  150. data/examples/spec-app/docs/api/api/v1/customers/index.md +11 -0
  151. data/examples/spec-app/docs/api/api/v1/customers/list.md +67 -0
  152. data/examples/spec-app/docs/api/api/v1/customers/show.md +65 -0
  153. data/examples/spec-app/docs/api/api/v1/tasks/complete.md +51 -0
  154. data/examples/spec-app/docs/api/api/v1/tasks/create.md +90 -0
  155. data/examples/spec-app/docs/api/api/v1/tasks/destroy.md +35 -0
  156. data/examples/spec-app/docs/api/api/v1/tasks/index.md +14 -0
  157. data/examples/spec-app/docs/api/api/v1/tasks/list.md +65 -0
  158. data/examples/spec-app/docs/api/api/v1/tasks/show.md +65 -0
  159. data/examples/spec-app/docs/api/api/v1/tasks/update.md +74 -0
  160. data/examples/spec-app/docs/api/api/v1/users/create.md +95 -0
  161. data/examples/spec-app/docs/api/api/v1/users/index.md +11 -0
  162. data/examples/spec-app/docs/api/api/v1/users/list.md +67 -0
  163. data/examples/spec-app/docs/api/api/v1/users/show.md +65 -0
  164. data/examples/spec-app/docs/api/curl/api/v1/customers/create.sh +17 -0
  165. data/examples/spec-app/docs/api/curl/api/v1/customers/list.sh +9 -0
  166. data/examples/spec-app/docs/api/curl/api/v1/customers/show.sh +9 -0
  167. data/examples/spec-app/docs/api/curl/api/v1/tasks/complete.sh +8 -0
  168. data/examples/spec-app/docs/api/curl/api/v1/tasks/create.sh +15 -0
  169. data/examples/spec-app/docs/api/curl/api/v1/tasks/destroy.sh +8 -0
  170. data/examples/spec-app/docs/api/curl/api/v1/tasks/list.sh +8 -0
  171. data/examples/spec-app/docs/api/curl/api/v1/tasks/show.sh +8 -0
  172. data/examples/spec-app/docs/api/curl/api/v1/tasks/update.sh +14 -0
  173. data/examples/spec-app/docs/api/curl/api/v1/users/create.sh +17 -0
  174. data/examples/spec-app/docs/api/curl/api/v1/users/list.sh +9 -0
  175. data/examples/spec-app/docs/api/curl/api/v1/users/show.sh +9 -0
  176. data/examples/spec-app/docs/api/dataset.json +2402 -0
  177. data/examples/spec-app/docs/api/postman/collection.json +1290 -0
  178. data/examples/spec-app/generate.rb +14 -0
  179. data/examples/spec-app/reqcord.yml +27 -0
  180. data/examples/spec-app/spec/requests/customers_spec.rb +71 -0
  181. data/examples/spec-app/spec/requests/tasks_spec.rb +78 -0
  182. data/examples/spec-app/spec/requests/users_spec.rb +68 -0
  183. data/examples/spec-app/spec/spec_helper.rb +17 -0
  184. data/examples/test-app/README.md +57 -0
  185. data/examples/test-app/app.rb +212 -0
  186. data/examples/test-app/docs/api/README.md +45 -0
  187. data/examples/test-app/docs/api/api/v1/customers/create.md +95 -0
  188. data/examples/test-app/docs/api/api/v1/customers/index.md +11 -0
  189. data/examples/test-app/docs/api/api/v1/customers/list.md +67 -0
  190. data/examples/test-app/docs/api/api/v1/customers/show.md +65 -0
  191. data/examples/test-app/docs/api/api/v1/tasks/complete.md +51 -0
  192. data/examples/test-app/docs/api/api/v1/tasks/create.md +90 -0
  193. data/examples/test-app/docs/api/api/v1/tasks/destroy.md +35 -0
  194. data/examples/test-app/docs/api/api/v1/tasks/index.md +14 -0
  195. data/examples/test-app/docs/api/api/v1/tasks/list.md +65 -0
  196. data/examples/test-app/docs/api/api/v1/tasks/show.md +65 -0
  197. data/examples/test-app/docs/api/api/v1/tasks/update.md +74 -0
  198. data/examples/test-app/docs/api/api/v1/users/create.md +95 -0
  199. data/examples/test-app/docs/api/api/v1/users/index.md +11 -0
  200. data/examples/test-app/docs/api/api/v1/users/list.md +67 -0
  201. data/examples/test-app/docs/api/api/v1/users/show.md +65 -0
  202. data/examples/test-app/docs/api/curl/api/v1/customers/create.sh +17 -0
  203. data/examples/test-app/docs/api/curl/api/v1/customers/list.sh +9 -0
  204. data/examples/test-app/docs/api/curl/api/v1/customers/show.sh +9 -0
  205. data/examples/test-app/docs/api/curl/api/v1/tasks/complete.sh +8 -0
  206. data/examples/test-app/docs/api/curl/api/v1/tasks/create.sh +15 -0
  207. data/examples/test-app/docs/api/curl/api/v1/tasks/destroy.sh +8 -0
  208. data/examples/test-app/docs/api/curl/api/v1/tasks/list.sh +8 -0
  209. data/examples/test-app/docs/api/curl/api/v1/tasks/show.sh +8 -0
  210. data/examples/test-app/docs/api/curl/api/v1/tasks/update.sh +14 -0
  211. data/examples/test-app/docs/api/curl/api/v1/users/create.sh +17 -0
  212. data/examples/test-app/docs/api/curl/api/v1/users/list.sh +9 -0
  213. data/examples/test-app/docs/api/curl/api/v1/users/show.sh +9 -0
  214. data/examples/test-app/docs/api/dataset.json +2402 -0
  215. data/examples/test-app/docs/api/postman/collection.json +1290 -0
  216. data/examples/test-app/generate.rb +14 -0
  217. data/examples/test-app/reqcord.yml +28 -0
  218. data/examples/test-app/test/integration/customers_test.rb +72 -0
  219. data/examples/test-app/test/integration/tasks_test.rb +80 -0
  220. data/examples/test-app/test/integration/users_test.rb +72 -0
  221. data/lib/reqcord/capture/collector.rb +31 -0
  222. data/lib/reqcord/capture/integration_patch.rb +209 -0
  223. data/lib/reqcord/capture/minitest_context.rb +34 -0
  224. data/lib/reqcord/capture/rspec_context.rb +42 -0
  225. data/lib/reqcord/capture/test_context.rb +25 -0
  226. data/lib/reqcord/capture.rb +19 -0
  227. data/lib/reqcord/configuration.rb +198 -0
  228. data/lib/reqcord/dataset.rb +176 -0
  229. data/lib/reqcord/endpoint.rb +263 -0
  230. data/lib/reqcord/errors.rb +9 -0
  231. data/lib/reqcord/exporters/curl.rb +68 -0
  232. data/lib/reqcord/exporters/markdown.rb +295 -0
  233. data/lib/reqcord/exporters/postman.rb +206 -0
  234. data/lib/reqcord/exporters.rb +32 -0
  235. data/lib/reqcord/generator.rb +364 -0
  236. data/lib/reqcord/railtie.rb +51 -0
  237. data/lib/reqcord/renderers/curl.rb +56 -0
  238. data/lib/reqcord/renderers/payload.rb +69 -0
  239. data/lib/reqcord/request_example.rb +104 -0
  240. data/lib/reqcord/response_example.rb +72 -0
  241. data/lib/reqcord/route_collector.rb +242 -0
  242. data/lib/reqcord/sanitizers/sanitizer.rb +140 -0
  243. data/lib/reqcord/schema.rb +187 -0
  244. data/lib/reqcord/support.rb +58 -0
  245. data/lib/reqcord/version.rb +5 -0
  246. data/lib/reqcord.rb +78 -0
  247. data/lib/tasks/reqcord.rake +99 -0
  248. data/reqcord.gemspec +46 -0
  249. metadata +317 -3
@@ -0,0 +1,99 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :reqcord do
4
+ desc "Create reqcord.yml"
5
+ task init: :environment do
6
+ path = Rails.root.join("reqcord.yml")
7
+
8
+ if path.exist?
9
+ puts "reqcord.yml already exists."
10
+ next
11
+ end
12
+
13
+ content = <<~YAML
14
+ version: 1
15
+
16
+ test:
17
+ framework: minitest
18
+ command: bin/rails test
19
+
20
+ routes:
21
+ prefix: /api
22
+
23
+ output:
24
+ directory: docs/api
25
+ include_uncovered: false
26
+
27
+ exporters:
28
+ - curl
29
+ - markdown
30
+ - postman
31
+
32
+ variables:
33
+ base_url: http://localhost:3000
34
+
35
+ sanitize:
36
+ headers:
37
+ Authorization: "Bearer {{token}}"
38
+ X-Api-Key: "{{api_key}}"
39
+ YAML
40
+
41
+ File.write(path, content)
42
+
43
+ FileUtils.mkdir_p(
44
+ Rails.root.join("docs", "api")
45
+ )
46
+
47
+ puts "Created reqcord.yml"
48
+ puts "Created docs/api/"
49
+ end
50
+
51
+ desc "Generate API documentation from Rails integration tests"
52
+ task generate: :environment do
53
+ resources =
54
+ ENV.fetch("RESOURCE", "")
55
+ .split(",")
56
+ .map(&:strip)
57
+ .reject(&:empty?)
58
+
59
+ version = ENV["VERSION"]&.strip
60
+
61
+ version = nil if version&.empty?
62
+
63
+ Reqcord.reload_configuration!
64
+
65
+ dataset =
66
+ Reqcord::Generator.call(
67
+ resources: resources,
68
+ version: version
69
+ )
70
+
71
+ documented = dataset.curl_ready_endpoints.size
72
+
73
+ puts
74
+ puts "Reqcord generated API documentation."
75
+ puts "Endpoints: #{dataset.endpoints.size} (#{documented} with successful 2xx request)"
76
+ puts "Output: #{Reqcord.configuration.output_directory}"
77
+ end
78
+
79
+ desc "List the routes Reqcord would document"
80
+ task routes: :environment do
81
+ routes =
82
+ Reqcord::RouteCollector.call(
83
+ resources: ENV.fetch("RESOURCE", "").split(",").map(&:strip).reject(&:empty?),
84
+ version: ENV["VERSION"],
85
+ prefix: Reqcord.configuration.route_prefix
86
+ )
87
+
88
+ if routes.empty?
89
+ puts "No routes matched the configured prefix."
90
+ next
91
+ end
92
+
93
+ width = routes.map { |route| route.method.length }.max
94
+
95
+ routes.each do |route|
96
+ puts format("%-#{width}s %s (%s#%s)", route.method, route.path, route.controller, route.action)
97
+ end
98
+ end
99
+ end
data/reqcord.gemspec ADDED
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "lib/reqcord/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "reqcord"
7
+ spec.version = Reqcord::VERSION
8
+
9
+ spec.authors = ["Ahmet Saridogan"]
10
+
11
+ spec.summary = "Generate living API documentation from Rails integration tests"
12
+ spec.description = <<~DESC
13
+ Reqcord captures HTTP requests and responses from Rails integration tests
14
+ and generates static API documentation with executable cURL examples.
15
+ DESC
16
+
17
+ spec.homepage = "https://github.com/ahmetsaridogan/reqcord"
18
+ spec.license = "MIT"
19
+
20
+ spec.required_ruby_version = ">= 3.2"
21
+
22
+ spec.metadata["homepage_uri"] = spec.homepage
23
+ spec.metadata["changelog_uri"] = spec.homepage
24
+ spec.metadata["source_code_uri"] = spec.homepage
25
+ spec.metadata["rubygems_mfa_required"] = "true"
26
+
27
+ spec.files = Dir.chdir(__dir__) do
28
+ `git ls-files -z`.split("\x0").reject do |file|
29
+ file.start_with?(
30
+ "test/",
31
+ "spec/",
32
+ "features/",
33
+ ".git/",
34
+ ".github/"
35
+ ) || file.end_with?(".gem")
36
+ end
37
+ end
38
+
39
+ spec.require_paths = ["lib"]
40
+
41
+ spec.add_dependency "railties", ">= 8.0", "< 9.0"
42
+ spec.add_dependency "actionpack", ">= 8.0", "< 9.0"
43
+
44
+ spec.add_development_dependency "minitest"
45
+ spec.add_development_dependency "rake"
46
+ end
metadata CHANGED
@@ -1,14 +1,82 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: reqcord
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ahmet Saridogan
8
8
  bindir: bin
9
9
  cert_chain: []
10
10
  date: 1980-01-02 00:00:00.000000000 Z
11
- dependencies: []
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: railties
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '8.0'
19
+ - - "<"
20
+ - !ruby/object:Gem::Version
21
+ version: '9.0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ version: '8.0'
29
+ - - "<"
30
+ - !ruby/object:Gem::Version
31
+ version: '9.0'
32
+ - !ruby/object:Gem::Dependency
33
+ name: actionpack
34
+ requirement: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ version: '8.0'
39
+ - - "<"
40
+ - !ruby/object:Gem::Version
41
+ version: '9.0'
42
+ type: :runtime
43
+ prerelease: false
44
+ version_requirements: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '8.0'
49
+ - - "<"
50
+ - !ruby/object:Gem::Version
51
+ version: '9.0'
52
+ - !ruby/object:Gem::Dependency
53
+ name: minitest
54
+ requirement: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: '0'
59
+ type: :development
60
+ prerelease: false
61
+ version_requirements: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ - !ruby/object:Gem::Dependency
67
+ name: rake
68
+ requirement: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
73
+ type: :development
74
+ prerelease: false
75
+ version_requirements: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
12
80
  description: |
13
81
  Reqcord captures HTTP requests and responses from Rails integration tests
14
82
  and generates static API documentation with executable cURL examples.
@@ -16,14 +84,260 @@ executables: []
16
84
  extensions: []
17
85
  extra_rdoc_files: []
18
86
  files:
87
+ - ".gitignore"
88
+ - CHANGELOG.md
89
+ - Gemfile
90
+ - Gemfile.lock
91
+ - LICENSE.txt
19
92
  - README.md
93
+ - Rakefile
94
+ - docs/configuration.md
95
+ - examples/complex-spec-app/.rspec
96
+ - examples/complex-spec-app/README.md
97
+ - examples/complex-spec-app/app.rb
98
+ - examples/complex-spec-app/docs/api/README.md
99
+ - examples/complex-spec-app/docs/api/api/v1/admin/products/create.md
100
+ - examples/complex-spec-app/docs/api/api/v1/admin/products/destroy.md
101
+ - examples/complex-spec-app/docs/api/api/v1/admin/products/index.md
102
+ - examples/complex-spec-app/docs/api/api/v1/admin/products/list.md
103
+ - examples/complex-spec-app/docs/api/api/v1/auth/index.md
104
+ - examples/complex-spec-app/docs/api/api/v1/auth/login.md
105
+ - examples/complex-spec-app/docs/api/api/v1/cart-items/create.md
106
+ - examples/complex-spec-app/docs/api/api/v1/cart-items/destroy.md
107
+ - examples/complex-spec-app/docs/api/api/v1/cart-items/index.md
108
+ - examples/complex-spec-app/docs/api/api/v1/carts/checkout.md
109
+ - examples/complex-spec-app/docs/api/api/v1/carts/index.md
110
+ - examples/complex-spec-app/docs/api/api/v1/carts/show.md
111
+ - examples/complex-spec-app/docs/api/api/v1/home/index.md
112
+ - examples/complex-spec-app/docs/api/api/v1/home/list.md
113
+ - examples/complex-spec-app/docs/api/api/v1/notes/create.md
114
+ - examples/complex-spec-app/docs/api/api/v1/notes/index.md
115
+ - examples/complex-spec-app/docs/api/api/v1/notes/list.md
116
+ - examples/complex-spec-app/docs/api/api/v1/orders/cancel.md
117
+ - examples/complex-spec-app/docs/api/api/v1/orders/create.md
118
+ - examples/complex-spec-app/docs/api/api/v1/orders/destroy.md
119
+ - examples/complex-spec-app/docs/api/api/v1/orders/index.md
120
+ - examples/complex-spec-app/docs/api/api/v1/orders/list.md
121
+ - examples/complex-spec-app/docs/api/api/v1/orders/show.md
122
+ - examples/complex-spec-app/docs/api/api/v1/products/index.md
123
+ - examples/complex-spec-app/docs/api/api/v1/products/list.md
124
+ - examples/complex-spec-app/docs/api/api/v1/products/search.md
125
+ - examples/complex-spec-app/docs/api/api/v1/products/show.md
126
+ - examples/complex-spec-app/docs/api/api/v1/profiles/index.md
127
+ - examples/complex-spec-app/docs/api/api/v1/profiles/show.md
128
+ - examples/complex-spec-app/docs/api/api/v1/profiles/update.md
129
+ - examples/complex-spec-app/docs/api/api/v2/products/index.md
130
+ - examples/complex-spec-app/docs/api/api/v2/products/list.md
131
+ - examples/complex-spec-app/docs/api/curl/api/v1/admin/products/create.sh
132
+ - examples/complex-spec-app/docs/api/curl/api/v1/admin/products/destroy.sh
133
+ - examples/complex-spec-app/docs/api/curl/api/v1/admin/products/list.sh
134
+ - examples/complex-spec-app/docs/api/curl/api/v1/auth/login.sh
135
+ - examples/complex-spec-app/docs/api/curl/api/v1/cart-items/create.sh
136
+ - examples/complex-spec-app/docs/api/curl/api/v1/cart-items/destroy.sh
137
+ - examples/complex-spec-app/docs/api/curl/api/v1/carts/checkout.sh
138
+ - examples/complex-spec-app/docs/api/curl/api/v1/carts/show.sh
139
+ - examples/complex-spec-app/docs/api/curl/api/v1/home/list.sh
140
+ - examples/complex-spec-app/docs/api/curl/api/v1/notes/create.sh
141
+ - examples/complex-spec-app/docs/api/curl/api/v1/notes/list.sh
142
+ - examples/complex-spec-app/docs/api/curl/api/v1/orders/cancel.sh
143
+ - examples/complex-spec-app/docs/api/curl/api/v1/orders/create.sh
144
+ - examples/complex-spec-app/docs/api/curl/api/v1/orders/destroy.sh
145
+ - examples/complex-spec-app/docs/api/curl/api/v1/orders/list.sh
146
+ - examples/complex-spec-app/docs/api/curl/api/v1/orders/show.sh
147
+ - examples/complex-spec-app/docs/api/curl/api/v1/products/list.sh
148
+ - examples/complex-spec-app/docs/api/curl/api/v1/products/search.sh
149
+ - examples/complex-spec-app/docs/api/curl/api/v1/products/show.sh
150
+ - examples/complex-spec-app/docs/api/curl/api/v1/profiles/show.sh
151
+ - examples/complex-spec-app/docs/api/curl/api/v1/profiles/update.sh
152
+ - examples/complex-spec-app/docs/api/curl/api/v2/products/list.sh
153
+ - examples/complex-spec-app/docs/api/dataset.json
154
+ - examples/complex-spec-app/docs/api/postman/collection.json
155
+ - examples/complex-spec-app/generate.rb
156
+ - examples/complex-spec-app/reqcord.yml
157
+ - examples/complex-spec-app/spec/requests/admin_spec.rb
158
+ - examples/complex-spec-app/spec/requests/cart_spec.rb
159
+ - examples/complex-spec-app/spec/requests/home_and_auth_spec.rb
160
+ - examples/complex-spec-app/spec/requests/orders_spec.rb
161
+ - examples/complex-spec-app/spec/requests/products_spec.rb
162
+ - examples/complex-spec-app/spec/spec_helper.rb
163
+ - examples/complex-test-app/README.md
164
+ - examples/complex-test-app/app.rb
165
+ - examples/complex-test-app/docs/api/README.md
166
+ - examples/complex-test-app/docs/api/api/v1/admin/products/create.md
167
+ - examples/complex-test-app/docs/api/api/v1/admin/products/destroy.md
168
+ - examples/complex-test-app/docs/api/api/v1/admin/products/index.md
169
+ - examples/complex-test-app/docs/api/api/v1/admin/products/list.md
170
+ - examples/complex-test-app/docs/api/api/v1/auth/index.md
171
+ - examples/complex-test-app/docs/api/api/v1/auth/login.md
172
+ - examples/complex-test-app/docs/api/api/v1/cart-items/create.md
173
+ - examples/complex-test-app/docs/api/api/v1/cart-items/destroy.md
174
+ - examples/complex-test-app/docs/api/api/v1/cart-items/index.md
175
+ - examples/complex-test-app/docs/api/api/v1/carts/checkout.md
176
+ - examples/complex-test-app/docs/api/api/v1/carts/index.md
177
+ - examples/complex-test-app/docs/api/api/v1/carts/show.md
178
+ - examples/complex-test-app/docs/api/api/v1/home/index.md
179
+ - examples/complex-test-app/docs/api/api/v1/home/list.md
180
+ - examples/complex-test-app/docs/api/api/v1/notes/create.md
181
+ - examples/complex-test-app/docs/api/api/v1/notes/index.md
182
+ - examples/complex-test-app/docs/api/api/v1/notes/list.md
183
+ - examples/complex-test-app/docs/api/api/v1/orders/cancel.md
184
+ - examples/complex-test-app/docs/api/api/v1/orders/create.md
185
+ - examples/complex-test-app/docs/api/api/v1/orders/destroy.md
186
+ - examples/complex-test-app/docs/api/api/v1/orders/index.md
187
+ - examples/complex-test-app/docs/api/api/v1/orders/list.md
188
+ - examples/complex-test-app/docs/api/api/v1/orders/show.md
189
+ - examples/complex-test-app/docs/api/api/v1/products/index.md
190
+ - examples/complex-test-app/docs/api/api/v1/products/list.md
191
+ - examples/complex-test-app/docs/api/api/v1/products/search.md
192
+ - examples/complex-test-app/docs/api/api/v1/products/show.md
193
+ - examples/complex-test-app/docs/api/api/v1/profiles/index.md
194
+ - examples/complex-test-app/docs/api/api/v1/profiles/show.md
195
+ - examples/complex-test-app/docs/api/api/v1/profiles/update.md
196
+ - examples/complex-test-app/docs/api/api/v2/products/index.md
197
+ - examples/complex-test-app/docs/api/api/v2/products/list.md
198
+ - examples/complex-test-app/docs/api/curl/api/v1/admin/products/create.sh
199
+ - examples/complex-test-app/docs/api/curl/api/v1/admin/products/destroy.sh
200
+ - examples/complex-test-app/docs/api/curl/api/v1/admin/products/list.sh
201
+ - examples/complex-test-app/docs/api/curl/api/v1/auth/login.sh
202
+ - examples/complex-test-app/docs/api/curl/api/v1/cart-items/create.sh
203
+ - examples/complex-test-app/docs/api/curl/api/v1/cart-items/destroy.sh
204
+ - examples/complex-test-app/docs/api/curl/api/v1/carts/checkout.sh
205
+ - examples/complex-test-app/docs/api/curl/api/v1/carts/show.sh
206
+ - examples/complex-test-app/docs/api/curl/api/v1/home/list.sh
207
+ - examples/complex-test-app/docs/api/curl/api/v1/notes/create.sh
208
+ - examples/complex-test-app/docs/api/curl/api/v1/notes/list.sh
209
+ - examples/complex-test-app/docs/api/curl/api/v1/orders/cancel.sh
210
+ - examples/complex-test-app/docs/api/curl/api/v1/orders/create.sh
211
+ - examples/complex-test-app/docs/api/curl/api/v1/orders/destroy.sh
212
+ - examples/complex-test-app/docs/api/curl/api/v1/orders/list.sh
213
+ - examples/complex-test-app/docs/api/curl/api/v1/orders/show.sh
214
+ - examples/complex-test-app/docs/api/curl/api/v1/products/list.sh
215
+ - examples/complex-test-app/docs/api/curl/api/v1/products/search.sh
216
+ - examples/complex-test-app/docs/api/curl/api/v1/products/show.sh
217
+ - examples/complex-test-app/docs/api/curl/api/v1/profiles/show.sh
218
+ - examples/complex-test-app/docs/api/curl/api/v1/profiles/update.sh
219
+ - examples/complex-test-app/docs/api/curl/api/v2/products/list.sh
220
+ - examples/complex-test-app/docs/api/dataset.json
221
+ - examples/complex-test-app/docs/api/postman/collection.json
222
+ - examples/complex-test-app/generate.rb
223
+ - examples/complex-test-app/reqcord.yml
224
+ - examples/complex-test-app/test/integration/admin_test.rb
225
+ - examples/complex-test-app/test/integration/cart_test.rb
226
+ - examples/complex-test-app/test/integration/home_and_auth_test.rb
227
+ - examples/complex-test-app/test/integration/orders_test.rb
228
+ - examples/complex-test-app/test/integration/products_test.rb
229
+ - examples/reqcord.yml
230
+ - examples/spec-app/.rspec
231
+ - examples/spec-app/README.md
232
+ - examples/spec-app/app.rb
233
+ - examples/spec-app/docs/api/README.md
234
+ - examples/spec-app/docs/api/api/v1/customers/create.md
235
+ - examples/spec-app/docs/api/api/v1/customers/index.md
236
+ - examples/spec-app/docs/api/api/v1/customers/list.md
237
+ - examples/spec-app/docs/api/api/v1/customers/show.md
238
+ - examples/spec-app/docs/api/api/v1/tasks/complete.md
239
+ - examples/spec-app/docs/api/api/v1/tasks/create.md
240
+ - examples/spec-app/docs/api/api/v1/tasks/destroy.md
241
+ - examples/spec-app/docs/api/api/v1/tasks/index.md
242
+ - examples/spec-app/docs/api/api/v1/tasks/list.md
243
+ - examples/spec-app/docs/api/api/v1/tasks/show.md
244
+ - examples/spec-app/docs/api/api/v1/tasks/update.md
245
+ - examples/spec-app/docs/api/api/v1/users/create.md
246
+ - examples/spec-app/docs/api/api/v1/users/index.md
247
+ - examples/spec-app/docs/api/api/v1/users/list.md
248
+ - examples/spec-app/docs/api/api/v1/users/show.md
249
+ - examples/spec-app/docs/api/curl/api/v1/customers/create.sh
250
+ - examples/spec-app/docs/api/curl/api/v1/customers/list.sh
251
+ - examples/spec-app/docs/api/curl/api/v1/customers/show.sh
252
+ - examples/spec-app/docs/api/curl/api/v1/tasks/complete.sh
253
+ - examples/spec-app/docs/api/curl/api/v1/tasks/create.sh
254
+ - examples/spec-app/docs/api/curl/api/v1/tasks/destroy.sh
255
+ - examples/spec-app/docs/api/curl/api/v1/tasks/list.sh
256
+ - examples/spec-app/docs/api/curl/api/v1/tasks/show.sh
257
+ - examples/spec-app/docs/api/curl/api/v1/tasks/update.sh
258
+ - examples/spec-app/docs/api/curl/api/v1/users/create.sh
259
+ - examples/spec-app/docs/api/curl/api/v1/users/list.sh
260
+ - examples/spec-app/docs/api/curl/api/v1/users/show.sh
261
+ - examples/spec-app/docs/api/dataset.json
262
+ - examples/spec-app/docs/api/postman/collection.json
263
+ - examples/spec-app/generate.rb
264
+ - examples/spec-app/reqcord.yml
265
+ - examples/spec-app/spec/requests/customers_spec.rb
266
+ - examples/spec-app/spec/requests/tasks_spec.rb
267
+ - examples/spec-app/spec/requests/users_spec.rb
268
+ - examples/spec-app/spec/spec_helper.rb
269
+ - examples/test-app/README.md
270
+ - examples/test-app/app.rb
271
+ - examples/test-app/docs/api/README.md
272
+ - examples/test-app/docs/api/api/v1/customers/create.md
273
+ - examples/test-app/docs/api/api/v1/customers/index.md
274
+ - examples/test-app/docs/api/api/v1/customers/list.md
275
+ - examples/test-app/docs/api/api/v1/customers/show.md
276
+ - examples/test-app/docs/api/api/v1/tasks/complete.md
277
+ - examples/test-app/docs/api/api/v1/tasks/create.md
278
+ - examples/test-app/docs/api/api/v1/tasks/destroy.md
279
+ - examples/test-app/docs/api/api/v1/tasks/index.md
280
+ - examples/test-app/docs/api/api/v1/tasks/list.md
281
+ - examples/test-app/docs/api/api/v1/tasks/show.md
282
+ - examples/test-app/docs/api/api/v1/tasks/update.md
283
+ - examples/test-app/docs/api/api/v1/users/create.md
284
+ - examples/test-app/docs/api/api/v1/users/index.md
285
+ - examples/test-app/docs/api/api/v1/users/list.md
286
+ - examples/test-app/docs/api/api/v1/users/show.md
287
+ - examples/test-app/docs/api/curl/api/v1/customers/create.sh
288
+ - examples/test-app/docs/api/curl/api/v1/customers/list.sh
289
+ - examples/test-app/docs/api/curl/api/v1/customers/show.sh
290
+ - examples/test-app/docs/api/curl/api/v1/tasks/complete.sh
291
+ - examples/test-app/docs/api/curl/api/v1/tasks/create.sh
292
+ - examples/test-app/docs/api/curl/api/v1/tasks/destroy.sh
293
+ - examples/test-app/docs/api/curl/api/v1/tasks/list.sh
294
+ - examples/test-app/docs/api/curl/api/v1/tasks/show.sh
295
+ - examples/test-app/docs/api/curl/api/v1/tasks/update.sh
296
+ - examples/test-app/docs/api/curl/api/v1/users/create.sh
297
+ - examples/test-app/docs/api/curl/api/v1/users/list.sh
298
+ - examples/test-app/docs/api/curl/api/v1/users/show.sh
299
+ - examples/test-app/docs/api/dataset.json
300
+ - examples/test-app/docs/api/postman/collection.json
301
+ - examples/test-app/generate.rb
302
+ - examples/test-app/reqcord.yml
303
+ - examples/test-app/test/integration/customers_test.rb
304
+ - examples/test-app/test/integration/tasks_test.rb
305
+ - examples/test-app/test/integration/users_test.rb
306
+ - lib/reqcord.rb
307
+ - lib/reqcord/capture.rb
308
+ - lib/reqcord/capture/collector.rb
309
+ - lib/reqcord/capture/integration_patch.rb
310
+ - lib/reqcord/capture/minitest_context.rb
311
+ - lib/reqcord/capture/rspec_context.rb
312
+ - lib/reqcord/capture/test_context.rb
313
+ - lib/reqcord/configuration.rb
314
+ - lib/reqcord/dataset.rb
315
+ - lib/reqcord/endpoint.rb
316
+ - lib/reqcord/errors.rb
317
+ - lib/reqcord/exporters.rb
318
+ - lib/reqcord/exporters/curl.rb
319
+ - lib/reqcord/exporters/markdown.rb
320
+ - lib/reqcord/exporters/postman.rb
321
+ - lib/reqcord/generator.rb
322
+ - lib/reqcord/railtie.rb
323
+ - lib/reqcord/renderers/curl.rb
324
+ - lib/reqcord/renderers/payload.rb
325
+ - lib/reqcord/request_example.rb
326
+ - lib/reqcord/response_example.rb
327
+ - lib/reqcord/route_collector.rb
328
+ - lib/reqcord/sanitizers/sanitizer.rb
329
+ - lib/reqcord/schema.rb
330
+ - lib/reqcord/support.rb
331
+ - lib/reqcord/version.rb
332
+ - lib/tasks/reqcord.rake
333
+ - reqcord.gemspec
20
334
  homepage: https://github.com/ahmetsaridogan/reqcord
21
335
  licenses:
22
336
  - MIT
23
337
  metadata:
24
338
  homepage_uri: https://github.com/ahmetsaridogan/reqcord
339
+ changelog_uri: https://github.com/ahmetsaridogan/reqcord
25
340
  source_code_uri: https://github.com/ahmetsaridogan/reqcord
26
- changelog_uri: https://github.com/ahmetsaridogan/reqcord/blob/main/CHANGELOG.md
27
341
  rubygems_mfa_required: 'true'
28
342
  rdoc_options: []
29
343
  require_paths: