active-dbml 0.1.0 → 0.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 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: