ree_lib 1.0.35 → 1.0.37

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +11 -2
  3. data/lib/ree_lib/Packages.schema.json +8 -0
  4. data/lib/ree_lib/packages/ree_actions/.gitignore +0 -0
  5. data/lib/ree_lib/packages/ree_actions/.rspec +2 -0
  6. data/lib/ree_lib/packages/ree_actions/Package.schema.json +20 -0
  7. data/lib/ree_lib/packages/ree_actions/bin/console +5 -0
  8. data/lib/ree_lib/packages/ree_actions/package/ree_actions/action.rb +10 -0
  9. data/lib/ree_lib/packages/ree_actions/package/ree_actions/action_builder.rb +65 -0
  10. data/lib/ree_lib/packages/ree_actions/package/ree_actions/action_dsl.rb +60 -0
  11. data/lib/ree_lib/packages/ree_actions/package/ree_actions/dsl.rb +102 -0
  12. data/lib/ree_lib/packages/ree_actions/package/ree_actions.rb +12 -0
  13. data/lib/ree_lib/packages/ree_actions/spec/package_schema_spec.rb +14 -0
  14. data/lib/ree_lib/packages/ree_actions/spec/ree_actions/action_dsl_spec.rb +62 -0
  15. data/lib/ree_lib/packages/ree_actions/spec/ree_actions/dsl_spec.rb +93 -0
  16. data/lib/ree_lib/packages/ree_actions/spec/spec_helper.rb +3 -0
  17. data/lib/ree_lib/packages/ree_mapper/package/ree_mapper/functions/build_mapper_factory.rb +7 -7
  18. data/lib/ree_lib/packages/ree_mapper/package/ree_mapper/mapper.rb +7 -2
  19. data/lib/ree_lib/packages/ree_mapper/package/ree_mapper/mapper_factory.rb +20 -13
  20. data/lib/ree_lib/packages/ree_mapper/package/ree_mapper/mapper_factory_proxy.rb +2 -2
  21. data/lib/ree_lib/packages/ree_mapper/package/ree_mapper/types/abstract_type.rb +0 -15
  22. data/lib/ree_lib/packages/ree_mapper/package/ree_mapper/types/float.rb +2 -0
  23. data/lib/ree_lib/packages/ree_mapper/package/ree_mapper.rb +1 -1
  24. data/lib/ree_lib/packages/ree_mapper/spec/ree_mapper/mapper_factory_spec.rb +77 -20
  25. data/lib/ree_lib/packages/ree_mapper/spec/ree_mapper/mapper_spec.rb +25 -1
  26. data/lib/ree_lib/packages/ree_mapper/spec/ree_mapper/types/float_spec.rb +9 -0
  27. data/lib/ree_lib/packages/ree_object/package/ree_object/functions/to_hash.rb +5 -3
  28. data/lib/ree_lib/packages/ree_object/spec/ree_object/functions/to_hash_spec.rb +5 -0
  29. data/lib/ree_lib/packages/ree_roda/.gitignore +0 -0
  30. data/lib/ree_lib/packages/ree_roda/.rspec +2 -0
  31. data/lib/ree_lib/packages/ree_roda/Package.schema.json +58 -0
  32. data/lib/ree_lib/packages/ree_roda/bin/console +5 -0
  33. data/lib/ree_lib/packages/ree_roda/package/ree_roda/app.rb +46 -0
  34. data/lib/ree_lib/packages/ree_roda/package/ree_roda/plugins/ree_actions.rb +150 -0
  35. data/lib/ree_lib/packages/ree_roda/package/ree_roda/plugins/ree_logger.rb +66 -0
  36. data/lib/ree_lib/packages/ree_roda/package/ree_roda/services/build_action_errors.rb +76 -0
  37. data/lib/ree_lib/packages/ree_roda/package/ree_roda/services/build_swagger_from_actions.rb +55 -0
  38. data/lib/ree_lib/packages/ree_roda/package/ree_roda/services/status_from_error.rb +25 -0
  39. data/lib/ree_lib/packages/ree_roda/package/ree_roda.rb +19 -0
  40. data/lib/ree_lib/packages/ree_roda/schemas/ree_roda/services/build_action_errors.schema.json +28 -0
  41. data/lib/ree_lib/packages/ree_roda/schemas/ree_roda/services/build_swagger_from_actions.schema.json +63 -0
  42. data/lib/ree_lib/packages/ree_roda/schemas/ree_roda/services/status_from_error.schema.json +28 -0
  43. data/lib/ree_lib/packages/ree_roda/spec/package_schema_spec.rb +14 -0
  44. data/lib/ree_lib/packages/ree_roda/spec/ree_roda/app_spec.rb +84 -0
  45. data/lib/ree_lib/packages/ree_roda/spec/spec_helper.rb +3 -0
  46. data/lib/ree_lib/packages/ree_swagger/spec/functions/build_serializer_schema_spec.rb +8 -11
  47. data/lib/ree_lib/packages/ree_swagger/spec/functions/register_type_spec.rb +2 -7
  48. data/lib/ree_lib/version.rb +1 -1
  49. metadata +60 -2
@@ -0,0 +1,55 @@
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
+
@@ -0,0 +1,25 @@
1
+ class ReeRoda::StatusFromError
2
+ include Ree::FnDSL
3
+
4
+ fn :status_from_error
5
+
6
+ contract(Symbol => Nilor[Integer])
7
+ def call(error_type)
8
+ case error_type
9
+ when :not_found
10
+ 404
11
+ when :invalid_param
12
+ 400
13
+ when :conflict
14
+ 405
15
+ when :auth
16
+ 401
17
+ when :permission
18
+ 403
19
+ when :payment
20
+ 402
21
+ when :validation
22
+ 422
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,19 @@
1
+ require "roda"
2
+
3
+ module ReeRoda
4
+ include Ree::PackageDSL
5
+
6
+ package do
7
+ depends_on :ree_actions
8
+ depends_on :ree_logger
9
+ depends_on :ree_json
10
+ depends_on :ree_hash
11
+ depends_on :ree_object
12
+ depends_on :ree_swagger
13
+ depends_on :ree_errors
14
+ end
15
+ end
16
+
17
+ package_require "ree_roda/plugins/ree_logger"
18
+ package_require "ree_roda/plugins/ree_actions"
19
+ package_require "ree_roda/app"
@@ -0,0 +1,28 @@
1
+ {
2
+ "schema_type": "object",
3
+ "schema_version": "1.1",
4
+ "name": "build_action_errors",
5
+ "path": "packages/ree_roda/package/ree_roda/services/build_action_errors.rb",
6
+ "mount_as": "fn",
7
+ "class": "ReeRoda::BuildActionErrors",
8
+ "factory": null,
9
+ "methods": [
10
+ {
11
+ "doc": "",
12
+ "throws": [
13
+
14
+ ],
15
+ "return": "ArrayOf[ReeSwagger::ErrorDto]",
16
+ "args": [
17
+ {
18
+ "arg": "action",
19
+ "arg_type": "req",
20
+ "type": "ReeActions::Action"
21
+ }
22
+ ]
23
+ }
24
+ ],
25
+ "links": [
26
+
27
+ ]
28
+ }
@@ -0,0 +1,63 @@
1
+ {
2
+ "schema_type": "object",
3
+ "schema_version": "1.1",
4
+ "name": "build_swagger_from_actions",
5
+ "path": "packages/ree_roda/package/ree_roda/services/build_swagger_from_actions.rb",
6
+ "mount_as": "fn",
7
+ "class": "ReeRoda::BuildSwaggerFromActions",
8
+ "factory": null,
9
+ "methods": [
10
+ {
11
+ "doc": "",
12
+ "throws": [
13
+
14
+ ],
15
+ "return": "Hash",
16
+ "args": [
17
+ {
18
+ "arg": "actions",
19
+ "arg_type": "req",
20
+ "type": "ArrayOf[ReeActions::Action]"
21
+ },
22
+ {
23
+ "arg": "title",
24
+ "arg_type": "req",
25
+ "type": "String"
26
+ },
27
+ {
28
+ "arg": "description",
29
+ "arg_type": "req",
30
+ "type": "String"
31
+ },
32
+ {
33
+ "arg": "version",
34
+ "arg_type": "req",
35
+ "type": "String"
36
+ },
37
+ {
38
+ "arg": "api_url",
39
+ "arg_type": "req",
40
+ "type": "String"
41
+ }
42
+ ]
43
+ }
44
+ ],
45
+ "links": [
46
+ {
47
+ "target": "build_action_errors",
48
+ "package_name": "ree_roda",
49
+ "as": "build_action_errors",
50
+ "imports": [
51
+
52
+ ]
53
+ },
54
+ {
55
+ "target": "build_schema",
56
+ "package_name": "ree_swagger",
57
+ "as": "build_schema",
58
+ "imports": [
59
+
60
+ ]
61
+ }
62
+ ]
63
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "schema_type": "object",
3
+ "schema_version": "1.1",
4
+ "name": "status_from_error",
5
+ "path": "packages/ree_roda/package/ree_roda/services/status_from_error.rb",
6
+ "mount_as": "fn",
7
+ "class": "ReeRoda::StatusFromError",
8
+ "factory": null,
9
+ "methods": [
10
+ {
11
+ "doc": "",
12
+ "throws": [
13
+
14
+ ],
15
+ "return": "Nilor[Integer]",
16
+ "args": [
17
+ {
18
+ "arg": "error_type",
19
+ "arg_type": "req",
20
+ "type": "Symbol"
21
+ }
22
+ ]
23
+ }
24
+ ],
25
+ "links": [
26
+
27
+ ]
28
+ }
@@ -0,0 +1,14 @@
1
+ RSpec.describe "ReeRoda" do
2
+ it "generates package schema" do
3
+ require "fileutils"
4
+
5
+ packages_schema_path = Ree.locate_packages_schema(__dir__)
6
+ packages_schema_dir = Pathname.new(packages_schema_path).dirname.to_s
7
+
8
+ FileUtils.cd packages_schema_dir do
9
+ expect(
10
+ system("REE_SKIP_ENV_VARS_CHECK=true bundle exec ree gen.package_json ree_roda --silence")
11
+ ).to eq(true)
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,84 @@
1
+ require "rack/test"
2
+
3
+ package_require("ree_roda/app")
4
+ package_require("ree_actions/dsl")
5
+ package_require("ree_roda/plugins/ree_actions")
6
+
7
+ RSpec.describe ReeRoda::App do
8
+ include Rack::Test::Methods
9
+
10
+ before :all do
11
+ Ree.enable_irb_mode
12
+
13
+ module ReeRodaTest
14
+ include Ree::PackageDSL
15
+
16
+ package
17
+ end
18
+
19
+ class ReeRodaTest::Cmd
20
+ include ReeActions::ActionDSL
21
+
22
+ action :cmd
23
+
24
+ ActionCaster = build_mapper.use(:cast) do
25
+ integer :id
26
+ end
27
+
28
+ def call(access, attrs)
29
+ end
30
+ end
31
+
32
+ class ReeRodaTest::TestActions
33
+ include ReeActions::DSL
34
+
35
+ actions :test_actions do
36
+ default_warden_scope :identity
37
+ opts = {from: :ree_roda_test}
38
+
39
+ get "api/action/:id" do
40
+ summary "Some action"
41
+ warden_scope :visitor
42
+ sections "some_action"
43
+ action :cmd, **opts
44
+ end
45
+ end
46
+ end
47
+
48
+ class TestApp < ReeRoda::App
49
+ plugin :ree_actions
50
+
51
+ ree_actions ReeRodaTest::TestActions.new,
52
+ api_url: "http://some.api.url:1337",
53
+ swagger_url: "swagger"
54
+
55
+ route do |r|
56
+ r.get "health" do
57
+ "success"
58
+ end
59
+
60
+ r.ree_actions
61
+ end
62
+ end
63
+ end
64
+
65
+ after :all do
66
+ Ree.disable_irb_mode
67
+ end
68
+
69
+ let(:app) { TestApp.app }
70
+
71
+ it {
72
+ get "health"
73
+ expect(last_response.body).to eq("success")
74
+ expect(last_response.status).to eq(200)
75
+ }
76
+
77
+ it {
78
+ get "swagger"
79
+ expect(last_response.status).to eq(200)
80
+
81
+ get "api/v1/swagger"
82
+ expect(last_response.status).to eq(404)
83
+ }
84
+ end
@@ -0,0 +1,3 @@
1
+ RSpec.configure do |config|
2
+ config.extend Ree::RSpecLinkDSL
3
+ end
@@ -11,16 +11,13 @@ RSpec.describe :build_serializer_schema do
11
11
 
12
12
  build_mapper_factory(
13
13
  strategies: strategies
14
- ).register(
14
+ ).register_type(
15
15
  :unregistered_type,
16
- ReeMapper::Mapper.build(
17
- strategies,
18
- Class.new(ReeMapper::AbstractType) do
19
- def serialize(val, role: nil)
20
- val
21
- end
22
- end.new
23
- )
16
+ Class.new(ReeMapper::AbstractType) do
17
+ def serialize(val, role: nil)
18
+ val
19
+ end
20
+ end.new
24
21
  )
25
22
  }
26
23
 
@@ -118,10 +115,10 @@ RSpec.describe :build_serializer_schema do
118
115
  test_unregistered_type: {},
119
116
  partial_value: {
120
117
  type: 'object',
121
- properties: {
118
+ properties: {
122
119
  nested_partial_value: {
123
120
  type: 'object',
124
- properties: {
121
+ properties: {
125
122
  included: { type: 'string' }
126
123
  }
127
124
  }
@@ -15,13 +15,8 @@ RSpec.describe :register_type do
15
15
  build_mapper_strategy(method: :serialize, dto: Hash),
16
16
  ]
17
17
 
18
- build_mapper_factory(strategies: strategies).register(
19
- :my_type,
20
- ReeMapper::Mapper.build(
21
- strategies,
22
- ReeSwagger::MyType.new
23
- )
24
- )
18
+ build_mapper_factory(strategies: strategies)
19
+ .register_type(:my_type, ReeSwagger::MyType.new)
25
20
  }
26
21
 
27
22
  let(:mapper) {
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ReeLib
4
- VERSION = "1.0.35"
4
+ VERSION = "1.0.37"
5
5
  end
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.35
4
+ version: 1.0.37
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-06 00:00:00.000000000 Z
11
+ date: 2023-03-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ree
@@ -122,6 +122,34 @@ dependencies:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
124
  version: 3.1.1
125
+ - !ruby/object:Gem::Dependency
126
+ name: rack-test
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: roda
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: 3.58.0
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: 3.58.0
125
153
  - !ruby/object:Gem::Dependency
126
154
  name: sqlite3
127
155
  requirement: !ruby/object:Gem::Requirement
@@ -211,6 +239,19 @@ files:
211
239
  - lib/ree_lib/Packages.schema.json
212
240
  - lib/ree_lib/bin/console
213
241
  - lib/ree_lib/packages/.vscode-ree/templates/spec_template.rb
242
+ - lib/ree_lib/packages/ree_actions/.gitignore
243
+ - lib/ree_lib/packages/ree_actions/.rspec
244
+ - lib/ree_lib/packages/ree_actions/Package.schema.json
245
+ - lib/ree_lib/packages/ree_actions/bin/console
246
+ - 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
+ - lib/ree_lib/packages/ree_actions/package/ree_actions/dsl.rb
251
+ - 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
+ - lib/ree_lib/packages/ree_actions/spec/ree_actions/dsl_spec.rb
254
+ - lib/ree_lib/packages/ree_actions/spec/spec_helper.rb
214
255
  - lib/ree_lib/packages/ree_array/.gitignore
215
256
  - lib/ree_lib/packages/ree_array/.rspec
216
257
  - lib/ree_lib/packages/ree_array/Package.schema.json
@@ -1045,6 +1086,23 @@ files:
1045
1086
  - lib/ree_lib/packages/ree_object/spec/ree_object/functions/to_hash_spec.rb
1046
1087
  - lib/ree_lib/packages/ree_object/spec/ree_object/functions/to_obj_spec.rb
1047
1088
  - lib/ree_lib/packages/ree_object/spec/spec_helper.rb
1089
+ - lib/ree_lib/packages/ree_roda/.gitignore
1090
+ - lib/ree_lib/packages/ree_roda/.rspec
1091
+ - lib/ree_lib/packages/ree_roda/Package.schema.json
1092
+ - lib/ree_lib/packages/ree_roda/bin/console
1093
+ - lib/ree_lib/packages/ree_roda/package/ree_roda.rb
1094
+ - lib/ree_lib/packages/ree_roda/package/ree_roda/app.rb
1095
+ - lib/ree_lib/packages/ree_roda/package/ree_roda/plugins/ree_actions.rb
1096
+ - lib/ree_lib/packages/ree_roda/package/ree_roda/plugins/ree_logger.rb
1097
+ - lib/ree_lib/packages/ree_roda/package/ree_roda/services/build_action_errors.rb
1098
+ - lib/ree_lib/packages/ree_roda/package/ree_roda/services/build_swagger_from_actions.rb
1099
+ - lib/ree_lib/packages/ree_roda/package/ree_roda/services/status_from_error.rb
1100
+ - lib/ree_lib/packages/ree_roda/schemas/ree_roda/services/build_action_errors.schema.json
1101
+ - lib/ree_lib/packages/ree_roda/schemas/ree_roda/services/build_swagger_from_actions.schema.json
1102
+ - lib/ree_lib/packages/ree_roda/schemas/ree_roda/services/status_from_error.schema.json
1103
+ - lib/ree_lib/packages/ree_roda/spec/package_schema_spec.rb
1104
+ - lib/ree_lib/packages/ree_roda/spec/ree_roda/app_spec.rb
1105
+ - lib/ree_lib/packages/ree_roda/spec/spec_helper.rb
1048
1106
  - lib/ree_lib/packages/ree_string/.gitignore
1049
1107
  - lib/ree_lib/packages/ree_string/.rspec
1050
1108
  - lib/ree_lib/packages/ree_string/Package.schema.json