schema2type 0.2.1 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 135c9683ac6c053396ba1a4f5088368c18f5894bbf0fc5c6557bce7a8431ad70
4
- data.tar.gz: 23f8800d5cb0f387d2b4cf10a965b035ee6ed60665360a4300a92ef280c30cef
3
+ metadata.gz: 912e9bb9f837865415f701aec0b4844f10dd80a3064a072dfac0a47f480c0e0c
4
+ data.tar.gz: 055064e54272d3fd75c6821a438e968165e15f5d4c64d6eecc234a8b0c348ad7
5
5
  SHA512:
6
- metadata.gz: 86d88739e217beec70525f39358ba02dd612f9e974f49df05b7c3da36eeb8efad59230d38f30542a0b6e3fe940f93989e8d9ce868dec85310f7834b41704052e
7
- data.tar.gz: 2c3f48ea453a041fcee1662247078f139f11bbc6ba126640d7fc43788ab347867184a05e1e7ff5b2125f8a665cec33ba01ddaa06d97d931b57128d8c08b4e028
6
+ metadata.gz: b39374c2b97e67a7caba68cf89dc22882f06f1e4fe9b464cdd95ca3b8901586fe7b5a73e8c4b0ddfb1f7e41ee17074eb822de7138b1c4faf3d82bc7da8c718c6
7
+ data.tar.gz: c22cc454e307e88f441195e5ae0d55cceca5a169cb2ec40117cb79a2e1192d261274a39260039e8df1389ae2034b2ccc8cd9fb4aa8f2ce270e61f0a02c9b7fb3
@@ -0,0 +1 @@
1
+ 2.7.0
data/Gemfile CHANGED
@@ -1,4 +1,5 @@
1
1
  source "https://rubygems.org"
2
+ ruby '2.7.0'
2
3
 
3
4
  # Specify your gem's dependencies in schema2type.gemspec
4
5
  gemspec
@@ -1,39 +1,41 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- schema2type (0.2.0)
4
+ schema2type (0.3.0)
5
5
  activesupport
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- activesupport (5.2.2)
10
+ activesupport (6.0.3.1)
11
11
  concurrent-ruby (~> 1.0, >= 1.0.2)
12
12
  i18n (>= 0.7, < 2)
13
13
  minitest (~> 5.1)
14
14
  tzinfo (~> 1.1)
15
- concurrent-ruby (1.1.4)
15
+ zeitwerk (~> 2.2, >= 2.2.2)
16
+ concurrent-ruby (1.1.6)
16
17
  diff-lcs (1.3)
17
- i18n (1.5.3)
18
+ i18n (1.8.3)
18
19
  concurrent-ruby (~> 1.0)
19
- minitest (5.11.3)
20
- rake (10.5.0)
21
- rspec (3.8.0)
22
- rspec-core (~> 3.8.0)
23
- rspec-expectations (~> 3.8.0)
24
- rspec-mocks (~> 3.8.0)
25
- rspec-core (3.8.0)
26
- rspec-support (~> 3.8.0)
27
- rspec-expectations (3.8.2)
20
+ minitest (5.14.1)
21
+ rake (13.0.1)
22
+ rspec (3.9.0)
23
+ rspec-core (~> 3.9.0)
24
+ rspec-expectations (~> 3.9.0)
25
+ rspec-mocks (~> 3.9.0)
26
+ rspec-core (3.9.2)
27
+ rspec-support (~> 3.9.3)
28
+ rspec-expectations (3.9.2)
28
29
  diff-lcs (>= 1.2.0, < 2.0)
29
- rspec-support (~> 3.8.0)
30
- rspec-mocks (3.8.0)
30
+ rspec-support (~> 3.9.0)
31
+ rspec-mocks (3.9.1)
31
32
  diff-lcs (>= 1.2.0, < 2.0)
32
- rspec-support (~> 3.8.0)
33
- rspec-support (3.8.0)
33
+ rspec-support (~> 3.9.0)
34
+ rspec-support (3.9.3)
34
35
  thread_safe (0.3.6)
35
- tzinfo (1.2.5)
36
+ tzinfo (1.2.7)
36
37
  thread_safe (~> 0.1)
38
+ zeitwerk (2.3.0)
37
39
 
38
40
  PLATFORMS
39
41
  ruby
@@ -41,9 +43,12 @@ PLATFORMS
41
43
  DEPENDENCIES
42
44
  activesupport
43
45
  bundler (~> 2.0)
44
- rake (~> 10.0)
46
+ rake (~> 13.0)
45
47
  rspec (~> 3.0)
46
48
  schema2type!
47
49
 
50
+ RUBY VERSION
51
+ ruby 2.7.0p0
52
+
48
53
  BUNDLED WITH
49
- 2.0.1
54
+ 2.1.4
data/README.md CHANGED
@@ -22,12 +22,13 @@ Automatically have the following TypesScript type generated.
22
22
  ```typescript
23
23
  declare namespace schema {
24
24
  type User = {
25
- name: string | null
26
- age: number | null
27
- sales: number | null
28
- paid: boolean
29
- createdAt: Date
30
- updatedAt: Date
25
+ id: number;
26
+ name: string | null;
27
+ age: number | null;
28
+ sales: number | null;
29
+ paid: boolean;
30
+ createdAt: Date;
31
+ updatedAt: Date;
31
32
  }
32
33
  }
33
34
  ```
@@ -81,10 +82,10 @@ the schema2type convert as per this conversion table.
81
82
  | float | number |
82
83
  | decimal | number |
83
84
  | boolean | boolean |
84
- | date | Date |
85
- | datetime | Date |
86
- | timestamp | Date |
87
- | datetime_with_timezone | Date |
85
+ | date | string |
86
+ | datetime | string |
87
+ | timestamp | string |
88
+ | datetime_with_timezone | string |
88
89
  ## License
89
90
 
90
91
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
@@ -5,4 +5,4 @@ require 'schema2type'
5
5
 
6
6
  params = ARGV.getopts('s:o:n:', 'snake')
7
7
 
8
- Schema2type.execute(input_file: params["s"], out_file: params["o"], name_space: params["n"], snake_case: params["snake"])
8
+ Schema2type.execute(input_file: params['s'], out_file: params['o'], name_space: params['n'], is_snake_case: params['snake'])
@@ -1,4 +1,4 @@
1
- require "schema2type/version"
1
+ require 'schema2type/version'
2
2
  require 'schema2type/schema_converter'
3
- require "schema2type/cli"
4
-
3
+ require 'schema2type/covert_service'
4
+ require 'schema2type/cli'
@@ -1,15 +1,9 @@
1
1
  module Schema2type
2
+ DEFAULT_SCHEMA_PATH = "./db/schema.rb".freeze
3
+ DEFAULT_NAME_SPACE = "schema".freeze
2
4
 
3
- DEFAULT_SCHEMA_PATH = "./db/schema.rb"
4
- DEFAULT_NAME_SPACE = "schema"
5
-
6
- def self.execute(input_file:, out_file:, name_space:, snake_case:)
7
- @@converted_types = []
8
- @@snake_case = snake_case
9
-
10
- eval(File.read(input_file || DEFAULT_SCHEMA_PATH))
11
-
12
- convert_type_text = @@converted_types.map { |t| " #{t}" }.join("\n").strip
5
+ def self.execute(input_file:, out_file:, name_space:, is_snake_case:)
6
+ resultHash = eval(File.read(input_file || DEFAULT_SCHEMA_PATH), CovertService.new(is_snake_case).get_binding)
13
7
 
14
8
  File.open(out_file, "w") do |f|
15
9
  f.puts <<~EOS
@@ -17,38 +11,13 @@ module Schema2type
17
11
 
18
12
  /**
19
13
  * auto-generated file
20
- * schema version: #{$schema_version}
14
+ * schema version: #{resultHash[:version]}
21
15
  * This file was automatically generated by schema2type
22
16
  */
23
17
  declare namespace #{name_space || DEFAULT_NAME_SPACE} {
24
- #{convert_type_text}
18
+ #{resultHash[:lines]}
25
19
  }
26
20
  EOS
27
21
  end
28
22
  end
29
-
30
- def self.convert_schema(table_name, *)
31
- converter = SchemaConverter.new(table_name: table_name, snake_case: @@snake_case)
32
-
33
- yield converter
34
-
35
- @@converted_types.concat converter.result
36
- end
37
-
38
- def self.method_missing(*arg)
39
- # To exclude unnecessary methods
40
- end
41
-
42
- module ActiveRecord
43
- module Schema
44
- def self.define(version)
45
- $schema_version = version[:version]
46
- yield
47
- end
48
- end
49
- end
50
-
51
- class << self
52
- alias :create_table :convert_schema
53
- end
54
23
  end
@@ -10,7 +10,7 @@ bigint: number
10
10
  float: number
11
11
  decimal: number
12
12
  boolean: boolean
13
- date: Date
14
- datetime: Date
15
- timestamp: Date
16
- datetime_with_timezone: Date
13
+ date: string
14
+ datetime: string
15
+ timestamp: string
16
+ datetime_with_timezone: string
@@ -0,0 +1,45 @@
1
+ module Schema2type
2
+ class CovertService
3
+ def initialize(is_snake_case)
4
+ @converted_types = []
5
+ @is_snake_case = is_snake_case
6
+ end
7
+
8
+ def get_binding
9
+ binding
10
+ end
11
+
12
+ # mock method for create_table in schema.rb
13
+ def convert_schema_to_type(table_name, *)
14
+ converter = SchemaConverter.new(table_name: table_name, is_snake_case: @is_snake_case)
15
+ yield converter
16
+ @converted_types.concat converter.converted_type_lines
17
+ end
18
+
19
+ def method_missing(*)
20
+ # To exclude unnecessary methods
21
+ # TODO: add error handling
22
+ end
23
+
24
+ def self.method_missing(*)
25
+ # To exclude unnecessary methods
26
+ # TODO: add error handling
27
+ end
28
+
29
+ # mock module and method for shcema.rb
30
+ module ActiveRecord
31
+ module Schema
32
+ def self.define(*arg)
33
+ converted_types = yield
34
+ converted_type_lines = converted_types.map { |t| " #{t}" }.join("\n").strip
35
+ {
36
+ lines: converted_type_lines,
37
+ version: arg[0][:version]
38
+ }
39
+ end
40
+ end
41
+ end
42
+
43
+ alias create_table convert_schema_to_type
44
+ end
45
+ end
@@ -3,43 +3,41 @@ require 'active_support/inflector'
3
3
 
4
4
  module Schema2type
5
5
  class SchemaConverter
6
- attr_reader :property_lines, :table_name, :convertion_table, :snake_case
6
+ attr_reader :property_lines, :table_name, :is_snake_case
7
7
 
8
- TYPE_STRING = 'string'.freeze
9
- TYPE_NUMBER = 'number'.freeze
10
- TYPE_BOOLEAN = 'boolean'.freeze
11
- TYPE_DATE = 'Date'.freeze
12
8
  COLUMN_METHODS = YAML.load_file(File.expand_path(__dir__) + '/conversion_table.yml').to_a
9
+ ID_PROPERTY_LINE_TEXT = " id: number;".freeze
13
10
 
14
11
  def self.define_convert_methods(methods)
15
12
  methods.each do |m|
16
13
  define_method(m[0]) do |name, *options|
17
- push_property_line name: name, type: m[1], options: options
14
+ convert_property_line_and_push name: name, type: m[1], options: options
18
15
  end
19
16
  end
20
17
  end
21
18
 
22
19
  define_convert_methods COLUMN_METHODS
23
20
 
24
- def initialize(table_name:, snake_case: false)
21
+ def initialize(table_name:, is_snake_case: false)
25
22
  @property_lines = []
26
23
  @table_name = table_name.singularize.camelize
27
- @snake_case = snake_case
24
+ @is_snake_case = is_snake_case
28
25
  end
29
26
 
30
- def result
31
- ["type #{table_name} = {", property_lines, "}\n"].flatten
27
+ def converted_type_lines
28
+ ["type #{table_name} = {", ID_PROPERTY_LINE_TEXT, property_lines, "}\n"].flatten
32
29
  end
33
30
 
34
31
  def method_missing(*)
35
32
  # To exclude unnecessary methods
33
+ # TODO: add error handling
36
34
  end
37
35
 
38
36
  private
39
37
 
40
- def push_property_line(name:, type:, options:)
38
+ def convert_property_line_and_push(name:, type:, options:)
41
39
  is_non_nullable = options[0] && options[0].key?(:null) && !options[0][:null]
42
- formatted_name = snake_case ? name.underscore : name.camelcase(:lower)
40
+ formatted_name = is_snake_case ? name.underscore : name.camelcase(:lower)
43
41
  property_line = is_non_nullable ? "#{formatted_name}: #{type};" : "#{formatted_name}: #{type} | null;"
44
42
 
45
43
  property_lines << " #{property_line}"
@@ -1,3 +1,3 @@
1
1
  module Schema2type
2
- VERSION = "0.2.1"
2
+ VERSION = '0.3.0'
3
3
  end
@@ -24,6 +24,6 @@ Gem::Specification.new do |spec|
24
24
  spec.require_paths = ["lib"]
25
25
  spec.add_runtime_dependency "activesupport"
26
26
  spec.add_development_dependency "bundler", "~> 2.0"
27
- spec.add_development_dependency "rake", "~> 10.0"
27
+ spec.add_development_dependency "rake", "~> 13.0"
28
28
  spec.add_development_dependency "rspec", "~> 3.0"
29
29
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: schema2type
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ryo
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-04-21 00:00:00.000000000 Z
11
+ date: 2020-06-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '10.0'
47
+ version: '13.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '10.0'
54
+ version: '13.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -77,6 +77,7 @@ extra_rdoc_files: []
77
77
  files:
78
78
  - ".gitignore"
79
79
  - ".rspec"
80
+ - ".ruby-version"
80
81
  - ".travis.yml"
81
82
  - CODE_OF_CONDUCT.md
82
83
  - Gemfile
@@ -90,6 +91,7 @@ files:
90
91
  - lib/schema2type.rb
91
92
  - lib/schema2type/cli.rb
92
93
  - lib/schema2type/conversion_table.yml
94
+ - lib/schema2type/covert_service.rb
93
95
  - lib/schema2type/schema_converter.rb
94
96
  - lib/schema2type/version.rb
95
97
  - schema2type.gemspec
@@ -112,7 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
112
114
  - !ruby/object:Gem::Version
113
115
  version: '0'
114
116
  requirements: []
115
- rubygems_version: 3.0.2
117
+ rubygems_version: 3.1.2
116
118
  signing_key:
117
119
  specification_version: 4
118
120
  summary: generate TypeScript type definitions from Rails schema.rb