luruju 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. data/Rakefile +1 -4
  2. data/lib/luruju.rb +15 -7
  3. data/lib/luruju/customize_inflector.rb +3 -0
  4. data/lib/luruju/dynamic_method.rb +5 -11
  5. data/lib/luruju/easy_breakpoint.rb +22 -0
  6. data/lib/luruju/jude_api/add_dynamic_method.rb +49 -0
  7. data/lib/luruju/jude_api/add_method.rb +52 -0
  8. data/lib/luruju/jude_api/jude_base.rb +2 -0
  9. data/lib/luruju/jude_api_loader.rb +164 -0
  10. data/lib/luruju/version.rb +2 -2
  11. data/test/abstract_unit.rb +26 -5
  12. data/test/er_diagram_test.rb +466 -0
  13. data/test/jude/{model001.jude → community-5.0.2/class_diagram/model001.jude} +0 -0
  14. data/test/jude/{model002.jude → community-5.0.2/class_diagram/model002.jude} +0 -0
  15. data/test/jude/{model003.jude → community-5.0.2/class_diagram/model003.jude} +0 -0
  16. data/test/jude/{model004.jude → community-5.0.2/class_diagram/model004.jude} +0 -0
  17. data/test/jude/{model005.jude → community-5.0.2/class_diagram/model005.jude} +0 -0
  18. data/test/jude/{model006.jude → community-5.0.2/class_diagram/model006.jude} +0 -0
  19. data/test/jude/{model007.jude → community-5.0.2/class_diagram/model007.jude} +0 -0
  20. data/test/jude/{model008.jude → community-5.0.2/class_diagram/model008.jude} +0 -0
  21. data/test/jude/{model009.jude → community-5.0.2/class_diagram/model009.jude} +0 -0
  22. data/test/jude/{model010.jude → community-5.0.2/class_diagram/model010.jude} +0 -0
  23. data/test/jude/{model011.jude → community-5.0.2/class_diagram/model011.jude} +0 -0
  24. data/test/jude/{model012.jude → community-5.0.2/class_diagram/model012.jude} +0 -0
  25. data/test/jude/{model013.jude → community-5.0.2/class_diagram/model013.jude} +0 -0
  26. data/test/jude/professional-5.1/class_diagram/model001.jude +0 -0
  27. data/test/jude/professional-5.1/class_diagram/model002.jude +0 -0
  28. data/test/jude/professional-5.1/class_diagram/model003.jude +0 -0
  29. data/test/jude/professional-5.1/class_diagram/model004.jude +0 -0
  30. data/test/jude/professional-5.1/class_diagram/model005.jude +0 -0
  31. data/test/jude/professional-5.1/class_diagram/model006.jude +0 -0
  32. data/test/jude/professional-5.1/class_diagram/model007.jude +0 -0
  33. data/test/jude/professional-5.1/class_diagram/model008.jude +0 -0
  34. data/test/jude/professional-5.1/class_diagram/model009.jude +0 -0
  35. data/test/jude/professional-5.1/class_diagram/model010.jude +0 -0
  36. data/test/jude/professional-5.1/class_diagram/model011.jude +0 -0
  37. data/test/jude/professional-5.1/class_diagram/model012.jude +0 -0
  38. data/test/jude/professional-5.1/class_diagram/model013.jude +0 -0
  39. data/test/jude/professional-5.1/er_diagram/er001.jude +0 -0
  40. data/test/jude/professional-5.1/er_diagram/er002.jude +0 -0
  41. data/test/jude/professional-5.1/er_diagram/er003.jude +0 -0
  42. data/test/jude/professional-5.1/er_diagram/er004.jude +0 -0
  43. data/test/jude/professional-5.1/er_diagram/er005.jude +0 -0
  44. data/test/jude/professional-5.1/er_diagram/er006.jude +0 -0
  45. data/test/jude/professional-5.1/er_diagram/er007.jude +0 -0
  46. data/test/jude/professional-5.1/er_diagram/er008.jude +0 -0
  47. data/test/jude/professional-5.1/er_diagram/er009.jude +0 -0
  48. data/test/jude_api_test.rb +3 -1
  49. metadata +93 -56
  50. data/lib/luruju/add_useful_method.rb +0 -36
  51. data/lib/luruju/jude_api.rb +0 -134
  52. 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
- require 'rubygems'
3
- require 'active_support/inflector'
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/jude_api'
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/add_useful_method'
8
-
9
-
10
-
18
+ require 'luruju/jude_api/jude_base'
11
19
 
@@ -0,0 +1,3 @@
1
+ Inflector.inflections do |inflect|
2
+ inflect.irregular 'schema', 'schemata'
3
+ end
@@ -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(method, *args)
11
- method_name = method.to_s
12
- methods.select{|m|/^dyna_.*/ =~ m.to_s}.sort.each { |dyna_method|
13
- begin
14
- return send(dyna_method, method, *args)
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,2 @@
1
+ require 'luruju/jude_api/add_dynamic_method'
2
+ require 'luruju/jude_api/add_method'
@@ -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
@@ -1,8 +1,8 @@
1
1
  module Luruju #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
- MINOR = 0
5
- TINY = 1
4
+ MINOR = 1
5
+ TINY = 0
6
6
  STRING = [MAJOR, MINOR, TINY].join('.')
7
7
  end
8
8
  end
@@ -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
- TEST_JUDE_DIR = File.dirname(__FILE__) + '/jude'
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
- # JudeApi.constants.each {|c| JudeApi.remove_const(c)}
17
+ # JudeApi.constants.each {|c| JudeApi.remove_const(c)}
14
18
  end
15
19
 
16
20
  protected
17
- def jude_api_load(jude_file)
18
- Luruju::JudeApiLoader.load("#{TEST_JUDE_DIR}/#{jude_file}.jude")
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
- end
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