active-dbml 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8221dbee838a7444be8ba17b7e186639411170beed4acd2f6096bc4ce5d822f2
4
- data.tar.gz: 2ef8374f20e734b3f0c34180cce1cb542d2e875998ff0693676728b356acbfbc
3
+ metadata.gz: d9ba556246418cfc6c5280d60b646b824fe76c2118fc8506e7b82bba21b29ae5
4
+ data.tar.gz: e8d7e89de5d7bb090a8388e6a97c946cd349d032d6ad8ae701f089c15f340d36
5
5
  SHA512:
6
- metadata.gz: 062d762e36de8e9e80996ef58f289930fb28955c5dfb67a069bb6b28030ad3188b69660b6629283b1b9e203304410b70e41b9f806ff954828cdff2ad2ae90de0
7
- data.tar.gz: bd8626a3d86dfa3004c5495084a81164cb108d93707e1ebae45e04b8adf4bab35d3428a9d08fe60ce3f2eb9071b5d90bf8ab6466e322da93cf4875a314205a73
6
+ metadata.gz: ae0f2a620ca97b9694801c1ca7ed3693a38aadf3bd66317272f2020d56f794be494e63bec73b9cb9dfb9b49306c037efd2e16190b8a38197466210da7c9ef4ec
7
+ data.tar.gz: e15bff16d349029e10a603e77462a3f0a965c06b967f83ee27ff505fb18701f0289c37d6dbd93a525a8a78059050b29bea26f666fff11c102de7d74a85cd5d08
data/README.md CHANGED
@@ -13,6 +13,12 @@ ActiveDBML is open for improvements. We eagerly welcome and encourage pull reque
13
13
  - [English](/)
14
14
  - [日本語](/docs/ja.md)
15
15
 
16
+ ## Support
17
+ Supports Rails 6 or higher.
18
+
19
+ ## Future plans
20
+ - Support for Polymorphic associations.
21
+
16
22
 
17
23
  ## Usage
18
24
 
@@ -1,5 +1,5 @@
1
1
  module Active
2
2
  module Dbml
3
- VERSION = "0.1.0"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  end
data/lib/active/dbml.rb CHANGED
@@ -11,38 +11,45 @@ module Active
11
11
  end
12
12
 
13
13
  def self.generate_dbml(models)
14
- dbml_output = []
15
- # 出力済みのEnumを追跡
16
- enums_generated = Set.new
17
-
18
- models.each do |model|
19
- if ActiveRecord::Base.connection.table_exists?(model.table_name)
20
- primary_key = get_primary_key(model)
21
- foreign_keys = get_foreign_keys(model)
22
-
23
- dbml_output << "Table #{model.table_name} {"
24
-
25
- # Enumを取得
26
- defined_enums = model.defined_enums.keys
27
-
28
- # カラム情報を生成
29
- generate_columns(dbml_output, model, primary_key, foreign_keys, defined_enums)
30
-
31
- # Index情報の取得
32
- generate_indexes(dbml_output, model)
33
-
34
- # テーブルコメントの取得
35
- generate_table_comment(dbml_output, model)
36
-
37
- # テーブルを閉じる
38
- dbml_output << "}\n"
39
-
40
- # Enumの詳細を取得
41
- generate_enums(dbml_output, model, enums_generated)
14
+ begin
15
+ dbml_output = []
16
+ # 出力済みのEnumを追跡
17
+ enums_generated = Set.new
18
+
19
+ models.each do |model|
20
+ if ActiveRecord::Base.connection.table_exists?(model.table_name)
21
+ # 抽象クラスはスキップ
22
+ next if model.abstract_class?
23
+
24
+ primary_key = get_primary_key(model)
25
+ foreign_keys = get_foreign_keys(model)
26
+
27
+ dbml_output << "Table #{model.table_name} {"
28
+
29
+ # Enumを取得
30
+ defined_enums = model.defined_enums.keys
31
+
32
+ # カラム情報を生成
33
+ generate_columns(dbml_output, model, primary_key, foreign_keys, defined_enums)
34
+
35
+ # Index情報の取得
36
+ generate_indexes(dbml_output, model)
37
+
38
+ # テーブルコメントの取得
39
+ generate_table_comment(dbml_output, model)
40
+
41
+ # テーブルを閉じる
42
+ dbml_output << "}\n"
43
+
44
+ # Enumの詳細を取得
45
+ generate_enums(dbml_output, model, enums_generated)
46
+ end
42
47
  end
48
+
49
+ dbml_output.join("\n")
50
+ rescue => exception
51
+ Rails.logger.error exception
43
52
  end
44
-
45
- dbml_output.join("\n")
46
53
  end
47
54
 
48
55
  private
@@ -53,12 +60,14 @@ module Active
53
60
  def self.get_foreign_keys(model)
54
61
  foreign_keys = {}
55
62
 
56
- model.reflect_on_all_associations.each do |association|
57
- case association.macro
58
- when :belongs_to
59
- foreign_key = association.options[:foreign_key]
60
- foreign_key_destination = "#{association.plural_name}.#{association.class_name.constantize.primary_key}"
63
+ # get foreign key only belongs_to association
64
+ model.reflect_on_all_associations(:belongs_to).each do |association|
65
+ foreign_key = association.options[:foreign_key]
66
+ foreign_key_destination = "#{association.plural_name}.#{association.class_name.constantize.primary_key}"
61
67
 
68
+ # NOTE: Check model type
69
+ # Skip anything other than ActiveRecord::Base
70
+ if association.class_name.constantize < ActiveRecord::Base
62
71
  association.class_name.constantize.reflect_on_all_associations.each do |relation_association|
63
72
  if model.table_name.eql?(relation_association.plural_name)
64
73
  case relation_association.macro
@@ -70,6 +79,12 @@ module Active
70
79
  end
71
80
  end
72
81
  end
82
+ elsif association.class_name.constantize < ActiveYaml::Base
83
+ puts "⚠ #{association.class_name.constantize} is an ActiveYaml model."
84
+ elsif association.class_name.constantize < ActiveHash::Base
85
+ puts "⚠ #{association.class_name.constantize} is an ActiveHash model."
86
+ else
87
+ puts "⚠ Cannot determine type of #{association.class_name.constantize}"
73
88
  end
74
89
  end
75
90
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active-dbml
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ukmshi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-05-26 00:00:00.000000000 Z
11
+ date: 2023-06-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '7'
19
+ version: '6'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '7'
26
+ version: '6'
27
27
  description: Active::DBML is a new, useful Ruby gem designed to streamline database
28
28
  development.
29
29
  email: