luruju 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|