typelizer 0.6.0 → 0.8.0
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/CHANGELOG.md +42 -1
- data/README.md +75 -0
- data/lib/tasks/generate.rake +4 -4
- data/lib/typelizer/config.rb +37 -0
- data/lib/typelizer/configuration.rb +1 -2
- data/lib/typelizer/delegate_tracker.rb +34 -0
- data/lib/typelizer/dsl/hooks/alba.rb +17 -0
- data/lib/typelizer/dsl/hooks/ams.rb +15 -0
- data/lib/typelizer/dsl/hooks/oj_serializers.rb +15 -0
- data/lib/typelizer/dsl/hooks/panko.rb +16 -0
- data/lib/typelizer/dsl/hooks.rb +64 -0
- data/lib/typelizer/dsl.rb +20 -0
- data/lib/typelizer/generator.rb +2 -73
- data/lib/typelizer/interface.rb +60 -17
- data/lib/typelizer/model_plugins/active_record.rb +23 -0
- data/lib/typelizer/openapi.rb +124 -0
- data/lib/typelizer/property.rb +50 -10
- data/lib/typelizer/serializer_plugins/alba/trait_interface.rb +2 -2
- data/lib/typelizer/serializer_plugins/alba.rb +0 -23
- data/lib/typelizer/serializer_plugins/ams.rb +0 -13
- data/lib/typelizer/serializer_plugins/base.rb +0 -8
- data/lib/typelizer/serializer_plugins/oj_serializers.rb +0 -7
- data/lib/typelizer/serializer_plugins/panko.rb +0 -12
- data/lib/typelizer/templates/enums.ts.erb +1 -1
- data/lib/typelizer/templates/index.ts.erb +5 -3
- data/lib/typelizer/templates/inheritance.ts.erb +5 -1
- data/lib/typelizer/templates/inline_type.ts.erb +1 -1
- data/lib/typelizer/templates/interface.ts.erb +7 -6
- data/lib/typelizer/union_type_sorter.rb +148 -0
- data/lib/typelizer/version.rb +1 -1
- data/lib/typelizer/writer.rb +10 -4
- data/lib/typelizer.rb +31 -1
- metadata +9 -2
- data/lib/typelizer/contexts/scan_context.rb +0 -20
data/lib/typelizer.rb
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require_relative "typelizer/version"
|
|
4
|
+
require_relative "typelizer/union_type_sorter"
|
|
4
5
|
require_relative "typelizer/property"
|
|
5
6
|
require_relative "typelizer/model_plugins/auto"
|
|
6
7
|
require_relative "typelizer/serializer_plugins/auto"
|
|
@@ -10,12 +11,12 @@ require_relative "typelizer/configuration"
|
|
|
10
11
|
require_relative "typelizer/serializer_config_layer"
|
|
11
12
|
|
|
12
13
|
require_relative "typelizer/contexts/writer_context"
|
|
13
|
-
require_relative "typelizer/contexts/scan_context"
|
|
14
14
|
require_relative "typelizer/property_sorter"
|
|
15
15
|
require_relative "typelizer/import_sorter"
|
|
16
16
|
require_relative "typelizer/interface"
|
|
17
17
|
require_relative "typelizer/renderer"
|
|
18
18
|
require_relative "typelizer/writer"
|
|
19
|
+
require_relative "typelizer/openapi"
|
|
19
20
|
require_relative "typelizer/generator"
|
|
20
21
|
require_relative "typelizer/type_parser"
|
|
21
22
|
require_relative "typelizer/dsl"
|
|
@@ -62,8 +63,35 @@ module Typelizer
|
|
|
62
63
|
yield configuration
|
|
63
64
|
end
|
|
64
65
|
|
|
66
|
+
def interfaces(writer_name: nil)
|
|
67
|
+
load_serializers
|
|
68
|
+
context = WriterContext.new(writer_name: writer_name)
|
|
69
|
+
target_serializers(context.writer_config.reject_class)
|
|
70
|
+
.map { |klass| context.interface_for(klass) }
|
|
71
|
+
.reject(&:empty?)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def openapi_schemas(writer_name: nil, openapi_version: "3.0")
|
|
75
|
+
interfaces(writer_name: writer_name).to_h { |i| [i.name, OpenAPI.schema_for(i, openapi_version: openapi_version)] }
|
|
76
|
+
end
|
|
77
|
+
|
|
65
78
|
private
|
|
66
79
|
|
|
80
|
+
def load_serializers
|
|
81
|
+
dirs.flat_map { |dir| Dir["#{dir}/**/*.rb"] }.each { |file| require file }
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def target_serializers(reject_class)
|
|
85
|
+
resolved = base_classes.filter_map do |base_class|
|
|
86
|
+
Object.const_get(base_class) if Object.const_defined?(base_class)
|
|
87
|
+
end
|
|
88
|
+
raise ArgumentError, "No serializers found. Please ensure all your serializers include Typelizer::DSL." if base_classes.any? && resolved.none?
|
|
89
|
+
|
|
90
|
+
(resolved + resolved.flat_map(&:descendants)).uniq
|
|
91
|
+
.reject { |serializer| reject_class.call(serializer: serializer) }
|
|
92
|
+
.sort_by(&:name)
|
|
93
|
+
end
|
|
94
|
+
|
|
67
95
|
attr_writer :base_classes
|
|
68
96
|
end
|
|
69
97
|
|
|
@@ -72,3 +100,5 @@ module Typelizer
|
|
|
72
100
|
|
|
73
101
|
self.base_classes = Set.new
|
|
74
102
|
end
|
|
103
|
+
|
|
104
|
+
require_relative "typelizer/delegate_tracker"
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: typelizer
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.8.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Svyatoslav Kryukov
|
|
@@ -50,9 +50,14 @@ files:
|
|
|
50
50
|
- lib/typelizer.rb
|
|
51
51
|
- lib/typelizer/config.rb
|
|
52
52
|
- lib/typelizer/configuration.rb
|
|
53
|
-
- lib/typelizer/contexts/scan_context.rb
|
|
54
53
|
- lib/typelizer/contexts/writer_context.rb
|
|
54
|
+
- lib/typelizer/delegate_tracker.rb
|
|
55
55
|
- lib/typelizer/dsl.rb
|
|
56
|
+
- lib/typelizer/dsl/hooks.rb
|
|
57
|
+
- lib/typelizer/dsl/hooks/alba.rb
|
|
58
|
+
- lib/typelizer/dsl/hooks/ams.rb
|
|
59
|
+
- lib/typelizer/dsl/hooks/oj_serializers.rb
|
|
60
|
+
- lib/typelizer/dsl/hooks/panko.rb
|
|
56
61
|
- lib/typelizer/generator.rb
|
|
57
62
|
- lib/typelizer/import_sorter.rb
|
|
58
63
|
- lib/typelizer/interface.rb
|
|
@@ -60,6 +65,7 @@ files:
|
|
|
60
65
|
- lib/typelizer/model_plugins/active_record.rb
|
|
61
66
|
- lib/typelizer/model_plugins/auto.rb
|
|
62
67
|
- lib/typelizer/model_plugins/poro.rb
|
|
68
|
+
- lib/typelizer/openapi.rb
|
|
63
69
|
- lib/typelizer/property.rb
|
|
64
70
|
- lib/typelizer/property_sorter.rb
|
|
65
71
|
- lib/typelizer/railtie.rb
|
|
@@ -81,6 +87,7 @@ files:
|
|
|
81
87
|
- lib/typelizer/templates/inline_type.ts.erb
|
|
82
88
|
- lib/typelizer/templates/interface.ts.erb
|
|
83
89
|
- lib/typelizer/type_parser.rb
|
|
90
|
+
- lib/typelizer/union_type_sorter.rb
|
|
84
91
|
- lib/typelizer/version.rb
|
|
85
92
|
- lib/typelizer/writer.rb
|
|
86
93
|
homepage: https://github.com/skryukov/typelizer
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Typelizer
|
|
4
|
-
# Builds a minimal plugin used during scan time
|
|
5
|
-
class ScanContext
|
|
6
|
-
class InvalidOperationError < StandardError; end
|
|
7
|
-
|
|
8
|
-
# Interface creation is not available during DSL scanning phase (TracePoint)
|
|
9
|
-
def self.interface_for(serializer_class)
|
|
10
|
-
class_name = serializer_class&.name || "unknown class"
|
|
11
|
-
raise InvalidOperationError,
|
|
12
|
-
"Interface creation is not allowed during DSL scan (#{class_name})"
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
# just in case, if we call ScanContext like an object
|
|
16
|
-
def interface_for(serializer_class)
|
|
17
|
-
self.class.interface_for(serializer_class)
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|