ts_schema 0.1.11 → 0.1.12

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 55a01d015705b45bc3b21d80c74fde717172daf0b9cc8f8856ee24bdb6ffe00d
4
- data.tar.gz: 662b58cf50169869845249b218ad760d7f3e4d96b5e833ae916a77a86e8447dd
3
+ metadata.gz: 8602c4a7ca10962ac35fd7c64a18d0669ed3f7d1ecdfdf7bc9c29a258bff754a
4
+ data.tar.gz: 322d779a986f2edf18d53829a6a8669326732be7aa4080567d2f4a1ecb1ebac0
5
5
  SHA512:
6
- metadata.gz: 5f7ceb576b082e209567755d34c7ce25f826ec61891e3f61662f06289838b087c2d18b61f8fdcbabe4db097f59af90332ac55b861b25242a0cc20bc809ad8e9d
7
- data.tar.gz: 785331c128754a645c9570146244fc01992329ea7864dc40b3295a587f67ce07bacfff3320a6e9a673552eff4f5489c891028715d7675be5965275a5598eb43b
6
+ metadata.gz: 88fd048bbffe0eb93ac910bdcaf456a35e4ded1bf934dab9330d5ad1dba4d57ad3106c07a549a92555f312fe4d713d1b1b4b8c7d29d3909d85a7062df96e6426
7
+ data.tar.gz: 4c778296ba8de708bf9539bdcd163d79370c0477600d2bdbfd98a0e5c0355d3e02872728452be964922032cc880b3ac92ee270f40269e251734fb48ebfb74bcb
@@ -1,57 +1,89 @@
1
+ # Default type mappings:
2
+ #
3
+ # string: string
4
+ # text: string
5
+ # integer: number
6
+ # enum: number
7
+ # bigint: number
8
+ # float: number
9
+ # decimal: number
10
+ # json: Record<string, any>
11
+ # jsonb: Record<string, any>
12
+ # binary: string
13
+ # boolean: boolean
14
+ # date: string
15
+ # datetime: string
16
+ # timestamp: string
17
+ # datetime_with_timezone: string
18
+ # inet: string
19
+ # cidr: string
20
+ # macaddr: string
21
+
1
22
  TsSchema.setup do |config|
2
- # Options: camel|snake|pascal
23
+ # Case options: camel|snake|pascal
24
+ #
3
25
  # config.case = :camel
4
26
 
27
+
5
28
  # Customize output path and file name
29
+ #
6
30
  # config.output = Rails.root.join('app', 'assets', 'javascripts', 'schema.d.ts')
7
31
 
8
- # Whether to generate the schema file on migrations and rollbacks
32
+
33
+ # Whether to generate the schema file after running migrations
34
+ #
9
35
  # config.auto_generate = true
10
36
 
37
+
11
38
  # Add custom type mappings or overrides
12
- #
13
- # Default type mappings:
14
- #
15
- # string: string
16
- # text: string
17
- # integer: number
18
- # enum: number
19
- # bigint: number
20
- # float: number
21
- # decimal: number
22
- # json: Record<string, any>
23
- # jsonb: Record<string, any>
24
- # binary: string
25
- # boolean: boolean
26
- # date: string
27
- # datetime: string
28
- # timestamp: string
29
- # datetime_with_timezone: string
30
- # inet: string
31
- # cidr: string
32
- # macaddr: string
33
- #
39
+ #
34
40
  # config.custom_types = {
35
41
  #
36
42
  # }
37
43
 
44
+
38
45
  # Default type for unrecognized types
46
+ #
39
47
  # config.default_type = :string
40
48
 
41
- # Whether to generate types for associations
49
+
50
+ # Whether to generate types for associated models
51
+ #
42
52
  # config.include_associated = true
43
53
 
44
- # Additional models to map which don't have a model file
45
- # config.additional_models = [
46
- #
47
- # ]
48
54
 
49
- # Namespace
55
+ # Parent classes of models to generate (as strings or symbols)
56
+ # Only classes inheriting from those in this list will have types generated
57
+ #
58
+ # config.parent_classes = [
59
+ # "ApplicationRecord",
60
+ # ]
61
+
62
+
63
+ # Additional models to generate schema from, such as those added by other gems
64
+ # which don't have a model file. (as strings or symbols)
65
+ #
66
+ # config.additional_models = [
67
+ #
68
+ # ]
69
+
70
+
71
+ # Namespace for generated types
72
+ #
50
73
  # config.namespace = :schema
51
74
 
52
- # Options: tab|space
75
+
76
+ # Output schema as types or interfaces: type|interface
77
+ #
78
+ # config.schema_type = :interface
79
+
80
+
81
+ # Indentation options: tab|space
82
+ #
53
83
  # config.indent = :tab
54
84
 
85
+
55
86
  # If indent is spaces, specify how many
87
+ #
56
88
  # config.spaces = 2
57
89
  end
@@ -11,8 +11,10 @@ module TsSchema
11
11
  default_type: :string,
12
12
  include_associated: true,
13
13
  namespace: :schema,
14
+ schema_type: :interface,
14
15
  indent: :tab,
15
16
  spaces: 2,
17
+ parent_classes: ["ApplicationRecord"],
16
18
  additional_models: []
17
19
  }
18
20
 
@@ -7,10 +7,12 @@ module TsSchema
7
7
 
8
8
  def initialize(config = nil)
9
9
  @config = config || TsSchema::Configuration.new
10
+ @models = []
10
11
 
11
12
  Rails.application.eager_load!
12
- # @models = ApplicationRecord.send(:subclasses)
13
- @models = get_subclasses(ApplicationRecord)
13
+ @config.parent_classes.each do |parent|
14
+ @models.concat(get_subclasses(parent.to_s.constantize))
15
+ end
14
16
  unless @config.additional_models.empty?
15
17
  @models.concat(@config.additional_models.map do |m|
16
18
  m.to_s.constantize
@@ -30,33 +32,19 @@ module TsSchema
30
32
  end
31
33
 
32
34
  def generate
33
- generate_typescript
34
- end
35
-
36
- def output_file
37
- path = @config.output
38
- FileUtils.mkdir_p(File.dirname(path))
39
-
40
- content = generate
41
- return if File.exist?(path) && File.read(path) == content
42
-
43
- File.open(path, 'w') do |f|
44
- f.write content
45
- end
46
- end
47
-
48
- def generate_typescript
49
35
  type_template = ""
36
+
50
37
  @models.each do |model|
51
38
  columns = map_column_types(model)
52
39
  columns.concat(map_associations(model)) if @config.include_associated
53
40
 
54
41
  type_template += <<~TYPESCRIPT
55
- interface #{model.model_name.param_key.camelize} {
42
+ #{@config.schema_type} #{model.model_name.param_key.camelize} #{@config.schema_type.to_sym == :type ? "= " : ""}{
56
43
  #{columns.map { |column| "#{indent_as_str}#{column_name_cased(column[:name])}: #{column[:ts_type]};" }.join("\n")}
57
44
  }\n
58
45
  TYPESCRIPT
59
46
  end
47
+
60
48
  type_template = <<~TPL
61
49
  declare namespace #{@config.namespace} {
62
50
  #{indent_wrapper(type_template)}
@@ -64,12 +52,24 @@ module TsSchema
64
52
  TPL
65
53
  end
66
54
 
55
+ def output_file
56
+ path = @config.output
57
+ FileUtils.mkdir_p(File.dirname(path))
58
+
59
+ content = generate
60
+ return if File.exist?(path) && File.read(path) == content
61
+
62
+ File.open(path, 'w') do |f|
63
+ f.write content
64
+ end
65
+ end
66
+
67
67
  def map_column_types(model)
68
68
  model.columns.map { |i|
69
69
  type = @types[i.type.to_s] || @config.default_type
70
70
 
71
71
  if(enum = model.defined_enums[i.name])
72
- type = enum.keys.map { |k| "'#{k}'" }.join(" | ")
72
+ type = enum.keys.map { |k| "'#{k}'" }.join("|")
73
73
  end
74
74
 
75
75
  {
@@ -1,3 +1,3 @@
1
1
  module TsSchema
2
- VERSION = "0.1.11"
2
+ VERSION = "0.1.12"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ts_schema
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.11
4
+ version: 0.1.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Avram Walden
@@ -48,7 +48,6 @@ files:
48
48
  - MIT-LICENSE
49
49
  - README.md
50
50
  - Rakefile
51
- - lib/generators/generate_generator.rb
52
51
  - lib/generators/install_generator.rb
53
52
  - lib/generators/templates/ts_schema.rb
54
53
  - lib/tasks/ts_schema_tasks.rake
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails/generators'
4
- require 'rails/generators/base'
5
-
6
- module TsSchema
7
- module Generators
8
- class GenerateGenerator < Rails::Generators::Base
9
-
10
- desc "Generates a schema.d.ts file"
11
-
12
- def generate_schema
13
- create_file TsSchema.configuration.output, TsSchema.generate
14
- end
15
- end
16
- end
17
- end