rtm 0.1.6 → 0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (163) hide show
  1. data/DISCLAIMER +10 -33
  2. data/LICENSE +201 -0
  3. data/README +32 -3
  4. data/lib/rtm.rb +126 -74
  5. data/lib/rtm/axes.rb +298 -0
  6. data/lib/rtm/axes/association.rb +76 -0
  7. data/lib/rtm/axes/associations.rb +96 -0
  8. data/lib/rtm/axes/assocs_names_occs.rb +56 -0
  9. data/lib/rtm/axes/characteristic.rb +68 -0
  10. data/lib/rtm/axes/characteristics.rb +93 -0
  11. data/lib/rtm/axes/string.rb +76 -0
  12. data/lib/rtm/axes/strings.rb +87 -0
  13. data/lib/rtm/axes/topic.rb +233 -0
  14. data/lib/rtm/axes/topics.rb +280 -0
  15. data/lib/rtm/{backward_compatibility.rb → deprecated/index_property_set.rb} +3 -0
  16. data/lib/rtm/engine.rb +101 -0
  17. data/lib/rtm/extensions.rb +65 -5
  18. data/lib/rtm/{locator_helpers.rb → helpers/locator.rb} +15 -4
  19. data/lib/rtm/{helpers.rb → helpers/no_output.rb} +3 -0
  20. data/lib/rtm/helpers/uri.rb +13 -0
  21. data/lib/rtm/io.rb +19 -0
  22. data/lib/rtm/io/from_xtm2_libxml.rb +2 -1
  23. data/lib/rtm/io/tmapix_from.rb +155 -0
  24. data/lib/rtm/io/tmapix_to.rb +223 -0
  25. data/lib/rtm/io/to_hash.rb +154 -0
  26. data/lib/rtm/io/to_jtm.rb +53 -103
  27. data/lib/rtm/io/to_rdf.rb +45 -0
  28. data/lib/rtm/io/to_string.rb +21 -8
  29. data/lib/rtm/io/to_xtm1.rb +6 -4
  30. data/lib/rtm/io/to_xtm2.rb +10 -8
  31. data/lib/rtm/io/to_yaml.rb +59 -100
  32. data/lib/rtm/navigation.rb +23 -0
  33. data/lib/rtm/navigation/association/players.rb +25 -0
  34. data/lib/rtm/navigation/name/atomify.rb +19 -0
  35. data/lib/rtm/navigation/name/characteristics.rb +33 -0
  36. data/lib/rtm/navigation/occurrence/atomify.rb +19 -0
  37. data/lib/rtm/navigation/occurrence/characteristics.rb +33 -0
  38. data/lib/rtm/navigation/topic/characteristics.rb +33 -0
  39. data/lib/rtm/navigation/topic/indicators.rb +31 -0
  40. data/lib/rtm/navigation/topic/items.rb +31 -0
  41. data/lib/rtm/navigation/topic/locators.rb +31 -0
  42. data/lib/rtm/navigation/topic/players.rb +27 -0
  43. data/lib/rtm/navigation/topic/supertypes.rb +166 -0
  44. data/lib/rtm/navigation/topic/traverse.rb +51 -0
  45. data/lib/rtm/navigation/topic/types.rb +109 -0
  46. data/lib/rtm/psi.rb +39 -2
  47. data/lib/rtm/sugar.rb +47 -0
  48. data/lib/rtm/sugar/association/hash_access.rb +46 -0
  49. data/lib/rtm/sugar/occurrence/dynamic_value.rb +58 -0
  50. data/lib/rtm/sugar/occurrence/external.rb +53 -0
  51. data/lib/rtm/sugar/reifiable/reifier.rb +21 -0
  52. data/lib/rtm/sugar/role/counterparts.rb +139 -46
  53. data/lib/rtm/sugar/topic/best_name.rb +74 -0
  54. data/lib/rtm/sugar/topic/characteristics.rb +126 -12
  55. data/lib/rtm/sugar/topic/counterparts.rb +145 -10
  56. data/lib/rtm/sugar/topic/hash_access.rb +140 -30
  57. data/lib/rtm/sugar/topic/scoped.rb +114 -0
  58. data/lib/rtm/sugar/topic/topic_ref.rb +86 -0
  59. data/lib/rtm/sugar/topic/typed.rb +207 -0
  60. data/lib/rtm/sugar/topic_map/query_cache.rb +66 -0
  61. data/lib/rtm/sugar/topic_map/themes.rb +53 -0
  62. data/lib/rtm/sugar/typed/types.rb +38 -0
  63. data/lib/rtm/validation.rb +7 -4
  64. data/lib/rtm/version.rb +30 -0
  65. data/spec/helpers/spec_exampleexamplegroup.rb +14 -0
  66. data/spec/rtm/axes/association_spec.rb +88 -0
  67. data/spec/rtm/axes/associations_spec.rb +60 -0
  68. data/spec/rtm/axes/assocs_names_occs_spec.rb +9 -0
  69. data/spec/rtm/axes/characteristic_spec.rb +90 -0
  70. data/spec/rtm/axes/characteristics_spec.rb +85 -0
  71. data/spec/rtm/axes/string_spec.rb +145 -0
  72. data/spec/rtm/axes/strings_spec.rb +168 -0
  73. data/spec/rtm/axes/topic_spec.rb +124 -0
  74. data/spec/rtm/axes/topics_spec.rb +103 -0
  75. data/spec/rtm/base_spec.rb +32 -0
  76. data/spec/rtm/io/tmapix_from_spec.rb +76 -0
  77. data/spec/rtm/io/tmapix_to_spec.rb +159 -0
  78. data/spec/rtm/io/to_hash_spec.rb +90 -0
  79. data/spec/rtm/io/to_rdf_spec.rb +37 -0
  80. data/spec/rtm/io/to_string_spec.rb +122 -0
  81. data/spec/rtm/io/to_yaml_spec.rb +89 -0
  82. data/spec/rtm/navigation/association/players_spec.rb +58 -0
  83. data/spec/rtm/navigation/association_spec.rb +52 -0
  84. data/spec/rtm/navigation/name/atomify_spec.rb +27 -0
  85. data/spec/rtm/navigation/name/characteristics_spec.rb +34 -0
  86. data/spec/rtm/navigation/name_spec.rb +52 -0
  87. data/spec/rtm/navigation/occurrence/atomify_spec.rb +27 -0
  88. data/spec/rtm/navigation/occurrence/characteristics_spec.rb +34 -0
  89. data/spec/rtm/navigation/occurrence_spec.rb +52 -0
  90. data/spec/rtm/navigation/string_spec.rb +51 -0
  91. data/spec/rtm/navigation/topic/characteristics_spec.rb +55 -0
  92. data/spec/rtm/navigation/topic/indicators_spec.rb +43 -0
  93. data/spec/rtm/navigation/topic/items_spec.rb +44 -0
  94. data/spec/rtm/navigation/topic/locators_spec.rb +44 -0
  95. data/spec/rtm/navigation/topic/players_spec.rb +48 -0
  96. data/spec/rtm/navigation/topic/scope_spec.rb +41 -0
  97. data/spec/rtm/navigation/topic/supertypes_spec.rb +376 -0
  98. data/spec/rtm/navigation/topic/traverse_spec.rb +64 -0
  99. data/spec/rtm/navigation/topic/types_spec.rb +195 -0
  100. data/spec/rtm/navigation/topic_spec.rb +153 -0
  101. data/spec/rtm/sugar/association/hash_access_spec.rb +55 -0
  102. data/spec/rtm/sugar/occurrence/dynamic_value_spec.rb +171 -0
  103. data/spec/rtm/sugar/occurrence/external_spec.rb +129 -0
  104. data/spec/rtm/sugar/reifiable/reifier_spec.rb +41 -0
  105. data/spec/rtm/sugar/role/counterparts_spec.rb +193 -0
  106. data/spec/rtm/sugar/topic/best_name_spec.rb +25 -0
  107. data/spec/rtm/sugar/topic/characteristics_spec.rb +333 -0
  108. data/spec/rtm/sugar/topic/counterparts_spec.rb +224 -0
  109. data/spec/rtm/sugar/topic/hash_access_spec.rb +234 -0
  110. data/spec/rtm/sugar/topic/scoped_spec.rb +195 -0
  111. data/spec/rtm/sugar/topic/topic_ref_spec.rb +44 -0
  112. data/spec/rtm/sugar/topic/typed_spec.rb +217 -0
  113. data/spec/rtm/sugar/topic_map/themes_spec.rb +67 -0
  114. data/spec/rtm/sugar/typed/types_spec.rb +24 -0
  115. data/spec/rtm/tmapi/core/association_spec.rb +169 -0
  116. data/spec/rtm/tmapi/core/construct_spec.rb +25 -0
  117. data/spec/rtm/tmapi/core/datatype_aware_spec.rb +236 -0
  118. data/spec/rtm/tmapi/core/name_spec.rb +270 -0
  119. data/spec/rtm/tmapi/core/occurrence_spec.rb +53 -0
  120. data/spec/rtm/tmapi/core/reifiable_spec.rb +168 -0
  121. data/spec/rtm/tmapi/core/role_spec.rb +73 -0
  122. data/spec/rtm/tmapi/core/scoped_spec.rb +441 -0
  123. data/spec/rtm/tmapi/core/topic_map_spec.rb +716 -0
  124. data/spec/rtm/tmapi/core/topic_spec.rb +1468 -0
  125. data/spec/rtm/tmapi/core/typed_spec.rb +112 -0
  126. data/spec/rtm/tmapi/core/variant_spec.rb +52 -0
  127. data/spec/rtm/tmapi/ext/java_util_set_spec.rb +34 -0
  128. data/spec/rtm/tmapi_spec.rb +44 -0
  129. data/spec/rtm/utils/sparql_spec.rb +26 -0
  130. data/spec/rtm_spec.rb +93 -0
  131. data/spec/spec_helper.rb +28 -0
  132. data/test/javalibs/junit-4.5.jar +0 -0
  133. data/test/javalibs/tmapi-2.0-tests.jar +0 -0
  134. data/test/tmapi_tests.rb +25 -0
  135. metadata +169 -65
  136. data/COPYRIGHT +0 -4
  137. data/lib/Rakefile.rb +0 -42
  138. data/lib/activetopicmaps.rb +0 -278
  139. data/lib/rtm/backend/active_record.rb +0 -58
  140. data/lib/rtm/backend/active_record/001_initial_schema.rb +0 -116
  141. data/lib/rtm/backend/active_record/association_and_role.rb +0 -33
  142. data/lib/rtm/backend/active_record/locators.rb +0 -55
  143. data/lib/rtm/backend/active_record/name_variant_occurrence.rb +0 -45
  144. data/lib/rtm/backend/active_record/quaaxtm2rtm.rb +0 -113
  145. data/lib/rtm/backend/active_record/quaaxtm2rtmviews.rb +0 -134
  146. data/lib/rtm/backend/active_record/set_wrapper.rb +0 -98
  147. data/lib/rtm/backend/active_record/tm_construct.rb +0 -62
  148. data/lib/rtm/backend/active_record/tm_delegator.rb +0 -345
  149. data/lib/rtm/backend/active_record/tm_set_delegator.rb +0 -195
  150. data/lib/rtm/backend/active_record/tmdm.rb +0 -298
  151. data/lib/rtm/backend/active_record/topic.rb +0 -87
  152. data/lib/rtm/backend/active_record/topic_map.rb +0 -314
  153. data/lib/rtm/backend/active_record/traverse_associations.rb +0 -87
  154. data/lib/rtm/base.rb +0 -92
  155. data/lib/rtm/connect.rb +0 -92
  156. data/lib/rtm/core_ext.rb +0 -6
  157. data/lib/rtm/io/from_xtm2.rb +0 -263
  158. data/lib/rtm/merging/merging.rb +0 -307
  159. data/lib/rtm/pimp_my_api.rb +0 -28
  160. data/lib/rtm/sugar/topic/identifier_direct.rb +0 -11
  161. data/lib/rtm/sugar/topic/predefined_associations.rb +0 -42
  162. data/lib/run_main_project.rb +0 -16
  163. data/test/base_test.rb +0 -162
@@ -0,0 +1,53 @@
1
+ # Copyright: Copyright 2009 Topic Maps Lab, University of Leipzig.
2
+ # License: Apache License, Version 2.0
3
+
4
+ require File.dirname(__FILE__) + '/../../../spec_helper'
5
+
6
+ module RTM::Occurrence
7
+
8
+ describe self do
9
+ before(:each) do
10
+ @tm = get_used_tm_sys_tm
11
+ end
12
+ after(:each) do
13
+ @tm.close
14
+ end
15
+
16
+ describe "#parent" do
17
+ it "should give back the Topic the Occurrence belongs to" do
18
+ topic = @tm.create_topic_by("House")
19
+ topic.should be_a_kind_of RTM::Topic
20
+ @tm.get("House").should be_a_kind_of RTM::Topic
21
+ testocc = topic.create_occurrence("street number", "1")
22
+ testocc.should be_a_kind_of RTM::Occurrence
23
+ testocc.parent.should == topic
24
+ end
25
+ end
26
+
27
+ end # of describe self
28
+
29
+ describe self do
30
+ describe "#remove" do
31
+ before(:each) do
32
+ @tm = get_used_tm_sys_tm
33
+ @topic1 = @tm.get!("topic1")
34
+ @topic2 = @tm.get!("topic2")
35
+ @occ = @topic1.create_occurrence("birthyear","2000")
36
+ @topic2.create_occurrence("birthyear","1980")
37
+ @topic1.should have(1).occurrences
38
+ @topic1.occurrences.should include @occ
39
+ end
40
+ after(:each) do
41
+ @tm.close
42
+ end
43
+ it "should remove this name from the container (topic)" do
44
+ @tm.literal_index.getOccurrences("2000").size.should == 1
45
+ @occ.remove
46
+ @tm.literal_index.getOccurrences("2000").size.should == 0
47
+ @tm.literal_index.getOccurrences("1980").size.should == 1
48
+ @topic1.should have(0).occurrences
49
+ end
50
+ end
51
+ end # of describe self
52
+
53
+ end # of module
@@ -0,0 +1,168 @@
1
+ # Copyright: Copyright 2009 Topic Maps Lab, University of Leipzig.
2
+ # License: Apache License, Version 2.0
3
+
4
+ require File.dirname(__FILE__) + '/../../../spec_helper'
5
+
6
+ module RTM::Reifiable
7
+ describe self do
8
+ before(:each) do
9
+ @tm = get_used_tm_sys_tm
10
+ end
11
+ after(:each) do
12
+ @tm.close
13
+ end
14
+
15
+ describe "#reifier=" do
16
+ before(:each) do
17
+ @topic = @tm.get!("test_topic")
18
+ @a_reifier = @tm.get!("test_reifier")
19
+ @a_reifier.should be_a_kind_of RTM::Topic
20
+ @a_reifier["-"] = "since"
21
+ @a_reifier["date"] = "2009"
22
+ @locator = @tm.create_locator("test_reifier")
23
+ @locator.should be_a_kind_of RTM::Locator
24
+ @name = @topic.create_name("Hans")
25
+ @name.should be_a_kind_of RTM::Name
26
+ @name.reifier.should be_nil
27
+ @variant = @name.create_variant("Hansi",["endearment"])
28
+ @variant.should be_a_kind_of RTM::Variant
29
+ @variant.reifier.should be_nil
30
+ @occ = @topic.create_occurrence("favourite_colour","red")
31
+ @occ.should be_a_kind_of RTM::Occurrence
32
+ @assoc = @tm.create_association("mother_child")
33
+ @assoc.should be_a_kind_of RTM::Association
34
+ @assoc.reifier.should be_nil
35
+ @role = @assoc.create_role("child",@topic)
36
+ @role.should be_a_kind_of RTM::Role
37
+ @role.reifier.should be_nil
38
+ end
39
+ it "should set the reifier if the Construct is a Name and identifier a String" do
40
+ @name.reifier = "test_reifier"
41
+ @name.reifier.should == @a_reifier
42
+ end
43
+ it "should set the reifier if the Construct is a Name and identifier a Locator" do
44
+ @name.reifier = @locator
45
+ @name.reifier.should == @a_reifier
46
+ end
47
+ it "should set the reifier if the Construct is a Name and identifier a Topic" do
48
+ @name.reifier = @a_reifier
49
+ @name.reifier.should == @a_reifier
50
+ end
51
+ it "should set the reifier if the Construct is a Variant and identifier a String" do
52
+ @variant.reifier = "test_reifier"
53
+ @variant.reifier.should == @a_reifier
54
+ end
55
+ it "should set the reifier if the Construct is a Variant and identifier a Locator" do
56
+ @variant.reifier = @locator
57
+ @variant.reifier.should == @a_reifier
58
+ end
59
+ it "should set the reifier if the Construct is a Variant and identifier a Topic" do
60
+ @variant.reifier = @a_reifier
61
+ @variant.reifier.should == @a_reifier
62
+ end
63
+ it "should set the reifier if the Construct is an Occurrence and identifier a String" do
64
+ @occ.reifier = "test_reifier"
65
+ @occ.reifier.should == @a_reifier
66
+ end
67
+ it "should set the reifier if the Construct is an Occurrence and identifier a Locator" do
68
+ @occ.reifier = @locator
69
+ @occ.reifier.should == @a_reifier
70
+ end
71
+ it "should set the reifier if the Construct is an Occurrence and identifier a Topic" do
72
+ @occ.reifier = @a_reifier
73
+ @occ.reifier.should == @a_reifier
74
+ end
75
+ it "should set the reifier if the Construct is an Association and identifier a String" do
76
+ @assoc.reifier = "test_reifier"
77
+ @assoc.reifier.should == @a_reifier
78
+ end
79
+ it "should set the reifier if the Construct is an Association and identifier a Locator" do
80
+ @assoc.reifier = @locator
81
+ @assoc.reifier.should == @a_reifier
82
+ end
83
+ it "should set the reifier if the Construct is an Association and identifier a Topic" do
84
+ @assoc.reifier = @a_reifier
85
+ @assoc.reifier.should == @a_reifier
86
+ end
87
+ it "should set the reifier if the Construct is a Role and identifier a String" do
88
+ @role.reifier = "test_reifier"
89
+ @role.reifier.should == @a_reifier
90
+ end
91
+ it "should set the reifier if the Construct is a Role and identifier a Locator" do
92
+ @role.reifier = @locator
93
+ @role.reifier.should == @a_reifier
94
+ end
95
+ it "should set the reifier if the Construct is a Role and identifier a Topic" do
96
+ @role.reifier = @a_reifier
97
+ @role.reifier.should == @a_reifier
98
+ end
99
+ it "should set the reifier if the Construct is a TopicMap and identifier a String" do
100
+ @tm.reifier = "test_reifier"
101
+ @tm.reifier.should == @a_reifier
102
+ end
103
+ it "should set the reifier if the Construct is a TopicMap and identifier a Locator" do
104
+ @tm.reifier = @locator
105
+ @tm.reifier.should == @a_reifier
106
+ end
107
+ it "should set the reifier if the Construct is a TopicMap and identifier a Topic" do
108
+ @tm.reifier = @a_reifier
109
+ @tm.reifier.should == @a_reifier
110
+ end
111
+ it "should remove a reifier if the identifier is nil or not given" do
112
+ @name.reifier = "test_reifier"
113
+ @name.reifier.should == @a_reifier
114
+ @name.reifier = nil
115
+ @name.reifier.should be_nil
116
+ @a_reifier.should have(1).names
117
+ @occ.reifier = "test_reifier"
118
+ @occ.reifier.should == @a_reifier
119
+ @occ.reifier = ()
120
+ @occ.reifier.should be_nil
121
+ @variant.reifier = "test_reifier"
122
+ @variant.reifier.should == @a_reifier
123
+ @variant.reifier = nil
124
+ @variant.reifier.should be_nil
125
+ @assoc.reifier = "test_reifier"
126
+ @assoc.reifier.should == @a_reifier
127
+ @assoc.reifier = ()
128
+ @assoc.reifier.should be_nil
129
+ @role.reifier = "test_reifier"
130
+ @role.reifier.should == @a_reifier
131
+ @role.reifier = nil
132
+ @role.reifier.should be_nil
133
+ @tm.reifier = "test_reifier"
134
+ @tm.reifier.should == @a_reifier
135
+ @tm.reifier = ()
136
+ @tm.reifier.should be_nil
137
+ end
138
+ it "should raise an error if the identifier referes to a Topic which already reifies another information item" do
139
+ @name.reifier = "test_reifier"
140
+ lambda{@occ.reifier = "test_reifier"}.should raise_error
141
+ end
142
+ end
143
+
144
+ describe "merging of two reifier" do
145
+ it "should merge two reifier if their reified constructs are merged" do
146
+ topic = @tm.get!("Hans_Peter")
147
+ name1 = topic.create_name("Hans")
148
+ name2 = topic.create_name("Peter")
149
+ name1.reifier = "ii:reifier1"
150
+ name2.reifier = "ii:reifier2"
151
+ name1.reifier.should == @tm.get("ii:reifier1")
152
+ name2.reifier.should == @tm.get("ii:reifier2")
153
+ @tm.get("ii:reifier1").should_not == @tm.get!("ii:reifier2")
154
+ topic.should have(2).names
155
+ name1.value = "Peter"
156
+ if implementation_for_spec == :sesametm
157
+ topic.should have(1).names
158
+ else
159
+ pending "cannot automerge unless engine is SesameTM" do
160
+ topic.should have(1).names
161
+ end
162
+ end
163
+ #puts @basis.tmsf.getFeature("http://tmapi.org/features/automerge")
164
+ end
165
+ end
166
+
167
+ end # of describe self
168
+ end # of module
@@ -0,0 +1,73 @@
1
+ # Copyright: Copyright 2009 Topic Maps Lab, University of Leipzig.
2
+ # License: Apache License, Version 2.0
3
+
4
+ require File.dirname(__FILE__) + '/../../../spec_helper'
5
+
6
+ module RTM::Role
7
+ describe self do
8
+ before(:each) do
9
+ @tm = get_used_tm_sys_tm
10
+ end
11
+ after(:each) do
12
+ @tm.close
13
+ end
14
+
15
+ describe "#parent" do
16
+ it "should give back the Association to which this Role belongs" do
17
+ topic = @tm.create_topic_by("Haus")
18
+ topic.should be_a_kind_of(RTM::Topic)
19
+ @tm.get("Haus").should be_a_kind_of(RTM::Topic)
20
+ topic_instance = @tm.create_topic_by("Weisses_Haus")
21
+ topic_instance.should be_a_kind_of RTM::Topic
22
+ @tm.get("Weisses_Haus").should be_a_kind_of(RTM::Topic)
23
+ testassoc = @tm.create_association("Haus-Nummer-Beziehung")
24
+ testrole = testassoc.create_role(topic, topic_instance) #TMAPI function
25
+ testassoc.should be_a_kind_of(RTM::Association)
26
+ testrole.should be_a_kind_of(RTM::Role)
27
+ testrole.parent.should == testassoc
28
+ end
29
+ end
30
+
31
+ describe "#player=" do
32
+ before(:each) do
33
+ assoc = @tm.create_association("mother_child")
34
+ @role = assoc.create_role("child","Hans")
35
+ @role.should be_a_kind_of RTM::Role
36
+ end
37
+ it "should set the player of the Role if identifier is a String" do
38
+ previous_player = @role.player
39
+ @role.player = "Tim"
40
+ @role.player.should_not == previous_player
41
+ @role.player.should == @tm.get("Tim")
42
+ end
43
+ it "should set the player of the Role if identifier is a Locator" do
44
+ previous_player = @role.player
45
+ @role.player = @tm.create_locator("Tim")
46
+ @role.player.should_not == previous_player
47
+ @role.player.should == @tm.get("Tim")
48
+ end
49
+ it "should set the player of the Role if identifier is a Topic" do
50
+ previous_player = @role.player
51
+ @role.player = @tm.get!("Tim")
52
+ @role.player.should_not == previous_player
53
+ @role.player.should == @tm.get("Tim")
54
+ end
55
+ end
56
+
57
+ describe "#remove" do
58
+ before(:each) do
59
+ @assoc = @tm.create_association("assoc")
60
+ @role1 = @assoc.create_role("r1","t1")
61
+ @role2 = @assoc.create_role("r2","t2")
62
+ end
63
+ it "should remove this Role from the container (Association)" do
64
+ @assoc.should have(2).children
65
+ @role1.remove
66
+ @assoc.should have(1).children
67
+ @role2.remove
68
+ @assoc.should have(0).children
69
+ end
70
+ end
71
+
72
+ end # of describe self
73
+ end #of module
@@ -0,0 +1,441 @@
1
+ # Copyright: Copyright 2009 Topic Maps Lab, University of Leipzig.
2
+ # License: Apache License, Version 2.0
3
+
4
+ require File.dirname(__FILE__) + '/../../../spec_helper'
5
+
6
+ module RTM::Scoped
7
+ describe self do
8
+ before(:each) do
9
+ @tm = get_used_tm_sys_tm
10
+ end
11
+ after(:each) do
12
+ @tm.close
13
+ end
14
+ describe "#scope" do
15
+ before(:each) do
16
+ @topic = @tm.get!("Hans")
17
+ @name1 = @topic.create_name("Hans")
18
+ @name2 = @topic.create_name("first", "Hansi", ["home"])
19
+ @occ1 = @topic.create_occurrence("birthyear","1982")
20
+ @occ2 = @topic.create_occurrence("birthplace","Berlin",:scope => ["german"])
21
+ @variant1 = @name1.create_variant("Bubi",["endearment"])
22
+ @variant2 = @name2.create_variant("Bubi",["home","endearment"])
23
+ @assoc1 = @tm.create_association("birth")
24
+ @assoc2 = @tm.create_association("home",["german"])
25
+ end
26
+ it "should give back a empty set if no scope is set" do
27
+ @name1.should have(0).scope
28
+ @name1.should have(0).themes
29
+ @occ1.should have(0).scope
30
+ @occ1.should have(0).themes
31
+ @assoc1.should have(0).scope
32
+ @assoc1.should have(0).themes
33
+ end
34
+ it "should give back a container" do
35
+ @name1.scope.should respond_to(:each)
36
+ @name1.scope.should_not be_a_kind_of String
37
+ @name2.scope.should respond_to(:each)
38
+ @name2.scope.should_not be_a_kind_of String
39
+ @occ1.scope.should respond_to(:each)
40
+ @occ1.scope.should_not be_a_kind_of String
41
+ @occ2.scope.should respond_to(:each)
42
+ @occ2.scope.should_not be_a_kind_of String
43
+ @variant1.scope.should respond_to(:each)
44
+ @variant1.scope.should_not be_a_kind_of String
45
+ @variant2.scope.should respond_to(:each)
46
+ @variant2.scope.should_not be_a_kind_of String
47
+ @assoc1.scope.should respond_to(:each)
48
+ @assoc1.scope.should_not be_a_kind_of String
49
+ @assoc2.scope.should respond_to(:each)
50
+ @assoc2.scope.should_not be_a_kind_of String
51
+ end
52
+ it "should give back the topics in the scope" do
53
+ @name2.should have(1).scope
54
+ @occ2.should have(1).scope
55
+ @variant2.should have(2).scope
56
+ @assoc2.should have(1).scope
57
+ @name2.should have(1).themes
58
+ @occ2.should have(1).themes
59
+ @variant2.should have(2).themes
60
+ @assoc2.should have(1).themes
61
+ end
62
+ it "should give back RTM::Topics" do
63
+ @name2.scope.each{|t| t.should be_a_kind_of RTM::Topic}
64
+ @occ2.scope.each{|t| t.should be_a_kind_of RTM::Topic}
65
+ @variant2.scope.each{|t| t.should be_a_kind_of RTM::Topic}
66
+ @assoc2.scope.each{|t| t.should be_a_kind_of RTM::Topic}
67
+ end
68
+ it "should be told, if a theme is in the returned scope or not" do
69
+ @name2.scope.include?(@tm.get("something"))
70
+ @occ2.scope.include?(@tm.get("something"))
71
+ @variant2.scope.include?(@tm.get("something"))
72
+ @assoc2.scope.include?(@tm.get("something"))
73
+ ###
74
+ existing_topic = @tm.get!("existing")
75
+ @name2.scope.should_not include(existing_topic)
76
+ @occ2.scope.should_not include(existing_topic)
77
+ @variant2.scope.should_not include(existing_topic)
78
+ @assoc2.scope.should_not include(existing_topic)
79
+ ###
80
+ #p @name2.scope.inspect
81
+ @name2.scope.should include(@tm.get("home"))
82
+ @occ2.scope.should include(@tm.get("german"))
83
+ @variant2.scope.should include(@tm.get("endearment"))
84
+ @assoc2.scope.should include(@tm.get("german"))
85
+ end
86
+ end
87
+
88
+ describe "#add_theme" do
89
+ before(:each) do
90
+ @topic = @tm.get!("Hans")
91
+ @name1 = @topic.create_name("Hans")
92
+ @name2 = @topic.create_name("first", "Hansi", ["home"])
93
+ @occ1 = @topic.create_occurrence("birthyear","1982")
94
+ @occ2 = @topic.create_occurrence("birthplace","Berlin",:scope => ["german"])
95
+ @variant1 = @name1.create_variant("Bubi",["endearment"])
96
+ @variant2 = @name2.create_variant("Bubi",["home","endearment"])
97
+ @assoc1 = @tm.create_association("birth")
98
+ @assoc2 = @tm.create_association("home",["german"])
99
+ end
100
+ it "should add one Topic to the scope of a Name" do
101
+ @name1.should be_a_kind_of RTM::Name
102
+ @name2.should be_a_kind_of RTM::Name
103
+ ###
104
+ @name1.scope.should be_empty
105
+ @name1.add_theme("test_scope_1")
106
+ @name1.should have(1).themes
107
+ @name1.add_theme(@tm.create_locator("test_scope_2"))
108
+ @name1.should have(2).themes
109
+ @name1.add_theme(@tm.get!("test_scope_3"))
110
+ @name1.should have(3).themes
111
+ @name1.scope.should include @tm.get("test_scope_1"), @tm.get("test_scope_2"), @tm.get("test_scope_3")
112
+ ###
113
+ @name2.should have(1).themes
114
+ @name2.scope.should include @tm.get("home")
115
+ @name2.add_theme("test_scope_1")
116
+ @name2.should have(2).themes
117
+ @name2.add_theme(@tm.create_locator("test_scope_2"))
118
+ @name2.should have(3).themes
119
+ @name2.add_theme(@tm.get!("test_scope_3"))
120
+ @name2.should have(4).themes
121
+ @name2.scope.should include @tm.get("home"), @tm.get("test_scope_1"), @tm.get("test_scope_2"), @tm.get("test_scope_3")
122
+ end
123
+ it "should add one Topic to the scope of an Occurrence" do
124
+ @occ1.should be_a_kind_of RTM::Occurrence
125
+ @occ2.should be_a_kind_of RTM::Occurrence
126
+ ###
127
+ @occ1.scope.should be_empty
128
+ @occ1.add_theme("test_scope_1")
129
+ @occ1.should have(1).themes
130
+ @occ1.add_theme(@tm.create_locator("test_scope_2"))
131
+ @occ1.should have(2).themes
132
+ @occ1.add_theme(@tm.get!("test_scope_3"))
133
+ @occ1.should have(3).themes
134
+ @occ1.scope.should include @tm.get("test_scope_1"), @tm.get("test_scope_2"), @tm.get("test_scope_3")
135
+ ###
136
+ @occ2.should have(1).themes
137
+ @occ2.scope.should include @tm.get("german")
138
+ @occ2.add_theme("test_scope_1")
139
+ @occ2.should have(2).themes
140
+ @occ2.add_theme(@tm.create_locator("test_scope_2"))
141
+ @occ2.should have(3).themes
142
+ @occ2.add_theme(@tm.get!("test_scope_3"))
143
+ @occ2.should have(4).themes
144
+ @occ2.scope.should include @tm.get("german"), @tm.get("test_scope_1"), @tm.get("test_scope_2"), @tm.get("test_scope_3")
145
+ end
146
+ it "should add one Topic to the scope of a Variant" do
147
+ @variant1.should be_a_kind_of RTM::Variant
148
+ @variant2.should be_a_kind_of RTM::Variant
149
+ ###
150
+ @variant1.should have(1).themes
151
+ @variant1.scope.should include @tm.get("endearment")
152
+ @variant1.add_theme("test_scope_1")
153
+ @variant1.should have(2).themes
154
+ @variant1.add_theme(@tm.create_locator("test_scope_2"))
155
+ @variant1.should have(3).themes
156
+ @variant1.add_theme(@tm.get!("test_scope_3"))
157
+ @variant1.should have(4).themes
158
+ @variant1.scope.should include @tm.get("endearment"), @tm.get("test_scope_1"), @tm.get("test_scope_2"), @tm.get("test_scope_3")
159
+ ###
160
+ @variant2.should have(2).themes
161
+ @variant2.scope.should include @tm.get("home"), @tm.get("endearment")
162
+ @variant2.add_theme("test_scope_1")
163
+ @variant2.should have(3).themes
164
+ @variant2.add_theme(@tm.create_locator("test_scope_2"))
165
+ @variant2.should have(4).themes
166
+ @variant2.add_theme(@tm.get!("test_scope_3"))
167
+ @variant2.should have(5).themes
168
+ @variant2.scope.should include @tm.get("home"), @tm.get("endearment"), @tm.get("test_scope_1"), @tm.get("test_scope_2"), @tm.get("test_scope_3")
169
+ end
170
+ it "should add one Topic to the scope of an Association" do
171
+ @assoc1.should be_a_kind_of RTM::Association
172
+ @assoc2.should be_a_kind_of RTM::Association
173
+ ###
174
+ @assoc1.scope.should be_empty
175
+ @assoc1.add_theme("test_scope_1")
176
+ @assoc1.should have(1).themes
177
+ @assoc1.add_theme(@tm.create_locator("test_scope_2"))
178
+ @assoc1.should have(2).themes
179
+ @assoc1.add_theme(@tm.get!("test_scope_3"))
180
+ @assoc1.should have(3).themes
181
+ @assoc1.scope.should include @tm.get("test_scope_1"), @tm.get("test_scope_2"), @tm.get("test_scope_3")
182
+ ###
183
+ @assoc2.should have(1).themes
184
+ @assoc2.scope.should include @tm.get("german")
185
+ @assoc2.add_theme("test_scope_1")
186
+ @assoc2.should have(2).themes
187
+ @assoc2.add_theme(@tm.create_locator("test_scope_2"))
188
+ @assoc2.should have(3).themes
189
+ @assoc2.add_theme(@tm.get!("test_scope_3"))
190
+ @assoc2.should have(4).themes
191
+ @assoc2.scope.should include @tm.get("german"), @tm.get("test_scope_1"), @tm.get("test_scope_2"), @tm.get("test_scope_3")
192
+ end
193
+ it "should raise an error if identifier is not a Topic or Topic-Reference" do
194
+ lambda{@name1.add_theme(["test_scope"])}.should raise_error
195
+ lambda{@occ1.add_theme(["test_scope"])}.should raise_error
196
+ lambda{@variant1.add_theme(["test_scope"])}.should raise_error
197
+ lambda{@association1.add_theme(["test_scope"])}.should raise_error
198
+ end
199
+ it "should raise an error if argument consists of several identifiers" do
200
+ lambda{@name1.add_theme("testscope1", "testscope2")}.should raise_error
201
+ end
202
+ end
203
+
204
+ describe "#add_themes" do
205
+ before(:each) do
206
+ @topic = @tm.get!("Hans")
207
+ end
208
+ it "should not add a theme if no argument is given" do
209
+ @name1 = @topic.create_name("Hans")
210
+ @name1.should have(0).themes
211
+ @name1.add_themes()
212
+ @name1.should have(0).themes
213
+ ###
214
+ @name2 = @topic.create_name("first", "Hansi", ["home"])
215
+ @name2.should have(1).themes
216
+ @name2.add_themes()
217
+ @name2.should have(1).themes
218
+ end
219
+ it "should add one theme if one argument is given" do
220
+ # adding one
221
+ @name1 = @topic.create_name("Hans")
222
+ @name1.should have(0).themes
223
+ @name1.add_themes("home")
224
+ @name1.should have(1).themes
225
+ # adding another
226
+ @name2 = @topic.create_name("first", "Hansi", ["home"])
227
+ @name2.should have(1).themes
228
+ @name2.add_themes("mom")
229
+ @name2.should have(2).themes
230
+ # adding t2 again -> should still have 2 themes
231
+ @name2.add_themes("home")
232
+ @name2.should have(2).themes
233
+ end
234
+ it "should add several themes if several arguments are given" do
235
+ @name1 = @topic.create_name("Hans")
236
+ @name1.should have(0).themes
237
+ @name1.add_themes("home", "mom")
238
+ @name1.should have(2).themes
239
+ end
240
+ it "should add several themes if several arrays with arguments are given" do
241
+ @name1 = @topic.create_name("Hans")
242
+ @name1.should have(0).themes
243
+ @name1.add_themes(["home", "mom"], "testscope")
244
+ @name1.should have(3).themes
245
+ end
246
+ it "should raise an error if a hash is given" do
247
+ @name1 = @topic.create_name("Hans")
248
+ @name1.should have(0).themes
249
+ lambda{@name1.add_themes("x" => "y")}.should raise_error
250
+ end
251
+ end
252
+
253
+ describe "#remove_theme" do
254
+ before(:each) do
255
+ @topic = @tm.get!("Hans")
256
+ @name = @topic.create_name("first", "Hansi", ["home","mom"])
257
+ @occ = @topic.create_occurrence("birthplace","Berlin",:scope => ["german","english"])
258
+ @variant = @name.create_variant("Bubi",["endearment"])
259
+ @assoc = @tm.create_association("home",["german","english"])
260
+ @existing_dummy = @tm.get!("existing_dummy")
261
+ end
262
+ it "should remove a Topic from the scope of a Name" do
263
+ @name.should be_a_kind_of RTM::Name
264
+ ###
265
+ @name.should have(2).themes
266
+ @name.scope.should include @tm.get("home"), @tm.get("mom")
267
+ @name.remove_theme("home")
268
+ @name.should have(1).themes
269
+ @name.scope.should include @tm.get("mom")
270
+ @name.remove_theme("mom")
271
+ @name.scope.should be_empty
272
+ @name.remove_theme("mom")
273
+ @name.scope.should be_empty
274
+ end
275
+ it "should remove a Topic from the scope of an Occurrence" do
276
+ @occ.should be_a_kind_of RTM::Occurrence
277
+ ###
278
+ @occ.should have(2).themes
279
+ @occ.scope.should include @tm.get("german"), @tm.get("english")
280
+ @occ.remove_theme("german")
281
+ @occ.should have(1).themes
282
+ @occ.scope.should include @tm.get("english")
283
+ @occ.remove_theme("english")
284
+ @occ.scope.should be_empty
285
+ @occ.remove_theme("english")
286
+ @occ.scope.should be_empty
287
+ end
288
+ it "should remove a Topic from the scope of a Variant" do
289
+ @variant.should be_a_kind_of RTM::Variant
290
+ ###
291
+ @variant.should have(3).themes
292
+ @variant.scope.should include(@tm.get("home"), @tm.get("mom"), @tm.get("endearment"))
293
+ @variant.remove_theme("endearment")
294
+ @variant.should have(2).themes
295
+ @variant.scope.should include @tm.get("home"), @tm.get("mom")
296
+ @variant.should be_a_kind_of RTM::Variant
297
+ end
298
+ it "should not remove a theme from the scope of an Variant is removed that occurrs in the scope of its parent Name also" do
299
+ @variant.should be_a_kind_of RTM::Variant
300
+ ###
301
+ @variant.should have(3).themes
302
+ @variant.scope.should include(@tm.get("home"), @tm.get("mom"), @tm.get("endearment"))
303
+ @variant.remove_theme("home")
304
+ @variant.should have(3).themes
305
+ @variant.scope.should include(@tm.get("home"), @tm.get("mom"), @tm.get("endearment"))
306
+ @variant.should be_a_kind_of RTM::Variant
307
+ end
308
+ it "should remove a Topic from the scope of an Association" do
309
+ @assoc.should be_a_kind_of RTM::Association
310
+ ###
311
+ @assoc.should have(2).themes
312
+ @assoc.scope.should include @tm.get("german"), @tm.get("english")
313
+ @assoc.remove_theme("german")
314
+ @assoc.should have(1).themes
315
+ @assoc.scope.should include @tm.get("english")
316
+ @assoc.remove_theme("english")
317
+ @assoc.scope.should be_empty
318
+ @assoc.remove_theme("english")
319
+ @assoc.scope.should be_empty
320
+ end
321
+ it "should not fail if the Topic_to_be_removed is not in the scope" do
322
+ @name.should have(2).themes
323
+ @name.remove_theme("dummy")
324
+ @name.remove_theme("existing_dummy")
325
+ @name.should have(2).themes
326
+ end
327
+ it "should raise an error if argument consists of several identifiers" do
328
+ lambda{@name.remove_theme("testscope1", "testscope2")}.should raise_error
329
+ end
330
+ end
331
+
332
+ describe "#remove_themes" do
333
+ before(:each) do
334
+ @topic = @tm.get!("Hans")
335
+ # @name1 = @topic.create_name("Hans")
336
+ # @name2 = @topic.create_name("first", "Hansi", ["home"])
337
+ # @occ1 = @topic.create_occurrence("birthyear","1982")
338
+ # @occ2 = @topic.create_occurrence("birthplace","Berlin",:scope => ["german"])
339
+ # @variant1 = @name1.create_variant("Bubi",["endearment"])
340
+ # @variant2 = @name2.create_variant("Bubi",["home","endearment"])
341
+ # @assoc1 = @tm.create_association("birth")
342
+ # @assoc2 = @tm.create_association("home",["german"])
343
+ end
344
+ it "should not remove a theme if no argument is given" do
345
+ @name1 = @topic.create_name("Hans")
346
+ @name2 = @topic.create_name("first", "Hansi", ["home"])
347
+ @name1.should have(0).themes
348
+ @name1.remove_themes()
349
+ @name1.should have(0).themes
350
+ @name2.should have(1).themes
351
+ @name2.remove_themes()
352
+ @name2.should have(1).themes
353
+ end
354
+ it "should remove one theme if one argument is given" do
355
+ @name2 = @topic.create_name("first", "Hansi", ["home"])
356
+ @variant2 = @name2.create_variant("Bubi",["home","endearment"])
357
+ # removing one
358
+ @variant2.should have(2).themes
359
+ @variant2.remove_themes("endearment")
360
+ @variant2.should have(1).themes
361
+ # removing a non existing
362
+ @name2 = @topic.create_name("first", "Hansi", ["home"])
363
+ @name2.should have(1).themes
364
+ @name2.remove_theme("non_existing")
365
+ end
366
+ it "should remove a theme that occurs in a variant also (given a Topic)" do
367
+ @name2 = @topic.create_name("first", "Hansi", ["home"])
368
+ @variant2 = @name2.create_variant("Bubi",["home","endearment"])
369
+ @name2.should have(1).themes
370
+ @name2.themes.should include(@tm.get("home"))
371
+ @variant2.should have(2).themes
372
+ @variant2.themes.should include(@tm.get("home"), @tm.get("endearment"))
373
+ @name2.remove_theme(@tm.get("home"))
374
+ @name2.should have(0).themes
375
+ if implementation_for_spec == :tinytim
376
+ @variant2.should have(2).themes
377
+ elsif implementation_for_spec == :ontopia
378
+ @variant2.should have(1).themes
379
+ else
380
+ ### ???
381
+ @variant2.should have(2).themes
382
+ end
383
+ end
384
+ it "should remove a theme that occurs in a variant also" do
385
+ @name2 = @topic.create_name("first", "Hansi", ["home"])
386
+ @variant2 = @name2.create_variant("Bubi",["home","endearment"])
387
+ @name2.should have(1).themes
388
+ @name2.themes.should include(@tm.get("home"))
389
+ @variant2.should have(2).themes
390
+ @variant2.themes.should include(@tm.get("home"), @tm.get("endearment"))
391
+ @name2.remove_theme("home")
392
+ @name2.should have(0).themes
393
+ if implementation_for_spec == :tinytim
394
+ @variant2.should have(2).themes
395
+ elsif implementation_for_spec == :ontopia
396
+ @variant2.should have(1).themes
397
+ else
398
+ ### ???
399
+ @variant2.should have(2).themes
400
+ end
401
+ end
402
+ it "should remove several themes if several arguments are given" do
403
+ @name2 = @topic.create_name("first", "Hansi", ["home","endearment","mom"])
404
+ @name2.should have(3).themes
405
+ @name2.remove_themes("home", "mom", "not_existing")
406
+ @name2.should have(1).themes
407
+ end
408
+ it "should remove several themes if several arrays with arguments are given" do
409
+ @name2 = @topic.create_name("first", "Hansi", ["home","endearment","mom"])
410
+ @name2.should have(3).themes
411
+ @name2.remove_themes("home", ["mom", "not_existing"])
412
+ @name2.should have(1).themes
413
+ end
414
+ it "should raise an error if a hash is given" do
415
+ @name2 = @topic.create_name("first", "Hansi", ["home"])
416
+ lambda{@name1.remove_themes("x" => "y")}.should raise_error
417
+ end
418
+ end
419
+
420
+ describe "#scope=" do
421
+ before(:each) do
422
+ @topic = @tm.get!("Hans")
423
+ @name = @topic.create_name("first", "Hansi", ["home","mom"])
424
+ @occ = @topic.create_occurrence("birthplace","Berlin",:scope => ["german","english"])
425
+ @variant = @name.create_variant("Bubi",["endearment"])
426
+ @assoc = @tm.create_association("home",["german","english"])
427
+ @existing_dummy = @tm.get!("existing_dummy")
428
+ end
429
+ it "should set the scope to empty upon request" do
430
+ @name.should be_a_kind_of RTM::Name
431
+ @name.should have(2).themes
432
+ pending
433
+ @name.scope = []
434
+ @name.should have(0).themes
435
+ end
436
+ end
437
+ end
438
+ end
439
+
440
+
441
+