reality-model 1.0.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.
@@ -0,0 +1,225 @@
1
+ require File.expand_path('../helper', __FILE__)
2
+
3
+ class Reality::Model::TestRepository < Reality::Model::TestCase
4
+ def test_basic_operation
5
+ repository = Reality::Model::Repository.new(:MyTypeSystem, MyContainer)
6
+
7
+ assert_equal repository.key, :MyTypeSystem
8
+ assert_equal repository.model_container, MyContainer
9
+ assert_equal repository.instance_container, MyContainer
10
+ assert_equal repository.log_container, MyContainer
11
+ assert_equal repository.facet_container, nil
12
+ assert_equal repository.faceted?, false
13
+ assert_equal repository.model_element_keys, []
14
+ assert_equal repository.model_elements, []
15
+ assert_equal repository.model_elements_by_container(:entity), []
16
+
17
+ assert_equal repository.model_element_by_key?(:entity), false
18
+
19
+ assert_model_error("Can not find model element 'entity' in repository 'MyTypeSystem'.") do
20
+ repository.model_element_by_key(:entity)
21
+ end
22
+
23
+ element = repository.model_element(:entity)
24
+
25
+ assert_equal repository.model_element_by_key?(:entity), true
26
+ assert_equal repository.model_element_keys, ['entity']
27
+ assert_equal repository.model_elements, [element]
28
+ assert_equal repository.model_elements_by_container(:entity), []
29
+ end
30
+
31
+ def test_validate_options
32
+ assert_model_error("Unknown option ':x' passed to create repository") do
33
+ Reality::Model::Repository.new(:MyTypeSystem, MyContainer, :x => 1)
34
+ end
35
+
36
+ assert_model_error('Unknown options [:x, :z] passed to create repository') do
37
+ Reality::Model::Repository.new(:MyTypeSystem, MyContainer, :x => 1, :z => 1)
38
+ end
39
+ end
40
+
41
+ module MyLogContainer
42
+ end
43
+
44
+ module MyFacetContainer
45
+ end
46
+
47
+ module MyInstanceContainer
48
+ end
49
+
50
+ def test_create_no_defaults
51
+ repository = Reality::Model::Repository.new(:MyTypeSystem,
52
+ MyContainer,
53
+ :instance_container => MyInstanceContainer,
54
+ :log_container => MyLogContainer,
55
+ :facet_container => MyFacetContainer)
56
+
57
+ assert_equal repository.key, :MyTypeSystem
58
+ assert_equal repository.model_container, MyContainer
59
+ assert_equal repository.instance_container, MyInstanceContainer
60
+ assert_equal repository.log_container, MyLogContainer
61
+ assert_equal repository.facet_container, MyFacetContainer
62
+ assert_equal repository.faceted?, true
63
+ end
64
+
65
+ def test_yield
66
+ repository = Reality::Model::Repository.new(:MyTypeSystem, MyContainer) do |repo|
67
+ repo.model_element(:entity)
68
+ end
69
+
70
+ assert_equal repository.locked?, true
71
+
72
+ assert_equal repository.key, :MyTypeSystem
73
+ assert_equal repository.model_element_by_key?(:entity), true
74
+ end
75
+
76
+ def test_register_duplicates
77
+ repository = Reality::Model::Repository.new(:MyTypeSystem, MyContainer)
78
+
79
+ repository.model_element(:entity)
80
+
81
+ assert_equal repository.model_element_by_key?(:entity), true
82
+
83
+ assert_model_error("Attempting to redefine model element 'MyTypeSystem.entity'") do
84
+ repository.model_element(:entity)
85
+ end
86
+ end
87
+
88
+ def test_model_elements_by_container
89
+ repository = Reality::Model::Repository.new(:MyTypeSystem, MyContainer)
90
+
91
+ repository.model_element(:entity)
92
+
93
+ assert_equal repository.model_elements_by_container(:entity), []
94
+
95
+ element2 = repository.model_element(:attribute, :entity)
96
+ element3 = repository.model_element(:view, :entity)
97
+
98
+ assert_equal repository.model_elements_by_container(:entity), [element2, element3]
99
+ end
100
+
101
+ def test_lock
102
+ repository = Reality::Model::Repository.new(:Domgen, MyContainer)
103
+
104
+ assert_equal repository.locked?, false
105
+
106
+ repository.model_element(:entity)
107
+ repository.model_element(:attribute, :entity)
108
+
109
+ assert_equal repository.model_elements.size, 2
110
+
111
+ assert_equal false, MyContainer.const_defined?(:Entity)
112
+ assert_equal false, MyContainer.const_defined?(:Attribute)
113
+
114
+ repository.lock!
115
+
116
+ assert_equal true, MyContainer.const_defined?(:Entity)
117
+ assert_equal true, MyContainer.const_defined?(:Attribute)
118
+
119
+ assert_equal repository.locked?, true
120
+
121
+ assert_model_error("Attempting to define model element 'Domgen.view' when repository is locked.") do
122
+ repository.model_element(:view, :entity)
123
+ end
124
+
125
+ assert_model_error("Attempting to lock repository 'Domgen' when repository is already locked.") do
126
+ repository.lock!
127
+ end
128
+ end
129
+
130
+ def test_define_ruby_classes
131
+ repository = Reality::Model::Repository.new(:Resgen, MyContainer)
132
+ Reality::Model::ModelElement.new(repository, :project, nil, {})
133
+ Reality::Model::ModelElement.new(repository, :bundle, :project, {})
134
+
135
+ assert_equal false, MyContainer.const_defined?(:Project)
136
+ assert_equal false, MyContainer.const_defined?(:Bundle)
137
+
138
+ repository.send(:define_ruby_classes)
139
+
140
+ assert_equal true, MyContainer.const_defined?(:Project)
141
+ assert_equal true, MyContainer.const_defined?(:Bundle)
142
+ end
143
+
144
+ module MyInstanceContainer2
145
+ end
146
+
147
+ def test_lock_called_if_block_supplied_to_constructor
148
+ assert_equal false, MyContainer.const_defined?(:Project)
149
+ assert_equal false, MyContainer.const_defined?(:Bundle)
150
+
151
+ repository = Reality::Model::Repository.new(:Resgen, MyContainer, :instance_container => MyInstanceContainer2) do |r|
152
+ r.model_element(:project)
153
+ r.model_element(:bundle, :project)
154
+ end
155
+
156
+ assert_equal true, repository.locked?
157
+
158
+ assert_equal true, MyContainer.const_defined?(:Project)
159
+ assert_equal true, MyContainer.const_defined?(:Bundle)
160
+
161
+ assert_true MyInstanceContainer2.public_methods.include?(:projects)
162
+ assert_true MyInstanceContainer2.public_methods.include?(:project_by_name)
163
+ assert_true MyInstanceContainer2.public_methods.include?(:project_by_name?)
164
+ assert_true MyInstanceContainer2.public_methods.include?(:project)
165
+ end
166
+
167
+ module MyInstanceContainer3
168
+ end
169
+
170
+ def test_define_top_level_instance_accessors
171
+
172
+ assert_false MyInstanceContainer3.public_methods.include?(:projects)
173
+ assert_false MyInstanceContainer3.public_methods.include?(:project_by_name)
174
+ assert_false MyInstanceContainer3.public_methods.include?(:project_by_name?)
175
+ assert_false MyInstanceContainer3.public_methods.include?(:project)
176
+
177
+ repository = Reality::Model::Repository.new(:Resgen, MyContainer, :instance_container => MyInstanceContainer3)
178
+ Reality::Model::ModelElement.new(repository, :project, nil, {})
179
+
180
+ repository.send(:define_top_level_instance_accessors)
181
+
182
+ assert_true MyInstanceContainer3.public_methods.include?(:projects)
183
+ assert_true MyInstanceContainer3.public_methods.include?(:project_by_name)
184
+ assert_true MyInstanceContainer3.public_methods.include?(:project_by_name?)
185
+ assert_true MyInstanceContainer3.public_methods.include?(:project)
186
+ end
187
+
188
+ module MyFacetManager
189
+ extend Reality::Facets::FacetContainer
190
+ end
191
+
192
+ def test_define_facet_targets
193
+ assert_equal MyFacetManager.target_manager.target_keys, []
194
+
195
+ Reality::Model::Repository.new(:Resgen, MyContainer, :facet_container => MyFacetManager) do |r|
196
+ r.model_element(:project)
197
+ r.model_element(:bundle, :project, :inverse_access_method => :bnd, :access_method => :bnds)
198
+ r.model_element(:image, :bundle)
199
+ end
200
+
201
+ assert_equal MyFacetManager.target_manager.target_keys, [:project, :bundle, :image]
202
+
203
+ target1 = MyFacetManager.target_manager.target_by_key(:project)
204
+ target2 = MyFacetManager.target_manager.target_by_key(:bundle)
205
+ target3 = MyFacetManager.target_manager.target_by_key(:image)
206
+
207
+ assert_equal :project, target1.inverse_access_method
208
+ assert_equal :projects, target1.access_method
209
+ assert_equal nil, target1.container_key
210
+ assert_equal :project, target1.key
211
+ assert_equal Reality::Model::TestCase::MyContainer::Project, target1.model_class
212
+
213
+ assert_equal :bnd, target2.inverse_access_method
214
+ assert_equal :bnds, target2.access_method
215
+ assert_equal :project, target2.container_key
216
+ assert_equal :bundle, target2.key
217
+ assert_equal Reality::Model::TestCase::MyContainer::Bundle, target2.model_class
218
+
219
+ assert_equal :image, target3.inverse_access_method
220
+ assert_equal :images, target3.access_method
221
+ assert_equal :bundle, target3.container_key
222
+ assert_equal :image, target3.key
223
+ assert_equal Reality::Model::TestCase::MyContainer::Image, target3.model_class
224
+ end
225
+ end
metadata ADDED
@@ -0,0 +1,147 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: reality-model
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Peter Donald
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-12-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: reality-core
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 1.7.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 1.7.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: reality-naming
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 1.6.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 1.6.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: reality-orderedhash
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 1.0.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 1.0.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: reality-facets
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: 1.3.0
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: 1.3.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: minitest
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '='
74
+ - !ruby/object:Gem::Version
75
+ version: 5.9.1
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '='
81
+ - !ruby/object:Gem::Version
82
+ version: 5.9.1
83
+ - !ruby/object:Gem::Dependency
84
+ name: test-unit
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '='
88
+ - !ruby/object:Gem::Version
89
+ version: 3.1.5
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '='
95
+ - !ruby/object:Gem::Version
96
+ version: 3.1.5
97
+ description: Utility classes for defining a domain model.
98
+ email: peter@realityforge.org
99
+ executables: []
100
+ extensions: []
101
+ extra_rdoc_files: []
102
+ files:
103
+ - ".gitattributes"
104
+ - ".gitignore"
105
+ - ".ruby-version"
106
+ - ".travis.yml"
107
+ - CONTRIBUTING.md
108
+ - Gemfile
109
+ - LICENSE
110
+ - README.md
111
+ - Rakefile
112
+ - lib/reality/model.rb
113
+ - lib/reality/model/core.rb
114
+ - lib/reality/model/model_element.rb
115
+ - lib/reality/model/repository.rb
116
+ - reality-model.gemspec
117
+ - test/helper.rb
118
+ - test/test_model_element.rb
119
+ - test/test_repository.rb
120
+ homepage: https://github.com/realityforge/reality-model
121
+ licenses: []
122
+ metadata: {}
123
+ post_install_message:
124
+ rdoc_options:
125
+ - "--line-numbers"
126
+ - "--inline-source"
127
+ - "--title"
128
+ - reality-model
129
+ require_paths:
130
+ - lib
131
+ required_ruby_version: !ruby/object:Gem::Requirement
132
+ requirements:
133
+ - - ">="
134
+ - !ruby/object:Gem::Version
135
+ version: '0'
136
+ required_rubygems_version: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - ">="
139
+ - !ruby/object:Gem::Version
140
+ version: '0'
141
+ requirements: []
142
+ rubyforge_project:
143
+ rubygems_version: 2.5.1
144
+ signing_key:
145
+ specification_version: 4
146
+ summary: Utility classes for defining a domain model.
147
+ test_files: []