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.
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