luruju 0.0.1 → 0.1.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.
- data/Rakefile +1 -4
- data/lib/luruju.rb +15 -7
- data/lib/luruju/customize_inflector.rb +3 -0
- data/lib/luruju/dynamic_method.rb +5 -11
- data/lib/luruju/easy_breakpoint.rb +22 -0
- data/lib/luruju/jude_api/add_dynamic_method.rb +49 -0
- data/lib/luruju/jude_api/add_method.rb +52 -0
- data/lib/luruju/jude_api/jude_base.rb +2 -0
- data/lib/luruju/jude_api_loader.rb +164 -0
- data/lib/luruju/version.rb +2 -2
- data/test/abstract_unit.rb +26 -5
- data/test/er_diagram_test.rb +466 -0
- data/test/jude/{model001.jude → community-5.0.2/class_diagram/model001.jude} +0 -0
- data/test/jude/{model002.jude → community-5.0.2/class_diagram/model002.jude} +0 -0
- data/test/jude/{model003.jude → community-5.0.2/class_diagram/model003.jude} +0 -0
- data/test/jude/{model004.jude → community-5.0.2/class_diagram/model004.jude} +0 -0
- data/test/jude/{model005.jude → community-5.0.2/class_diagram/model005.jude} +0 -0
- data/test/jude/{model006.jude → community-5.0.2/class_diagram/model006.jude} +0 -0
- data/test/jude/{model007.jude → community-5.0.2/class_diagram/model007.jude} +0 -0
- data/test/jude/{model008.jude → community-5.0.2/class_diagram/model008.jude} +0 -0
- data/test/jude/{model009.jude → community-5.0.2/class_diagram/model009.jude} +0 -0
- data/test/jude/{model010.jude → community-5.0.2/class_diagram/model010.jude} +0 -0
- data/test/jude/{model011.jude → community-5.0.2/class_diagram/model011.jude} +0 -0
- data/test/jude/{model012.jude → community-5.0.2/class_diagram/model012.jude} +0 -0
- data/test/jude/{model013.jude → community-5.0.2/class_diagram/model013.jude} +0 -0
- data/test/jude/professional-5.1/class_diagram/model001.jude +0 -0
- data/test/jude/professional-5.1/class_diagram/model002.jude +0 -0
- data/test/jude/professional-5.1/class_diagram/model003.jude +0 -0
- data/test/jude/professional-5.1/class_diagram/model004.jude +0 -0
- data/test/jude/professional-5.1/class_diagram/model005.jude +0 -0
- data/test/jude/professional-5.1/class_diagram/model006.jude +0 -0
- data/test/jude/professional-5.1/class_diagram/model007.jude +0 -0
- data/test/jude/professional-5.1/class_diagram/model008.jude +0 -0
- data/test/jude/professional-5.1/class_diagram/model009.jude +0 -0
- data/test/jude/professional-5.1/class_diagram/model010.jude +0 -0
- data/test/jude/professional-5.1/class_diagram/model011.jude +0 -0
- data/test/jude/professional-5.1/class_diagram/model012.jude +0 -0
- data/test/jude/professional-5.1/class_diagram/model013.jude +0 -0
- data/test/jude/professional-5.1/er_diagram/er001.jude +0 -0
- data/test/jude/professional-5.1/er_diagram/er002.jude +0 -0
- data/test/jude/professional-5.1/er_diagram/er003.jude +0 -0
- data/test/jude/professional-5.1/er_diagram/er004.jude +0 -0
- data/test/jude/professional-5.1/er_diagram/er005.jude +0 -0
- data/test/jude/professional-5.1/er_diagram/er006.jude +0 -0
- data/test/jude/professional-5.1/er_diagram/er007.jude +0 -0
- data/test/jude/professional-5.1/er_diagram/er008.jude +0 -0
- data/test/jude/professional-5.1/er_diagram/er009.jude +0 -0
- data/test/jude_api_test.rb +3 -1
- metadata +93 -56
- data/lib/luruju/add_useful_method.rb +0 -36
- data/lib/luruju/jude_api.rb +0 -134
- data/test/jude/model013.jude.bak +0 -0
data/Rakefile
CHANGED
@@ -37,13 +37,10 @@ spec = Gem::Specification.new do |s|
|
|
37
37
|
s.has_rdoc = false # TODO
|
38
38
|
# TODO s.extra_rdoc_files = ["README"]
|
39
39
|
s.requirements << 'JUDE Community'
|
40
|
-
|
41
|
-
s.add_dependency('activesupport', '= 1.4.2' + PKG_BUILD)
|
42
|
-
|
40
|
+
s.add_dependency('activesupport', '>= 1.4.2' + PKG_BUILD)
|
43
41
|
s.require_path = 'lib'
|
44
42
|
s.autorequire = 'luruju'
|
45
43
|
|
46
|
-
|
47
44
|
s.files = [ "LICENSE", "Rakefile"]
|
48
45
|
# TODO s.files << "CHANGELOG"
|
49
46
|
# TODO s.files << "README"
|
data/lib/luruju.rb
CHANGED
@@ -1,11 +1,19 @@
|
|
1
|
+
$:.unshift(File.dirname(__FILE__)) unless
|
2
|
+
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
1
3
|
|
2
|
-
|
3
|
-
|
4
|
+
unless defined?(ActiveSupport)
|
5
|
+
begin
|
6
|
+
$:.unshift(File.dirname(__FILE__) + "/../../activesupport/lib")
|
7
|
+
require 'active_support'
|
8
|
+
rescue LoadError
|
9
|
+
require 'rubygems'
|
10
|
+
require 'active_support'
|
11
|
+
end
|
12
|
+
end
|
4
13
|
|
5
|
-
require 'luruju/
|
14
|
+
require 'luruju/easy_breakpoint'
|
15
|
+
require 'luruju/customize_inflector'
|
16
|
+
require 'luruju/jude_api_loader'
|
6
17
|
require 'luruju/dynamic_method'
|
7
|
-
require 'luruju/
|
8
|
-
|
9
|
-
|
10
|
-
|
18
|
+
require 'luruju/jude_api/jude_base'
|
11
19
|
|
@@ -1,5 +1,3 @@
|
|
1
|
-
|
2
|
-
|
3
1
|
module Luruju
|
4
2
|
|
5
3
|
module DynamicMethod
|
@@ -7,15 +5,11 @@ module Luruju
|
|
7
5
|
class IsNotMyRole < StandardError
|
8
6
|
end
|
9
7
|
|
10
|
-
def method_missing
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
rescue IsNotMyRole
|
16
|
-
end
|
17
|
-
}
|
18
|
-
super
|
8
|
+
def method_missing method, *args
|
9
|
+
methods.select{|m|/^dyna_.*/ =~ m.to_s}.sort.each do |dyna_method|
|
10
|
+
return send(dyna_method, method, *args) rescue IsNotMyRole
|
11
|
+
end
|
12
|
+
super method, *args
|
19
13
|
end
|
20
14
|
|
21
15
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'pp'
|
2
|
+
|
3
|
+
#eval(easy_breakpoint)
|
4
|
+
module Kernel
|
5
|
+
|
6
|
+
def easy_breakpoint
|
7
|
+
<<-EOS
|
8
|
+
puts 'easy-breakpoint>'
|
9
|
+
input = STDIN.readline.chop!
|
10
|
+
unless input == "stop"
|
11
|
+
begin
|
12
|
+
eval(input)
|
13
|
+
rescue => e
|
14
|
+
p e
|
15
|
+
pp e.backtrace
|
16
|
+
end
|
17
|
+
eval easy_breakpoint
|
18
|
+
end
|
19
|
+
EOS
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
|
2
|
+
module Luruju
|
3
|
+
|
4
|
+
module JudeApi
|
5
|
+
|
6
|
+
class JudeBase
|
7
|
+
|
8
|
+
include DynamicMethod
|
9
|
+
|
10
|
+
protected
|
11
|
+
def dyna_01_select_xxxs_by_yyy method, *args
|
12
|
+
raise IsNotMyRole unless /^(find_all|select)_(.+?)_by_(.+?)$/ =~ method.to_s
|
13
|
+
a_getter, attr, param = $2, $3, args[0]
|
14
|
+
raise IsNotMyRole unless self.class.method_defined?(a_getter)
|
15
|
+
ope = param.instance_of?(Regexp) ? "=~" : "=="
|
16
|
+
instance_eval "#{a_getter}.select{|i|i.#{attr} #{ope} param}"
|
17
|
+
end
|
18
|
+
|
19
|
+
def dyna_02_find_xxx_by_yyy method, *args
|
20
|
+
raise IsNotMyRole unless /^find_(.+?)_by_(.+?)$/ =~ method.to_s
|
21
|
+
clazz, attr, param = $1, $2, args[0]
|
22
|
+
a_getter = clazz.pluralize
|
23
|
+
ope = param.instance_of?(Regexp) ? "=~" : "=="
|
24
|
+
instance_eval "#{a_getter}.find{|i|i.#{attr} #{ope} param}"
|
25
|
+
end
|
26
|
+
|
27
|
+
def dyna_is_kind_of? method, *args
|
28
|
+
raise IsNotMyRole unless /^kind_of_(.+?)\?$/ =~ method.to_s
|
29
|
+
return self.kind_of?(eval("JudeApi::#{$1.classify.jude_module}")) rescue
|
30
|
+
false
|
31
|
+
end
|
32
|
+
|
33
|
+
def dyna_owned_elements method, *args
|
34
|
+
raise IsNotMyRole unless self.class.method_defined?(:owned_elements)
|
35
|
+
raise IsNotMyRole if method.to_s.singularize == method.to_s
|
36
|
+
api_name = "Jude" + method.to_s.classify
|
37
|
+
raise IsNotMyRole unless JudeApi.constants.include?(api_name)
|
38
|
+
owned_elements.select{|p| p.instance_of?(JudeApi.module_eval(api_name))}
|
39
|
+
end
|
40
|
+
|
41
|
+
def dyna_first_owned_element method, *args
|
42
|
+
raise IsNotMyRole unless self.class.method_defined?(:owned_elements)
|
43
|
+
raise IsNotMyRole if method.to_s.pluralize == method.to_s
|
44
|
+
send(method.to_s.pluralize.to_sym, *args)[0]
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module Luruju
|
2
|
+
|
3
|
+
module JudeApi
|
4
|
+
|
5
|
+
class JudeBase
|
6
|
+
|
7
|
+
attr_writer :tagged
|
8
|
+
|
9
|
+
def tagged
|
10
|
+
return @tagged if @tagged
|
11
|
+
@tagged = HashWithIndifferentAccess.new
|
12
|
+
tagged_values.each {|x| @tagged[x.key.to_sym] = x.value}
|
13
|
+
@tagged
|
14
|
+
end
|
15
|
+
|
16
|
+
def inspect
|
17
|
+
"<#{self.class}: id=#{self.id}>"
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
module JudeNamedElementAddMethod
|
23
|
+
def inspect
|
24
|
+
"<#{self.class}: name=#{self.name} id=#{self.id}>"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
module JudeErAttributeAddMethod
|
29
|
+
def constraint constraint_name
|
30
|
+
constraints.find{|x|constraint_name == x.name}
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
class Class
|
39
|
+
|
40
|
+
alias :include_except_luruju :include
|
41
|
+
|
42
|
+
def include included
|
43
|
+
unless self.ancestors.include?(Luruju::JudeApi::JudeBase)
|
44
|
+
return include_except_luruju(included)
|
45
|
+
end
|
46
|
+
if Luruju::JudeApi.constants.include? "#{self.name}AddMethod".split("::").last
|
47
|
+
included.send :include, eval("#{self.name}AddMethod")
|
48
|
+
end
|
49
|
+
include_except_luruju included
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
@@ -0,0 +1,164 @@
|
|
1
|
+
require 'java'
|
2
|
+
|
3
|
+
module Luruju
|
4
|
+
|
5
|
+
JUDEAPI_PHEAD = 'com.change_vision.jude.api.inf'
|
6
|
+
include_class "#{JUDEAPI_PHEAD}.project.ProjectAccessorFactory"
|
7
|
+
|
8
|
+
class JudeApiLoader
|
9
|
+
|
10
|
+
def self.load jude_file
|
11
|
+
project_accessor = ProjectAccessorFactory.getProjectAccessor
|
12
|
+
project_accessor.open jude_file
|
13
|
+
getter = project_accessor.getClass.getDeclaredMethod "getProject", nil
|
14
|
+
new.build project_accessor, getter
|
15
|
+
ensure
|
16
|
+
project_accessor.close rescue Exception
|
17
|
+
end
|
18
|
+
|
19
|
+
def initialize
|
20
|
+
@already_builded = {}
|
21
|
+
end
|
22
|
+
|
23
|
+
def build java_parent, java_getter
|
24
|
+
|
25
|
+
return nil if java_getter.getGenericParameterTypes.length > 0
|
26
|
+
|
27
|
+
begin
|
28
|
+
java_obj = java_parent.send java_getter.getName
|
29
|
+
rescue NativeException
|
30
|
+
# p "Warning(#{__FILE__},#{__LINE__}) " + java_getter.getName
|
31
|
+
end
|
32
|
+
return nil if java_obj == nil
|
33
|
+
|
34
|
+
java_return_class = java_getter.getReturnType
|
35
|
+
if is_jude_class? java_return_class
|
36
|
+
return build_judeapi(java_obj)
|
37
|
+
elsif java_return_class.isArray
|
38
|
+
return build_array(java_obj, java_getter)
|
39
|
+
else
|
40
|
+
return java_obj
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def build_array java_obj, java_getter
|
45
|
+
|
46
|
+
comp_type = java_getter.getReturnType.getComponentType
|
47
|
+
|
48
|
+
if is_jude_class? comp_type
|
49
|
+
jude_objects = Array.new
|
50
|
+
java_obj.each {|i| jude_objects << build_judeapi(i) }
|
51
|
+
return jude_objects
|
52
|
+
else
|
53
|
+
return java_obj.to_a
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def build_judeapi java_obj
|
58
|
+
|
59
|
+
if is_jude_named_element?(java_obj) and @already_builded.key?(java_obj.getId)
|
60
|
+
return @already_builded[java_obj.getId]
|
61
|
+
end
|
62
|
+
|
63
|
+
java_if = java_obj.getClass.getInterfaces[0]
|
64
|
+
jude_class = JudeApi.module_eval java_if.getSimpleName.jude_class
|
65
|
+
jude_object = jude_class.new
|
66
|
+
|
67
|
+
@already_builded[java_obj.getId] = jude_object if jude_object.kind_of_named_element?
|
68
|
+
|
69
|
+
java_if.getMethods.each do |java_method|
|
70
|
+
next if java_method.getGenericParameterTypes.length > 0
|
71
|
+
setter_name = java_method.getName.sub(/^(get)/,'').underscore << "="
|
72
|
+
jude_object.send setter_name, build(java_obj, java_method)
|
73
|
+
end
|
74
|
+
return jude_object
|
75
|
+
end
|
76
|
+
|
77
|
+
def is_jude_class? java_class
|
78
|
+
java_class.getName.index(JUDEAPI_PHEAD) == 0
|
79
|
+
end
|
80
|
+
|
81
|
+
def self.define_jude_class class_id
|
82
|
+
judeapi_class_name = class_id.to_s.jude_class
|
83
|
+
JudeApi.module_eval "class #{judeapi_class_name} < JudeBase ; end"
|
84
|
+
judeapi_class = JudeApi.module_eval judeapi_class_name
|
85
|
+
judeapi_module_name = class_id.to_s.jude_module
|
86
|
+
judeapi_module = JudeApi.module_eval judeapi_module_name
|
87
|
+
judeapi_class.send :include, judeapi_module
|
88
|
+
judeapi_class
|
89
|
+
end
|
90
|
+
|
91
|
+
def self.define_jude_module module_id
|
92
|
+
|
93
|
+
java_if = java.lang.Class.forName "#{JUDEAPI_PHEAD}.model.#{module_id.to_s.java_if}"
|
94
|
+
judeapi_module_name = java_if.getSimpleName.jude_module
|
95
|
+
JudeApi.module_eval "module #{judeapi_module_name} ; end"
|
96
|
+
judeapi_module = JudeApi.module_eval judeapi_module_name
|
97
|
+
java_if.getGenericInterfaces().each do |generic_if|
|
98
|
+
JudeApi.module_eval generic_if.getSimpleName.jude_class
|
99
|
+
judeapi_module.send :include, JudeApi.module_eval(generic_if.getSimpleName.jude_module)
|
100
|
+
end
|
101
|
+
|
102
|
+
java_if.getDeclaredMethods.each do |method|
|
103
|
+
next if method.getGenericParameterTypes.length > 0
|
104
|
+
java_method_name = method.getName
|
105
|
+
attr_name = java_method_name.sub(/^(get)/,'').underscore
|
106
|
+
judeapi_module.module_eval "attr_accessor :#{attr_name}"
|
107
|
+
if /^is_/ =~ attr_name
|
108
|
+
judeapi_module.send :alias_method,
|
109
|
+
"#{attr_name}?".to_sym, attr_name.to_sym
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
java_if.getDeclaredFields.each do |f|
|
114
|
+
judeapi_module.module_eval "#{f.getName} = #{f.get(nil)}"
|
115
|
+
end
|
116
|
+
judeapi_module
|
117
|
+
end
|
118
|
+
|
119
|
+
def is_jude_named_element? jude_obj
|
120
|
+
jude_obj.getClass.getMethod "getId", nil
|
121
|
+
return true
|
122
|
+
rescue java.lang.NoSuchMethodException
|
123
|
+
return false
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
end
|
128
|
+
|
129
|
+
class String
|
130
|
+
|
131
|
+
def is_jude_class?
|
132
|
+
/^Jude/ =~ self and not /Methods$/ =~ self
|
133
|
+
end
|
134
|
+
|
135
|
+
def is_jude_module?
|
136
|
+
/^Jude/ =~ self and /Methods$/ =~ self
|
137
|
+
end
|
138
|
+
|
139
|
+
def jude_class
|
140
|
+
'Jude' + sub(/^(I|Jude)/,'').sub(/ER/, "Er").sub(/Methods$/, '')
|
141
|
+
end
|
142
|
+
|
143
|
+
def jude_module
|
144
|
+
'Jude' + sub(/^(I|Jude)/,'').sub(/ER/, "Er") + "Methods"
|
145
|
+
end
|
146
|
+
|
147
|
+
def java_if
|
148
|
+
sub(/^(I|Jude)/,'I').sub(/Er/, "ER").sub(/Methods$/, '')
|
149
|
+
end
|
150
|
+
|
151
|
+
end
|
152
|
+
|
153
|
+
class Module
|
154
|
+
|
155
|
+
alias :const_missing_except_luruju :const_missing
|
156
|
+
|
157
|
+
def const_missing class_id
|
158
|
+
return const_missing_except_luruju(class_id) unless self == Luruju::JudeApi
|
159
|
+
return Luruju::JudeApiLoader::define_jude_class(class_id) if class_id.to_s.is_jude_class?
|
160
|
+
return Luruju::JudeApiLoader::define_jude_module(class_id) if class_id.to_s.is_jude_module?
|
161
|
+
raise NameError
|
162
|
+
end
|
163
|
+
|
164
|
+
end
|
data/lib/luruju/version.rb
CHANGED
data/test/abstract_unit.rb
CHANGED
@@ -2,20 +2,41 @@ $:.unshift(File.dirname(__FILE__) + '/../lib')
|
|
2
2
|
|
3
3
|
require 'test/unit'
|
4
4
|
require 'luruju'
|
5
|
+
require 'fileutils'
|
5
6
|
|
6
7
|
class Test::Unit::TestCase
|
7
8
|
|
8
|
-
|
9
|
+
java_class_path = java.lang.System.getProperty "java.class.path"
|
10
|
+
jude_product = "community-5.0.2" if java_class_path.include? "Community"
|
11
|
+
jude_product = "professional-5.1" if java_class_path.include? "Professional"
|
12
|
+
TEST_JUDE_DIR = File.dirname(__FILE__) + '/jude/' + jude_product
|
9
13
|
|
10
14
|
include Luruju
|
11
15
|
|
12
16
|
def setup
|
13
|
-
|
17
|
+
# JudeApi.constants.each {|c| JudeApi.remove_const(c)}
|
14
18
|
end
|
15
19
|
|
16
20
|
protected
|
17
|
-
def jude_api_load
|
18
|
-
|
21
|
+
def jude_api_load jude_file
|
22
|
+
jude_path = "#{TEST_JUDE_DIR}/#{@@test_jude_model_dir}/#{jude_file}.jude"
|
23
|
+
FileUtils.cp jude_path, "c:/#{jude_file}.jude"
|
24
|
+
Luruju::JudeApiLoader.load "c:/#{jude_file}.jude"
|
19
25
|
end
|
20
26
|
|
21
|
-
|
27
|
+
def self.test_jude_model_dir dir_sym
|
28
|
+
@@test_jude_model_dir = dir_sym.to_s
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
class Object
|
35
|
+
def jude_methods
|
36
|
+
self.class.ancestors.inject(self.methods) do |result,item|
|
37
|
+
result -= item.methods unless item.parent == Luruju::JudeApi
|
38
|
+
result
|
39
|
+
end.sort
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
@@ -0,0 +1,466 @@
|
|
1
|
+
$:.unshift(File.dirname(__FILE__))
|
2
|
+
require 'abstract_unit'
|
3
|
+
|
4
|
+
class ErDiagramTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
test_jude_model_dir :er_diagram
|
7
|
+
|
8
|
+
def test_model001_check_model_api
|
9
|
+
|
10
|
+
jude_project = jude_api_load "er001"
|
11
|
+
assert jude_project.instance_of?(JudeApi::JudeModel)
|
12
|
+
assert jude_project.id != nil
|
13
|
+
assert_equal "er001", jude_project.name
|
14
|
+
assert_equal [], jude_project.constraints
|
15
|
+
|
16
|
+
assert_equal [], jude_project.constraints
|
17
|
+
assert_equal [], jude_project.supplier_dependencies
|
18
|
+
assert_equal [], jude_project.client_dependencies
|
19
|
+
assert_equal "", jude_project.definition
|
20
|
+
|
21
|
+
assert_equal nil, jude_project.is_public_visibility?
|
22
|
+
assert_equal nil, jude_project.is_protected_visibility?
|
23
|
+
assert_equal nil, jude_project.is_private_visibility?
|
24
|
+
assert_equal nil, jude_project.is_package_visibility?
|
25
|
+
|
26
|
+
assert_equal 2, jude_project.diagrams.size
|
27
|
+
class_diagram = jude_project.diagrams[0]
|
28
|
+
usecase_diagram = jude_project.diagrams[1]
|
29
|
+
assert class_diagram.class == JudeApi::JudeClassDiagram
|
30
|
+
assert usecase_diagram.class == JudeApi::JudeUseCaseDiagram
|
31
|
+
|
32
|
+
assert jude_project.owned_elements[0].class == JudeApi::JudeERModel
|
33
|
+
assert jude_project.owned_elements[1].class == JudeApi::JudePackage
|
34
|
+
assert jude_project.owned_elements[2].class == JudeApi::JudeSubsystem
|
35
|
+
assert jude_project.owned_elements[3].class == JudeApi::JudeModel
|
36
|
+
assert jude_project.owned_elements[4].class == JudeApi::JudeClass
|
37
|
+
assert jude_project.owned_elements[5].class == JudeApi::JudeUseCase
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_model002_check_er_model_api
|
42
|
+
|
43
|
+
jude_project = jude_api_load "er002"
|
44
|
+
|
45
|
+
er_model = jude_project.er_model
|
46
|
+
|
47
|
+
assert_equal jude_project.er_models[0], er_model
|
48
|
+
assert er_model.instance_of?(JudeApi::JudeErModel)
|
49
|
+
|
50
|
+
assert er_model.id != nil
|
51
|
+
assert_equal jude_project, er_model.owner
|
52
|
+
assert_equal [], er_model.comments
|
53
|
+
assert_equal [], er_model.stereotypes
|
54
|
+
|
55
|
+
assert_equal "er-model-value1", er_model.tagged["er_model_tag1"]
|
56
|
+
assert_equal "er-model-value1", er_model.tagged[:er_model_tag1]
|
57
|
+
assert_equal "er-model-value2", er_model.tagged[:er_model_tag2]
|
58
|
+
|
59
|
+
assert_equal "ER-Model", er_model.name
|
60
|
+
assert_equal [], er_model.constraints
|
61
|
+
|
62
|
+
assert_equal [], er_model.constraints
|
63
|
+
assert_equal [], er_model.supplier_dependencies
|
64
|
+
assert_equal [], er_model.client_dependencies
|
65
|
+
assert_equal "ER-Model-Definition", er_model.definition
|
66
|
+
|
67
|
+
assert_equal true, er_model.is_public_visibility?
|
68
|
+
assert_equal false, er_model.is_protected_visibility?
|
69
|
+
assert_equal false, er_model.is_private_visibility?
|
70
|
+
assert_equal false, er_model.is_package_visibility?
|
71
|
+
|
72
|
+
assert_equal [], er_model.diagrams
|
73
|
+
|
74
|
+
assert_equal JudeApi::JudeErSchema, er_model.schema.class
|
75
|
+
assert_equal er_model.schemata[0], er_model.schema
|
76
|
+
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_model003_check_er_schema_api
|
80
|
+
|
81
|
+
jude_project = jude_api_load "er003"
|
82
|
+
er_model = jude_project.er_model
|
83
|
+
schema = er_model.schema
|
84
|
+
|
85
|
+
assert schema.instance_of?(JudeApi::JudeErSchema)
|
86
|
+
|
87
|
+
assert schema.id != nil
|
88
|
+
assert_equal er_model, schema.owner
|
89
|
+
assert_equal [], schema.comments
|
90
|
+
assert_equal [], schema.stereotypes
|
91
|
+
|
92
|
+
assert_equal "true", schema.tagged["jude.er.schema"]
|
93
|
+
assert_equal "true", schema.tagged["jude.er.default_schema"]
|
94
|
+
|
95
|
+
assert_equal "Default Schema", schema.name
|
96
|
+
assert_equal [], schema.constraints
|
97
|
+
assert_equal [], schema.supplier_dependencies
|
98
|
+
assert_equal [], schema.client_dependencies
|
99
|
+
assert_equal "", schema.definition
|
100
|
+
|
101
|
+
assert_equal true, schema.is_public_visibility?
|
102
|
+
assert_equal false, schema.is_protected_visibility?
|
103
|
+
assert_equal false, schema.is_private_visibility?
|
104
|
+
assert_equal false, schema.is_package_visibility?
|
105
|
+
|
106
|
+
assert_equal 2, schema.diagrams.size
|
107
|
+
er_diagram_1 = schema.diagrams[0]
|
108
|
+
er_diagram_2 = schema.diagrams[1]
|
109
|
+
assert_equal JudeApi::JudeErDiagram, er_diagram_1.class
|
110
|
+
assert_equal JudeApi::JudeErDiagram, er_diagram_2.class
|
111
|
+
assert_equal "er-diagram-1", er_diagram_1.name
|
112
|
+
assert_equal "er-diagram-2", er_diagram_2.name
|
113
|
+
|
114
|
+
assert_equal 2, schema.domains.size
|
115
|
+
assert_equal JudeApi::JudeErDomain, schema.domains[0].class
|
116
|
+
assert_equal JudeApi::JudeErDomain, schema.domains[1].class
|
117
|
+
|
118
|
+
schema.datatypes.each{|x| assert_equal JudeApi::JudeErDatatype, x.class}
|
119
|
+
|
120
|
+
assert_equal 2, schema.entities.size
|
121
|
+
schema.entities.each{|x| assert_equal JudeApi::JudeErEntity, x.class}
|
122
|
+
assert_equal "entity-1", schema.entities[0].name
|
123
|
+
assert_equal "entity-2", schema.entities[1].name
|
124
|
+
end
|
125
|
+
|
126
|
+
def test_model004_check_er_domain_api
|
127
|
+
|
128
|
+
jude_project = jude_api_load "er004"
|
129
|
+
er_model = jude_project.er_model
|
130
|
+
schema = er_model.schema
|
131
|
+
domain1 = schema.domains[0]
|
132
|
+
domain2 = schema.domains[1]
|
133
|
+
|
134
|
+
[domain1, domain2].each{ |domain| assert_equal JudeApi::JudeErDomain, domain.class}
|
135
|
+
|
136
|
+
assert domain1.id != nil
|
137
|
+
assert_equal nil, domain1.owner
|
138
|
+
assert_equal [], domain1.comments
|
139
|
+
assert_equal [], domain1.stereotypes
|
140
|
+
|
141
|
+
assert_equal "domain1_value1", domain1.tagged["domain1_key1"]
|
142
|
+
assert_equal "domain1_value2", domain1.tagged["domain1_key2"]
|
143
|
+
|
144
|
+
assert_equal "domain1", domain1.name
|
145
|
+
assert_equal [], domain1.constraints
|
146
|
+
assert_equal [], domain1.supplier_dependencies
|
147
|
+
assert_equal [], domain1.client_dependencies
|
148
|
+
assert_equal "domain1-definition", domain1.definition
|
149
|
+
|
150
|
+
assert_equal true, domain1.is_public_visibility?
|
151
|
+
assert_equal false, domain1.is_protected_visibility?
|
152
|
+
assert_equal false, domain1.is_private_visibility?
|
153
|
+
assert_equal false, domain1.is_package_visibility?
|
154
|
+
assert_equal [], domain1.diagrams
|
155
|
+
|
156
|
+
assert_equal "domain1", domain1.logical_name
|
157
|
+
assert_equal "physical-domain1", domain1.physical_name
|
158
|
+
|
159
|
+
assert_equal "CHAR", domain1.datatype_name
|
160
|
+
assert_equal "NCHAR", domain2.datatype_name
|
161
|
+
|
162
|
+
assert_equal "", domain1.default_value
|
163
|
+
#TODO assert_equal "default2", domain2.default_value
|
164
|
+
|
165
|
+
assert_equal "10", domain1.length_precision
|
166
|
+
assert_equal "20", domain2.length_precision
|
167
|
+
|
168
|
+
assert_equal false, domain1.is_not_null?
|
169
|
+
assert_equal true, domain2.is_not_null?
|
170
|
+
|
171
|
+
assert_equal 2, domain1.children.size
|
172
|
+
assert_equal 2, domain2.children.size
|
173
|
+
(domain1.children + domain2.children).each{ |domain| assert_equal JudeApi::JudeErDomain, domain.class}
|
174
|
+
assert_equal "domain1-1", domain1.children[0].name
|
175
|
+
assert_equal "domain1-2", domain1.children[1].name
|
176
|
+
assert_equal "domain2-1", domain2.children[0].name
|
177
|
+
assert_equal "domain2-2", domain2.children[1].name
|
178
|
+
|
179
|
+
end
|
180
|
+
|
181
|
+
def test_model005_check_er_datatype_api
|
182
|
+
|
183
|
+
jude_project = jude_api_load "er005"
|
184
|
+
er_model = jude_project.er_model
|
185
|
+
schema = er_model.schema
|
186
|
+
datatypes = schema.datatypes.select{|x|/^TEST/ =~ x.name}
|
187
|
+
assert_equal 3, datatypes.size
|
188
|
+
|
189
|
+
test_type1 = datatypes[0]
|
190
|
+
test_type2 = datatypes[1]
|
191
|
+
test_type3 = datatypes[2]
|
192
|
+
|
193
|
+
[test_type1, test_type2, test_type3].each{ |domain| assert_equal JudeApi::JudeErDatatype, domain.class}
|
194
|
+
|
195
|
+
assert test_type1.id != nil
|
196
|
+
assert_equal nil, test_type1.owner
|
197
|
+
assert_equal [], test_type1.comments
|
198
|
+
assert_equal [], test_type1.stereotypes
|
199
|
+
|
200
|
+
[test_type1, test_type2, test_type3].each do |test_type|
|
201
|
+
assert_equal test_type.length_constraint, test_type.tagged["jude.datatype.length"]
|
202
|
+
assert_equal test_type.precision_constraint, test_type.tagged["jude.datatype.precision"]
|
203
|
+
assert_equal test_type.default_length_precision, test_type.tagged["jude.datatype.defaultLength"]
|
204
|
+
end
|
205
|
+
|
206
|
+
assert_equal "TEST_TYPE1", test_type1.name
|
207
|
+
assert_equal [], test_type1.constraints
|
208
|
+
assert_equal [], test_type1.supplier_dependencies
|
209
|
+
assert_equal [], test_type1.client_dependencies
|
210
|
+
assert_equal "TEST_TYPE1-definition", test_type1.definition
|
211
|
+
|
212
|
+
assert_equal true, test_type1.is_public_visibility?
|
213
|
+
assert_equal false, test_type1.is_protected_visibility?
|
214
|
+
assert_equal false, test_type1.is_private_visibility?
|
215
|
+
assert_equal false, test_type1.is_package_visibility?
|
216
|
+
assert_equal [], test_type1.diagrams
|
217
|
+
|
218
|
+
assert_equal "None", test_type1.length_constraint
|
219
|
+
assert_equal "Optional", test_type2.length_constraint
|
220
|
+
assert_equal "Required", test_type3.length_constraint
|
221
|
+
|
222
|
+
assert_equal "None", test_type1.precision_constraint
|
223
|
+
assert_equal "Optional", test_type2.precision_constraint
|
224
|
+
assert_equal "Required", test_type3.precision_constraint
|
225
|
+
|
226
|
+
assert_equal "", test_type1.default_length_precision
|
227
|
+
assert_equal "10", test_type2.default_length_precision
|
228
|
+
assert_equal "5,10", test_type3.default_length_precision
|
229
|
+
|
230
|
+
end
|
231
|
+
|
232
|
+
def test_model006_check_er_entity_api
|
233
|
+
|
234
|
+
jude_project = jude_api_load "er006"
|
235
|
+
er_model = jude_project.er_model
|
236
|
+
schema = er_model.schema
|
237
|
+
entities = schema.entities
|
238
|
+
entity1 = schema.entities[0]
|
239
|
+
entity2 = schema.entities[1]
|
240
|
+
entity3 = schema.entities[2]
|
241
|
+
entity4 = schema.entities[3]
|
242
|
+
entity5 = schema.entities[4]
|
243
|
+
|
244
|
+
entities.each{ |domain| assert_equal JudeApi::JudeErEntity, domain.class}
|
245
|
+
|
246
|
+
assert entity1.id != nil
|
247
|
+
assert_equal schema, entity1.owner
|
248
|
+
assert_equal [], entity1.comments
|
249
|
+
assert_equal [], entity1.stereotypes
|
250
|
+
|
251
|
+
assert_equal "entity1_value1", entity1.tagged["entity1_key1"]
|
252
|
+
assert_equal "entity1_value2", entity1.tagged["entity1_key2"]
|
253
|
+
|
254
|
+
assert_equal "entity1", entity1.name
|
255
|
+
assert_equal [], entity1.constraints
|
256
|
+
assert_equal [], entity1.supplier_dependencies
|
257
|
+
assert_equal [], entity1.client_dependencies
|
258
|
+
assert_equal "entity1-definition", entity1.definition
|
259
|
+
|
260
|
+
assert_equal true, entity1.is_public_visibility?
|
261
|
+
assert_equal false, entity1.is_protected_visibility?
|
262
|
+
assert_equal false, entity1.is_private_visibility?
|
263
|
+
assert_equal false, entity1.is_package_visibility?
|
264
|
+
assert_equal [], entity1.diagrams
|
265
|
+
|
266
|
+
assert_equal "entity1", entity1.logical_name
|
267
|
+
assert_equal "physical-entity1", entity1.physical_name
|
268
|
+
assert_equal "Resource", entity1.type
|
269
|
+
|
270
|
+
assert_equal ["pk1", "pk2", "fk2-1", "fk2-2"], entity1.primary_keys.collect{|x|x.name}
|
271
|
+
assert_equal ["fk2-1", "fk2-2", "fk3-1", "fk3-2"], entity1.foreign_keys.collect{|x|x.name}
|
272
|
+
assert_equal ["attr1", "attr2", "fk3-1", "fk3-2"], entity1.non_primary_keys.collect{|x|x.name}
|
273
|
+
|
274
|
+
assert_equal ["relationship1", "relationship2"], entity1.parent_relationships.collect{|x|x.name}
|
275
|
+
assert_equal [], entity2.parent_relationships
|
276
|
+
|
277
|
+
assert_equal [], entity1.children_relationships
|
278
|
+
assert_equal ["relationship1"], entity2.children_relationships.collect{|x|x.name}
|
279
|
+
assert_equal ["relationship2"], entity3.children_relationships.collect{|x|x.name}
|
280
|
+
|
281
|
+
assert_equal ["sub1", "sub2"], entity1.children_subtype_relationships.collect{|x|x.name}
|
282
|
+
assert_equal [], entity4.children_relationships
|
283
|
+
assert_equal [], entity5.children_relationships
|
284
|
+
|
285
|
+
assert_equal [], entity1.parent_subtype_relationships
|
286
|
+
assert_equal ["sub1"], entity4.parent_subtype_relationships.collect{|x|x.name}
|
287
|
+
assert_equal ["sub2"], entity5.parent_subtype_relationships.collect{|x|x.name}
|
288
|
+
|
289
|
+
end
|
290
|
+
|
291
|
+
def test_model007_check_er_attribute
|
292
|
+
|
293
|
+
jude_project = jude_api_load "er007"
|
294
|
+
er_model = jude_project.er_model
|
295
|
+
schema = er_model.schema
|
296
|
+
entity1 = schema.entities[0]
|
297
|
+
domain1 = schema.domains[0]
|
298
|
+
varchar_type = schema.datatypes.find{|x|"VARCHAR" == x.name}
|
299
|
+
|
300
|
+
primarys = entity1.primary_keys
|
301
|
+
foreigns = entity1.foreign_keys
|
302
|
+
non_primarys = entity1.non_primary_keys
|
303
|
+
attributes = (primarys + foreigns + non_primarys).uniq
|
304
|
+
|
305
|
+
pk1 = primarys[0]
|
306
|
+
pk2 = primarys[1]
|
307
|
+
attr1 = non_primarys[0]
|
308
|
+
fk2_1 = foreigns[0]
|
309
|
+
|
310
|
+
attributes.each{ |attr| assert_equal JudeApi::JudeErAttribute, attr.class}
|
311
|
+
|
312
|
+
assert pk1.id != nil
|
313
|
+
assert_equal entity1, pk1.owner
|
314
|
+
assert_equal [], pk1.comments
|
315
|
+
assert_equal [], pk1.stereotypes
|
316
|
+
|
317
|
+
assert_equal "pk1_value1", pk1.tagged["pk1_key1"]
|
318
|
+
assert_equal "pk1_value2", pk1.tagged["pk1_key2"]
|
319
|
+
|
320
|
+
assert_equal ["pk1","pk2"], [pk1.name, pk2.name]
|
321
|
+
|
322
|
+
pk_constraint = pk1.constraints[0]
|
323
|
+
not_null_constraint = pk1.constraints[1]
|
324
|
+
|
325
|
+
pk1.constraints.each {|x| assert_equal JudeApi::JudeConstraint, x.class }
|
326
|
+
assert_equal ["PRIMARY KEY", "NOT NULL"], [pk_constraint.name, not_null_constraint.name]
|
327
|
+
assert_equal [], pk1.supplier_dependencies
|
328
|
+
assert_equal [], pk1.client_dependencies
|
329
|
+
assert_equal "pk1-definition", pk1.definition
|
330
|
+
|
331
|
+
assert_equal "pk1", pk1.logical_name
|
332
|
+
assert_equal "physical_pk1", pk1.physical_name
|
333
|
+
primarys.each {|x| assert_equal true, x.is_primary_key?}
|
334
|
+
non_primarys.each {|x| assert_equal false, x.is_primary_key?}
|
335
|
+
foreigns.each {|x| assert_equal true, x.is_foreign_key?}
|
336
|
+
(attributes - foreigns).each {|x| assert_equal false, x.is_foreign_key?}
|
337
|
+
assert_equal domain1, pk1.domain
|
338
|
+
assert_equal [nil, varchar_type], [pk1.datatype, pk2.datatype]
|
339
|
+
assert_equal ["", "10"], [pk1.length_precision, pk2.length_precision]
|
340
|
+
assert_equal [true, false], [pk1.is_not_null?, attr1.is_not_null?]
|
341
|
+
assert_equal ["", "pk2-default"], [pk1.default_value, pk2.default_value]
|
342
|
+
|
343
|
+
assert_equal nil, pk1.constraint("hoge")
|
344
|
+
assert_equal pk_constraint, pk1.constraint("PRIMARY KEY")
|
345
|
+
assert_equal not_null_constraint, pk1.constraint("NOT NULL")
|
346
|
+
|
347
|
+
assert_equal nil, pk1.referenced_primary_key
|
348
|
+
assert_equal "e2-pk1", fk2_1.referenced_primary_key.name
|
349
|
+
|
350
|
+
assert_equal ["e4-pk1", "e5-pk1"], pk1.referenced_foreign_keys.collect{|x|x.name}
|
351
|
+
assert_equal [], attr1.referenced_foreign_keys
|
352
|
+
|
353
|
+
assert_equal nil, pk1.referenced_relationship
|
354
|
+
assert_equal "relationship1", fk2_1.referenced_relationship.name
|
355
|
+
|
356
|
+
assert_equal ["sub1", "sub2"], pk1.referenced_subtype_relationships.collect{|x|x.name}
|
357
|
+
assert_equal [], fk2_1.referenced_subtype_relationships
|
358
|
+
|
359
|
+
e4_pk1 = pk1.referenced_foreign_keys[0]
|
360
|
+
assert_equal "sub1", e4_pk1.subtype_foreign_key_inv.name
|
361
|
+
assert_equal nil, pk1.subtype_foreign_key_inv
|
362
|
+
end
|
363
|
+
|
364
|
+
def test_model008_check_er_relationship
|
365
|
+
|
366
|
+
jude_project = jude_api_load "er008"
|
367
|
+
er_model = jude_project.er_model
|
368
|
+
schema = er_model.schema
|
369
|
+
|
370
|
+
entity1 = schema.entities[0]
|
371
|
+
entity2 = schema.entities[1]
|
372
|
+
|
373
|
+
relationships = entity1.parent_relationships
|
374
|
+
relationship1 = entity1.parent_relationships[0]
|
375
|
+
relationship2 = entity1.parent_relationships[1]
|
376
|
+
relationship3 = entity1.children_relationships[0]
|
377
|
+
|
378
|
+
relationships.each{ |r| assert_equal JudeApi::JudeErRelationship, r.class}
|
379
|
+
assert relationship1.id != nil
|
380
|
+
assert_equal schema, relationship1.owner
|
381
|
+
assert_equal [], relationship1.comments
|
382
|
+
assert_equal [], relationship1.stereotypes
|
383
|
+
|
384
|
+
assert_equal "relationship1_value1", relationship1.tagged["relationship1_key1"]
|
385
|
+
assert_equal "relationship1_value2", relationship1.tagged["relationship1_key2"]
|
386
|
+
|
387
|
+
assert_equal ["relationship1","relationship2"], [relationship1.name, relationship2.name]
|
388
|
+
assert_equal [], relationship1.constraints
|
389
|
+
assert_equal [], relationship1.supplier_dependencies
|
390
|
+
assert_equal [], relationship1.client_dependencies
|
391
|
+
assert_equal "relation1-definition", relationship1.definition
|
392
|
+
|
393
|
+
assert_equal true, relationship1.is_public_visibility?
|
394
|
+
assert_equal false, relationship1.is_protected_visibility?
|
395
|
+
assert_equal false, relationship1.is_private_visibility?
|
396
|
+
assert_equal false, relationship1.is_package_visibility?
|
397
|
+
assert_equal [], relationship1.diagrams
|
398
|
+
|
399
|
+
assert_equal "relationship1", relationship1.logical_name
|
400
|
+
assert_equal "p-r1", relationship1.physical_name
|
401
|
+
assert_equal "r-child", relationship1.verb_phrase_parent
|
402
|
+
assert_equal "r-parent", relationship1.verb_phrase_child
|
403
|
+
|
404
|
+
assert_equal true, relationship1.is_identifying?
|
405
|
+
assert_equal false, relationship2.is_identifying?
|
406
|
+
|
407
|
+
assert_equal false, relationship1.is_non_identifying?
|
408
|
+
assert_equal true, relationship2.is_non_identifying?
|
409
|
+
|
410
|
+
assert_equal false, relationship1.is_multi_to_multi?
|
411
|
+
assert_equal true, relationship3.is_multi_to_multi?
|
412
|
+
|
413
|
+
assert_equal true, relationship1.is_parent_required?
|
414
|
+
assert_equal false, relationship3.is_parent_required?
|
415
|
+
|
416
|
+
assert_equal entity2, relationship1.parent
|
417
|
+
assert_equal entity1, relationship1.child
|
418
|
+
end
|
419
|
+
|
420
|
+
def test_model009_check_er_subtype_relationship
|
421
|
+
|
422
|
+
jude_project = jude_api_load "er009"
|
423
|
+
er_model = jude_project.er_model
|
424
|
+
schema = er_model.schema
|
425
|
+
|
426
|
+
entity1 = schema.entities[0]
|
427
|
+
entity4 = schema.entities[3]
|
428
|
+
pk1 = entity1.primary_keys[0]
|
429
|
+
|
430
|
+
subs = entity1.children_subtype_relationships
|
431
|
+
sub1 = subs[0]
|
432
|
+
sub2 = subs[1]
|
433
|
+
|
434
|
+
subs.each{ |r| assert_equal JudeApi::JudeErSubtypeRelationship, r.class}
|
435
|
+
assert sub1.id != nil
|
436
|
+
assert_equal schema, sub1.owner
|
437
|
+
assert_equal [], sub1.comments
|
438
|
+
assert_equal [], sub1.stereotypes
|
439
|
+
|
440
|
+
assert_equal "sub1_value1", sub1.tagged["sub1_key1"]
|
441
|
+
assert_equal "sub1_value2", sub1.tagged["sub1_key2"]
|
442
|
+
|
443
|
+
assert_equal ["sub1","sub2"], [sub1.name, sub2.name]
|
444
|
+
assert_equal [], sub1.constraints
|
445
|
+
assert_equal [], sub1.supplier_dependencies
|
446
|
+
assert_equal [], sub1.client_dependencies
|
447
|
+
assert_equal "sub1-definition", sub1.definition
|
448
|
+
|
449
|
+
assert_equal true, sub1.is_public_visibility?
|
450
|
+
assert_equal false, sub1.is_protected_visibility?
|
451
|
+
assert_equal false, sub1.is_private_visibility?
|
452
|
+
assert_equal false, sub1.is_package_visibility?
|
453
|
+
assert_equal [], sub1.diagrams
|
454
|
+
|
455
|
+
assert_equal "sub1", sub1.logical_name
|
456
|
+
assert_equal "p-sub1", sub1.physical_name
|
457
|
+
assert_equal pk1, sub1.discriminator_attribute
|
458
|
+
assert_equal true, sub1.is_conclusive?
|
459
|
+
assert_equal false, sub2.is_conclusive?
|
460
|
+
assert_equal entity1, sub1.parent
|
461
|
+
assert_equal entity4, sub1.child
|
462
|
+
assert_equal ["e4-pk1", "e4-pk2", "fk2-1", "fk2-2"], sub1.foreign_keys.collect{|x|x.name}
|
463
|
+
|
464
|
+
end
|
465
|
+
|
466
|
+
end
|