apipie-rails-jq 1.4.3.pre.beta.pre.jq.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 (258) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/build.yml +32 -0
  3. data/.github/workflows/rubocop-challenger.yml +26 -0
  4. data/.github/workflows/rubocop.yml +18 -0
  5. data/.gitignore +16 -0
  6. data/.rspec +2 -0
  7. data/.rubocop.yml +132 -0
  8. data/.rubocop_todo.yml +1967 -0
  9. data/.vscode/settings.json +3 -0
  10. data/APACHE-LICENSE-2.0 +202 -0
  11. data/CHANGELOG.md +693 -0
  12. data/Gemfile +19 -0
  13. data/MIT-LICENSE +20 -0
  14. data/NOTICE +4 -0
  15. data/PROPOSAL_FOR_RESPONSE_DESCRIPTIONS.md +244 -0
  16. data/README.md +2088 -0
  17. data/Rakefile +8 -0
  18. data/apipie-rails.gemspec +44 -0
  19. data/app/controllers/apipie/apipies_controller.rb +184 -0
  20. data/app/helpers/apipie_helper.rb +10 -0
  21. data/app/public/apipie/javascripts/apipie.js +6 -0
  22. data/app/public/apipie/javascripts/bundled/bootstrap-collapse.js +167 -0
  23. data/app/public/apipie/javascripts/bundled/bootstrap.js +2280 -0
  24. data/app/public/apipie/javascripts/bundled/jquery.js +2 -0
  25. data/app/public/apipie/javascripts/bundled/prettify.js +28 -0
  26. data/app/public/apipie/stylesheets/application.css +7 -0
  27. data/app/public/apipie/stylesheets/bundled/bootstrap-responsive.min.css +9 -0
  28. data/app/public/apipie/stylesheets/bundled/bootstrap.min.css +9 -0
  29. data/app/public/apipie/stylesheets/bundled/prettify.css +30 -0
  30. data/app/views/apipie/apipies/_deprecation.html.erb +16 -0
  31. data/app/views/apipie/apipies/_disqus.html.erb +13 -0
  32. data/app/views/apipie/apipies/_errors.html.erb +23 -0
  33. data/app/views/apipie/apipies/_headers.html.erb +26 -0
  34. data/app/views/apipie/apipies/_languages.erb +6 -0
  35. data/app/views/apipie/apipies/_metadata.erb +1 -0
  36. data/app/views/apipie/apipies/_method_detail.erb +63 -0
  37. data/app/views/apipie/apipies/_params.html.erb +49 -0
  38. data/app/views/apipie/apipies/_params_plain.html.erb +21 -0
  39. data/app/views/apipie/apipies/apipie_404.html.erb +17 -0
  40. data/app/views/apipie/apipies/apipie_checksum.json.erb +1 -0
  41. data/app/views/apipie/apipies/getting_started.html.erb +6 -0
  42. data/app/views/apipie/apipies/index.html.erb +56 -0
  43. data/app/views/apipie/apipies/method.html.erb +41 -0
  44. data/app/views/apipie/apipies/plain.html.erb +77 -0
  45. data/app/views/apipie/apipies/resource.html.erb +80 -0
  46. data/app/views/apipie/apipies/static.html.erb +103 -0
  47. data/app/views/layouts/apipie/apipie.html.erb +27 -0
  48. data/config/locales/de.yml +28 -0
  49. data/config/locales/en.yml +41 -0
  50. data/config/locales/es.yml +28 -0
  51. data/config/locales/fr.yml +31 -0
  52. data/config/locales/it.yml +41 -0
  53. data/config/locales/ja.yml +31 -0
  54. data/config/locales/ko.yml +32 -0
  55. data/config/locales/pl.yml +28 -0
  56. data/config/locales/pt-BR.yml +28 -0
  57. data/config/locales/ru.yml +28 -0
  58. data/config/locales/tr.yml +28 -0
  59. data/config/locales/zh-CN.yml +28 -0
  60. data/config/locales/zh-TW.yml +28 -0
  61. data/gemfiles/Gemfile.tools +9 -0
  62. data/images/screenshot-1.png +0 -0
  63. data/images/screenshot-2.png +0 -0
  64. data/lib/apipie/apipie_module.rb +83 -0
  65. data/lib/apipie/application.rb +499 -0
  66. data/lib/apipie/configuration.rb +196 -0
  67. data/lib/apipie/core_ext/route.rb +9 -0
  68. data/lib/apipie/dsl_definition.rb +630 -0
  69. data/lib/apipie/error_description.rb +46 -0
  70. data/lib/apipie/errors.rb +86 -0
  71. data/lib/apipie/extractor/collector.rb +116 -0
  72. data/lib/apipie/extractor/recorder.rb +193 -0
  73. data/lib/apipie/extractor/writer.rb +454 -0
  74. data/lib/apipie/extractor.rb +181 -0
  75. data/lib/apipie/generator/config.rb +12 -0
  76. data/lib/apipie/generator/generator.rb +2 -0
  77. data/lib/apipie/generator/swagger/computed_interface_id.rb +23 -0
  78. data/lib/apipie/generator/swagger/config.rb +80 -0
  79. data/lib/apipie/generator/swagger/context.rb +38 -0
  80. data/lib/apipie/generator/swagger/method_description/api_decorator.rb +20 -0
  81. data/lib/apipie/generator/swagger/method_description/api_schema_service.rb +89 -0
  82. data/lib/apipie/generator/swagger/method_description/decorator.rb +22 -0
  83. data/lib/apipie/generator/swagger/method_description/parameters_service.rb +139 -0
  84. data/lib/apipie/generator/swagger/method_description/response_schema_service.rb +46 -0
  85. data/lib/apipie/generator/swagger/method_description/response_service.rb +71 -0
  86. data/lib/apipie/generator/swagger/method_description.rb +2 -0
  87. data/lib/apipie/generator/swagger/operation_id.rb +51 -0
  88. data/lib/apipie/generator/swagger/param_description/builder.rb +114 -0
  89. data/lib/apipie/generator/swagger/param_description/composite.rb +119 -0
  90. data/lib/apipie/generator/swagger/param_description/description.rb +15 -0
  91. data/lib/apipie/generator/swagger/param_description/in.rb +37 -0
  92. data/lib/apipie/generator/swagger/param_description/name.rb +18 -0
  93. data/lib/apipie/generator/swagger/param_description/path_params_composite.rb +61 -0
  94. data/lib/apipie/generator/swagger/param_description/referenced_composite.rb +36 -0
  95. data/lib/apipie/generator/swagger/param_description/type.rb +132 -0
  96. data/lib/apipie/generator/swagger/param_description.rb +18 -0
  97. data/lib/apipie/generator/swagger/path_decorator.rb +36 -0
  98. data/lib/apipie/generator/swagger/referenced_definitions.rb +17 -0
  99. data/lib/apipie/generator/swagger/resource_description_collection.rb +30 -0
  100. data/lib/apipie/generator/swagger/resource_description_composite.rb +56 -0
  101. data/lib/apipie/generator/swagger/schema.rb +63 -0
  102. data/lib/apipie/generator/swagger/swagger.rb +2 -0
  103. data/lib/apipie/generator/swagger/type.rb +16 -0
  104. data/lib/apipie/generator/swagger/type_extractor.rb +51 -0
  105. data/lib/apipie/generator/swagger/warning.rb +74 -0
  106. data/lib/apipie/generator/swagger/warning_writer.rb +54 -0
  107. data/lib/apipie/helpers.rb +73 -0
  108. data/lib/apipie/markup.rb +52 -0
  109. data/lib/apipie/method_description/api.rb +12 -0
  110. data/lib/apipie/method_description/apis_service.rb +82 -0
  111. data/lib/apipie/method_description.rb +230 -0
  112. data/lib/apipie/middleware/checksum_in_headers.rb +35 -0
  113. data/lib/apipie/param_description/deprecation.rb +24 -0
  114. data/lib/apipie/param_description.rb +313 -0
  115. data/lib/apipie/railtie.rb +9 -0
  116. data/lib/apipie/resource_description.rb +152 -0
  117. data/lib/apipie/response_description.rb +157 -0
  118. data/lib/apipie/response_description_adapter.rb +202 -0
  119. data/lib/apipie/routes_formatter.rb +33 -0
  120. data/lib/apipie/routing.rb +16 -0
  121. data/lib/apipie/rspec/response_validation_helper.rb +194 -0
  122. data/lib/apipie/see_description.rb +39 -0
  123. data/lib/apipie/static_dispatcher.rb +75 -0
  124. data/lib/apipie/swagger_generator.rb +45 -0
  125. data/lib/apipie/tag_list_description.rb +11 -0
  126. data/lib/apipie/validator.rb +552 -0
  127. data/lib/apipie/version.rb +3 -0
  128. data/lib/apipie-rails.rb +60 -0
  129. data/lib/generators/apipie/install/README +6 -0
  130. data/lib/generators/apipie/install/install_generator.rb +25 -0
  131. data/lib/generators/apipie/install/templates/initializer.rb.erb +7 -0
  132. data/lib/generators/apipie/views_generator.rb +11 -0
  133. data/lib/tasks/apipie.rake +355 -0
  134. data/rel-eng/gem_release.ipynb +398 -0
  135. data/rel-eng/packages/.readme +3 -0
  136. data/rel-eng/packages/rubygem-apipie-rails +1 -0
  137. data/rel-eng/tito.props +5 -0
  138. data/spec/controllers/api/v1/architectures_controller_spec.rb +29 -0
  139. data/spec/controllers/api/v2/architectures_controller_spec.rb +19 -0
  140. data/spec/controllers/api/v2/empty_middle_controller_spec.rb +23 -0
  141. data/spec/controllers/api/v2/nested/resources_controller_spec.rb +27 -0
  142. data/spec/controllers/api/v2/sub/footguns_controller_spec.rb +19 -0
  143. data/spec/controllers/concerns_controller_spec.rb +42 -0
  144. data/spec/controllers/extended_controller_spec.rb +14 -0
  145. data/spec/controllers/included_param_group_controller_spec.rb +13 -0
  146. data/spec/controllers/pets_controller_spec.rb +98 -0
  147. data/spec/controllers/users_controller_spec.rb +794 -0
  148. data/spec/dummy/Rakefile +7 -0
  149. data/spec/dummy/app/controllers/api/base_controller.rb +4 -0
  150. data/spec/dummy/app/controllers/api/v1/architectures_controller.rb +43 -0
  151. data/spec/dummy/app/controllers/api/v1/base_controller.rb +11 -0
  152. data/spec/dummy/app/controllers/api/v2/architectures_controller.rb +31 -0
  153. data/spec/dummy/app/controllers/api/v2/base_controller.rb +17 -0
  154. data/spec/dummy/app/controllers/api/v2/empty_middle_controller.rb +14 -0
  155. data/spec/dummy/app/controllers/api/v2/nested/architectures_controller.rb +32 -0
  156. data/spec/dummy/app/controllers/api/v2/nested/resources_controller.rb +33 -0
  157. data/spec/dummy/app/controllers/api/v2/sub/footguns_controller.rb +30 -0
  158. data/spec/dummy/app/controllers/application_controller.rb +18 -0
  159. data/spec/dummy/app/controllers/concerns_controller.rb +8 -0
  160. data/spec/dummy/app/controllers/extended_controller.rb +14 -0
  161. data/spec/dummy/app/controllers/extending_concern.rb +10 -0
  162. data/spec/dummy/app/controllers/files_controller.rb +5 -0
  163. data/spec/dummy/app/controllers/included_param_group_controller.rb +19 -0
  164. data/spec/dummy/app/controllers/overridden_concerns_controller.rb +31 -0
  165. data/spec/dummy/app/controllers/pets_controller.rb +408 -0
  166. data/spec/dummy/app/controllers/pets_using_auto_views_controller.rb +73 -0
  167. data/spec/dummy/app/controllers/pets_using_self_describing_classes_controller.rb +95 -0
  168. data/spec/dummy/app/controllers/sample_controller.rb +39 -0
  169. data/spec/dummy/app/controllers/tagged_cats_controller.rb +32 -0
  170. data/spec/dummy/app/controllers/tagged_dogs_controller.rb +15 -0
  171. data/spec/dummy/app/controllers/twitter_example_controller.rb +307 -0
  172. data/spec/dummy/app/controllers/users_controller.rb +310 -0
  173. data/spec/dummy/app/helpers/random_param_group.rb +8 -0
  174. data/spec/dummy/app/views/layouts/application.html.erb +21 -0
  175. data/spec/dummy/components/test_engine/Gemfile +6 -0
  176. data/spec/dummy/components/test_engine/app/controllers/test_engine/application_controller.rb +4 -0
  177. data/spec/dummy/components/test_engine/app/controllers/test_engine/memes_controller.rb +37 -0
  178. data/spec/dummy/components/test_engine/config/routes.rb +3 -0
  179. data/spec/dummy/components/test_engine/db/.gitkeep +0 -0
  180. data/spec/dummy/components/test_engine/lib/test_engine.rb +7 -0
  181. data/spec/dummy/components/test_engine/test_engine.gemspec +11 -0
  182. data/spec/dummy/config/application.rb +47 -0
  183. data/spec/dummy/config/boot.rb +12 -0
  184. data/spec/dummy/config/database.yml +21 -0
  185. data/spec/dummy/config/environment.rb +8 -0
  186. data/spec/dummy/config/environments/development.rb +25 -0
  187. data/spec/dummy/config/environments/production.rb +49 -0
  188. data/spec/dummy/config/environments/test.rb +33 -0
  189. data/spec/dummy/config/initializers/apipie.rb +110 -0
  190. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  191. data/spec/dummy/config/initializers/inflections.rb +10 -0
  192. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  193. data/spec/dummy/config/initializers/secret_token.rb +8 -0
  194. data/spec/dummy/config/initializers/session_store.rb +8 -0
  195. data/spec/dummy/config/locales/en.yml +5 -0
  196. data/spec/dummy/config/routes.rb +61 -0
  197. data/spec/dummy/config.ru +4 -0
  198. data/spec/dummy/db/.gitkeep +0 -0
  199. data/spec/dummy/doc/apipie_examples.json +1 -0
  200. data/spec/dummy/doc/users/desc_from_file.md +1 -0
  201. data/spec/dummy/public/404.html +26 -0
  202. data/spec/dummy/public/422.html +26 -0
  203. data/spec/dummy/public/500.html +26 -0
  204. data/spec/dummy/public/favicon.ico +0 -0
  205. data/spec/dummy/public/stylesheets/.gitkeep +0 -0
  206. data/spec/dummy/script/rails +6 -0
  207. data/spec/lib/apipie/apipies_controller_spec.rb +345 -0
  208. data/spec/lib/apipie/application_spec.rb +62 -0
  209. data/spec/lib/apipie/configuration_spec.rb +38 -0
  210. data/spec/lib/apipie/extractor/collector_spec.rb +57 -0
  211. data/spec/lib/apipie/extractor/recorder/middleware_spec.rb +44 -0
  212. data/spec/lib/apipie/extractor/recorder_spec.rb +77 -0
  213. data/spec/lib/apipie/extractor/writer_spec.rb +112 -0
  214. data/spec/lib/apipie/extractor_spec.rb +9 -0
  215. data/spec/lib/apipie/file_handler_spec.rb +25 -0
  216. data/spec/lib/apipie/generator/swagger/config_spec.rb +19 -0
  217. data/spec/lib/apipie/generator/swagger/context_spec.rb +56 -0
  218. data/spec/lib/apipie/generator/swagger/method_description/api_schema_service_spec.rb +119 -0
  219. data/spec/lib/apipie/generator/swagger/method_description/response_schema_service_spec.rb +105 -0
  220. data/spec/lib/apipie/generator/swagger/method_description/response_service_spec.rb +62 -0
  221. data/spec/lib/apipie/generator/swagger/operation_id_spec.rb +63 -0
  222. data/spec/lib/apipie/generator/swagger/param_description/builder_spec.rb +245 -0
  223. data/spec/lib/apipie/generator/swagger/param_description/composite_spec.rb +95 -0
  224. data/spec/lib/apipie/generator/swagger/param_description/description_spec.rb +79 -0
  225. data/spec/lib/apipie/generator/swagger/param_description/in_spec.rb +86 -0
  226. data/spec/lib/apipie/generator/swagger/param_description/name_spec.rb +81 -0
  227. data/spec/lib/apipie/generator/swagger/param_description/type_spec.rb +210 -0
  228. data/spec/lib/apipie/generator/swagger/param_description_spec.rb +28 -0
  229. data/spec/lib/apipie/generator/swagger/path_decorator_spec.rb +57 -0
  230. data/spec/lib/apipie/generator/swagger/referenced_definitions_spec.rb +35 -0
  231. data/spec/lib/apipie/generator/swagger/resource_description_composite_spec.rb +37 -0
  232. data/spec/lib/apipie/generator/swagger/resource_descriptions_collection_spec.rb +57 -0
  233. data/spec/lib/apipie/generator/swagger/schema_spec.rb +89 -0
  234. data/spec/lib/apipie/generator/swagger/type_extractor_spec.rb +38 -0
  235. data/spec/lib/apipie/generator/swagger/warning_spec.rb +51 -0
  236. data/spec/lib/apipie/generator/swagger/warning_writer_spec.rb +71 -0
  237. data/spec/lib/apipie/method_description/apis_service_spec.rb +60 -0
  238. data/spec/lib/apipie/method_description_spec.rb +133 -0
  239. data/spec/lib/apipie/no_documented_method_spec.rb +17 -0
  240. data/spec/lib/apipie/param_description/deprecation_spec.rb +31 -0
  241. data/spec/lib/apipie/param_description_spec.rb +671 -0
  242. data/spec/lib/apipie/param_group_spec.rb +61 -0
  243. data/spec/lib/apipie/resource_description_spec.rb +91 -0
  244. data/spec/lib/apipie/response_description/response_object_spec.rb +22 -0
  245. data/spec/lib/apipie/response_description_spec.rb +56 -0
  246. data/spec/lib/apipie/response_does_not_match_swagger_schema_spec.rb +35 -0
  247. data/spec/lib/apipie/swagger_generator_spec.rb +94 -0
  248. data/spec/lib/apipie/validator_spec.rb +149 -0
  249. data/spec/lib/rake_spec.rb +69 -0
  250. data/spec/lib/swagger/openapi_2_0_schema.json +1614 -0
  251. data/spec/lib/swagger/rake_swagger_spec.rb +159 -0
  252. data/spec/lib/swagger/swagger_dsl_spec.rb +664 -0
  253. data/spec/lib/validators/array_validator_spec.rb +85 -0
  254. data/spec/spec_helper.rb +92 -0
  255. data/spec/support/custom_bool_validator.rb +17 -0
  256. data/spec/support/rake.rb +21 -0
  257. data/spec/test_engine/memes_controller_spec.rb +10 -0
  258. metadata +499 -0
@@ -0,0 +1,355 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require 'fileutils'
4
+
5
+ namespace :apipie do
6
+
7
+ desc "Generate static documentation"
8
+ # You can specify OUT=output_base_file to have the following structure:
9
+ #
10
+ # output_base_file.html
11
+ # output_base_file-onepage.html
12
+ # output_base_file
13
+ # | - resource1.html
14
+ # | - resource1
15
+ # | - | - method1.html
16
+ # | - | - method2.html
17
+ # | - resource2.html
18
+ #
19
+ # By default OUT="#{Rails.root}/doc/apidoc"
20
+ task :static, [:version] => :environment do |t, args|
21
+ with_loaded_documentation do
22
+ args.with_defaults(:version => Apipie.configuration.default_version)
23
+ out = ENV["OUT"] || File.join(Rails.root, Apipie.configuration.doc_path, 'apidoc')
24
+ subdir = File.basename(out)
25
+ copy_jscss(out)
26
+ Apipie.configuration.version_in_url = false
27
+ ([nil] + Apipie.configuration.languages).each do |lang|
28
+ I18n.locale = lang || Apipie.configuration.default_locale
29
+ Apipie.url_prefix = "./#{subdir}"
30
+ doc = Apipie.to_json(args[:version], nil, nil, lang)
31
+ doc[:docs][:link_extension] = "#{lang_ext(lang)}.html"
32
+ generate_one_page(out, doc, lang)
33
+ generate_plain_page(out, doc, lang)
34
+ generate_index_page(out, doc, false, false, lang)
35
+ Apipie.url_prefix = "../#{subdir}"
36
+ generate_resource_pages(args[:version], out, doc, false, lang)
37
+ Apipie.url_prefix = "../../#{subdir}"
38
+ generate_method_pages(args[:version], out, doc, false, lang)
39
+ end
40
+ end
41
+ end
42
+
43
+ desc "Generate static documentation json"
44
+ task :static_json, [:version] => :environment do |t, args|
45
+ with_loaded_documentation do
46
+ args.with_defaults(:version => Apipie.configuration.default_version)
47
+ out = ENV["OUT"] || File.join(Rails.root, Apipie.configuration.doc_path, 'apidoc')
48
+ ([nil] + Apipie.configuration.languages).each do |lang|
49
+ doc = Apipie.to_json(args[:version], nil, nil, lang)
50
+ generate_json_page(out, doc, lang)
51
+ end
52
+ end
53
+ end
54
+
55
+ desc "Generate static swagger json"
56
+ task :static_swagger_json, [:version, :swagger_content_type_input, :filename_suffix] => :environment do |t, args|
57
+ with_loaded_documentation do
58
+ out = ENV["OUT"] || File.join(Rails.root, Apipie.configuration.doc_path, 'apidoc')
59
+ generate_swagger_using_args(args, out)
60
+ end
61
+ end
62
+
63
+ # The following task compares the currently-generated swagger output to a reference copy generated
64
+ # by the previous execution of this task.
65
+ # if a difference is detected, the current output will be stored as a reference.
66
+ # reference files have the
67
+ # if more than 3 references are detected, the older ones will be purged
68
+ desc "Did swagger output change since the last execution of this task?"
69
+ task :did_swagger_change, [:version, :swagger_content_type_input, :filename_suffix] => :environment do |t, args|
70
+ with_loaded_documentation do
71
+ out = ENV["OUT_REF"] || File.join(Rails.root, Apipie.configuration.doc_path, 'apidoc_ref')
72
+ paths = generate_swagger_using_args(args, out)
73
+ paths.each do |path|
74
+ existing_files_in_dir = Pathname(out).children(true)
75
+
76
+ make_reference = false
77
+
78
+ # reference filenames have the format <basename>.<counter>.swagger_ref
79
+ reference_files = existing_files_in_dir.select do |f|
80
+ f.extname == '.swagger_ref' &&
81
+ f.basename.sub_ext("").extname.delete('.').to_i > 0 &&
82
+ f.basename.sub_ext("").sub_ext("") == path.basename.sub_ext("")
83
+ end
84
+ if reference_files.empty?
85
+ print "Reference file does not exist for [#{path}]\n"
86
+ counter = 1
87
+ make_reference = true
88
+ else
89
+ reference_files.sort_by!(&:ctime)
90
+ last_ref = reference_files[-1]
91
+ print "Comparing [#{path}] to reference file: [#{last_ref.basename}]: "
92
+ if !FileUtils.compare_file(path, last_ref)
93
+ print("\n ---> Differences detected\n")
94
+ counter = last_ref.sub_ext("").extname.delete('.').to_i + 1
95
+ make_reference = true
96
+ else
97
+ print("identical\n")
98
+ end
99
+ end
100
+
101
+ if make_reference
102
+ new_path = path.sub_ext(".#{counter}.swagger_ref")
103
+ print " ---> Keeping current output as [#{new_path}]\n"
104
+ path.rename(new_path)
105
+ reference_files << new_path
106
+ else
107
+ path.delete
108
+ end
109
+
110
+ num_refs_to_keep = 3
111
+ if reference_files.length > num_refs_to_keep
112
+ (reference_files - reference_files[-num_refs_to_keep..-1]).each(&:delete)
113
+ end
114
+ end
115
+ end
116
+ end
117
+
118
+
119
+
120
+ # By default the full cache is built.
121
+ # It is possible to generate index resp. resources only with
122
+ # rake apipie:cache cache_part=index (resources resp.)
123
+ # Default output dir ('public/apipie_cache') can be changed with OUT=/some/dir
124
+ desc "Generate cache to avoid production dependencies on markup languages"
125
+ task :cache => :environment do
126
+ puts "#{Time.zone.now} | Started"
127
+ cache_part = ENV['cache_part']
128
+ generate_index = (cache_part == 'resources' ? false : true)
129
+ generate_resources = (cache_part == 'index' ? false : true)
130
+ with_loaded_documentation do
131
+ puts "#{Time.zone.now} | Documents loaded..."
132
+ ([nil] + Apipie.configuration.languages).each do |lang|
133
+ I18n.locale = lang || Apipie.configuration.default_locale
134
+ puts "#{Time.zone.now} | Processing docs for #{lang}"
135
+ cache_dir = ENV["OUT"] || Apipie.configuration.cache_dir
136
+ subdir = Apipie.configuration.doc_base_url.sub(%r{\A/},"")
137
+ subdir_levels = subdir.split('/').length
138
+ subdir_traversal_prefix = '../' * subdir_levels
139
+ file_base = File.join(cache_dir, Apipie.configuration.doc_base_url)
140
+
141
+ if generate_index
142
+ Apipie.url_prefix = "./#{subdir}"
143
+ doc = Apipie.to_json(Apipie.configuration.default_version, nil, nil, lang)
144
+ doc[:docs][:link_extension] = (lang ? ".#{lang}.html" : ".html")
145
+ generate_index_page(file_base, doc, true, false, lang)
146
+ end
147
+ Apipie.available_versions.each do |version|
148
+ file_base_version = File.join(file_base, version)
149
+ Apipie.url_prefix = "#{subdir_traversal_prefix}#{subdir}"
150
+ doc = Apipie.to_json(version, nil, nil, lang)
151
+ doc[:docs][:link_extension] = (lang ? ".#{lang}.html" : ".html")
152
+
153
+ generate_index_page(file_base_version, doc, true, true, lang) if generate_index
154
+ next unless generate_resources
155
+ Apipie.url_prefix = "../#{subdir_traversal_prefix}#{subdir}"
156
+ generate_resource_pages(version, file_base_version, doc, true, lang)
157
+ Apipie.url_prefix = "../../#{subdir_traversal_prefix}#{subdir}"
158
+ generate_method_pages(version, file_base_version, doc, true, lang)
159
+ end
160
+ end
161
+ end
162
+ puts "#{Time.zone.now} | Finished"
163
+ end
164
+
165
+ # Attempt to use the Rails application views, otherwise default to built in views
166
+ def renderer
167
+ return @apipie_renderer if @apipie_renderer
168
+
169
+ base_paths = [File.expand_path('../../app/views/apipie/apipies', __dir__)]
170
+ base_paths.unshift("#{Rails.root}/app/views/apipie/apipies") if File.directory?("#{Rails.root}/app/views/apipie/apipies")
171
+
172
+ layouts_paths = [File.expand_path('../../app/views/layouts', __dir__)]
173
+ layouts_paths.unshift("#{Rails.root}/app/views/layouts") if File.directory?("#{Rails.root}/app/views/layouts/apipie")
174
+
175
+ if ActionView::Base.respond_to?(:with_empty_template_cache) && ActionView::Base.respond_to?(:with_view_paths)
176
+ @apipie_renderer = ActionView::Base.with_empty_template_cache.with_view_paths(base_paths + layouts_paths)
177
+ else
178
+ @apipie_renderer = ActionView::Base.new(base_paths + layouts_paths)
179
+ end
180
+
181
+ @apipie_renderer.singleton_class.send(:include, ApipieHelper)
182
+ return @apipie_renderer
183
+ end
184
+
185
+ def render_apipie_page(file_name, template, variables, layout = 'apipie')
186
+ av = renderer
187
+ File.open(file_name, "w") do |f|
188
+ variables.each do |var, val|
189
+ av.instance_variable_set(:"@#{var}", val)
190
+ end
191
+ f.write av.render(
192
+ :template => "#{template}",
193
+ :layout => layout && "apipie/#{layout}")
194
+ end
195
+ end
196
+
197
+ def generate_swagger_using_args(args, out)
198
+ args.with_defaults(
199
+ version: Apipie.configuration.default_version,
200
+ swagger_content_type_input: Apipie.configuration.generator.swagger.content_type_input,
201
+ filename_suffix: nil
202
+ )
203
+
204
+ Apipie.configuration.generator.swagger.content_type_input =
205
+ args[:swagger_content_type_input].to_sym
206
+
207
+ count = 0
208
+
209
+ sfx = args[:filename_suffix] || "_#{args[:swagger_content_type_input]}"
210
+
211
+ paths = []
212
+
213
+ ([nil] + Apipie.configuration.languages).each do |lang|
214
+ doc = Apipie.to_swagger_json(args[:version], nil, nil, lang, count==0)
215
+ paths << generate_swagger_json_page(out, doc, sfx, lang)
216
+ count+=1
217
+ end
218
+
219
+ paths
220
+ end
221
+
222
+ def generate_json_page(file_base, doc, lang = nil)
223
+ FileUtils.mkdir_p(file_base) unless File.exist?(file_base)
224
+
225
+ filename = "schema_apipie#{lang_ext(lang)}.json"
226
+ File.open("#{file_base}/#{filename}", 'w') { |file| file.write(JSON.pretty_generate(doc)) }
227
+ end
228
+
229
+ def generate_swagger_json_page(file_base, doc, sfx = "", lang = nil)
230
+ FileUtils.mkdir_p(file_base) unless File.exist?(file_base)
231
+
232
+ path = Pathname.new("#{file_base}/schema_swagger#{sfx}#{lang_ext(lang)}.json")
233
+ File.open(path, 'w') { |file| file.write(JSON.pretty_generate(doc)) }
234
+
235
+ path
236
+ end
237
+
238
+ def generate_one_page(file_base, doc, lang = nil)
239
+ FileUtils.mkdir_p(File.dirname(file_base)) unless File.exist?(File.dirname(file_base))
240
+
241
+ render_apipie_page("#{file_base}-onepage#{lang_ext(lang)}.html", "static", {:doc => doc[:docs],
242
+ :language => lang, :languages => Apipie.configuration.languages})
243
+ end
244
+
245
+ def generate_plain_page(file_base, doc, lang = nil)
246
+ FileUtils.mkdir_p(File.dirname(file_base)) unless File.exist?(File.dirname(file_base))
247
+
248
+ render_apipie_page("#{file_base}-plain#{lang_ext(lang)}.html", "plain", {:doc => doc[:docs],
249
+ :language => lang, :languages => Apipie.configuration.languages}, nil)
250
+ end
251
+
252
+ def generate_index_page(file_base, doc, include_json = false, show_versions = false, lang = nil)
253
+ FileUtils.mkdir_p(File.dirname(file_base)) unless File.exist?(File.dirname(file_base))
254
+ versions = show_versions && Apipie.available_versions
255
+ render_apipie_page("#{file_base}#{lang_ext(lang)}.html", "index", {:doc => doc[:docs],
256
+ :versions => versions, :language => lang, :languages => Apipie.configuration.languages})
257
+
258
+ File.open("#{file_base}#{lang_ext(lang)}.json", "w") { |f| f << doc.to_json } if include_json
259
+ end
260
+
261
+ def generate_resource_pages(version, file_base, doc, include_json = false, lang = nil)
262
+ doc[:docs][:resources].each_key do |resource_id|
263
+ resource_file_base = File.join(file_base, resource_id.to_s)
264
+ FileUtils.mkdir_p(File.dirname(resource_file_base)) unless File.exist?(File.dirname(resource_file_base))
265
+
266
+ doc = Apipie.to_json(version, resource_id, nil, lang)
267
+ doc[:docs][:link_extension] = (lang ? ".#{lang}.html" : ".html")
268
+ render_apipie_page("#{resource_file_base}#{lang_ext(lang)}.html", "resource", {:doc => doc[:docs],
269
+ :resource => doc[:docs][:resources].first, :language => lang, :languages => Apipie.configuration.languages})
270
+ File.open("#{resource_file_base}#{lang_ext(lang)}.json", "w") { |f| f << doc.to_json } if include_json
271
+ end
272
+ end
273
+
274
+ def generate_method_pages(version, file_base, doc, include_json = false, lang = nil)
275
+ doc[:docs][:resources].each do |resource_id, resource_params|
276
+ resource_params[:methods].each do |method|
277
+ method_file_base = File.join(file_base, resource_id.to_s, method[:name].to_s)
278
+ FileUtils.mkdir_p(File.dirname(method_file_base)) unless File.exist?(File.dirname(method_file_base))
279
+
280
+ doc = Apipie.to_json(version, resource_id, method[:name], lang)
281
+ doc[:docs][:link_extension] = (lang ? ".#{lang}.html" : ".html")
282
+ render_apipie_page("#{method_file_base}#{lang_ext(lang)}.html", "method", {:doc => doc[:docs],
283
+ :resource => doc[:docs][:resources].first,
284
+ :method => doc[:docs][:resources].first[:methods].first,
285
+ :language => lang,
286
+ :languages => Apipie.configuration.languages})
287
+
288
+ File.open("#{method_file_base}#{lang_ext(lang)}.json", "w") { |f| f << doc.to_json } if include_json
289
+ end
290
+ end
291
+ end
292
+
293
+ def with_loaded_documentation
294
+ Apipie.configuration.use_cache = false # we don't want to skip DSL evaluation
295
+ Apipie.reload_documentation
296
+ yield
297
+ end
298
+
299
+
300
+ def copy_jscss(dest)
301
+ src = File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'app', 'public', 'apipie'))
302
+ FileUtils.mkdir_p dest
303
+ FileUtils.cp_r "#{src}/.", dest
304
+ end
305
+
306
+ def lang_ext(lang = nil)
307
+ lang ? ".#{lang}" : ""
308
+ end
309
+
310
+ desc "Generate CLI client for API documented with apipie gem. (deprecated)"
311
+ task :client do
312
+ puts <<MESSAGE
313
+ The apipie gem itself doesn't provide client code generator. See
314
+ https://github.com/Pajk/apipie-rails/wiki/CLI-client for more information on
315
+ how to write your own generator.
316
+ MESSAGE
317
+ end
318
+
319
+ def plaintext(text)
320
+ text.gsub(/<.*?>/, '').gsub("\n",' ').strip
321
+ end
322
+
323
+ desc "Update api description in controllers base on routes"
324
+ task :update_from_routes => [:environment] do
325
+ Apipie.configuration.force_dsl = true
326
+ ignored = Apipie.configuration.ignored_by_recorder
327
+ with_loaded_documentation do
328
+ apis_from_routes = Apipie::Extractor.apis_from_routes
329
+ apis_from_routes.each do |(controller, action), apis|
330
+ next if ignored.include?(controller)
331
+ next if ignored.include?("#{controller}##{action}")
332
+ Apipie::Extractor::Writer.update_action_description((controller.safe_constantize || next), action) do |u|
333
+ u.update_apis(apis)
334
+ end
335
+ end
336
+ end
337
+ end
338
+
339
+ desc "Convert your examples from the old yaml into the new json format"
340
+ task :convert_examples => :environment do
341
+ yaml_examples_file = File.join(Rails.root, Apipie.configuration.doc_path, "apipie_examples.yml")
342
+ if File.exist?(yaml_examples_file)
343
+ #if SafeYAML gem is enabled, it will load examples as an array of Hash, instead of hash
344
+ if defined? SafeYAML
345
+ examples = YAML.load_file(yaml_examples_file, :safe=>false)
346
+ else
347
+ examples = YAML.load_file(yaml_examples_file)
348
+ end
349
+ else
350
+ examples = {}
351
+ end
352
+ Apipie::Extractor::Writer.write_recorded_examples(examples)
353
+ end
354
+
355
+ end