yuml 0.2.3 → 0.2.4

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
  SHA1:
3
- metadata.gz: 70cbfd4f9496ec8964919e65fc7730c111d76be9
4
- data.tar.gz: 718ad5e932d5dafb9124c07a8c65b1d245e3a322
3
+ metadata.gz: 7e2be29a1f70df149897fb3a989fd9e2cd238c2a
4
+ data.tar.gz: 81759243732e3cbc3bdfd2aa91f8262b09fdd016
5
5
  SHA512:
6
- metadata.gz: c1bfb8f6ecec58519b760a6cd252332aeffc23c2bdaba69f5c55905a89396a976376b0bd99b49053ccc9c95b39385e4d4ad97c5f4c8d785319cd84526ee94f48
7
- data.tar.gz: 91679a843a383889543853577ab982b3a084a76efe0f21ee565bb9f74968513a777b3d7854b8d7078581c8f365830c91457663133cae058c647263c7f1b8ac19
6
+ metadata.gz: 57d0e5129d522935c1dc6ef5300d4a825c2534f897db5102dc7ba1627768c4136fc8364dbd9e09d11f2a4fe0120c6126a3a521711d7654be6bae7ad7671c29f0
7
+ data.tar.gz: c8399b330ec6b1c4982559b3a1523ab0fe86ddbd66eb239890339e097950e8ba524df1e6f1a8b1b60e785d404531101e5f6c9f3226515d2284ab8157772a7046
data/lib/yuml/class.rb ADDED
@@ -0,0 +1,104 @@
1
+ module YUML
2
+ # Represents a yUML Class
3
+ class Class
4
+ attr_writer :name
5
+
6
+ def initialize
7
+ @methods = []
8
+ @variables = []
9
+ @relationships = []
10
+ end
11
+
12
+ def name(name = nil)
13
+ @name = name if name
14
+ @name
15
+ end
16
+
17
+ def public_methods(*args)
18
+ uml_methods('+', *args)
19
+ end
20
+
21
+ def private_methods(*args)
22
+ uml_methods('-', *args)
23
+ end
24
+
25
+ def public_variables(*args)
26
+ uml_variables('+', *args)
27
+ end
28
+
29
+ def private_variables(*args)
30
+ uml_variables('-', *args)
31
+ end
32
+
33
+ def has_a(dest, options = {})
34
+ relationship = YUML::Relationship.relationship(options)
35
+ @relationships << "[#{name}]#{relationship}[#{dest.name}]"
36
+ end
37
+
38
+ def is_a(dest, options = {})
39
+ options[:type] = :inheritance unless %i(inheritance interface).include?(options[:type])
40
+ relationship = YUML::Relationship.relationship(options)
41
+ @relationships << "[#{dest.name}]#{relationship}[#{name}]"
42
+ end
43
+
44
+ def to_s
45
+ "[#{name}#{variables}#{methods}]"
46
+ end
47
+
48
+ def relationships
49
+ "#{@relationships.join(',')}" unless @relationships.empty?
50
+ end
51
+
52
+ private
53
+
54
+ def normalize(values)
55
+ values.map(&:to_s).map do |v|
56
+ YUML::ESCAPE_CHARACTERS.each do |char, escape|
57
+ v.tr!(char, escape)
58
+ end
59
+ v
60
+ end.join("\u201A ")
61
+ end
62
+
63
+ def uml_variables(scope, *args)
64
+ args.each { |var| variable(scope: scope, attribute: var) }
65
+ end
66
+
67
+ def uml_methods(scope, *args)
68
+ args.each do |m|
69
+ if m.class == Hash
70
+ mets = m.map { |k, v| "#{k}(#{normalize(v)})" }
71
+ mets.each { |met| method(scope: scope, attribute: met) }
72
+ else
73
+ method(scope: scope, attribute: "#{m}()")
74
+ end
75
+ end
76
+ end
77
+
78
+ def method(options)
79
+ attribute(@methods, options)
80
+ end
81
+
82
+ def variable(options)
83
+ attribute(@variables, options)
84
+ end
85
+
86
+ def attribute(attributes, options)
87
+ scope = options[:scope] || '+'
88
+ scope = '+' unless %w(+ -).include?(scope)
89
+ attributes << "#{scope}#{options.fetch(:attribute)}"
90
+ end
91
+
92
+ def methods
93
+ attributes(@methods)
94
+ end
95
+
96
+ def variables
97
+ attributes(@variables)
98
+ end
99
+
100
+ def attributes(attrs)
101
+ "|#{attrs.join(';')}" unless attrs.empty?
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,43 @@
1
+ # Represents a yUML relationship
2
+ module YUML
3
+ module Relationship
4
+ extend self
5
+
6
+ def relationship(options)
7
+ options = { type: :aggregation }.merge(options)
8
+ types = %i(aggregation composition inheritance interface)
9
+ type = options[:type]
10
+ type = :aggregation unless types.include?(type)
11
+ cardinality = options[:cardinality]
12
+ representation(type, cardinality)
13
+ end
14
+
15
+ private
16
+
17
+ def representation(type, cardinality)
18
+ if %i(aggregation composition).include?(type)
19
+ return composition(type, cardinality)
20
+ elsif %i(inheritance interface).include?(type)
21
+ return inheritance(type)
22
+ end
23
+ end
24
+
25
+ def composition(type, cardinality)
26
+ base = '+'
27
+ base << '+' if type == :composition
28
+ if cardinality.nil?
29
+ base << '->'
30
+ elsif cardinality.class == Array && cardinality.length == 2
31
+ base << "#{cardinality[0]}-#{cardinality[1]}>"
32
+ else
33
+ base << "-#{cardinality}>"
34
+ end
35
+ base
36
+ end
37
+
38
+ def inheritance(type)
39
+ return '^-.-' if type == :interface
40
+ '^-'
41
+ end
42
+ end
43
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yuml
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Derek Stride
@@ -31,6 +31,8 @@ extensions: []
31
31
  extra_rdoc_files: []
32
32
  files:
33
33
  - lib/yuml.rb
34
+ - lib/yuml/class.rb
35
+ - lib/yuml/relationship.rb
34
36
  homepage: https://github.com/DerekStride/yuml
35
37
  licenses:
36
38
  - MIT