praxis 2.0.pre.17 → 2.0.pre.21
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.
- checksums.yaml +4 -4
- data/.rubocop.yml +54 -0
- data/.simplecov +3 -1
- data/.travis.yml +2 -1
- data/CHANGELOG.md +19 -0
- data/CONTRIBUTING.md +2 -79
- data/Gemfile +5 -1
- data/Guardfile +6 -4
- data/LICENSE +0 -2
- data/MAINTAINERS.md +1 -0
- data/README.md +15 -22
- data/Rakefile +4 -2
- data/bin/praxis +55 -58
- data/lib/praxis/action_definition/headers_dsl_compiler.rb +5 -6
- data/lib/praxis/action_definition.rb +65 -95
- data/lib/praxis/api_definition.rb +21 -29
- data/lib/praxis/api_general_info.rb +55 -66
- data/lib/praxis/application.rb +15 -32
- data/lib/praxis/blueprint.rb +80 -73
- data/lib/praxis/bootloader.rb +24 -33
- data/lib/praxis/bootloader_stages/environment.rb +5 -10
- data/lib/praxis/bootloader_stages/file_loader.rb +3 -6
- data/lib/praxis/bootloader_stages/plugin_config_load.rb +4 -6
- data/lib/praxis/bootloader_stages/plugin_config_prepare.rb +2 -2
- data/lib/praxis/bootloader_stages/plugin_loader.rb +3 -7
- data/lib/praxis/bootloader_stages/plugin_setup.rb +3 -3
- data/lib/praxis/bootloader_stages/routing.rb +5 -8
- data/lib/praxis/bootloader_stages/subgroup_loader.rb +2 -10
- data/lib/praxis/bootloader_stages/warn_unloaded_files.rb +15 -19
- data/lib/praxis/callbacks.rb +12 -11
- data/lib/praxis/collection.rb +11 -14
- data/lib/praxis/config.rb +17 -28
- data/lib/praxis/config_hash.rb +2 -1
- data/lib/praxis/controller.rb +7 -6
- data/lib/praxis/dispatcher.rb +34 -42
- data/lib/praxis/docs/open_api/info_object.rb +11 -8
- data/lib/praxis/docs/open_api/media_type_object.rb +18 -17
- data/lib/praxis/docs/open_api/operation_object.rb +7 -4
- data/lib/praxis/docs/open_api/parameter_object.rb +17 -14
- data/lib/praxis/docs/open_api/paths_object.rb +11 -9
- data/lib/praxis/docs/open_api/request_body_object.rb +14 -13
- data/lib/praxis/docs/open_api/response_object.rb +24 -18
- data/lib/praxis/docs/open_api/responses_object.rb +3 -1
- data/lib/praxis/docs/open_api/schema_object.rb +61 -29
- data/lib/praxis/docs/open_api/server_object.rb +5 -2
- data/lib/praxis/docs/open_api/tag_object.rb +9 -6
- data/lib/praxis/docs/open_api_generator.rb +114 -150
- data/lib/praxis/endpoint_definition.rb +60 -77
- data/lib/praxis/error_handler.rb +2 -2
- data/lib/praxis/exception.rb +2 -0
- data/lib/praxis/exceptions/config.rb +3 -1
- data/lib/praxis/exceptions/config_load.rb +2 -0
- data/lib/praxis/exceptions/config_validation.rb +3 -1
- data/lib/praxis/exceptions/invalid_configuration.rb +3 -1
- data/lib/praxis/exceptions/invalid_response.rb +3 -1
- data/lib/praxis/exceptions/invalid_trait.rb +3 -1
- data/lib/praxis/exceptions/stage_not_found.rb +3 -1
- data/lib/praxis/exceptions/validation.rb +4 -3
- data/lib/praxis/extensions/attribute_filtering/active_record_filter_query_builder.rb +163 -149
- data/lib/praxis/extensions/attribute_filtering/active_record_patches/5x.rb +18 -13
- data/lib/praxis/extensions/attribute_filtering/active_record_patches/6_0.rb +13 -9
- data/lib/praxis/extensions/attribute_filtering/active_record_patches/6_1_plus.rb +14 -11
- data/lib/praxis/extensions/attribute_filtering/active_record_patches.rb +12 -9
- data/lib/praxis/extensions/attribute_filtering/filter_tree_node.rb +8 -5
- data/lib/praxis/extensions/attribute_filtering/filtering_params.rb +89 -65
- data/lib/praxis/extensions/attribute_filtering/filters_parser.rb +68 -62
- data/lib/praxis/extensions/attribute_filtering.rb +3 -1
- data/lib/praxis/extensions/field_expansion.rb +6 -4
- data/lib/praxis/extensions/field_selection/active_record_query_selector.rb +10 -8
- data/lib/praxis/extensions/field_selection/field_selector.rb +91 -92
- data/lib/praxis/extensions/field_selection/sequel_query_selector.rb +12 -12
- data/lib/praxis/extensions/field_selection.rb +3 -1
- data/lib/praxis/extensions/pagination/active_record_pagination_handler.rb +6 -4
- data/lib/praxis/extensions/pagination/header_generator.rb +16 -11
- data/lib/praxis/extensions/pagination/ordering_params.rb +29 -28
- data/lib/praxis/extensions/pagination/pagination_handler.rb +44 -42
- data/lib/praxis/extensions/pagination/pagination_params.rb +29 -48
- data/lib/praxis/extensions/pagination/sequel_pagination_handler.rb +8 -7
- data/lib/praxis/extensions/pagination.rb +10 -15
- data/lib/praxis/extensions/rails_compat/request_methods.rb +3 -4
- data/lib/praxis/extensions/rails_compat.rb +2 -0
- data/lib/praxis/extensions/rendering.rb +12 -12
- data/lib/praxis/field_expander.rb +8 -9
- data/lib/praxis/file_group.rb +8 -12
- data/lib/praxis/finalizable.rb +1 -0
- data/lib/praxis/handlers/json.rb +5 -2
- data/lib/praxis/handlers/plain.rb +2 -1
- data/lib/praxis/handlers/www_form.rb +6 -3
- data/lib/praxis/handlers/{xml-sample.rb → xml_sample.rb} +26 -22
- data/lib/praxis/mapper/active_model_compat.rb +13 -10
- data/lib/praxis/mapper/resource.rb +196 -181
- data/lib/praxis/mapper/selector_generator.rb +106 -112
- data/lib/praxis/mapper/sequel_compat.rb +70 -67
- data/lib/praxis/media_type.rb +2 -2
- data/lib/praxis/media_type_identifier.rb +26 -22
- data/lib/praxis/middleware_app.rb +18 -15
- data/lib/praxis/multipart/parser.rb +46 -51
- data/lib/praxis/multipart/part.rb +78 -110
- data/lib/praxis/notifications.rb +2 -4
- data/lib/praxis/plugin.rb +11 -18
- data/lib/praxis/plugin_concern.rb +12 -15
- data/lib/praxis/plugins/mapper_plugin.rb +15 -13
- data/lib/praxis/plugins/pagination_plugin.rb +8 -6
- data/lib/praxis/plugins/rails_plugin.rb +33 -28
- data/lib/praxis/renderer.rb +11 -15
- data/lib/praxis/request.rb +48 -44
- data/lib/praxis/request_stages/action.rb +4 -6
- data/lib/praxis/request_stages/load_request.rb +2 -4
- data/lib/praxis/request_stages/request_stage.rb +19 -23
- data/lib/praxis/request_stages/response.rb +4 -6
- data/lib/praxis/request_stages/validate.rb +3 -5
- data/lib/praxis/request_stages/validate_params_and_headers.rb +15 -22
- data/lib/praxis/request_stages/validate_payload.rb +25 -28
- data/lib/praxis/request_superclassing.rb +3 -3
- data/lib/praxis/resource_definition.rb +1 -0
- data/lib/praxis/response.rb +24 -26
- data/lib/praxis/response_definition.rb +77 -122
- data/lib/praxis/response_template.rb +11 -15
- data/lib/praxis/responses/http.rb +23 -44
- data/lib/praxis/responses/internal_server_error.rb +18 -21
- data/lib/praxis/responses/multipart_ok.rb +4 -9
- data/lib/praxis/responses/validation_error.rb +8 -15
- data/lib/praxis/route.rb +8 -10
- data/lib/praxis/router/rack.rb +13 -7
- data/lib/praxis/router/simple.rb +10 -5
- data/lib/praxis/router.rb +27 -34
- data/lib/praxis/routing_config.rb +52 -29
- data/lib/praxis/simple_media_type.rb +5 -8
- data/lib/praxis/stage.rb +17 -25
- data/lib/praxis/tasks/api_docs.rb +17 -16
- data/lib/praxis/tasks/console.rb +3 -1
- data/lib/praxis/tasks/environment.rb +2 -0
- data/lib/praxis/tasks/routes.rb +26 -24
- data/lib/praxis/tasks.rb +3 -1
- data/lib/praxis/trait.rb +37 -46
- data/lib/praxis/types/fuzzy_hash.rb +13 -14
- data/lib/praxis/types/media_type_common.rb +11 -10
- data/lib/praxis/types/multipart_array/part_definition.rb +14 -17
- data/lib/praxis/types/multipart_array.rb +100 -115
- data/lib/praxis/validation_handler.rb +5 -3
- data/lib/praxis/version.rb +3 -1
- data/lib/praxis.rb +4 -5
- data/praxis.gemspec +22 -21
- data/spec/functional_spec.rb +44 -56
- data/spec/praxis/action_definition_spec.rb +39 -48
- data/spec/praxis/api_definition_spec.rb +45 -47
- data/spec/praxis/api_general_info_spec.rb +28 -29
- data/spec/praxis/application_spec.rb +18 -14
- data/spec/praxis/blueprint_spec.rb +33 -34
- data/spec/praxis/bootloader_spec.rb +32 -30
- data/spec/praxis/callbacks_spec.rb +37 -37
- data/spec/praxis/collection_spec.rb +18 -25
- data/spec/praxis/config_hash_spec.rb +5 -4
- data/spec/praxis/config_spec.rb +27 -26
- data/spec/praxis/controller_spec.rb +8 -9
- data/spec/praxis/endpoint_definition_spec.rb +25 -32
- data/spec/praxis/extensions/attribute_filtering/active_record_filter_query_builder_spec.rb +171 -114
- data/spec/praxis/extensions/attribute_filtering/filter_tree_node_spec.rb +22 -21
- data/spec/praxis/extensions/attribute_filtering/filtering_params_spec.rb +112 -60
- data/spec/praxis/extensions/attribute_filtering/filters_parser_spec.rb +37 -38
- data/spec/praxis/extensions/field_expansion_spec.rb +8 -10
- data/spec/praxis/extensions/field_selection/active_record_query_selector_spec.rb +14 -13
- data/spec/praxis/extensions/field_selection/field_selector_spec.rb +9 -16
- data/spec/praxis/extensions/field_selection/sequel_query_selector_spec.rb +50 -49
- data/spec/praxis/extensions/pagination/active_record_pagination_handler_spec.rb +32 -31
- data/spec/praxis/extensions/rendering_spec.rb +9 -9
- data/spec/praxis/extensions/support/spec_resources_active_model.rb +32 -49
- data/spec/praxis/extensions/support/spec_resources_sequel.rb +48 -48
- data/spec/praxis/field_expander_spec.rb +6 -5
- data/spec/praxis/file_group_spec.rb +3 -1
- data/spec/praxis/handlers/json_spec.rb +6 -5
- data/spec/praxis/mapper/resource_spec.rb +39 -29
- data/spec/praxis/mapper/selector_generator_spec.rb +80 -46
- data/spec/praxis/media_type_identifier_spec.rb +13 -10
- data/spec/praxis/media_type_spec.rb +12 -12
- data/spec/praxis/middleware_app_spec.rb +23 -22
- data/spec/praxis/multipart/parser_spec.rb +7 -9
- data/spec/praxis/notifications_spec.rb +4 -4
- data/spec/praxis/plugin_concern_spec.rb +5 -6
- data/spec/praxis/renderer_spec.rb +10 -9
- data/spec/praxis/request_spec.rb +38 -41
- data/spec/praxis/request_stages/action_spec.rb +14 -15
- data/spec/praxis/request_stages/request_stage_spec.rb +30 -41
- data/spec/praxis/request_stages/validate_spec.rb +3 -1
- data/spec/praxis/response_definition_spec.rb +79 -92
- data/spec/praxis/response_spec.rb +35 -40
- data/spec/praxis/responses/internal_server_error_spec.rb +6 -9
- data/spec/praxis/responses/validation_error_spec.rb +17 -18
- data/spec/praxis/route_spec.rb +4 -7
- data/spec/praxis/router_spec.rb +69 -79
- data/spec/praxis/routing_config_spec.rb +15 -14
- data/spec/praxis/stage_spec.rb +56 -53
- data/spec/praxis/trait_spec.rb +17 -17
- data/spec/praxis/types/fuzzy_hash_spec.rb +11 -9
- data/spec/praxis/types/multipart_array/part_definition_spec.rb +3 -2
- data/spec/praxis/types/multipart_array_spec.rb +33 -48
- data/spec/spec_app/app/concerns/authenticated.rb +5 -5
- data/spec/spec_app/app/concerns/basic_api.rb +3 -1
- data/spec/spec_app/app/concerns/log_wrapper.rb +5 -3
- data/spec/spec_app/app/controllers/base_class.rb +6 -5
- data/spec/spec_app/app/controllers/instances.rb +31 -34
- data/spec/spec_app/app/controllers/volumes.rb +6 -6
- data/spec/spec_app/app/responses/multipart.rb +1 -2
- data/spec/spec_app/app/responses/other_response.rb +2 -2
- data/spec/spec_app/config/environment.rb +19 -6
- data/spec/spec_app/config.ru +4 -3
- data/spec/spec_app/design/api.rb +13 -15
- data/spec/spec_app/design/media_types/instance.rb +6 -6
- data/spec/spec_app/design/media_types/volume.rb +2 -1
- data/spec/spec_app/design/media_types/volume_snapshot.rb +2 -1
- data/spec/spec_app/design/resources/instances.rb +11 -17
- data/spec/spec_app/design/resources/volume_snapshots.rb +4 -5
- data/spec/spec_app/design/resources/volumes.rb +4 -5
- data/spec/spec_helper.rb +11 -13
- data/spec/support/be_deep_equal_matcher.rb +5 -0
- data/spec/support/spec_authorization_plugin.rb +7 -12
- data/spec/support/spec_blueprints.rb +5 -4
- data/spec/support/spec_complex_authentication_plugin.rb +17 -34
- data/spec/support/spec_endpoint_definitions.rb +2 -3
- data/spec/support/spec_media_types.rb +28 -35
- data/spec/support/spec_resources.rb +22 -16
- data/spec/support/spec_simple_authentication_plugin.rb +5 -9
- data/tasks/loader.thor +4 -2
- data/tasks/thor/app.rb +7 -5
- data/tasks/thor/example.rb +23 -22
- data/tasks/thor/model.rb +7 -7
- data/tasks/thor/scaffold.rb +23 -23
- data/tasks/thor/templates/generator/example_app/app/v1/resources/user.rb +0 -8
- data/tasks/thor/templates/generator/scaffold/implementation/resources/item.rb +1 -2
- metadata +72 -84
- data/MAINTAINERS +0 -2
- data/TODO.md +0 -25
- data/spec/praxis/api_resource_spec.rb +0 -0
- data/spec/praxis/dispatcher_spec.rb +0 -0
- data/spec/spec_app/app/responses/bulk_response.rb +0 -0
|
@@ -1,22 +1,24 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Praxis
|
|
2
4
|
class ApiGeneralInfo
|
|
3
|
-
|
|
4
5
|
attr_reader :version
|
|
5
6
|
|
|
6
|
-
def initialize(global_info=nil, version: nil)
|
|
7
|
-
@data =
|
|
7
|
+
def initialize(global_info = nil, version: nil)
|
|
8
|
+
@data = {}
|
|
8
9
|
@global_info = global_info
|
|
9
10
|
@version = version
|
|
10
11
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
return unless @global_info.nil?
|
|
13
|
+
|
|
14
|
+
# this *is* the global info
|
|
15
|
+
version_with %i[header params]
|
|
16
|
+
consumes 'json', 'x-www-form-urlencoded'
|
|
17
|
+
produces 'json'
|
|
16
18
|
end
|
|
17
19
|
|
|
18
20
|
# Allow any custom method to get/set any value
|
|
19
|
-
def method_missing(name, val=nil)
|
|
21
|
+
def method_missing(name, val = nil)
|
|
20
22
|
if val.nil?
|
|
21
23
|
get(name)
|
|
22
24
|
else
|
|
@@ -28,17 +30,18 @@ module Praxis
|
|
|
28
30
|
true
|
|
29
31
|
end
|
|
30
32
|
|
|
31
|
-
def get(
|
|
32
|
-
return @data[
|
|
33
|
-
return @global_info.get(
|
|
33
|
+
def get(key)
|
|
34
|
+
return @data[key] if @data.key?(key)
|
|
35
|
+
return @global_info.get(key) if @global_info
|
|
36
|
+
|
|
34
37
|
nil
|
|
35
38
|
end
|
|
36
39
|
|
|
37
|
-
def set(
|
|
38
|
-
@data[
|
|
40
|
+
def set(key, val)
|
|
41
|
+
@data[key] = val
|
|
39
42
|
end
|
|
40
43
|
|
|
41
|
-
def name(val=nil)
|
|
44
|
+
def name(val = nil)
|
|
42
45
|
if val.nil?
|
|
43
46
|
get(:name)
|
|
44
47
|
else
|
|
@@ -46,7 +49,7 @@ module Praxis
|
|
|
46
49
|
end
|
|
47
50
|
end
|
|
48
51
|
|
|
49
|
-
def title(val=nil)
|
|
52
|
+
def title(val = nil)
|
|
50
53
|
if val.nil?
|
|
51
54
|
get(:title)
|
|
52
55
|
else
|
|
@@ -54,7 +57,7 @@ module Praxis
|
|
|
54
57
|
end
|
|
55
58
|
end
|
|
56
59
|
|
|
57
|
-
def logo_url(val=nil)
|
|
60
|
+
def logo_url(val = nil)
|
|
58
61
|
if val.nil?
|
|
59
62
|
get(:logo_url)
|
|
60
63
|
else
|
|
@@ -62,7 +65,7 @@ module Praxis
|
|
|
62
65
|
end
|
|
63
66
|
end
|
|
64
67
|
|
|
65
|
-
def description(val=nil)
|
|
68
|
+
def description(val = nil)
|
|
66
69
|
if val.nil?
|
|
67
70
|
get(:description)
|
|
68
71
|
else
|
|
@@ -70,106 +73,92 @@ module Praxis
|
|
|
70
73
|
end
|
|
71
74
|
end
|
|
72
75
|
|
|
73
|
-
def version_with(val=nil)
|
|
76
|
+
def version_with(val = nil)
|
|
74
77
|
if val.nil?
|
|
75
78
|
get(:version_with)
|
|
79
|
+
elsif @global_info.nil?
|
|
80
|
+
Application.instance.versioning_scheme = val
|
|
81
|
+
set(:version_with, val) # this *is* the global info
|
|
76
82
|
else
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
else
|
|
81
|
-
raise "Use of version_with is only allowed in the global part of " \
|
|
82
|
-
"the API definition (but you are attempting to use it in the API " \
|
|
83
|
-
"definition of version #{self.version}"
|
|
84
|
-
end
|
|
83
|
+
raise 'Use of version_with is only allowed in the global part of ' \
|
|
84
|
+
'the API definition (but you are attempting to use it in the API ' \
|
|
85
|
+
"definition of version #{version}"
|
|
85
86
|
end
|
|
86
87
|
end
|
|
87
88
|
|
|
88
|
-
def endpoint(val=nil)
|
|
89
|
+
def endpoint(val = nil)
|
|
89
90
|
if val.nil?
|
|
90
91
|
get(:endpoint)
|
|
92
|
+
elsif @global_info.nil?
|
|
93
|
+
set(:endpoint, val) # this *is* the global info
|
|
91
94
|
else
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
raise "Use of endpoint is only allowed in the global part of " \
|
|
96
|
-
"the API definition (but you are attempting to use it in the API " \
|
|
97
|
-
"definition of version #{self.version}"
|
|
98
|
-
end
|
|
95
|
+
raise 'Use of endpoint is only allowed in the global part of ' \
|
|
96
|
+
'the API definition (but you are attempting to use it in the API ' \
|
|
97
|
+
"definition of version #{version}"
|
|
99
98
|
end
|
|
100
99
|
end
|
|
101
100
|
|
|
102
|
-
def documentation_url(val=nil)
|
|
101
|
+
def documentation_url(val = nil)
|
|
103
102
|
if val.nil?
|
|
104
103
|
get(:documentation_url)
|
|
104
|
+
elsif @global_info.nil?
|
|
105
|
+
set(:documentation_url, val) # this *is* the global info
|
|
105
106
|
else
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
raise "Use of documentation_url is only allowed in the global part of " \
|
|
110
|
-
"the API definition (but you are attempting to use it in the API " \
|
|
111
|
-
"definition of version #{self.version}"
|
|
112
|
-
end
|
|
107
|
+
raise 'Use of documentation_url is only allowed in the global part of ' \
|
|
108
|
+
'the API definition (but you are attempting to use it in the API ' \
|
|
109
|
+
"definition of version #{version}"
|
|
113
110
|
end
|
|
114
111
|
end
|
|
115
112
|
|
|
116
|
-
def base_path(val=nil)
|
|
117
|
-
if val
|
|
118
|
-
return set(:base_path, val)
|
|
119
|
-
end
|
|
113
|
+
def base_path(val = nil)
|
|
114
|
+
return set(:base_path, val) if val
|
|
120
115
|
|
|
121
116
|
if @global_info # this is for a specific version
|
|
122
117
|
global_path = @global_info.base_path
|
|
123
118
|
if version_with == :path
|
|
124
119
|
global_pattern = Mustermann.new(global_path)
|
|
125
|
-
global_path = global_pattern.expand(Request::API_VERSION_PARAM_NAME =>
|
|
120
|
+
global_path = global_pattern.expand(Request::API_VERSION_PARAM_NAME => version.to_s)
|
|
126
121
|
end
|
|
127
122
|
|
|
128
|
-
version_path = @data.fetch(:base_path,'')
|
|
123
|
+
version_path = @data.fetch(:base_path, '')
|
|
129
124
|
"#{global_path}#{version_path}"
|
|
130
125
|
else
|
|
131
|
-
@data.fetch(:base_path,'')
|
|
126
|
+
@data.fetch(:base_path, '')
|
|
132
127
|
end
|
|
133
128
|
end
|
|
134
129
|
|
|
135
130
|
def consumes(*vals)
|
|
136
131
|
if vals.empty?
|
|
137
|
-
|
|
132
|
+
get(:consumes)
|
|
138
133
|
else
|
|
139
|
-
|
|
134
|
+
set(:consumes, vals)
|
|
140
135
|
end
|
|
141
136
|
end
|
|
142
137
|
|
|
143
|
-
|
|
144
138
|
def produces(*vals)
|
|
145
139
|
if vals.empty?
|
|
146
|
-
|
|
140
|
+
get(:produces)
|
|
147
141
|
else
|
|
148
|
-
|
|
142
|
+
set(:produces, vals)
|
|
149
143
|
end
|
|
150
144
|
end
|
|
151
145
|
|
|
152
|
-
|
|
153
|
-
def base_params(type=Attributor::Struct, **opts, &block)
|
|
146
|
+
def base_params(type = Attributor::Struct, **opts, &block)
|
|
154
147
|
if !block && type == Attributor::Struct
|
|
155
148
|
get(:base_params)
|
|
156
149
|
else
|
|
157
|
-
set(:base_params, Attributor::Attribute.new(type, opts, &block)
|
|
150
|
+
set(:base_params, Attributor::Attribute.new(type, opts, &block))
|
|
158
151
|
end
|
|
159
152
|
end
|
|
160
153
|
|
|
161
154
|
def describe
|
|
162
|
-
hash = { schema_version:
|
|
163
|
-
[
|
|
164
|
-
val =
|
|
155
|
+
hash = { schema_version: '1.0' }
|
|
156
|
+
%i[name title description base_path version_with endpoint consumes produces].each do |attr|
|
|
157
|
+
val = __send__(attr)
|
|
165
158
|
hash[attr] = val unless val.nil?
|
|
166
159
|
end
|
|
167
|
-
if base_params
|
|
168
|
-
hash[:base_params] = base_params.describe[:type][:attributes]
|
|
169
|
-
end
|
|
160
|
+
hash[:base_params] = base_params.describe[:type][:attributes] if base_params
|
|
170
161
|
hash
|
|
171
162
|
end
|
|
172
|
-
|
|
173
163
|
end
|
|
174
|
-
|
|
175
164
|
end
|
data/lib/praxis/application.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'singleton'
|
|
2
4
|
require 'mustermann'
|
|
3
5
|
require 'logger'
|
|
@@ -6,28 +8,12 @@ module Praxis
|
|
|
6
8
|
class Application
|
|
7
9
|
include Singleton
|
|
8
10
|
|
|
9
|
-
attr_reader :router
|
|
10
|
-
attr_reader :controllers
|
|
11
|
-
attr_reader :endpoint_definitions
|
|
12
|
-
attr_reader :app
|
|
13
|
-
attr_reader :builder
|
|
14
|
-
|
|
15
|
-
attr_accessor :bootloader
|
|
16
|
-
attr_accessor :file_layout
|
|
17
|
-
attr_accessor :loaded_files
|
|
18
|
-
attr_accessor :logger
|
|
19
|
-
attr_accessor :plugins
|
|
20
|
-
attr_accessor :doc_browser_plugin_paths
|
|
21
|
-
attr_accessor :handlers
|
|
22
|
-
attr_accessor :root
|
|
23
|
-
attr_accessor :error_handler
|
|
24
|
-
attr_accessor :validation_handler
|
|
25
|
-
|
|
26
|
-
attr_accessor :versioning_scheme
|
|
11
|
+
attr_reader :router, :controllers, :endpoint_definitions, :app, :builder
|
|
27
12
|
|
|
13
|
+
attr_accessor :bootloader, :file_layout, :loaded_files, :logger, :plugins, :doc_browser_plugin_paths, :handlers, :root, :error_handler, :validation_handler, :versioning_scheme
|
|
28
14
|
|
|
29
15
|
def self.configure
|
|
30
|
-
yield(
|
|
16
|
+
yield(instance)
|
|
31
17
|
end
|
|
32
18
|
|
|
33
19
|
def initialize
|
|
@@ -44,16 +30,15 @@ module Praxis
|
|
|
44
30
|
|
|
45
31
|
@bootloader = Bootloader.new(self)
|
|
46
32
|
@file_layout = nil
|
|
47
|
-
@plugins =
|
|
33
|
+
@plugins = {}
|
|
48
34
|
@doc_browser_plugin_paths = []
|
|
49
|
-
@handlers =
|
|
35
|
+
@handlers = {}
|
|
50
36
|
@loaded_files = Set.new
|
|
51
37
|
@config = Config.new
|
|
52
38
|
@root = nil
|
|
53
|
-
@logger = Logger.new(
|
|
39
|
+
@logger = Logger.new($stdout)
|
|
54
40
|
end
|
|
55
41
|
|
|
56
|
-
|
|
57
42
|
def setup(root: '.')
|
|
58
43
|
return self unless @app.nil?
|
|
59
44
|
|
|
@@ -92,9 +77,7 @@ module Praxis
|
|
|
92
77
|
handler = handler.new
|
|
93
78
|
|
|
94
79
|
# Make sure it quacks like a handler.
|
|
95
|
-
unless handler.respond_to?(:generate) && handler.respond_to?(:parse)
|
|
96
|
-
raise ArgumentError, "Media type handlers must respond to #generate and #parse"
|
|
97
|
-
end
|
|
80
|
+
raise ArgumentError, 'Media type handlers must respond to #generate and #parse' unless handler.respond_to?(:generate) && handler.respond_to?(:parse)
|
|
98
81
|
|
|
99
82
|
# Register that thing!
|
|
100
83
|
@handlers[name.to_s] = handler
|
|
@@ -102,17 +85,17 @@ module Praxis
|
|
|
102
85
|
|
|
103
86
|
def call(env)
|
|
104
87
|
response = []
|
|
105
|
-
Notifications.instrument 'rack.request.all'
|
|
88
|
+
Notifications.instrument 'rack.request.all', response: response do
|
|
106
89
|
response.push(*@app.call(env))
|
|
107
90
|
end
|
|
108
91
|
end
|
|
109
92
|
|
|
110
93
|
def layout(&block)
|
|
111
|
-
self.file_layout = FileGroup.new(
|
|
94
|
+
self.file_layout = FileGroup.new(root, &block)
|
|
112
95
|
end
|
|
113
96
|
|
|
114
|
-
def config(key=nil, type=Attributor::Struct, **opts, &block)
|
|
115
|
-
if block_given? || (type==Attributor::Struct && !opts.empty?
|
|
97
|
+
def config(key = nil, type = Attributor::Struct, **opts, &block)
|
|
98
|
+
if block_given? || (type == Attributor::Struct && !opts.empty?)
|
|
116
99
|
@config.define(key, type, **opts, &block)
|
|
117
100
|
else
|
|
118
101
|
@config.get
|
|
@@ -123,9 +106,9 @@ module Praxis
|
|
|
123
106
|
@config.set(config)
|
|
124
107
|
end
|
|
125
108
|
|
|
126
|
-
# [DEPRECATED] - Warn of the change of method name for the transition
|
|
109
|
+
# [DEPRECATED] - Warn of the change of method name for the transition
|
|
127
110
|
def resource_definitions
|
|
128
|
-
raise
|
|
111
|
+
raise 'Praxis::Application.instance does not use `resource_definitions` any longer. Use `endpoint_definitions` instead.'
|
|
129
112
|
end
|
|
130
113
|
end
|
|
131
114
|
end
|