yaml2erd 0.2.0 → 0.3.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: b0c951305aba9df6d52d9ee4cd03a37315600bddb6ad784d513989a6cd59a49f
4
- data.tar.gz: 0d5056f95c9bc2ace3ae549ee3c7e0a35ce51822c4614cb37334b049136831ec
3
+ metadata.gz: c07d6b5fd4e512e61815f61e3ad4b2bb011aa9bcda3d9e831601c9b2d856ae45
4
+ data.tar.gz: 9bd8dc74f363c71d443e371c9141d1a936426c0d0c99bfcd8d9d9c640e52e838
5
5
  SHA512:
6
- metadata.gz: 4dc611ca29259d56d984881e787ab8a7bc523df072c23772bb54f6939402fb54aff54c0c754a15f0e5fc398497fada7d171bf97247f5c86552c214f08163b213
7
- data.tar.gz: e4010ff0d1a4433e71d60efb3827f124df5bd1113c59cb8427618c2c0179bebc5b8434929872dba4d4703149b4c26636b3787f366d966fbf247285c6c9b73ecd
6
+ metadata.gz: def24be6c39babaea1f83c9cd5dfd59e66b8fefe93f45781bc3cfb0831b4844789e01ed875b17d6d73907498169b472c8167878cfec2301947f9fd0ce850fb7b
7
+ data.tar.gz: 99c3ae3cfa1ca336c5e7f28897d7f135a05792f53030589094fe1821c28a6581225f2626c9bb0e7d6256901710d1cdc7cda41dc5144faae729402b5c21d85315
data/Gemfile.lock CHANGED
@@ -1,23 +1,23 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- yaml2erd (0.2.0)
4
+ yaml2erd (0.3.0)
5
5
  activesupport (~> 5.2)
6
6
  gviz (~> 0.3.5)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- activesupport (5.2.1)
11
+ activesupport (5.2.2)
12
12
  concurrent-ruby (~> 1.0, >= 1.0.2)
13
13
  i18n (>= 0.7, < 2)
14
14
  minitest (~> 5.1)
15
15
  tzinfo (~> 1.1)
16
- concurrent-ruby (1.1.3)
16
+ concurrent-ruby (1.1.4)
17
17
  diff-lcs (1.3)
18
18
  gviz (0.3.5)
19
19
  thor
20
- i18n (1.1.1)
20
+ i18n (1.5.2)
21
21
  concurrent-ruby (~> 1.0)
22
22
  minitest (5.11.3)
23
23
  rake (10.5.0)
@@ -49,4 +49,4 @@ DEPENDENCIES
49
49
  yaml2erd!
50
50
 
51
51
  BUNDLED WITH
52
- 1.17.1
52
+ 1.17.3
data/lib/yaml2erd.rb CHANGED
@@ -7,11 +7,6 @@ require 'yaml2erd/gv_id_map'
7
7
  class Yaml2erd
8
8
  attr_accessor :group_global_conf
9
9
 
10
- ARROW_MAP = {
11
- has_many: { arrowhead: 'crow', arrowtail: 'tee', arrowsize: 5, dir: 'both', minlen: 5, penwidth: 10 },
12
- has_one: { arrowhead: 'tee', arrowtail: 'tee', arrowsize: 5, dir: 'both', minlen: 5, penwidth: 10 }
13
- }.freeze
14
-
15
10
  TABLE_HEADER = %w[
16
11
  物理名
17
12
  論理名
@@ -23,19 +18,30 @@ class Yaml2erd
23
18
  説明
24
19
  ].freeze
25
20
 
26
- DEFAULT_CONF = {
21
+ CUSTOMIZABLE_CONF = {
27
22
  global_conf: {
28
23
  layout: 'dot'
29
24
  },
30
25
  entity_conf: {
31
26
  shape: 'Mrecord',
32
27
  fontname: 'Noto Sans CJK JP Black',
33
- fontsize: 50
28
+ fontsize: 20
34
29
  },
35
30
  group_conf: {
36
31
  shape: 'Mrecord',
37
32
  fontname: 'Noto Sans CJK JP Black',
38
- fontsize: 120
33
+ fontsize: 40
34
+ },
35
+ arrow_map: {
36
+ has_many: { arrowsize: 3, minlen: 2, penwidth: 4 },
37
+ has_one: { arrowsize: 3, minlen: 2, penwidth: 4 }
38
+ }
39
+ }.freeze
40
+
41
+ NOT_CUSTOMIZABLE_CONF = {
42
+ arrow_map: {
43
+ has_many: { arrowhead: 'crow', arrowtail: 'tee', dir: 'both' },
44
+ has_one: { arrowhead: 'tee', arrowtail: 'tee', dir: 'both' }
39
45
  }
40
46
  }.freeze
41
47
 
@@ -45,7 +51,8 @@ class Yaml2erd
45
51
  @gv = Gviz.new
46
52
  @gv_id_map = GvIdMap.new
47
53
 
48
- apply_conf(conf_yaml_path)
54
+ @customized_conf = fetch_conf(conf_yaml_path)
55
+ apply_conf(@customized_conf)
49
56
  end
50
57
 
51
58
  def write_erd
@@ -89,26 +96,38 @@ class Yaml2erd
89
96
 
90
97
  private
91
98
 
92
- def apply_conf(conf_yaml_path)
93
- conf = DEFAULT_CONF
94
- custom_conf = {}
99
+ def fetch_conf(conf_yaml_path)
100
+ user_conf = {}
95
101
  if conf_yaml_path.present?
96
102
  File.open(conf_yaml_path) do |file|
97
- custom_conf = YAML.safe_load(file.read).deep_symbolize_keys
103
+ user_conf = YAML.safe_load(file.read).deep_symbolize_keys
98
104
  end
99
105
  end
100
106
 
101
- # DEFAULT_CONFとキー重複しているものだけ適用
102
- custom_conf.each do |custom_key, custom_details|
103
- if conf.keys.include?(custom_key)
104
- custom_details.each do |custom_detail_key, custom_val|
105
- if conf[custom_key].keys.include?(custom_detail_key)
106
- conf[custom_key][custom_detail_key] = custom_val
107
- end
108
- end
107
+ # CUSTOMIZABLE_CONFとキー重複しているものだけ適用
108
+ customized_conf = merge_keep_struct(CUSTOMIZABLE_CONF.dup, user_conf)
109
+
110
+ # ユーザ設定取り込んで、固定値をマージして返す
111
+ customized_conf.deep_merge(NOT_CUSTOMIZABLE_CONF)
112
+ end
113
+
114
+ def merge_keep_struct(base_hash, input_hash)
115
+ input_hash.each do |key, val|
116
+ # input_hashのネストが深すぎる時にエラーになるからtry
117
+ next unless base_hash.try(:keys).try(:include?, key)
118
+
119
+ if val.is_a?(Hash)
120
+ base_hash[key] = merge_keep_struct(base_hash[key], input_hash[key])
121
+ else
122
+ # input_hashのネストが浅すぎる時(inputは底までついたけどbaseはまだhashの時)はスルーするように
123
+ next if base_hash[key].is_a?(Hash)
124
+ base_hash[key] = val
109
125
  end
110
126
  end
127
+ base_hash
128
+ end
111
129
 
130
+ def apply_conf(conf)
112
131
  # 適用
113
132
  @group_global_conf = conf[:group_conf]
114
133
  @nodes_conf = conf[:entity_conf]
@@ -196,8 +215,8 @@ class Yaml2erd
196
215
  return if relations.blank?
197
216
  relations.each do |relation|
198
217
  relation.each do |rel_type, rel_model|
199
- next if rel_type == :belongs_to
200
- @gv.edge "#{@gv_id_map.enc(model)}_#{@gv_id_map.enc(rel_model)}", ARROW_MAP[rel_type]
218
+ next if rel_type != :has_one && rel_type != :has_many
219
+ @gv.edge "#{@gv_id_map.enc(model)}_#{@gv_id_map.enc(rel_model)}", @customized_conf[:arrow_map][rel_type]
201
220
  end
202
221
  end
203
222
  end
@@ -1,3 +1,3 @@
1
1
  class Yaml2erd
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yaml2erd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - rh-taro
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-19 00:00:00.000000000 Z
11
+ date: 2019-01-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -128,8 +128,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
128
128
  - !ruby/object:Gem::Version
129
129
  version: '0'
130
130
  requirements: []
131
- rubyforge_project:
132
- rubygems_version: 2.7.8
131
+ rubygems_version: 3.0.2
133
132
  signing_key:
134
133
  specification_version: 4
135
134
  summary: ERD create from yaml