lutaml-uml 0.2.0 → 0.2.5

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: 9390b74fbba2e8c8ee424d8aecd2efd9d507d157e6a63cc64c115b821878ef01
4
- data.tar.gz: e8d2466349d6b622ae0a3d46b1eeca87f0f3996d155fbf5bed75e90bc14a3b48
3
+ metadata.gz: 4dd197690f8da12b6b7ba5055db64eeb862717769f78ef7acf3477ce0a32f377
4
+ data.tar.gz: 400e3ead0e0d89f6a781a09a97967ed51d0d955015779334290829ed76d317da
5
5
  SHA512:
6
- metadata.gz: 2d4a974174f13d690205e9d5f887745ec1268e16c8d031a137ca492fca24617a004d4ede0e72ed074b02694895d81b4128f7695811436e4d4a746676bacbb834
7
- data.tar.gz: 8dbe1883d2ea7c910e48b4c0f9191559aaa7a6ee02c598b5a0b05a7fb3cd33407edc37101a9fec4297f9110be3fb9243625370b140c5a0fc36adc9d909a6b4ae
6
+ metadata.gz: bb4a6abf3136b6d1b4e207bd14d889e43ce2be9f9c4f036956702c0f9430c22baebaabd7d281f57feaa923b9ab9531a43be5d7d88276cce0fc8b856a222c807a
7
+ data.tar.gz: 228355fdf7c6fcb51f5ec0958470d3e0f9ff6fc675f0a6029ecba4c22a597fdef6bdd4d9a2df76bb2d5e2141c5a4227bdd97c2269ec3e2628f9ef3eac8508b78
@@ -31,6 +31,8 @@ jobs:
31
31
  run: |
32
32
  sudo gem install bundler --force
33
33
  bundle install --jobs 4 --retry 3
34
+ - name: Install Grpahviz macOS
35
+ run: brew install graphviz
34
36
  - name: Run specs
35
37
  run: |
36
38
  bundle exec rake
@@ -33,6 +33,8 @@ jobs:
33
33
  run: |
34
34
  gem install bundler
35
35
  bundle install --jobs 4 --retry 3
36
+ - name: Install Grpahviz Ubuntu
37
+ run: sudo apt-get install graphviz
36
38
  - name: Run specs
37
39
  run: |
38
40
  bundle exec rake
@@ -36,6 +36,16 @@ jobs:
36
36
  gem install bundler
37
37
  bundle config --local path vendor/bundle
38
38
  bundle install --jobs 4 --retry 3
39
+ - name: Install graphviz
40
+ uses: nick-invision/retry@v1
41
+ with:
42
+ polling_interval_seconds: 5
43
+ timeout_minutes: 5
44
+ max_attempts: 3
45
+ command: choco install --no-progress graphviz --version 2.38.0.20190211
46
+ - name: Check dot command
47
+ run: |
48
+ dot -?
39
49
  - name: Run specs
40
50
  run: |
41
51
  bundle exec rake
data/.gitignore CHANGED
@@ -9,4 +9,4 @@
9
9
 
10
10
  # rspec failure tracking
11
11
  .rspec_status
12
- Gemfile.lock
12
+ Gemfile.lock
@@ -110,6 +110,20 @@ class Relationship {
110
110
  class Element {}
111
111
  ----
112
112
 
113
+ == Class' multiline "definition" property
114
+
115
+ === Definition
116
+
117
+ Full syntax:
118
+
119
+ [source,java]
120
+ ----
121
+ definition
122
+ inner text
123
+ end definition
124
+ ----
125
+
126
+
113
127
  == Attributes/entries
114
128
 
115
129
  === Definition
@@ -118,7 +132,7 @@ Full syntax:
118
132
 
119
133
  [source,java]
120
134
  ----
121
- [visibility][/][attribute] name [:type][multiplicity][=initial value][{property string}]
135
+ [visibility][/][attribute] name [:type][multiplicity][=initial value][{attribute body}]
122
136
  ----
123
137
 
124
138
  where:
@@ -128,11 +142,7 @@ where:
128
142
  * `/` - symbolizes a derived attribute.
129
143
  * `multiplicity` - Multiplicity is in square brackets (e.g. [1..*]).
130
144
  * `initial value` - Default value specifies the initial value of the attribute.
131
- * `property string` - Property string indicates a modifier that applies to the attribute:
132
- ** {readonly}: the property can be read but not changed.
133
- ** {union}: the property is a union of subsets.
134
- ** {subsets <property>}: the property is a subset of <property>.
135
- ** {redefines <property>}: the property is a new definition of <property> (overwritten by inheritance).
145
+ * `{attribute body}` - Body of attribute, additional properties for attribute
136
146
 
137
147
 
138
148
  One can use explicit or implicit syntax for attribute definition
@@ -186,6 +196,21 @@ class Figure {
186
196
  }
187
197
  ----
188
198
 
199
+ === Additional attribute' properties
200
+
201
+ example:
202
+
203
+ [source,java]
204
+ ----
205
+ class Figure {
206
+ + radius {
207
+ definition
208
+ Radius of the Figure
209
+ end definition
210
+ }
211
+ }
212
+ ----
213
+
189
214
  == Methods
190
215
 
191
216
  Syntax for defining methods:
@@ -0,0 +1,6 @@
1
+ script_full_path=$(dirname "$0")
2
+
3
+ for i in $1/*.yml
4
+ do
5
+ $script_full_path/yaml2lutaml $i > "$1/$(basename -s .yml $i).lutaml"
6
+ done
@@ -0,0 +1,58 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ #
5
+ # Script to convert plantuml files into LutaML syntax
6
+ # Usage: bin/plantuml2lutaml /path/to/plantuml.wsd
7
+
8
+ file_path = ARGV[0]
9
+ FILE_NAME = File.basename(file_path, ".wsd")
10
+ wsd_file = File.new(ARGV[0])
11
+
12
+ def sync_puts(line, level = 0)
13
+ $stdout.puts("#{''.rjust(level)}#{line}")
14
+ $stdout.flush
15
+ end
16
+
17
+ SKIPPED_LINES_REGEXP = /^(@startuml|'\*{7}|note|@enduml|\!|'\/)/
18
+ COMMENT_START = /\/'/
19
+ COMMENT_END = /'\//
20
+ ASSOCIATION_MAPPINGS = {
21
+ /-\|>/ => ",inheritance",
22
+ /<\|-/ => "inheritance,",
23
+ /->/ => ",direct",
24
+ /<-/ => "direct,",
25
+ }.freeze
26
+
27
+ in_comment_block = false
28
+
29
+ def transform_line(line)
30
+ return sync_puts(line, 2) if ASSOCIATION_MAPPINGS.keys.none? { |key| line =~ key }
31
+
32
+ owner_type, member_type = ASSOCIATION_MAPPINGS.detect { |(key, _value)| line =~ key }.last.split(",")
33
+ blocks = line.split(" ")
34
+ owner = blocks.first
35
+ member = blocks.last
36
+ sync_puts("association {", 2)
37
+ sync_puts("owner #{owner}", 4)
38
+ sync_puts("member #{member}", 4)
39
+ sync_puts("owner_type #{owner_type}", 4) if !owner_type.to_s.empty?
40
+ sync_puts("member_type #{member_type}", 4) if !member_type.to_s.empty?
41
+ sync_puts("}", 2)
42
+ end
43
+
44
+ sync_puts("diagram #{FILE_NAME} {")
45
+ wsd_file.readlines.each do |line|
46
+ if line.match?(COMMENT_START)
47
+ in_comment_block = true
48
+ end
49
+
50
+ if line.match?(COMMENT_END)
51
+ in_comment_block = false
52
+ end
53
+
54
+ next if in_comment_block || line =~ SKIPPED_LINES_REGEXP
55
+
56
+ transform_line(line)
57
+ end
58
+ sync_puts("}")
@@ -45,7 +45,7 @@ def process_association(owner, values, encountered_relations)
45
45
  if source["attribute"]
46
46
  source_attribute_name = source["attribute"].keys.first
47
47
  owner += "##{source_attribute_name}"
48
- if source["attribute"][source_attribute_name]["cardinality"]
48
+ if source["attribute"][source_attribute_name] && source["attribute"][source_attribute_name]["cardinality"]
49
49
  cardinality = source["attribute"][source_attribute_name]["cardinality"]
50
50
  owner += " [#{cardinality['min']}..#{cardinality['max']}]"
51
51
  end
@@ -61,7 +61,7 @@ def process_association(owner, values, encountered_relations)
61
61
  if target["attribute"]
62
62
  target_attribute_name = target["attribute"].keys.first
63
63
  member += "##{target_attribute_name}"
64
- if target["attribute"][target_attribute_name]["cardinality"]
64
+ if target["attribute"][target_attribute_name] && target["attribute"][target_attribute_name]["cardinality"]
65
65
  cardinality = target["attribute"][target_attribute_name]["cardinality"]
66
66
  member += " [#{cardinality['min']}..#{cardinality['max']}]"
67
67
  end
@@ -75,6 +75,7 @@ def process_association(owner, values, encountered_relations)
75
75
  end
76
76
  sync_puts("diagram #{File.basename(ARGV[0], 'yml')[0..-2]} {")
77
77
  sync_puts("title '#{view_yaml['title']}'", 2)
78
+ sync_puts("caption '#{view_yaml['caption']}'", 2)
78
79
 
79
80
  # Class associations notations
80
81
  view_yaml["relations"]&.each do |values|
@@ -83,20 +84,55 @@ end
83
84
 
84
85
  view_yaml["imports"].keys.each do |entry|
85
86
  import = YAML.safe_load(File.read(File.join(models_path, "#{entry}.yml")))
86
- import_name = import["name"]
87
+ import_name = import["name"] || File.basename(entry)
87
88
  # Class notation
88
- sync_puts("#{import['modelType']} #{import['name']} {", 2)
89
+ sync_puts("#{import['modelType']} #{import_name} {", 2)
90
+ if import["definition"]
91
+ definition = <<~TEXT
92
+ definition
93
+ #{import['definition']}
94
+ end definition
95
+ TEXT
96
+ sync_puts(definition, 4)
97
+ end
89
98
  import["values"]&.each_pair do |key, values|
90
- sync_puts("#{key}", 4)
99
+ result_string = key
100
+ if values["definition"]
101
+ result_string += <<~TEXT
102
+ {
103
+ definition
104
+ #{values['definition']}
105
+ end definition
106
+ }
107
+ TEXT
108
+ end
109
+ sync_puts(result_string, 4)
91
110
  end
92
111
  import["attributes"]&.each_pair do |key, values|
112
+ definition = values["definition"]
93
113
  cardinality = if values["cardinality"]
94
114
  cardinality_val = values["cardinality"]
95
115
  "[#{cardinality_val['min']}..#{cardinality_val['max']}]"
96
116
  else
97
117
  ""
98
118
  end
99
- sync_puts("+#{key}: #{values['type']} #{cardinality}", 4)
119
+ result_string = "+#{key}"
120
+ if values["type"]
121
+ result_string += ": #{values['type']}"
122
+ end
123
+ if cardinality
124
+ result_string += " #{cardinality}"
125
+ end
126
+ if definition
127
+ result_string += <<~TEXT
128
+ {
129
+ definition
130
+ #{definition}
131
+ end definition
132
+ }
133
+ TEXT
134
+ end
135
+ sync_puts(result_string, 4)
100
136
  end
101
137
  sync_puts("}", 2)
102
138
 
@@ -7,9 +7,12 @@ module Lutaml
7
7
  module Layout
8
8
  class GraphVizEngine < Engine
9
9
  def render(type)
10
- GraphViz
11
- .parse_string(input)
12
- .output(type => String)
10
+ Open3.popen3("dot -T#{type}") do |stdin, stdout, _stderr, _wait|
11
+ stdin.puts(input)
12
+ stdin.close
13
+ # unless (err = stderr.read).empty? then raise err end
14
+ stdout.read
15
+ end
13
16
  end
14
17
  end
15
18
  end
@@ -16,6 +16,7 @@ module Lutaml
16
16
 
17
17
  attr_reader :associations,
18
18
  :attributes,
19
+ :definition,
19
20
  :members,
20
21
  :modifier
21
22
 
@@ -31,6 +32,10 @@ module Lutaml
31
32
  @modifier = value.to_s # TODO: Validate?
32
33
  end
33
34
 
35
+ def definition=(value)
36
+ @definition = value.to_s
37
+ end
38
+
34
39
  def attributes=(value)
35
40
  @attributes = value.to_a.map do |attr|
36
41
  TopElementAttribute.new(attr)
@@ -3,8 +3,11 @@
3
3
  module Lutaml
4
4
  module Uml
5
5
  class DataType < Class
6
- def keyword
7
- "dataType"
6
+ attr_reader :keyword
7
+
8
+ def initialize(attributes = {})
9
+ super
10
+ @keyword = "dataType"
8
11
  end
9
12
  end
10
13
  end
@@ -12,7 +12,14 @@ module Lutaml
12
12
 
13
13
  attr_reader :attributes,
14
14
  :members,
15
- :modifier
15
+ :modifier,
16
+ :definition,
17
+ :keyword
18
+
19
+ def initialize(attributes = {})
20
+ super
21
+ @keyword = "enumeration"
22
+ end
16
23
 
17
24
  def attributes=(value)
18
25
  @attributes = value.to_a.map do |attr|
@@ -20,14 +27,14 @@ module Lutaml
20
27
  end
21
28
  end
22
29
 
30
+ def definition=(value)
31
+ @definition = value.to_s
32
+ end
33
+
23
34
  # TODO: reserved name, change
24
35
  def methods
25
36
  []
26
37
  end
27
-
28
- def keyword
29
- "enumeration"
30
- end
31
38
  end
32
39
  end
33
40
  end
@@ -181,8 +181,10 @@ module Lutaml
181
181
  end
182
182
  # swap labels and arrows if `dir` eq to `back`
183
183
  if attributes["dir"] == "back"
184
- attributes["arrowhead"], attributes["arrowtail"] = [attributes["arrowtail"], attributes["arrowhead"]]
185
- attributes["headlabel"], attributes["taillabel"] = [attributes["taillabel"], attributes["headlabel"]]
184
+ attributes["arrowhead"], attributes["arrowtail"] =
185
+ [attributes["arrowtail"], attributes["arrowhead"]]
186
+ attributes["headlabel"], attributes["taillabel"] =
187
+ [attributes["taillabel"], attributes["headlabel"]]
186
188
  end
187
189
  attributes
188
190
  end
@@ -226,8 +228,6 @@ module Lutaml
226
228
  #{name.map { |n| %(<TR><TD ALIGN="CENTER">#{n}</TD></TR>) }.join('\n')}
227
229
  </TABLE>
228
230
  HEREDOC
229
- # name = "«abstract»<BR/><I>#{name}</I>" if node.modifier == "abstract"
230
- # name = "«interface»<BR/>#{name}" if node.modifier == "interface"
231
231
 
232
232
  field_table = format_member_rows(node.attributes, hide_members)
233
233
  method_table = format_member_rows(node.methods, hide_members)
@@ -256,7 +256,10 @@ module Lutaml
256
256
  hide_members = node.fidelity["hideMembers"]
257
257
  hide_other_classes = node.fidelity["hideOtherClasses"]
258
258
  end
259
- classes = (node.classes + node.enums).map do |class_node|
259
+ classes = (node.classes +
260
+ node.enums +
261
+ node.data_types +
262
+ node.primitives).map do |class_node|
260
263
  graph_node_name = generate_graph_name(class_node.name)
261
264
 
262
265
  <<~HEREDOC
@@ -269,7 +272,8 @@ module Lutaml
269
272
  associations = node.classes.map(&:associations).compact.flatten +
270
273
  node.associations
271
274
  if node.groups
272
- associations = sort_by_document_groupping(node.groups, associations)
275
+ associations = sort_by_document_groupping(node.groups,
276
+ associations)
273
277
  end
274
278
  classes_names = node.classes.map(&:name)
275
279
  associations = associations.map do |assoc_node|
@@ -318,12 +322,7 @@ module Lutaml
318
322
  end
319
323
 
320
324
  def generate_from_dot(input)
321
- # https://github.com/glejeune/Ruby-Graphviz/issues/78
322
- # Ruby-Graphviz has an old bug when html labels was not displayed
323
- # property because of `<` and `>` characters escape, add additional
324
- # `<` and `>` symbols to workaround it
325
- escaped_dot = input.gsub("<<", "<<<").gsub(">>", ">>>")
326
- Lutaml::Layout::GraphVizEngine.new(input: escaped_dot).render(@type)
325
+ Lutaml::Layout::GraphVizEngine.new(input: input).render(@type)
327
326
  end
328
327
 
329
328
  def generate_graph_name(name)
@@ -53,6 +53,7 @@ module Lutaml
53
53
  realizes
54
54
  static
55
55
  title
56
+ caption
56
57
  ].freeze
57
58
 
58
59
  KEYWORDS.each do |keyword|
@@ -61,7 +62,9 @@ module Lutaml
61
62
 
62
63
  rule(:spaces) { match("\s").repeat(1) }
63
64
  rule(:spaces?) { spaces.maybe }
64
- rule(:whitespace) { (match("\s") | match("\n") | str(";")).repeat(1) }
65
+ rule(:whitespace) do
66
+ (match("\s") | match("\r?\n") | match("\r") | str(";")).repeat(1)
67
+ end
65
68
  rule(:whitespace?) { whitespace.maybe }
66
69
  rule(:name) { match["a-zA-Z0-9 _-"].repeat(1) }
67
70
  rule(:newline) { str("\n") >> str("\r").maybe }
@@ -104,7 +107,7 @@ module Lutaml
104
107
  rule(:method_abstract) { (kw_abstract.as(:abstract) >> spaces).maybe }
105
108
  rule(:attribute_keyword) do
106
109
  str("<<") >>
107
- match['a-zA-Z0-9_\-'].repeat(1).as(:keyword) >>
110
+ match['a-zA-Z0-9_\-\/'].repeat(1).as(:keyword) >>
108
111
  str(">>")
109
112
  end
110
113
  rule(:attribute_keyword?) { attribute_keyword.maybe }
@@ -130,7 +133,8 @@ module Lutaml
130
133
  attribute_name >>
131
134
  match['"\''].maybe >>
132
135
  attribute_type? >>
133
- cardinality?)
136
+ cardinality? >>
137
+ class_body?)
134
138
  .as(:attributes)
135
139
  end
136
140
 
@@ -141,6 +145,13 @@ module Lutaml
141
145
  match['"\''].maybe
142
146
  end
143
147
  rule(:title_definition) { title_keyword >> title_text }
148
+ rule(:caption_keyword) { kw_caption >> spaces }
149
+ rule(:caption_text) do
150
+ match['"\''].maybe >>
151
+ match['a-zA-Z0-9_\- '].repeat(1).as(:caption) >>
152
+ match['"\''].maybe
153
+ end
154
+ rule(:caption_definition) { caption_keyword >> caption_text }
144
155
 
145
156
  rule(:fontname_keyword) { kw_fontname >> spaces }
146
157
  rule(:fontname_text) do
@@ -250,7 +261,8 @@ module Lutaml
250
261
  end
251
262
  rule(:class_keyword) { kw_class >> spaces }
252
263
  rule(:class_inner_definitions) do
253
- attribute_definition |
264
+ definition_body |
265
+ attribute_definition |
254
266
  comment_definition |
255
267
  comment_multiline_definition
256
268
  end
@@ -274,10 +286,21 @@ module Lutaml
274
286
  class_body?
275
287
  end
276
288
 
289
+ # -- Definition
290
+ rule(:definition_body) do
291
+ spaces? >>
292
+ str("definition") >>
293
+ whitespace? >>
294
+ (str("end definition").absent? >> any).repeat.as(:definition) >>
295
+ whitespace? >>
296
+ str("end definition")
297
+ end
298
+
277
299
  # -- Enum
278
300
  rule(:enum_keyword) { kw_enum >> spaces }
279
301
  rule(:enum_inner_definitions) do
280
- attribute_definition |
302
+ definition_body |
303
+ attribute_definition |
281
304
  comment_definition |
282
305
  comment_multiline_definition
283
306
  end
@@ -337,6 +360,7 @@ module Lutaml
337
360
  rule(:diagram_keyword) { kw_diagram >> spaces? }
338
361
  rule(:diagram_inner_definitions) do
339
362
  title_definition |
363
+ caption_definition |
340
364
  fontname_definition |
341
365
  class_definition.as(:classes) |
342
366
  enum_definition.as(:enums) |
@@ -27,7 +27,7 @@ module Lutaml
27
27
  end
28
28
 
29
29
  def process_include_line(include_root, line)
30
- include_path_match = line.match(/\s*include\s+(.+)/)
30
+ include_path_match = line.match(/^\s*include\s+(.+)/)
31
31
  return line if include_path_match.nil?
32
32
 
33
33
  path_to_file = include_path_match[1].strip
@@ -3,8 +3,11 @@
3
3
  module Lutaml
4
4
  module Uml
5
5
  class PrimitiveType < DataType
6
- def keyword
7
- "primitive"
6
+ attr_reader :keyword
7
+
8
+ def initialize(attributes = {})
9
+ super
10
+ @keyword = "primitive"
8
11
  end
9
12
  end
10
13
  end
@@ -4,6 +4,7 @@ module Lutaml
4
4
  module Uml
5
5
  class TopElementAttribute
6
6
  include HasAttributes
7
+ include HasMembers
7
8
 
8
9
  attr_accessor :name,
9
10
  :visibility,
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Lutaml
4
4
  module Uml
5
- VERSION = "0.2.0"
5
+ VERSION = "0.2.5"
6
6
  end
7
7
  end
@@ -29,12 +29,12 @@ Gem::Specification.new do |spec|
29
29
  spec.add_runtime_dependency "parslet", "~> 1.7.1"
30
30
  spec.add_runtime_dependency "ruby-graphviz", "~> 1.2"
31
31
  spec.add_runtime_dependency "thor", "~> 1.0"
32
- spec.add_development_dependency "byebug"
33
- spec.add_development_dependency "nokogiri", "~> 1.10"
34
- spec.add_development_dependency "rubocop", "~> 0.54.0"
35
32
 
36
33
  spec.add_development_dependency "bundler", "~> 2.0"
34
+ spec.add_development_dependency "byebug"
35
+ spec.add_development_dependency "nokogiri", "~> 1.10"
37
36
  spec.add_development_dependency "pry", "~> 0.12.2"
38
37
  spec.add_development_dependency "rake", "~> 10.0"
39
38
  spec.add_development_dependency "rspec", "~> 3.0"
39
+ spec.add_development_dependency "rubocop", "~> 0.54.0"
40
40
  end
@@ -0,0 +1,20 @@
1
+ diagram MyView {
2
+ title "my diagram"
3
+
4
+ class AddressClassProfile {
5
+ definition
6
+ this is multiline with `ascidoc`
7
+ comments
8
+ and list
9
+ end definition
10
+ +addressClassProfile: CharacterString [0..1]
11
+ }
12
+
13
+ class AttributeProfile {
14
+ imlicistAttributeProfile: CharacterString [0..1] {
15
+ definition this is attribute definition
16
+ with multiply lines
17
+ end definition
18
+ }
19
+ }
20
+ }
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ RSpec.describe Lutaml::Layout::GraphVizEngine do
6
+ describe "#render" do
7
+ subject(:render) do
8
+ described_class.new(input: input).render(type)
9
+ end
10
+ let(:input) do
11
+ File.read(fixtures_path("generated_dot/AddressClassProfile.dot"))
12
+ end
13
+
14
+ context "when png output type" do
15
+ let(:type) { "png" }
16
+ let(:png_header) { "\x89PNG" }
17
+
18
+ it "renders input as png binary string" do
19
+ expect(render[0..3]).to(eq(png_header))
20
+ end
21
+ end
22
+
23
+ context "when dot output type" do
24
+ let(:type) { "dot" }
25
+
26
+ it "renders input as dot string" do
27
+ expect(render).to(match("digraph G {"))
28
+ end
29
+ end
30
+ end
31
+ end
@@ -248,5 +248,29 @@ RSpec.describe Lutaml::Uml::Parsers::Dsl do
248
248
 
249
249
  it_behaves_like "the correct graphviz formatting"
250
250
  end
251
+
252
+ context "when defninition directives included" do
253
+ let(:content) do
254
+ File.new(fixtures_path("dsl/diagram_definitions.lutaml"))
255
+ end
256
+ let(:class_definition) do
257
+ "this is multiline with `ascidoc`\n comments\n and list"
258
+ end
259
+ let(:attribute_definition) do
260
+ "this is attribute definition\n with multiply lines"
261
+ end
262
+
263
+ it "create comments for document and classes" do
264
+ expect(by_name(parse.classes, "AddressClassProfile").definition)
265
+ .to(eq(class_definition))
266
+ expect(by_name(parse.classes, "AttributeProfile")
267
+ .attributes
268
+ .first
269
+ .definition)
270
+ .to(eq(attribute_definition))
271
+ end
272
+
273
+ it_behaves_like "the correct graphviz formatting"
274
+ end
251
275
  end
252
276
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lutaml-uml
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-10-12 00:00:00.000000000 Z
11
+ date: 2020-11-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -81,61 +81,47 @@ dependencies:
81
81
  - !ruby/object:Gem::Version
82
82
  version: '1.0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: byebug
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: nokogiri
84
+ name: bundler
99
85
  requirement: !ruby/object:Gem::Requirement
100
86
  requirements:
101
87
  - - "~>"
102
88
  - !ruby/object:Gem::Version
103
- version: '1.10'
89
+ version: '2.0'
104
90
  type: :development
105
91
  prerelease: false
106
92
  version_requirements: !ruby/object:Gem::Requirement
107
93
  requirements:
108
94
  - - "~>"
109
95
  - !ruby/object:Gem::Version
110
- version: '1.10'
96
+ version: '2.0'
111
97
  - !ruby/object:Gem::Dependency
112
- name: rubocop
98
+ name: byebug
113
99
  requirement: !ruby/object:Gem::Requirement
114
100
  requirements:
115
- - - "~>"
101
+ - - ">="
116
102
  - !ruby/object:Gem::Version
117
- version: 0.54.0
103
+ version: '0'
118
104
  type: :development
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
107
  requirements:
122
- - - "~>"
108
+ - - ">="
123
109
  - !ruby/object:Gem::Version
124
- version: 0.54.0
110
+ version: '0'
125
111
  - !ruby/object:Gem::Dependency
126
- name: bundler
112
+ name: nokogiri
127
113
  requirement: !ruby/object:Gem::Requirement
128
114
  requirements:
129
115
  - - "~>"
130
116
  - !ruby/object:Gem::Version
131
- version: '2.0'
117
+ version: '1.10'
132
118
  type: :development
133
119
  prerelease: false
134
120
  version_requirements: !ruby/object:Gem::Requirement
135
121
  requirements:
136
122
  - - "~>"
137
123
  - !ruby/object:Gem::Version
138
- version: '2.0'
124
+ version: '1.10'
139
125
  - !ruby/object:Gem::Dependency
140
126
  name: pry
141
127
  requirement: !ruby/object:Gem::Requirement
@@ -178,6 +164,20 @@ dependencies:
178
164
  - - "~>"
179
165
  - !ruby/object:Gem::Version
180
166
  version: '3.0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: rubocop
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: 0.54.0
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: 0.54.0
181
181
  description: UML model module for LutaML.
182
182
  email:
183
183
  - open.source@ribose.com'
@@ -194,12 +194,12 @@ files:
194
194
  - ".travis.yml"
195
195
  - CODE_OF_CONDUCT.md
196
196
  - Gemfile
197
- - Gemfile.lock
198
197
  - LUTAML.adoc
199
198
  - README.adoc
200
199
  - Rakefile
201
200
  - bin/console
202
- - bin/lutaml2dotpng
201
+ - bin/folder_yaml2lutaml.sh
202
+ - bin/plantuml2lutaml
203
203
  - bin/setup
204
204
  - bin/yaml2lutaml
205
205
  - exe/lutaml-uml
@@ -297,12 +297,14 @@ files:
297
297
  - spec/fixtures/dsl/diagram_comments.lutaml
298
298
  - spec/fixtures/dsl/diagram_concept_model.lutaml
299
299
  - spec/fixtures/dsl/diagram_data_types.lutaml
300
+ - spec/fixtures/dsl/diagram_definitions.lutaml
300
301
  - spec/fixtures/dsl/diagram_includes.lutaml
301
302
  - spec/fixtures/dsl/diagram_multiply_classes.lutaml
302
303
  - spec/fixtures/dsl/shared.lutaml
303
304
  - spec/fixtures/dsl/shared1.lutaml
304
305
  - spec/fixtures/generated_dot/AddressClassProfile.dot
305
306
  - spec/fixtures/generated_dot/AddressProfile.dot
307
+ - spec/lutaml/layout/graph_viz_engine_spec.rb
306
308
  - spec/lutaml/uml/formatter/graphviz_spec.rb
307
309
  - spec/lutaml/uml/parsers/dsl_spec.rb
308
310
  - spec/lutaml/uml/parsers/yaml_spec.rb
@@ -1,23 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- #
5
- # Script to convert lutaml files into dot and png files
6
- # Usage: bin/lutaml2dotpng /path/to/lutaml/folder/
7
- require "bundler/setup"
8
- require "lutaml/uml"
9
-
10
- basedir = ARGV[0]
11
- Dir["#{basedir}/*.lutaml"].each do |filename|
12
- puts(filename)
13
- base_filename = File.basename(filename, '.lutaml')
14
- File.open("#{basedir}/#{base_filename}.dot", 'w') do |file|
15
- file
16
- .puts(Lutaml::Uml::Formatter::Graphviz
17
- .new
18
- .format_document(
19
- Lutaml::Uml::Parsers::Dsl
20
- .parse(File.read("#{basedir}/#{base_filename}.lutaml"))))
21
- end
22
- `dot -T png #{"#{basedir}/#{base_filename}.dot"} > "#{basedir}/#{base_filename}.png"`
23
- end