camille 1.1.0 → 1.2.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 +6 -0
- data/Gemfile.lock +1 -1
- data/lib/camille/code_generator.rb +29 -12
- data/lib/camille/main_controller.rb +1 -1
- data/lib/camille/schema_literal_generator.rb +51 -0
- data/lib/camille/schemas.rb +1 -41
- data/lib/camille/type_literal_generator.rb +14 -0
- data/lib/camille/types.rb +1 -4
- data/lib/camille/version.rb +1 -1
- data/lib/camille.rb +3 -1
- metadata +3 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 82a091b46cd7266990fb540e54febefd78773260f780283d624fa88321090d81
|
|
4
|
+
data.tar.gz: 33a660f689f967f3be04e9bc70b15214fa28d36c74df223357f66dbe17bce7b1
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 32442ecdc91cd62092d3d49ce67c6cfe2ccedaeb1a285a1e6f44615792ce9408d8d245690cb96ff269853a72d3807080f1bdcb88639439b4e957a4d8ced726f4
|
|
7
|
+
data.tar.gz: 21398e4687f2a7e3f56b06b86ad1c86a80bbe8719c57227a413df09ad7251c28e86af89145b9656243d80c68b9eeb4a9dea412b1a6e67c6189cc6b55d2af943f
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -1,21 +1,38 @@
|
|
|
1
1
|
require 'stringio'
|
|
2
2
|
|
|
3
3
|
module Camille
|
|
4
|
-
|
|
5
|
-
def
|
|
4
|
+
class CodeGenerator
|
|
5
|
+
def initialize types_literal_lines: Camille::Types.literal_lines, schemas_literal_lines: Camille::Schemas.literal_lines
|
|
6
|
+
@types_literal_lines = types_literal_lines
|
|
7
|
+
@schemas_literal_lines = schemas_literal_lines
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def generate_ts
|
|
6
11
|
io = StringIO.new
|
|
7
|
-
io
|
|
8
|
-
io
|
|
9
|
-
|
|
10
|
-
io.puts "export #{line}"
|
|
11
|
-
end
|
|
12
|
-
io.puts
|
|
13
|
-
io.print "export default "
|
|
14
|
-
Camille::Schemas.literal_lines.each do |line|
|
|
15
|
-
io.puts line
|
|
16
|
-
end
|
|
12
|
+
generate_header io
|
|
13
|
+
generate_types io
|
|
14
|
+
generate_schemas io
|
|
17
15
|
io.string
|
|
18
16
|
end
|
|
19
17
|
|
|
18
|
+
private
|
|
19
|
+
def generate_header io
|
|
20
|
+
io.puts Camille::Configuration.ts_header
|
|
21
|
+
io.puts
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def generate_types io
|
|
25
|
+
@types_literal_lines.each do |line|
|
|
26
|
+
io.puts "export #{line}"
|
|
27
|
+
end
|
|
28
|
+
io.puts
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def generate_schemas io
|
|
32
|
+
io.print "export default "
|
|
33
|
+
@schemas_literal_lines.each do |line|
|
|
34
|
+
io.puts line
|
|
35
|
+
end
|
|
36
|
+
end
|
|
20
37
|
end
|
|
21
38
|
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
module Camille
|
|
2
|
+
class SchemaLiteralGenerator
|
|
3
|
+
def initialize schemas
|
|
4
|
+
@schemas = schemas
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def literal_lines
|
|
8
|
+
[
|
|
9
|
+
Camille::Line.new('{'),
|
|
10
|
+
tree_literal_lines(namespace_tree).map(&:do_indent),
|
|
11
|
+
Camille::Line.new('}')
|
|
12
|
+
]
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
private
|
|
16
|
+
def namespace_tree
|
|
17
|
+
tree = {}
|
|
18
|
+
|
|
19
|
+
@schemas.sort_by(&:klass_name).each do |s|
|
|
20
|
+
path = s.klass_name.split('::')
|
|
21
|
+
*namespaces, schema_name = path
|
|
22
|
+
|
|
23
|
+
level = namespaces.inject(tree) do |level, namespace|
|
|
24
|
+
level[namespace] ||= {}
|
|
25
|
+
level[namespace]
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
level[schema_name] = s
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
tree
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def tree_literal_lines tree
|
|
35
|
+
tree.map do |key, value|
|
|
36
|
+
if value.is_a? ::Hash
|
|
37
|
+
[
|
|
38
|
+
Camille::Line.new("#{Camille::Configuration.response_key_converter.call(key.to_s)}: {"),
|
|
39
|
+
tree_literal_lines(value).map(&:do_indent),
|
|
40
|
+
Camille::Line.new('},')
|
|
41
|
+
]
|
|
42
|
+
else
|
|
43
|
+
value.literal_lines.tap do |lines|
|
|
44
|
+
lines.first.prepend("#{Camille::Configuration.response_key_converter.call(key.to_s)}: ")
|
|
45
|
+
lines.last.append(',')
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end.flatten
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
data/lib/camille/schemas.rb
CHANGED
|
@@ -1,47 +1,7 @@
|
|
|
1
1
|
module Camille
|
|
2
2
|
module Schemas
|
|
3
3
|
def self.literal_lines
|
|
4
|
-
|
|
5
|
-
Camille::Line.new('{'),
|
|
6
|
-
tree_literal_lines(namespace_tree).map(&:do_indent),
|
|
7
|
-
Camille::Line.new('}')
|
|
8
|
-
]
|
|
4
|
+
Camille::SchemaLiteralGenerator.new(Camille::Loader.loaded_schemas).literal_lines
|
|
9
5
|
end
|
|
10
|
-
|
|
11
|
-
private
|
|
12
|
-
def self.namespace_tree
|
|
13
|
-
tree = {}
|
|
14
|
-
|
|
15
|
-
Camille::Loader.loaded_schemas.sort_by(&:klass_name).each do |s|
|
|
16
|
-
path = s.klass_name.split('::')
|
|
17
|
-
*namespaces, schema_name = path
|
|
18
|
-
|
|
19
|
-
level = namespaces.inject(tree) do |level, namespace|
|
|
20
|
-
level[namespace] ||= {}
|
|
21
|
-
level[namespace]
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
level[schema_name] = s
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
tree
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def self.tree_literal_lines tree
|
|
31
|
-
tree.map do |key, value|
|
|
32
|
-
if value.is_a? ::Hash
|
|
33
|
-
[
|
|
34
|
-
Camille::Line.new("#{Camille::Configuration.response_key_converter.call(key.to_s)}: {"),
|
|
35
|
-
tree_literal_lines(value).map(&:do_indent),
|
|
36
|
-
Camille::Line.new('},')
|
|
37
|
-
]
|
|
38
|
-
else
|
|
39
|
-
value.literal_lines.tap do |lines|
|
|
40
|
-
lines.first.prepend("#{Camille::Configuration.response_key_converter.call(key.to_s)}: ")
|
|
41
|
-
lines.last.append(',')
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
end.flatten
|
|
45
|
-
end
|
|
46
6
|
end
|
|
47
7
|
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
module Camille
|
|
2
|
+
class TypeLiteralGenerator
|
|
3
|
+
def initialize types
|
|
4
|
+
@types = types
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def literal_lines
|
|
8
|
+
@types.sort_by(&:klass_name).map do |type|
|
|
9
|
+
instance = type.new
|
|
10
|
+
Camille::Line.new("type #{instance.literal} = #{instance.underlying.literal}")
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
data/lib/camille/types.rb
CHANGED
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
module Camille
|
|
2
2
|
module Types
|
|
3
3
|
def self.literal_lines
|
|
4
|
-
Camille::Loader.loaded_types
|
|
5
|
-
instance = type.new
|
|
6
|
-
Camille::Line.new("type #{instance.literal} = #{instance.underlying.literal}")
|
|
7
|
-
end
|
|
4
|
+
Camille::TypeLiteralGenerator.new(Camille::Loader.loaded_types).literal_lines
|
|
8
5
|
end
|
|
9
6
|
end
|
|
10
7
|
end
|
data/lib/camille/version.rb
CHANGED
data/lib/camille.rb
CHANGED
|
@@ -40,6 +40,8 @@ require_relative "camille/railtie"
|
|
|
40
40
|
require_relative "camille/controller"
|
|
41
41
|
require_relative "camille/loader"
|
|
42
42
|
require_relative "camille/configuration"
|
|
43
|
+
require_relative "camille/type_literal_generator"
|
|
44
|
+
require_relative "camille/schema_literal_generator"
|
|
43
45
|
require_relative "camille/code_generator"
|
|
44
46
|
require_relative "camille/main_controller"
|
|
45
47
|
require_relative "camille/key_converter"
|
|
@@ -57,6 +59,6 @@ module Camille
|
|
|
57
59
|
end
|
|
58
60
|
|
|
59
61
|
def self.generate_ts
|
|
60
|
-
Camille::CodeGenerator.generate_ts
|
|
62
|
+
Camille::CodeGenerator.new.generate_ts
|
|
61
63
|
end
|
|
62
64
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: camille
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- merely
|
|
@@ -76,11 +76,13 @@ files:
|
|
|
76
76
|
- lib/camille/railtie.rb
|
|
77
77
|
- lib/camille/rendered.rb
|
|
78
78
|
- lib/camille/schema.rb
|
|
79
|
+
- lib/camille/schema_literal_generator.rb
|
|
79
80
|
- lib/camille/schemas.rb
|
|
80
81
|
- lib/camille/syntax.rb
|
|
81
82
|
- lib/camille/type.rb
|
|
82
83
|
- lib/camille/type_error.rb
|
|
83
84
|
- lib/camille/type_error_printer.rb
|
|
85
|
+
- lib/camille/type_literal_generator.rb
|
|
84
86
|
- lib/camille/types.rb
|
|
85
87
|
- lib/camille/types/any.rb
|
|
86
88
|
- lib/camille/types/array.rb
|