ree_lib 1.0.35 → 1.0.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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