praxis 2.0.pre.9 → 2.0.pre.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (214) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/CHANGELOG.md +11 -0
  4. data/TODO.md +1 -4
  5. data/bin/praxis +11 -13
  6. data/lib/praxis.rb +10 -3
  7. data/lib/praxis/action_definition.rb +15 -13
  8. data/lib/praxis/action_definition/headers_dsl_compiler.rb +0 -7
  9. data/lib/praxis/api_general_info.rb +1 -1
  10. data/lib/praxis/application.rb +6 -2
  11. data/lib/praxis/blueprint.rb +357 -0
  12. data/lib/praxis/bootloader.rb +9 -3
  13. data/lib/praxis/bootloader_stages/environment.rb +15 -13
  14. data/lib/praxis/collection.rb +1 -11
  15. data/lib/praxis/config_hash.rb +44 -0
  16. data/lib/praxis/docs/{openapi → open_api}/info_object.rb +0 -0
  17. data/lib/praxis/docs/{openapi → open_api}/media_type_object.rb +0 -0
  18. data/lib/praxis/docs/{openapi → open_api}/operation_object.rb +0 -0
  19. data/lib/praxis/docs/{openapi → open_api}/parameter_object.rb +0 -0
  20. data/lib/praxis/docs/{openapi → open_api}/paths_object.rb +0 -0
  21. data/lib/praxis/docs/{openapi → open_api}/request_body_object.rb +0 -0
  22. data/lib/praxis/docs/{openapi → open_api}/response_object.rb +0 -0
  23. data/lib/praxis/docs/{openapi → open_api}/responses_object.rb +0 -0
  24. data/lib/praxis/docs/{openapi → open_api}/schema_object.rb +0 -0
  25. data/lib/praxis/docs/{openapi → open_api}/server_object.rb +0 -0
  26. data/lib/praxis/docs/{openapi → open_api}/tag_object.rb +0 -0
  27. data/lib/praxis/docs/open_api_generator.rb +90 -5
  28. data/lib/praxis/endpoint_definition.rb +273 -0
  29. data/lib/praxis/extensions/attribute_filtering/active_record_filter_query_builder.rb +1 -1
  30. data/lib/praxis/extensions/attribute_filtering/filtering_params.rb +1 -1
  31. data/lib/praxis/extensions/field_expansion.rb +3 -36
  32. data/lib/praxis/extensions/pagination.rb +2 -2
  33. data/lib/praxis/extensions/pagination/ordering_params.rb +1 -1
  34. data/lib/praxis/extensions/pagination/pagination_params.rb +6 -4
  35. data/lib/praxis/field_expander.rb +90 -0
  36. data/lib/praxis/finalizable.rb +34 -0
  37. data/lib/praxis/mapper/selector_generator.rb +1 -1
  38. data/lib/praxis/media_type.rb +3 -68
  39. data/lib/praxis/plugin_concern.rb +1 -1
  40. data/lib/praxis/plugins/mapper_plugin.rb +7 -7
  41. data/lib/praxis/renderer.rb +88 -0
  42. data/lib/praxis/request.rb +1 -1
  43. data/lib/praxis/resource_definition.rb +2 -311
  44. data/lib/praxis/response_definition.rb +2 -10
  45. data/lib/praxis/response_template.rb +3 -3
  46. data/lib/praxis/router.rb +2 -2
  47. data/lib/praxis/routing_config.rb +1 -1
  48. data/lib/praxis/tasks/api_docs.rb +13 -63
  49. data/lib/praxis/tasks/routes.rb +1 -1
  50. data/lib/praxis/types/media_type_common.rb +1 -11
  51. data/lib/praxis/version.rb +1 -1
  52. data/praxis.gemspec +0 -1
  53. data/spec/functional_spec.rb +5 -9
  54. data/spec/praxis/action_definition_spec.rb +12 -20
  55. data/spec/praxis/blueprint_spec.rb +373 -0
  56. data/spec/praxis/bootloader_spec.rb +10 -2
  57. data/spec/praxis/collection_spec.rb +0 -13
  58. data/spec/praxis/config_hash_spec.rb +64 -0
  59. data/spec/praxis/{resource_definition_spec.rb → endpoint_definition_spec.rb} +37 -64
  60. data/spec/praxis/extensions/attribute_filtering/active_record_filter_query_builder_spec.rb +4 -6
  61. data/spec/praxis/extensions/field_expansion_spec.rb +5 -24
  62. data/spec/praxis/field_expander_spec.rb +149 -0
  63. data/spec/praxis/media_type_identifier_spec.rb +5 -4
  64. data/spec/praxis/media_type_spec.rb +4 -93
  65. data/spec/praxis/renderer_spec.rb +188 -0
  66. data/spec/praxis/response_definition_spec.rb +0 -31
  67. data/spec/praxis/response_spec.rb +1 -1
  68. data/spec/praxis/router_spec.rb +8 -8
  69. data/spec/praxis/routing_config_spec.rb +3 -3
  70. data/spec/spec_app/app/controllers/instances.rb +13 -7
  71. data/spec/spec_app/design/media_types/instance.rb +1 -19
  72. data/spec/spec_app/design/media_types/volume.rb +1 -1
  73. data/spec/spec_app/design/media_types/volume_snapshot.rb +2 -14
  74. data/spec/spec_app/design/resources/instances.rb +5 -8
  75. data/spec/spec_app/design/resources/volume_snapshots.rb +1 -1
  76. data/spec/spec_app/design/resources/volumes.rb +1 -1
  77. data/spec/support/spec_authorization_plugin.rb +1 -1
  78. data/spec/support/spec_blueprints.rb +72 -0
  79. data/spec/support/{spec_resource_definitions.rb → spec_endpoint_definitions.rb} +2 -2
  80. data/spec/support/spec_media_types.rb +6 -26
  81. data/tasks/thor/app.rb +8 -34
  82. data/tasks/thor/example.rb +45 -285
  83. data/tasks/thor/templates/generator/empty_app/.gitignore +0 -1
  84. data/tasks/thor/templates/generator/empty_app/Gemfile +7 -23
  85. data/tasks/thor/templates/generator/empty_app/README.md +1 -1
  86. data/tasks/thor/templates/generator/empty_app/Rakefile +4 -13
  87. data/tasks/thor/templates/generator/empty_app/{design/response_templates → app/v1/resources}/.empty_directory +0 -0
  88. data/tasks/thor/templates/generator/empty_app/{design/response_templates → app/v1/resources}/.gitkeep +0 -0
  89. data/tasks/thor/templates/generator/empty_app/config/environment.rb +25 -17
  90. data/tasks/thor/templates/generator/empty_app/{design/v1/resources → config/initializers}/.empty_directory +0 -0
  91. data/tasks/thor/templates/generator/empty_app/{design/v1/resources → config/initializers}/.gitkeep +0 -0
  92. data/tasks/thor/templates/generator/empty_app/design/v1/endpoints/.empty_directory +0 -0
  93. data/tasks/thor/templates/generator/empty_app/design/v1/endpoints/.gitkeep +0 -0
  94. data/tasks/thor/templates/generator/empty_app/docs/.empty_directory +0 -0
  95. data/tasks/thor/templates/generator/empty_app/docs/.gitkeep +0 -0
  96. data/tasks/thor/templates/generator/empty_app/spec/spec_helper.rb +14 -9
  97. data/tasks/thor/templates/generator/example_app/.gitignore +1 -0
  98. data/tasks/thor/templates/generator/example_app/Gemfile +19 -0
  99. data/tasks/thor/templates/generator/example_app/Rakefile +54 -0
  100. data/tasks/thor/templates/generator/example_app/app/models/user.rb +6 -0
  101. data/tasks/thor/templates/generator/example_app/app/v1/controllers/users.rb +17 -0
  102. data/tasks/thor/templates/generator/example_app/app/v1/resources/user.rb +46 -0
  103. data/tasks/thor/templates/generator/example_app/config.ru +31 -0
  104. data/tasks/thor/templates/generator/example_app/config/environment.rb +40 -0
  105. data/tasks/thor/templates/generator/example_app/db/migrate/20201010101010_create_users_table.rb +11 -0
  106. data/tasks/thor/templates/generator/example_app/design/api.rb +18 -0
  107. data/tasks/thor/templates/generator/example_app/design/v1/endpoints/users.rb +37 -0
  108. data/tasks/thor/templates/generator/example_app/design/v1/media_types/user.rb +26 -0
  109. data/tasks/thor/templates/generator/example_app/spec/helpers/database_helper.rb +18 -0
  110. data/tasks/thor/templates/generator/example_app/spec/spec_helper.rb +42 -0
  111. data/tasks/thor/templates/generator/example_app/spec/v1/controllers/users_spec.rb +37 -0
  112. metadata +49 -135
  113. data/lib/api_browser/.bowerrc +0 -3
  114. data/lib/api_browser/.editorconfig +0 -21
  115. data/lib/api_browser/Gruntfile.js +0 -581
  116. data/lib/api_browser/app/index.html +0 -59
  117. data/lib/api_browser/app/js/app.js +0 -48
  118. data/lib/api_browser/app/js/controllers/action.js +0 -47
  119. data/lib/api_browser/app/js/controllers/controller.js +0 -10
  120. data/lib/api_browser/app/js/controllers/menu.js +0 -93
  121. data/lib/api_browser/app/js/controllers/trait.js +0 -10
  122. data/lib/api_browser/app/js/controllers/type.js +0 -24
  123. data/lib/api_browser/app/js/directives/attribute_description.js +0 -56
  124. data/lib/api_browser/app/js/directives/attribute_table.js +0 -28
  125. data/lib/api_browser/app/js/directives/conditional_requirements.js +0 -13
  126. data/lib/api_browser/app/js/directives/fixed_if_fits.js +0 -38
  127. data/lib/api_browser/app/js/directives/highlight.js +0 -14
  128. data/lib/api_browser/app/js/directives/menu_item.js +0 -59
  129. data/lib/api_browser/app/js/directives/no_container.js +0 -8
  130. data/lib/api_browser/app/js/directives/readable_list.js +0 -87
  131. data/lib/api_browser/app/js/directives/request_examples.js +0 -31
  132. data/lib/api_browser/app/js/directives/type_placeholder.js +0 -30
  133. data/lib/api_browser/app/js/directives/url.js +0 -15
  134. data/lib/api_browser/app/js/factories/Configuration.js +0 -12
  135. data/lib/api_browser/app/js/factories/Documentation.js +0 -61
  136. data/lib/api_browser/app/js/factories/Example.js +0 -51
  137. data/lib/api_browser/app/js/factories/PageInfo.js +0 -9
  138. data/lib/api_browser/app/js/factories/normalize_attributes.js +0 -20
  139. data/lib/api_browser/app/js/factories/prepare_template.js +0 -15
  140. data/lib/api_browser/app/js/factories/template_for.js +0 -128
  141. data/lib/api_browser/app/js/filters/attribute_name.js +0 -10
  142. data/lib/api_browser/app/js/filters/friendly_json.js +0 -5
  143. data/lib/api_browser/app/js/filters/has_requirement.js +0 -14
  144. data/lib/api_browser/app/js/filters/header_info.js +0 -9
  145. data/lib/api_browser/app/js/filters/is_empty.js +0 -8
  146. data/lib/api_browser/app/js/filters/markdown.js +0 -6
  147. data/lib/api_browser/app/js/filters/resource_name.js +0 -5
  148. data/lib/api_browser/app/js/filters/tag_requirement.js +0 -13
  149. data/lib/api_browser/app/sass/modules/_body.scss +0 -40
  150. data/lib/api_browser/app/sass/modules/_cloke.scss +0 -8
  151. data/lib/api_browser/app/sass/modules/_header.scss +0 -10
  152. data/lib/api_browser/app/sass/modules/_nav.scss +0 -7
  153. data/lib/api_browser/app/sass/modules/_sidebar.scss +0 -134
  154. data/lib/api_browser/app/sass/modules/_switch.scss +0 -55
  155. data/lib/api_browser/app/sass/modules/_table.scss +0 -13
  156. data/lib/api_browser/app/sass/praxis.scss +0 -70
  157. data/lib/api_browser/app/sass/variables/_bootstrap-variables.scss +0 -774
  158. data/lib/api_browser/app/views/action.html +0 -97
  159. data/lib/api_browser/app/views/builtin/field-selector.html +0 -24
  160. data/lib/api_browser/app/views/controller.html +0 -55
  161. data/lib/api_browser/app/views/directives/attribute_description.html +0 -2
  162. data/lib/api_browser/app/views/directives/attribute_description/default.html +0 -2
  163. data/lib/api_browser/app/views/directives/attribute_description/example.html +0 -13
  164. data/lib/api_browser/app/views/directives/attribute_description/headers.html +0 -8
  165. data/lib/api_browser/app/views/directives/attribute_description/member_options.html +0 -4
  166. data/lib/api_browser/app/views/directives/attribute_description/values.html +0 -14
  167. data/lib/api_browser/app/views/directives/attribute_table.html +0 -17
  168. data/lib/api_browser/app/views/directives/menu_item.html +0 -8
  169. data/lib/api_browser/app/views/directives/url.html +0 -3
  170. data/lib/api_browser/app/views/examples/general.html +0 -26
  171. data/lib/api_browser/app/views/home.html +0 -5
  172. data/lib/api_browser/app/views/layout.html +0 -8
  173. data/lib/api_browser/app/views/menu.html +0 -42
  174. data/lib/api_browser/app/views/navbar.html +0 -9
  175. data/lib/api_browser/app/views/trait.html +0 -13
  176. data/lib/api_browser/app/views/type.html +0 -6
  177. data/lib/api_browser/app/views/type/details.html +0 -33
  178. data/lib/api_browser/app/views/types/embedded/array.html +0 -2
  179. data/lib/api_browser/app/views/types/embedded/default.html +0 -12
  180. data/lib/api_browser/app/views/types/embedded/field-selector.html +0 -13
  181. data/lib/api_browser/app/views/types/embedded/links.html +0 -11
  182. data/lib/api_browser/app/views/types/embedded/requirements.html +0 -6
  183. data/lib/api_browser/app/views/types/embedded/single_req.html +0 -9
  184. data/lib/api_browser/app/views/types/embedded/struct.html +0 -14
  185. data/lib/api_browser/app/views/types/label/link.html +0 -1
  186. data/lib/api_browser/app/views/types/label/primitive.html +0 -1
  187. data/lib/api_browser/app/views/types/label/primitive_collection.html +0 -1
  188. data/lib/api_browser/app/views/types/label/type.html +0 -1
  189. data/lib/api_browser/app/views/types/label/type_collection.html +0 -1
  190. data/lib/api_browser/app/views/types/main/array.html +0 -22
  191. data/lib/api_browser/app/views/types/main/default.html +0 -23
  192. data/lib/api_browser/app/views/types/main/hash.html +0 -23
  193. data/lib/api_browser/app/views/types/standalone/array.html +0 -3
  194. data/lib/api_browser/app/views/types/standalone/default.html +0 -18
  195. data/lib/api_browser/app/views/types/standalone/struct.html +0 -2
  196. data/lib/api_browser/bower_template.json +0 -41
  197. data/lib/api_browser/package-lock.json +0 -7110
  198. data/lib/api_browser/package.json +0 -43
  199. data/lib/praxis/docs/generator.rb +0 -243
  200. data/lib/praxis/docs/link_builder.rb +0 -30
  201. data/lib/praxis/links.rb +0 -135
  202. data/lib/praxis/types/multipart.rb +0 -109
  203. data/spec/api_browser/directives/type_placeholder_spec.js +0 -134
  204. data/spec/api_browser/factories/configuration_spec.js +0 -32
  205. data/spec/api_browser/factories/documentation_spec.js +0 -100
  206. data/spec/api_browser/factories/normalize_attributes_spec.js +0 -92
  207. data/spec/api_browser/factories/template_for_spec.js +0 -67
  208. data/spec/api_browser/filters/attribute_name_spec.js +0 -23
  209. data/spec/praxis/types/multipart_spec.rb +0 -112
  210. data/tasks/thor/templates/generator/empty_app/.rspec +0 -1
  211. data/tasks/thor/templates/generator/empty_app/Guardfile +0 -3
  212. data/tasks/thor/templates/generator/empty_app/config/rainbows.rb +0 -57
  213. data/tasks/thor/templates/generator/empty_app/docs/app.js +0 -1
  214. data/tasks/thor/templates/generator/empty_app/docs/styles.scss +0 -3
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module V1
4
+ module MediaTypes
5
+ class User < Praxis::MediaType
6
+ identifier 'application/json'
7
+
8
+ domain_model 'V1::Resources::User'
9
+ description 'A user in the system'
10
+
11
+ attributes do
12
+ attribute :uid, String
13
+ attribute :uuid, String
14
+ attribute :email, String
15
+ attribute :first_name, String
16
+ attribute :last_name, String
17
+ attribute :state, String, values: %i[pending active]
18
+ end
19
+
20
+ default_fieldset do
21
+ attribute :uid
22
+ end
23
+ end
24
+ end
25
+ end
26
+
@@ -0,0 +1,18 @@
1
+ require 'active_record'
2
+
3
+ class DatabaseHelper
4
+ # Simple DB seeding to avoid bringing in other gems like FactoryGirl etc.
5
+ # This does the job for an example seeder
6
+ def self.seed!
7
+ user_data = [
8
+ {id: 11, first_name: 'Peter', last_name: 'Praxis', uuid: 'deadbeef'},
9
+ {id: 12, first_name: 'Alice', last_name: 'Trellis', uuid: 'beefdead'}
10
+ ]
11
+ (100..199).each do |i|
12
+ user_data.push id: i, first_name: "User-#{i}", last_name: "Last-#{i}", uuid: SecureRandom.hex(16).to_s
13
+ end
14
+ user_data.each_with_index do |data, i|
15
+ ::User.create(**data)
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,42 @@
1
+ Bundler.setup :default, :test
2
+ Bundler.require :default, :test
3
+ ENV['RACK_ENV'] = 'test'
4
+
5
+ begin
6
+ APP=Rack::Builder.parse_file(File.expand_path('../config.ru', __dir__)).first
7
+ rescue => e
8
+ puts "Application failed to initialize:"
9
+ raise e
10
+ exit 1
11
+ end
12
+
13
+ # Migrate and seed the DB (only an empty in-memory DB)
14
+ require_relative 'helpers/database_helper'
15
+ ActiveRecord::Migration.verbose = false # ?? does not seem to work like this
16
+ ActiveRecord::Tasks::DatabaseTasks.migrate
17
+ DatabaseHelper.seed!
18
+
19
+ RSpec.configure do |config|
20
+ config.include Rack::Test::Methods
21
+
22
+ config.before(:suite) do
23
+ # Praxis::Blueprint.caching_enabled = true
24
+ DatabaseCleaner.strategy = :transaction
25
+ end
26
+ config.around(:each) do |example|
27
+ DatabaseCleaner.cleaning do
28
+ example.run
29
+ end
30
+ end
31
+
32
+ # config.before(:each) do
33
+ # Praxis::Blueprint.cache = Hash.new do |hash, key|
34
+ # hash[key] = Hash.new
35
+ # end
36
+ # end
37
+
38
+ def app
39
+ APP
40
+ end
41
+ end
42
+
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+
4
+ require 'spec_helper'
5
+ describe V1::Controllers::Users do
6
+ before do
7
+ header 'X-API-Version', '1'
8
+ end
9
+
10
+ let(:response) { subject; last_response }
11
+ let(:json_payload) { JSON.dump(payload) }
12
+ let(:parsed_body) { JSON.parse(response.body, symbolize_names: true) }
13
+
14
+ context 'index' do
15
+ let(:filters_q) { '' }
16
+ let(:fields_q) { 'uid,uuid' }
17
+ let(:query_string) do
18
+ "filters=#{CGI.escape(filters_q)}&fields=#{CGI.escape(fields_q)}"
19
+ end
20
+ subject { get "/users?#{query_string}" }
21
+
22
+ context 'without filters' do
23
+ it { expect(response.status).to eq 200 }
24
+ it 'returns all users' do
25
+ expect(parsed_body.size).to eq(2+100)
26
+ end
27
+ end
28
+ context 'using filters' do
29
+ let(:filters_q) { 'first_name=Peter' }
30
+ it 'returns only peter' do
31
+ expect(parsed_body.size).to eq(1)
32
+ # Peter has id 11 from our seeds
33
+ expect(parsed_body.map{|u| u[:uid]}).to eq(['11'])
34
+ end
35
+ end
36
+ end
37
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: praxis
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.pre.9
4
+ version: 2.0.pre.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josep M. Blanquer
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-11-30 00:00:00.000000000 Z
12
+ date: 2020-12-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rack
@@ -73,20 +73,6 @@ dependencies:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
- - !ruby/object:Gem::Dependency
77
- name: praxis-blueprints
78
- requirement: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '3.5'
83
- type: :runtime
84
- prerelease: false
85
- version_requirements: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '3.5'
90
76
  - !ruby/object:Gem::Dependency
91
77
  name: attributor
92
78
  requirement: !ruby/object:Gem::Requirement
@@ -406,98 +392,13 @@ files:
406
392
  - Rakefile
407
393
  - TODO.md
408
394
  - bin/praxis
409
- - lib/api_browser/.bowerrc
410
- - lib/api_browser/.editorconfig
411
- - lib/api_browser/Gruntfile.js
412
- - lib/api_browser/app/index.html
413
- - lib/api_browser/app/js/app.js
414
- - lib/api_browser/app/js/controllers/action.js
415
- - lib/api_browser/app/js/controllers/controller.js
416
- - lib/api_browser/app/js/controllers/menu.js
417
- - lib/api_browser/app/js/controllers/trait.js
418
- - lib/api_browser/app/js/controllers/type.js
419
- - lib/api_browser/app/js/directives/attribute_description.js
420
- - lib/api_browser/app/js/directives/attribute_table.js
421
- - lib/api_browser/app/js/directives/conditional_requirements.js
422
- - lib/api_browser/app/js/directives/fixed_if_fits.js
423
- - lib/api_browser/app/js/directives/highlight.js
424
- - lib/api_browser/app/js/directives/menu_item.js
425
- - lib/api_browser/app/js/directives/no_container.js
426
- - lib/api_browser/app/js/directives/readable_list.js
427
- - lib/api_browser/app/js/directives/request_examples.js
428
- - lib/api_browser/app/js/directives/type_placeholder.js
429
- - lib/api_browser/app/js/directives/url.js
430
- - lib/api_browser/app/js/factories/Configuration.js
431
- - lib/api_browser/app/js/factories/Documentation.js
432
- - lib/api_browser/app/js/factories/Example.js
433
- - lib/api_browser/app/js/factories/PageInfo.js
434
- - lib/api_browser/app/js/factories/normalize_attributes.js
435
- - lib/api_browser/app/js/factories/prepare_template.js
436
- - lib/api_browser/app/js/factories/template_for.js
437
- - lib/api_browser/app/js/filters/attribute_name.js
438
- - lib/api_browser/app/js/filters/friendly_json.js
439
- - lib/api_browser/app/js/filters/has_requirement.js
440
- - lib/api_browser/app/js/filters/header_info.js
441
- - lib/api_browser/app/js/filters/is_empty.js
442
- - lib/api_browser/app/js/filters/markdown.js
443
- - lib/api_browser/app/js/filters/resource_name.js
444
- - lib/api_browser/app/js/filters/tag_requirement.js
445
- - lib/api_browser/app/sass/modules/_body.scss
446
- - lib/api_browser/app/sass/modules/_cloke.scss
447
- - lib/api_browser/app/sass/modules/_header.scss
448
- - lib/api_browser/app/sass/modules/_nav.scss
449
- - lib/api_browser/app/sass/modules/_sidebar.scss
450
- - lib/api_browser/app/sass/modules/_switch.scss
451
- - lib/api_browser/app/sass/modules/_table.scss
452
- - lib/api_browser/app/sass/praxis.scss
453
- - lib/api_browser/app/sass/variables/_bootstrap-variables.scss
454
- - lib/api_browser/app/views/action.html
455
- - lib/api_browser/app/views/builtin/field-selector.html
456
- - lib/api_browser/app/views/controller.html
457
- - lib/api_browser/app/views/directives/attribute_description.html
458
- - lib/api_browser/app/views/directives/attribute_description/default.html
459
- - lib/api_browser/app/views/directives/attribute_description/example.html
460
- - lib/api_browser/app/views/directives/attribute_description/headers.html
461
- - lib/api_browser/app/views/directives/attribute_description/member_options.html
462
- - lib/api_browser/app/views/directives/attribute_description/values.html
463
- - lib/api_browser/app/views/directives/attribute_table.html
464
- - lib/api_browser/app/views/directives/menu_item.html
465
- - lib/api_browser/app/views/directives/url.html
466
- - lib/api_browser/app/views/examples/general.html
467
- - lib/api_browser/app/views/home.html
468
- - lib/api_browser/app/views/layout.html
469
- - lib/api_browser/app/views/menu.html
470
- - lib/api_browser/app/views/navbar.html
471
- - lib/api_browser/app/views/trait.html
472
- - lib/api_browser/app/views/type.html
473
- - lib/api_browser/app/views/type/details.html
474
- - lib/api_browser/app/views/types/embedded/array.html
475
- - lib/api_browser/app/views/types/embedded/default.html
476
- - lib/api_browser/app/views/types/embedded/field-selector.html
477
- - lib/api_browser/app/views/types/embedded/links.html
478
- - lib/api_browser/app/views/types/embedded/requirements.html
479
- - lib/api_browser/app/views/types/embedded/single_req.html
480
- - lib/api_browser/app/views/types/embedded/struct.html
481
- - lib/api_browser/app/views/types/label/link.html
482
- - lib/api_browser/app/views/types/label/primitive.html
483
- - lib/api_browser/app/views/types/label/primitive_collection.html
484
- - lib/api_browser/app/views/types/label/type.html
485
- - lib/api_browser/app/views/types/label/type_collection.html
486
- - lib/api_browser/app/views/types/main/array.html
487
- - lib/api_browser/app/views/types/main/default.html
488
- - lib/api_browser/app/views/types/main/hash.html
489
- - lib/api_browser/app/views/types/standalone/array.html
490
- - lib/api_browser/app/views/types/standalone/default.html
491
- - lib/api_browser/app/views/types/standalone/struct.html
492
- - lib/api_browser/bower_template.json
493
- - lib/api_browser/package-lock.json
494
- - lib/api_browser/package.json
495
395
  - lib/praxis.rb
496
396
  - lib/praxis/action_definition.rb
497
397
  - lib/praxis/action_definition/headers_dsl_compiler.rb
498
398
  - lib/praxis/api_definition.rb
499
399
  - lib/praxis/api_general_info.rb
500
400
  - lib/praxis/application.rb
401
+ - lib/praxis/blueprint.rb
501
402
  - lib/praxis/bootloader.rb
502
403
  - lib/praxis/bootloader_stages/environment.rb
503
404
  - lib/praxis/bootloader_stages/file_loader.rb
@@ -511,22 +412,22 @@ files:
511
412
  - lib/praxis/callbacks.rb
512
413
  - lib/praxis/collection.rb
513
414
  - lib/praxis/config.rb
415
+ - lib/praxis/config_hash.rb
514
416
  - lib/praxis/controller.rb
515
417
  - lib/praxis/dispatcher.rb
516
- - lib/praxis/docs/generator.rb
517
- - lib/praxis/docs/link_builder.rb
418
+ - lib/praxis/docs/open_api/info_object.rb
419
+ - lib/praxis/docs/open_api/media_type_object.rb
420
+ - lib/praxis/docs/open_api/operation_object.rb
421
+ - lib/praxis/docs/open_api/parameter_object.rb
422
+ - lib/praxis/docs/open_api/paths_object.rb
423
+ - lib/praxis/docs/open_api/request_body_object.rb
424
+ - lib/praxis/docs/open_api/response_object.rb
425
+ - lib/praxis/docs/open_api/responses_object.rb
426
+ - lib/praxis/docs/open_api/schema_object.rb
427
+ - lib/praxis/docs/open_api/server_object.rb
428
+ - lib/praxis/docs/open_api/tag_object.rb
518
429
  - lib/praxis/docs/open_api_generator.rb
519
- - lib/praxis/docs/openapi/info_object.rb
520
- - lib/praxis/docs/openapi/media_type_object.rb
521
- - lib/praxis/docs/openapi/operation_object.rb
522
- - lib/praxis/docs/openapi/parameter_object.rb
523
- - lib/praxis/docs/openapi/paths_object.rb
524
- - lib/praxis/docs/openapi/request_body_object.rb
525
- - lib/praxis/docs/openapi/response_object.rb
526
- - lib/praxis/docs/openapi/responses_object.rb
527
- - lib/praxis/docs/openapi/schema_object.rb
528
- - lib/praxis/docs/openapi/server_object.rb
529
- - lib/praxis/docs/openapi/tag_object.rb
430
+ - lib/praxis/endpoint_definition.rb
530
431
  - lib/praxis/error_handler.rb
531
432
  - lib/praxis/exception.rb
532
433
  - lib/praxis/exceptions/config.rb
@@ -561,12 +462,13 @@ files:
561
462
  - lib/praxis/extensions/rails_compat.rb
562
463
  - lib/praxis/extensions/rails_compat/request_methods.rb
563
464
  - lib/praxis/extensions/rendering.rb
465
+ - lib/praxis/field_expander.rb
564
466
  - lib/praxis/file_group.rb
467
+ - lib/praxis/finalizable.rb
565
468
  - lib/praxis/handlers/json.rb
566
469
  - lib/praxis/handlers/plain.rb
567
470
  - lib/praxis/handlers/www_form.rb
568
471
  - lib/praxis/handlers/xml-sample.rb
569
- - lib/praxis/links.rb
570
472
  - lib/praxis/mapper/active_model_compat.rb
571
473
  - lib/praxis/mapper/resource.rb
572
474
  - lib/praxis/mapper/selector_generator.rb
@@ -582,6 +484,7 @@ files:
582
484
  - lib/praxis/plugins/mapper_plugin.rb
583
485
  - lib/praxis/plugins/pagination_plugin.rb
584
486
  - lib/praxis/plugins/rails_plugin.rb
487
+ - lib/praxis/renderer.rb
585
488
  - lib/praxis/request.rb
586
489
  - lib/praxis/request_stages/action.rb
587
490
  - lib/praxis/request_stages/load_request.rb
@@ -614,30 +517,26 @@ files:
614
517
  - lib/praxis/trait.rb
615
518
  - lib/praxis/types/fuzzy_hash.rb
616
519
  - lib/praxis/types/media_type_common.rb
617
- - lib/praxis/types/multipart.rb
618
520
  - lib/praxis/types/multipart_array.rb
619
521
  - lib/praxis/types/multipart_array/part_definition.rb
620
522
  - lib/praxis/validation_handler.rb
621
523
  - lib/praxis/version.rb
622
524
  - praxis.gemspec
623
- - spec/api_browser/directives/type_placeholder_spec.js
624
- - spec/api_browser/factories/configuration_spec.js
625
- - spec/api_browser/factories/documentation_spec.js
626
- - spec/api_browser/factories/normalize_attributes_spec.js
627
- - spec/api_browser/factories/template_for_spec.js
628
- - spec/api_browser/filters/attribute_name_spec.js
629
525
  - spec/functional_spec.rb
630
526
  - spec/praxis/action_definition_spec.rb
631
527
  - spec/praxis/api_definition_spec.rb
632
528
  - spec/praxis/api_general_info_spec.rb
633
529
  - spec/praxis/api_resource_spec.rb
634
530
  - spec/praxis/application_spec.rb
531
+ - spec/praxis/blueprint_spec.rb
635
532
  - spec/praxis/bootloader_spec.rb
636
533
  - spec/praxis/callbacks_spec.rb
637
534
  - spec/praxis/collection_spec.rb
535
+ - spec/praxis/config_hash_spec.rb
638
536
  - spec/praxis/config_spec.rb
639
537
  - spec/praxis/controller_spec.rb
640
538
  - spec/praxis/dispatcher_spec.rb
539
+ - spec/praxis/endpoint_definition_spec.rb
641
540
  - spec/praxis/extensions/attribute_filtering/active_record_filter_query_builder_spec.rb
642
541
  - spec/praxis/extensions/attribute_filtering/filter_tree_node_spec.rb
643
542
  - spec/praxis/extensions/attribute_filtering/filtering_params_spec.rb
@@ -649,6 +548,7 @@ files:
649
548
  - spec/praxis/extensions/rendering_spec.rb
650
549
  - spec/praxis/extensions/support/spec_resources_active_model.rb
651
550
  - spec/praxis/extensions/support/spec_resources_sequel.rb
551
+ - spec/praxis/field_expander_spec.rb
652
552
  - spec/praxis/file_group_spec.rb
653
553
  - spec/praxis/handlers/json_spec.rb
654
554
  - spec/praxis/mapper/resource_spec.rb
@@ -659,11 +559,11 @@ files:
659
559
  - spec/praxis/multipart/parser_spec.rb
660
560
  - spec/praxis/notifications_spec.rb
661
561
  - spec/praxis/plugin_concern_spec.rb
562
+ - spec/praxis/renderer_spec.rb
662
563
  - spec/praxis/request_spec.rb
663
564
  - spec/praxis/request_stages/action_spec.rb
664
565
  - spec/praxis/request_stages/request_stage_spec.rb
665
566
  - spec/praxis/request_stages/validate_spec.rb
666
- - spec/praxis/resource_definition_spec.rb
667
567
  - spec/praxis/response_definition_spec.rb
668
568
  - spec/praxis/response_spec.rb
669
569
  - spec/praxis/responses/internal_server_error_spec.rb
@@ -676,7 +576,6 @@ files:
676
576
  - spec/praxis/types/fuzzy_hash_spec.rb
677
577
  - spec/praxis/types/multipart_array/part_definition_spec.rb
678
578
  - spec/praxis/types/multipart_array_spec.rb
679
- - spec/praxis/types/multipart_spec.rb
680
579
  - spec/spec_app/app/concerns/authenticated.rb
681
580
  - spec/spec_app/app/concerns/basic_api.rb
682
581
  - spec/spec_app/app/concerns/log_wrapper.rb
@@ -706,18 +605,17 @@ files:
706
605
  - spec/spec_helper.rb
707
606
  - spec/support/be_deep_equal_matcher.rb
708
607
  - spec/support/spec_authorization_plugin.rb
608
+ - spec/support/spec_blueprints.rb
709
609
  - spec/support/spec_complex_authentication_plugin.rb
610
+ - spec/support/spec_endpoint_definitions.rb
710
611
  - spec/support/spec_media_types.rb
711
- - spec/support/spec_resource_definitions.rb
712
612
  - spec/support/spec_resources.rb
713
613
  - spec/support/spec_simple_authentication_plugin.rb
714
614
  - tasks/loader.thor
715
615
  - tasks/thor/app.rb
716
616
  - tasks/thor/example.rb
717
617
  - tasks/thor/templates/generator/empty_app/.gitignore
718
- - tasks/thor/templates/generator/empty_app/.rspec
719
618
  - tasks/thor/templates/generator/empty_app/Gemfile
720
- - tasks/thor/templates/generator/empty_app/Guardfile
721
619
  - tasks/thor/templates/generator/empty_app/README.md
722
620
  - tasks/thor/templates/generator/empty_app/Rakefile
723
621
  - tasks/thor/templates/generator/empty_app/app/models/.empty_directory
@@ -726,19 +624,35 @@ files:
726
624
  - tasks/thor/templates/generator/empty_app/app/responses/.gitkeep
727
625
  - tasks/thor/templates/generator/empty_app/app/v1/controllers/.empty_directory
728
626
  - tasks/thor/templates/generator/empty_app/app/v1/controllers/.gitkeep
627
+ - tasks/thor/templates/generator/empty_app/app/v1/resources/.empty_directory
628
+ - tasks/thor/templates/generator/empty_app/app/v1/resources/.gitkeep
729
629
  - tasks/thor/templates/generator/empty_app/config.ru
730
630
  - tasks/thor/templates/generator/empty_app/config/environment.rb
731
- - tasks/thor/templates/generator/empty_app/config/rainbows.rb
631
+ - tasks/thor/templates/generator/empty_app/config/initializers/.empty_directory
632
+ - tasks/thor/templates/generator/empty_app/config/initializers/.gitkeep
732
633
  - tasks/thor/templates/generator/empty_app/design/api.rb
733
- - tasks/thor/templates/generator/empty_app/design/response_templates/.empty_directory
734
- - tasks/thor/templates/generator/empty_app/design/response_templates/.gitkeep
634
+ - tasks/thor/templates/generator/empty_app/design/v1/endpoints/.empty_directory
635
+ - tasks/thor/templates/generator/empty_app/design/v1/endpoints/.gitkeep
735
636
  - tasks/thor/templates/generator/empty_app/design/v1/media_types/.empty_directory
736
637
  - tasks/thor/templates/generator/empty_app/design/v1/media_types/.gitkeep
737
- - tasks/thor/templates/generator/empty_app/design/v1/resources/.empty_directory
738
- - tasks/thor/templates/generator/empty_app/design/v1/resources/.gitkeep
739
- - tasks/thor/templates/generator/empty_app/docs/app.js
740
- - tasks/thor/templates/generator/empty_app/docs/styles.scss
638
+ - tasks/thor/templates/generator/empty_app/docs/.empty_directory
639
+ - tasks/thor/templates/generator/empty_app/docs/.gitkeep
741
640
  - tasks/thor/templates/generator/empty_app/spec/spec_helper.rb
641
+ - tasks/thor/templates/generator/example_app/.gitignore
642
+ - tasks/thor/templates/generator/example_app/Gemfile
643
+ - tasks/thor/templates/generator/example_app/Rakefile
644
+ - tasks/thor/templates/generator/example_app/app/models/user.rb
645
+ - tasks/thor/templates/generator/example_app/app/v1/controllers/users.rb
646
+ - tasks/thor/templates/generator/example_app/app/v1/resources/user.rb
647
+ - tasks/thor/templates/generator/example_app/config.ru
648
+ - tasks/thor/templates/generator/example_app/config/environment.rb
649
+ - tasks/thor/templates/generator/example_app/db/migrate/20201010101010_create_users_table.rb
650
+ - tasks/thor/templates/generator/example_app/design/api.rb
651
+ - tasks/thor/templates/generator/example_app/design/v1/endpoints/users.rb
652
+ - tasks/thor/templates/generator/example_app/design/v1/media_types/user.rb
653
+ - tasks/thor/templates/generator/example_app/spec/helpers/database_helper.rb
654
+ - tasks/thor/templates/generator/example_app/spec/spec_helper.rb
655
+ - tasks/thor/templates/generator/example_app/spec/v1/controllers/users_spec.rb
742
656
  homepage: https://github.com/praxis/praxis
743
657
  licenses:
744
658
  - MIT
@@ -1,3 +0,0 @@
1
- {
2
- "directory": "app/bower_components"
3
- }