ree_lib 1.0.39 → 1.0.41

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +4 -1
  3. data/lib/ree_lib/.vscode-ree/templates/spec_template.rb +1 -1
  4. data/lib/ree_lib/Packages.schema.json +4 -0
  5. data/lib/ree_lib/packages/.vscode-ree/templates/spec_template.rb +1 -1
  6. data/lib/ree_lib/packages/ree_actions/package/ree_actions/dsl.rb +28 -70
  7. data/lib/ree_lib/packages/ree_actions/package/ree_actions.rb +1 -2
  8. data/lib/ree_lib/packages/ree_actions/spec/ree_actions/dsl_spec.rb +34 -65
  9. data/lib/ree_lib/packages/ree_array/spec/ree_array/functions/group_by_spec.rb +1 -1
  10. data/lib/ree_lib/packages/ree_array/spec/ree_array/functions/index_by_spec.rb +1 -1
  11. data/lib/ree_lib/packages/ree_dao/package/ree_dao/wrappers/pg_array.rb +57 -0
  12. data/lib/ree_lib/packages/ree_dao/package/ree_dao/wrappers/pg_jsonb.rb +73 -0
  13. data/lib/ree_lib/packages/ree_dao/spec/ree_dao/functions/build_sqlite_connection_spec.rb +1 -1
  14. data/lib/ree_lib/packages/ree_dao/spec/ree_dao/functions/one_to_many_spec.rb +2 -2
  15. data/lib/ree_lib/packages/ree_dao/spec/ree_dao/functions/one_to_one_spec.rb +2 -2
  16. data/lib/ree_lib/packages/ree_dao/spec/ree_dao/functions/persist_assoc_spec.rb +2 -2
  17. data/lib/ree_lib/packages/ree_dao/spec/ree_dao/wrappers/pg_array_spec.rb +72 -0
  18. data/lib/ree_lib/packages/ree_dao/spec/ree_dao/wrappers/pg_jsonb_spec.rb +94 -0
  19. data/lib/ree_lib/packages/ree_datetime/spec/ree_datetime/functions/in_default_time_zone_spec.rb +1 -1
  20. data/lib/ree_lib/packages/ree_dto/spec/ree_dto/entity_dsl_spec.rb +1 -1
  21. data/lib/ree_lib/packages/ree_hash/spec/ree_hash/functions/transform_values_spec.rb +1 -1
  22. data/lib/ree_lib/packages/ree_json/spec/ree_json/functions/from_json_spec.rb +1 -1
  23. data/lib/ree_lib/packages/ree_json/spec/ree_json/functions/to_json_spec.rb +1 -1
  24. data/lib/ree_lib/packages/ree_logger/spec/ree_logger/appenders/appender_spec.rb +1 -1
  25. data/lib/ree_lib/packages/ree_logger/spec/ree_logger/appenders/file_appender_spec.rb +3 -3
  26. data/lib/ree_lib/packages/ree_logger/spec/ree_logger/appenders/rollbar_appender_spec.rb +1 -1
  27. data/lib/ree_lib/packages/ree_logger/spec/ree_logger/appenders/stdout_appender_spec.rb +1 -1
  28. data/lib/ree_lib/packages/ree_logger/spec/ree_logger/beans/logger_spec.rb +2 -2
  29. data/lib/ree_lib/packages/ree_logger/spec/ree_logger/formatters/colorized_formatter_spec.rb +10 -7
  30. data/lib/ree_lib/packages/ree_logger/spec/ree_logger/formatters/default_formatter_spec.rb +1 -1
  31. data/lib/ree_lib/packages/ree_logger/spec/ree_logger/formatters/formatter_spec.rb +1 -1
  32. data/lib/ree_lib/packages/ree_logger/spec/ree_logger/multi_logger_spec.rb +1 -1
  33. data/lib/ree_lib/packages/ree_migrator/spec/ree_migrator/functions/apply_migration_spec.rb +1 -1
  34. data/lib/ree_lib/packages/ree_migrator/spec/ree_migrator/functions/apply_migrations_spec.rb +1 -1
  35. data/lib/ree_lib/packages/ree_migrator/spec/ree_migrator/functions/migrate_db_spec.rb +1 -1
  36. data/lib/ree_lib/packages/ree_object/spec/ree_object/functions/deep_dup_spec.rb +2 -2
  37. data/lib/ree_lib/packages/ree_object/spec/ree_object/functions/deep_freeze_spec.rb +1 -1
  38. data/lib/ree_lib/packages/ree_object/spec/ree_object/functions/dump_as_json_spec.rb +1 -1
  39. data/lib/ree_lib/packages/ree_object/spec/ree_object/functions/is_blank_spec.rb +1 -1
  40. data/lib/ree_lib/packages/ree_object/spec/ree_object/functions/not_blank_spec.rb +1 -1
  41. data/lib/ree_lib/packages/ree_object/spec/ree_object/functions/to_hash_spec.rb +1 -1
  42. data/lib/ree_lib/packages/ree_object/spec/ree_object/functions/to_obj_spec.rb +8 -8
  43. data/lib/ree_lib/packages/ree_roda/Package.schema.json +14 -7
  44. data/lib/ree_lib/packages/ree_roda/package/ree_roda/plugins/ree_routes.rb +231 -0
  45. data/lib/ree_lib/packages/ree_roda/package/ree_roda/services/{build_action_errors.rb → build_route_errors.rb} +5 -5
  46. data/lib/ree_lib/packages/ree_roda/package/ree_roda/services/build_routing_tree.rb +144 -0
  47. data/lib/ree_lib/packages/ree_roda/package/ree_roda/services/build_swagger_from_routes.rb +54 -0
  48. data/lib/ree_lib/packages/ree_roda/package/ree_roda.rb +2 -2
  49. data/lib/ree_lib/packages/ree_roda/schemas/ree_roda/services/{build_action_errors.schema.json → build_route_errors.schema.json} +5 -5
  50. data/lib/ree_lib/packages/ree_roda/schemas/ree_roda/services/build_routing_tree.schema.json +28 -0
  51. data/lib/ree_lib/packages/ree_roda/schemas/ree_roda/services/{build_swagger_from_actions.schema.json → build_swagger_from_routes.schema.json} +7 -7
  52. data/lib/ree_lib/packages/ree_roda/spec/ree_roda/app_spec.rb +141 -7
  53. data/lib/ree_lib/packages/ree_roda/spec/ree_roda/services/build_routing_tree_spec.rb +261 -0
  54. data/lib/ree_lib/packages/ree_routes/.gitignore +0 -0
  55. data/lib/ree_lib/packages/ree_routes/.rspec +2 -0
  56. data/lib/ree_lib/packages/ree_routes/Package.schema.json +20 -0
  57. data/lib/ree_lib/packages/ree_routes/bin/console +5 -0
  58. data/lib/ree_lib/packages/ree_routes/package/ree_routes/dsl.rb +102 -0
  59. data/lib/ree_lib/packages/ree_routes/package/ree_routes/route.rb +10 -0
  60. data/lib/ree_lib/packages/{ree_actions/package/ree_actions/action_builder.rb → ree_routes/package/ree_routes/route_builder.rb} +15 -15
  61. data/lib/ree_lib/packages/ree_routes/package/ree_routes.rb +9 -0
  62. data/lib/ree_lib/packages/ree_routes/spec/package_schema_spec.rb +14 -0
  63. data/lib/ree_lib/packages/ree_routes/spec/ree_routes/dsl_spec.rb +93 -0
  64. data/lib/ree_lib/packages/ree_routes/spec/spec_helper.rb +3 -0
  65. data/lib/ree_lib/packages/ree_text/spec/ree_text/functions/safe_join_spec.rb +1 -1
  66. data/lib/ree_lib/packages/ree_text/spec/ree_text/functions/to_sentence_spec.rb +1 -1
  67. data/lib/ree_lib/packages/ree_validator/spec/ree_validator/functions/validate_password_spec.rb +1 -1
  68. data/lib/ree_lib/version.rb +1 -1
  69. metadata +39 -11
  70. data/lib/ree_lib/packages/ree_actions/package/ree_actions/action.rb +0 -10
  71. data/lib/ree_lib/packages/ree_actions/package/ree_actions/action_dsl.rb +0 -60
  72. data/lib/ree_lib/packages/ree_actions/spec/ree_actions/action_dsl_spec.rb +0 -62
  73. data/lib/ree_lib/packages/ree_roda/package/ree_roda/plugins/ree_actions.rb +0 -150
  74. data/lib/ree_lib/packages/ree_roda/package/ree_roda/services/build_swagger_from_actions.rb +0 -55
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ree_lib
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.39
4
+ version: 1.0.41
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ruslan Gatiyatov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-03-22 00:00:00.000000000 Z
11
+ date: 2023-03-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ree
@@ -178,6 +178,20 @@ dependencies:
178
178
  - - "~>"
179
179
  - !ruby/object:Gem::Version
180
180
  version: 1.4.1
181
+ - !ruby/object:Gem::Dependency
182
+ name: warden
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: 1.2.9
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: 1.2.9
181
195
  - !ruby/object:Gem::Dependency
182
196
  name: timecop
183
197
  requirement: !ruby/object:Gem::Requirement
@@ -244,12 +258,8 @@ files:
244
258
  - lib/ree_lib/packages/ree_actions/Package.schema.json
245
259
  - lib/ree_lib/packages/ree_actions/bin/console
246
260
  - lib/ree_lib/packages/ree_actions/package/ree_actions.rb
247
- - lib/ree_lib/packages/ree_actions/package/ree_actions/action.rb
248
- - lib/ree_lib/packages/ree_actions/package/ree_actions/action_builder.rb
249
- - lib/ree_lib/packages/ree_actions/package/ree_actions/action_dsl.rb
250
261
  - lib/ree_lib/packages/ree_actions/package/ree_actions/dsl.rb
251
262
  - lib/ree_lib/packages/ree_actions/spec/package_schema_spec.rb
252
- - lib/ree_lib/packages/ree_actions/spec/ree_actions/action_dsl_spec.rb
253
263
  - lib/ree_lib/packages/ree_actions/spec/ree_actions/dsl_spec.rb
254
264
  - lib/ree_lib/packages/ree_actions/spec/spec_helper.rb
255
265
  - lib/ree_lib/packages/ree_array/.gitignore
@@ -292,6 +302,8 @@ files:
292
302
  - lib/ree_lib/packages/ree_dao/package/ree_dao/functions/one_to_many.rb
293
303
  - lib/ree_lib/packages/ree_dao/package/ree_dao/functions/one_to_one.rb
294
304
  - lib/ree_lib/packages/ree_dao/package/ree_dao/functions/persist_assoc.rb
305
+ - lib/ree_lib/packages/ree_dao/package/ree_dao/wrappers/pg_array.rb
306
+ - lib/ree_lib/packages/ree_dao/package/ree_dao/wrappers/pg_jsonb.rb
295
307
  - lib/ree_lib/packages/ree_dao/schemas/ree_dao/beans/connections.schema.json
296
308
  - lib/ree_lib/packages/ree_dao/schemas/ree_dao/functions/build_connection.schema.json
297
309
  - lib/ree_lib/packages/ree_dao/schemas/ree_dao/functions/build_dao.schema.json
@@ -306,6 +318,8 @@ files:
306
318
  - lib/ree_lib/packages/ree_dao/spec/ree_dao/functions/one_to_many_spec.rb
307
319
  - lib/ree_lib/packages/ree_dao/spec/ree_dao/functions/one_to_one_spec.rb
308
320
  - lib/ree_lib/packages/ree_dao/spec/ree_dao/functions/persist_assoc_spec.rb
321
+ - lib/ree_lib/packages/ree_dao/spec/ree_dao/wrappers/pg_array_spec.rb
322
+ - lib/ree_lib/packages/ree_dao/spec/ree_dao/wrappers/pg_jsonb_spec.rb
309
323
  - lib/ree_lib/packages/ree_dao/spec/spec_helper.rb
310
324
  - lib/ree_lib/packages/ree_date/.gitignore
311
325
  - lib/ree_lib/packages/ree_date/.rspec
@@ -1095,17 +1109,31 @@ files:
1095
1109
  - lib/ree_lib/packages/ree_roda/bin/console
1096
1110
  - lib/ree_lib/packages/ree_roda/package/ree_roda.rb
1097
1111
  - lib/ree_lib/packages/ree_roda/package/ree_roda/app.rb
1098
- - lib/ree_lib/packages/ree_roda/package/ree_roda/plugins/ree_actions.rb
1099
1112
  - lib/ree_lib/packages/ree_roda/package/ree_roda/plugins/ree_logger.rb
1100
- - lib/ree_lib/packages/ree_roda/package/ree_roda/services/build_action_errors.rb
1101
- - lib/ree_lib/packages/ree_roda/package/ree_roda/services/build_swagger_from_actions.rb
1113
+ - lib/ree_lib/packages/ree_roda/package/ree_roda/plugins/ree_routes.rb
1114
+ - lib/ree_lib/packages/ree_roda/package/ree_roda/services/build_route_errors.rb
1115
+ - lib/ree_lib/packages/ree_roda/package/ree_roda/services/build_routing_tree.rb
1116
+ - lib/ree_lib/packages/ree_roda/package/ree_roda/services/build_swagger_from_routes.rb
1102
1117
  - lib/ree_lib/packages/ree_roda/package/ree_roda/services/status_from_error.rb
1103
- - lib/ree_lib/packages/ree_roda/schemas/ree_roda/services/build_action_errors.schema.json
1104
- - lib/ree_lib/packages/ree_roda/schemas/ree_roda/services/build_swagger_from_actions.schema.json
1118
+ - lib/ree_lib/packages/ree_roda/schemas/ree_roda/services/build_route_errors.schema.json
1119
+ - lib/ree_lib/packages/ree_roda/schemas/ree_roda/services/build_routing_tree.schema.json
1120
+ - lib/ree_lib/packages/ree_roda/schemas/ree_roda/services/build_swagger_from_routes.schema.json
1105
1121
  - lib/ree_lib/packages/ree_roda/schemas/ree_roda/services/status_from_error.schema.json
1106
1122
  - lib/ree_lib/packages/ree_roda/spec/package_schema_spec.rb
1107
1123
  - lib/ree_lib/packages/ree_roda/spec/ree_roda/app_spec.rb
1124
+ - lib/ree_lib/packages/ree_roda/spec/ree_roda/services/build_routing_tree_spec.rb
1108
1125
  - lib/ree_lib/packages/ree_roda/spec/spec_helper.rb
1126
+ - lib/ree_lib/packages/ree_routes/.gitignore
1127
+ - lib/ree_lib/packages/ree_routes/.rspec
1128
+ - lib/ree_lib/packages/ree_routes/Package.schema.json
1129
+ - lib/ree_lib/packages/ree_routes/bin/console
1130
+ - lib/ree_lib/packages/ree_routes/package/ree_routes.rb
1131
+ - lib/ree_lib/packages/ree_routes/package/ree_routes/dsl.rb
1132
+ - lib/ree_lib/packages/ree_routes/package/ree_routes/route.rb
1133
+ - lib/ree_lib/packages/ree_routes/package/ree_routes/route_builder.rb
1134
+ - lib/ree_lib/packages/ree_routes/spec/package_schema_spec.rb
1135
+ - lib/ree_lib/packages/ree_routes/spec/ree_routes/dsl_spec.rb
1136
+ - lib/ree_lib/packages/ree_routes/spec/spec_helper.rb
1109
1137
  - lib/ree_lib/packages/ree_string/.gitignore
1110
1138
  - lib/ree_lib/packages/ree_string/.rspec
1111
1139
  - lib/ree_lib/packages/ree_string/Package.schema.json
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class ReeActions::Action
4
- attr_accessor :summary, :request_method, :serializer, :respond_to,
5
- :sections, :action, :warden_scope, :path
6
-
7
- def valid?
8
- !@action.nil? && !summary.nil? && !warden_scope.nil?
9
- end
10
- end
@@ -1,60 +0,0 @@
1
- module ReeActions
2
- module ActionDSL
3
- def self.included(base)
4
- base.extend(ClassMethods)
5
- base.include(ReeMapper::DSL)
6
- end
7
-
8
- def self.extended(base)
9
- base.extend(ClassMethods)
10
- base.include(ReeMapper::DSL)
11
- end
12
-
13
- module ClassMethods
14
- include Ree::Contracts::Core
15
- include Ree::Contracts::ArgContracts
16
-
17
- def action(name, &proc)
18
- dsl = Ree::ObjectDsl.new(
19
- Ree.container.packages_facade, name, self, :fn
20
- )
21
-
22
- dsl.instance_exec(&proc) if block_given?
23
- dsl.tags(["action"])
24
- dsl.freeze(false)
25
- dsl.object.set_as_compiled(false)
26
-
27
- Ree.container.compile(dsl.package, name)
28
- end
29
-
30
- def method_added(method_name)
31
- return super if method_name != :call
32
-
33
- if @__original_call_defined
34
- remove_instance_variable(:@__original_call_defined)
35
- return
36
- end
37
-
38
- @__original_call_defined = true
39
-
40
- alias_method(:__original_call, :call)
41
-
42
- define_method :call do |user_access, attrs|
43
- if self.class.const_defined?(:ActionCaster)
44
- caster = self.class.const_get(:ActionCaster)
45
-
46
- if !caster.respond_to?(:cast)
47
- raise ArgumentError.new("ActionCaster does not respond to `cast` method")
48
- end
49
-
50
- __original_call(user_access, caster.cast(attrs))
51
- else
52
- __original_call(user_access, attrs)
53
- end
54
- end
55
-
56
- nil
57
- end
58
- end
59
- end
60
- end
@@ -1,62 +0,0 @@
1
- package_require("ree_actions/action_dsl")
2
-
3
- RSpec.describe ReeActions::ActionDSL, type: [:autoclean] do
4
- before do
5
- Ree.enable_irb_mode
6
- end
7
-
8
- after do
9
- Ree.disable_irb_mode
10
- end
11
-
12
- it {
13
- module ReeActionsTest
14
- include Ree::PackageDSL
15
-
16
- package do
17
- depends_on :ree_mapper
18
- end
19
-
20
- class TestAction
21
- include ReeActions::ActionDSL
22
-
23
- action :test_action
24
-
25
- ActionCaster = build_mapper.use(:cast) do
26
- integer :user_id
27
- end
28
-
29
- contract Any, ActionCaster.dto(:cast) => Integer
30
- def call(user_access, attrs)
31
- attrs[:user_id]
32
- end
33
- end
34
- end
35
-
36
- result = ReeActionsTest::TestAction.new.call('user_access', {user_id: 1})
37
- expect(result).to eq(1)
38
- }
39
-
40
- it {
41
- module ReeActionsTest
42
- include Ree::PackageDSL
43
-
44
- package do
45
- end
46
-
47
- class TestAction2
48
- include ReeActions::ActionDSL
49
-
50
- action :test_action2
51
-
52
- contract Any, Hash => Integer
53
- def call(user_access, attrs)
54
- attrs[:user_id]
55
- end
56
- end
57
- end
58
-
59
- result = ReeActionsTest::TestAction2.new.call('user_access', {user_id: 1})
60
- expect(result).to eq(1)
61
- }
62
- end
@@ -1,150 +0,0 @@
1
- class Roda
2
- module RodaPlugins
3
- module ReeActions
4
- def self.load_dependencies(app, opts = {})
5
- package_require("ree_roda/services/build_swagger_from_actions")
6
- package_require("ree_json/functions/to_json")
7
- package_require("ree_hash/functions/transform_values")
8
- package_require("ree_object/functions/not_blank")
9
-
10
- app.plugin :all_verbs
11
- end
12
-
13
- def self.configure(app, opts = {})
14
- app.opts[:ree_actions_before] = opts[:before] if opts[:before]
15
- end
16
-
17
- module ClassMethods
18
- def ree_actions(actions, swagger_title: "", swagger_description: "",
19
- swagger_version: "", swagger_url: "", api_url: "")
20
- @ree_actions ||= []
21
- @ree_actions += actions
22
-
23
- opts[:ree_actions_swagger_title] = swagger_title
24
- opts[:ree_actions_swagger_description] = swagger_description
25
- opts[:ree_actions_swagger_version] = swagger_version
26
- opts[:ree_actions_swagger_url] = swagger_url
27
- opts[:ree_actions_api_url] = api_url
28
-
29
- opts[:ree_actions_swagger] = ReeRoda::BuildSwaggerFromActions.new.call(
30
- @ree_actions,
31
- opts[:ree_actions_swagger_title],
32
- opts[:ree_actions_swagger_description],
33
- opts[:ree_actions_swagger_version],
34
- opts[:ree_actions_api_url]
35
- )
36
-
37
- build_actions_proc
38
- nil
39
- end
40
-
41
- private
42
-
43
- def build_actions_proc
44
- list = []
45
- context = self
46
-
47
- return list if @ree_actions.nil? || @ree_actions.empty?
48
-
49
- if context.opts[:ree_actions_swagger_url]
50
- list << Proc.new do |r|
51
- r.get context.opts[:ree_actions_swagger_url] do
52
- r.json do
53
- response.status = 200
54
- ReeJson::ToJson.new.call(context.opts[:ree_actions_swagger])
55
- end
56
- end
57
- end
58
- end
59
-
60
- @ree_actions.each do |action|
61
- route = []
62
- route_args = []
63
-
64
- action.path.split("/").each do |part|
65
- if part.start_with?(":")
66
- route << String
67
- route_args << part.gsub(":", "")
68
- else
69
- route << part
70
- end
71
- end
72
-
73
- list << Proc.new do |r|
74
- r.send(action.request_method, *route) do |*args|
75
- r.send(action.respond_to) do
76
- env["warden"].authenticate!(scope: action.warden_scope)
77
-
78
- if context.opts[:ree_actions_before]
79
- self.instance_exec(@_request, action.warden_scope, &scope.opts[:ree_actions_before])
80
- end
81
-
82
- # TODO: implement me when migration to roda DSL happens
83
- # if action.before; end
84
-
85
- route_args.each_with_index do |arg, index|
86
- r.params["#{arg}"] = args[index]
87
- end
88
-
89
- params = r.params
90
-
91
- if r.body
92
- body = begin
93
- JSON.parse(r.body.read)
94
- rescue => e
95
- {}
96
- end
97
-
98
- params = params.merge(body)
99
- end
100
-
101
- not_blank = ReeObject::NotBlank.new
102
-
103
- filtered_params = ReeHash::TransformValues.new.call(params) do |k, v|
104
- v.is_a?(Array) ? v.select { not_blank.call(_1) } : v
105
- end
106
-
107
- accessor = env["warden"].user(action.warden_scope)
108
- action_result = action.action.klass.new.call(accessor, filtered_params)
109
-
110
- if action.serializer
111
- serialized_result = action.serializer.klass.new.serialize(action_result)
112
- else
113
- serialized_result = {}
114
- end
115
-
116
- case action.request_method
117
- when :post
118
- response.status = 201
119
- ReeJson::ToJson.new.call(serialized_result)
120
- when :put, :delete, :patch
121
- response.status = 204
122
- ""
123
- else
124
- response.status = 200
125
- ReeJson::ToJson.new.call(serialized_result)
126
- end
127
- end
128
- end
129
- end
130
- end
131
-
132
- opts[:ree_actions_proc] = list
133
- end
134
- end
135
-
136
- module RequestMethods
137
- def ree_actions
138
- if scope.opts[:ree_actions_proc]
139
- scope.opts[:ree_actions_proc].each do |request_proc|
140
- self.instance_exec(self, &request_proc)
141
- end
142
- end
143
- nil
144
- end
145
- end
146
- end
147
-
148
- register_plugin(:ree_actions, Roda::RodaPlugins::ReeActions)
149
- end
150
- end
@@ -1,55 +0,0 @@
1
- class ReeRoda::BuildSwaggerFromActions
2
- include Ree::FnDSL
3
-
4
- fn :build_swagger_from_actions do
5
- link :build_action_errors
6
- link :build_schema, from: :ree_swagger
7
- link "ree_swagger/dto/endpoint_dto", -> { EndpointDto }
8
- end
9
-
10
- contract(ArrayOf[ReeActions::Action], String, String, String, String => Hash)
11
- def call(actions, title, description, version, api_url)
12
- endpoints = actions.map do |action|
13
- method_decorator = Ree::Contracts.get_method_decorator(
14
- action.action.klass, :call, scope: :instance
15
- )
16
-
17
- response_status = case action.request_method
18
- when :post
19
- 201
20
- when :put, :delete, :patch
21
- 204
22
- else
23
- 200
24
- end
25
-
26
- caster = if action.action.klass.const_defined?(:ActionCaster)
27
- action.action.klass.const_get(:ActionCaster)
28
- end
29
-
30
- EndpointDto.new(
31
- method: action.request_method,
32
- sections: action.sections,
33
- respond_to: action.respond_to,
34
- path: action.path.start_with?("/") ? action.path : "/#{action.path}",
35
- caster: caster,
36
- serializer: action.serializer&.klass&.new,
37
- summary: action.summary,
38
- authenticate: action.warden_scope != :visitor,
39
- description: method_decorator&.doc || "",
40
- response_status: response_status,
41
- response_description: nil,
42
- errors: build_action_errors(action)
43
- )
44
- end
45
-
46
- build_schema(
47
- title: title,
48
- description: description,
49
- version: version,
50
- api_url: api_url,
51
- endpoints: endpoints
52
- )
53
- end
54
- end
55
-