reality-facets 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,196 @@
1
+ require File.expand_path('../../helper', __FILE__)
2
+
3
+ class Reality::Facets::TestTargetManager < Reality::TestCase
4
+
5
+ class Unused < Reality.base_element(:name => true)
6
+ end
7
+
8
+ class DataModule < Reality.base_element(:name => true, :container_key => :repository)
9
+ end
10
+
11
+ class Repository < Reality.base_element(:name => true)
12
+ def data_module(name, options = {}, &block)
13
+ data_module_map[name.to_s] = DataModule.new(self, name, options, &block)
14
+ end
15
+
16
+ def data_modules
17
+ data_module_map.values
18
+ end
19
+
20
+ def data_module_map
21
+ @data_module_map ||= {}
22
+ end
23
+ end
24
+
25
+ class Fragment < Reality.base_element(:name => true, :container_key => :component)
26
+ end
27
+
28
+ class Component < Reality.base_element(:name => true, :container_key => :project)
29
+ def fragment(name, options = {}, &block)
30
+ fragment_map[name.to_s] = Component.new(self, name, options, &block)
31
+ end
32
+
33
+ def fragments
34
+ fragment_map.values
35
+ end
36
+
37
+ def fragment_map
38
+ @fragment_map ||= {}
39
+ end
40
+ end
41
+
42
+ class Project < Reality.base_element(:name => true)
43
+ def component(name, options = {}, &block)
44
+ component_map[name.to_s] = Component.new(self, name, options, &block)
45
+ end
46
+
47
+ def components
48
+ component_map.values
49
+ end
50
+
51
+ def component_map
52
+ @component_map ||= {}
53
+ end
54
+ end
55
+
56
+ def test_target
57
+ target_manager = Reality::Facets::TargetManager.new(TestFacetContainer)
58
+ target1 = Reality::Facets::Target.new(target_manager, Repository, :repository, nil, {})
59
+
60
+ assert_equal target_manager, target1.target_manager
61
+ assert_equal Repository, target1.model_class
62
+ assert_equal :repository, target1.key
63
+ assert_equal nil, target1.container_key
64
+ assert_equal :repositories, target1.access_method
65
+ assert_equal :repository, target1.inverse_access_method
66
+ assert_equal 'Reality::TestCase::TestFacetContainer::FacetDefinitions::RepositoryExtension', target1.extension_module.name
67
+
68
+ target2 = Reality::Facets::Target.new(target_manager, DataModule, :data_module, :repository, {})
69
+
70
+ assert_equal target_manager, target2.target_manager
71
+ assert_equal DataModule, target2.model_class
72
+ assert_equal :data_module, target2.key
73
+ assert_equal :repository, target2.container_key
74
+ assert_equal :data_modules, target2.access_method
75
+ assert_equal :data_module, target2.inverse_access_method
76
+ assert_equal 'Reality::TestCase::TestFacetContainer::FacetDefinitions::DataModuleExtension', target2.extension_module.name
77
+
78
+ target1 = Reality::Facets::Target.new(target_manager, Project, :project, nil, :access_method => :project_set, :inverse_access_method => 'prj')
79
+
80
+ assert_equal target_manager, target1.target_manager
81
+ assert_equal Project, target1.model_class
82
+ assert_equal :project, target1.key
83
+ assert_equal nil, target1.container_key
84
+ assert_equal :project_set, target1.access_method
85
+ assert_equal :prj, target1.inverse_access_method
86
+ assert_equal 'Reality::TestCase::TestFacetContainer::FacetDefinitions::ProjectExtension', target1.extension_module.name
87
+
88
+ assert_raise_message('Attempting to redefine target project') { Reality::Facets::Target.new(target_manager, Project, :project, nil, {}) }
89
+
90
+ assert_raise_message("Target 'foo' defines container as 'bar' but no such target exists.") { Reality::Facets::Target.new(target_manager, Unused, :foo, :bar, {}) }
91
+ end
92
+
93
+ def test_target_manager_basic_operation
94
+
95
+ target_manager = Reality::Facets::TargetManager.new(TestFacetContainer)
96
+
97
+ assert_equal false, target_manager.is_target_valid?(:project)
98
+ assert_equal [], target_manager.target_keys
99
+ assert_equal false, target_manager.target_by_key?(:project)
100
+
101
+ assert_raise_message("Can not find target with model class 'Reality::Facets::TestTargetManager::Project'") { target_manager.target_by_model_class(Project) }
102
+
103
+ target_manager.target(Project, :project)
104
+
105
+ assert_equal true, target_manager.is_target_valid?(:project)
106
+ assert_equal [:project], target_manager.target_keys
107
+ assert_equal true, target_manager.target_by_key?(:project)
108
+ assert_equal 1, target_manager.targets.size
109
+ assert_equal :project, target_manager.targets[0].key
110
+ # noinspection RubyArgCount
111
+ assert_equal :project, target_manager.target_by_model_class(Project).key
112
+
113
+ target_manager.target(Component, :component, :project, :access_method => :comps)
114
+
115
+ assert_equal true, target_manager.is_target_valid?(:component)
116
+ assert_equal true, target_manager.target_by_key?(:component)
117
+ assert_equal 2, target_manager.targets.size
118
+ target = target_manager.target_by_key(:component)
119
+ assert_equal :component, target.key
120
+ assert_equal :project, target.container_key
121
+ assert_equal :comps, target.access_method
122
+
123
+ assert_equal 1, target_manager.targets_by_container(:project).size
124
+ assert_equal :component, target_manager.targets_by_container(:project)[0].key
125
+
126
+ assert_raise_message("Can not find target with key 'foo'") { target_manager.target_by_key(:foo) }
127
+ end
128
+
129
+ def test_apply_extension
130
+ TestFacetContainer.target_manager.target(Project, :project)
131
+ TestFacetContainer.target_manager.target(Component, :component, :project)
132
+ TestFacetContainer.target_manager.target(Fragment, :fragment, :component)
133
+
134
+ TestFacetContainer.facet(:json)
135
+ TestFacetContainer.facet(:jpa)
136
+ TestFacetContainer.facet(:gwt) do |f|
137
+ f.enhance(Project) do
138
+ def name
139
+ "Gwt#{project.name}"
140
+ end
141
+ end
142
+ end
143
+
144
+ project = Project.new(:MyProject) do |p|
145
+ p.component(:MyComponent1) do |c|
146
+ c.fragment(:MyFragment)
147
+ end
148
+ end
149
+
150
+ component1 = project.components[0]
151
+ fragment1 = component1.fragments[0]
152
+
153
+ assert_equal false, project.respond_to?(:facet_enabled?)
154
+ assert_equal false, component1.respond_to?(:facet_enabled?)
155
+ assert_equal false, fragment1.respond_to?(:facet_enabled?)
156
+
157
+ assert_equal false, project.respond_to?(:parent)
158
+ assert_equal false, component1.respond_to?(:parent)
159
+ assert_equal false, fragment1.respond_to?(:parent)
160
+
161
+ TestFacetContainer.target_manager.apply_extension(project)
162
+ TestFacetContainer.target_manager.apply_extension(component1)
163
+ TestFacetContainer.target_manager.apply_extension(fragment1)
164
+
165
+ assert_equal true, project.respond_to?(:facet_enabled?)
166
+ assert_equal true, component1.respond_to?(:facet_enabled?)
167
+ assert_equal true, fragment1.respond_to?(:facet_enabled?)
168
+
169
+ assert_equal false, project.respond_to?(:parent)
170
+ assert_equal true, component1.respond_to?(:parent)
171
+ assert_equal true, fragment1.respond_to?(:parent)
172
+
173
+ assert_equal project, component1.parent
174
+ assert_equal component1, fragment1.parent
175
+
176
+ project.enable_facets(:json, :gwt)
177
+
178
+ assert_equal [:json, :gwt], project.enabled_facets
179
+
180
+ assert_equal true, project.respond_to?(:facet_enabled?)
181
+ assert_equal true, component1.respond_to?(:facet_enabled?)
182
+ assert_equal true, fragment1.respond_to?(:facet_enabled?)
183
+
184
+ assert_equal [:json, :gwt], component1.enabled_facets
185
+
186
+ component1.disable_facet(:gwt)
187
+
188
+ assert_equal [:json], component1.enabled_facets
189
+
190
+ assert_equal true, project.respond_to?(:facet_enabled?)
191
+ assert_equal true, component1.respond_to?(:facet_enabled?)
192
+ assert_equal true, fragment1.respond_to?(:facet_enabled?)
193
+
194
+ assert_equal [:json], fragment1.enabled_facets
195
+ end
196
+ end
@@ -0,0 +1,27 @@
1
+ $:.unshift File.expand_path('../../lib', __FILE__)
2
+
3
+ require 'minitest/autorun'
4
+ require 'test/unit/assertions'
5
+ require 'reality/facets'
6
+
7
+ class Reality::TestCase < Minitest::Test
8
+ include Test::Unit::Assertions
9
+
10
+ module TestFacetContainer
11
+ extend Reality::Facets::FacetContainer
12
+ class << self
13
+
14
+ def reset
15
+ facet_map.clear
16
+ target_manager.reset_targets
17
+ TestFacetContainer::FacetDefinitions.constants.each do |constant|
18
+ TestFacetContainer::FacetDefinitions.send(:remove_const, constant)
19
+ end if TestFacetContainer.const_defined?(:FacetDefinitions)
20
+ end
21
+ end
22
+ end
23
+
24
+ def setup
25
+ TestFacetContainer.reset
26
+ end
27
+ end
metadata ADDED
@@ -0,0 +1,137 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: reality-facets
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-07 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.4.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.4.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.4.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.4.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: minitest
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '='
60
+ - !ruby/object:Gem::Version
61
+ version: 5.9.1
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '='
67
+ - !ruby/object:Gem::Version
68
+ version: 5.9.1
69
+ - !ruby/object:Gem::Dependency
70
+ name: test-unit
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '='
74
+ - !ruby/object:Gem::Version
75
+ version: 3.1.5
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '='
81
+ - !ruby/object:Gem::Version
82
+ version: 3.1.5
83
+ description: A basic toolkit for binding facets or extensions to model objects.
84
+ email: peter@realityforge.org
85
+ executables: []
86
+ extensions: []
87
+ extra_rdoc_files: []
88
+ files:
89
+ - ".gitattributes"
90
+ - ".gitignore"
91
+ - ".ruby-version"
92
+ - ".travis.yml"
93
+ - CONTRIBUTING.md
94
+ - Gemfile
95
+ - LICENSE
96
+ - README.md
97
+ - Rakefile
98
+ - lib/reality/facets.rb
99
+ - lib/reality/facets/core.rb
100
+ - lib/reality/facets/facet.rb
101
+ - lib/reality/facets/facet_container.rb
102
+ - lib/reality/facets/faceted_model.rb
103
+ - lib/reality/facets/target_manager.rb
104
+ - reality-facets.gemspec
105
+ - test/facets/test_facet.rb
106
+ - test/facets/test_facet_container.rb
107
+ - test/facets/test_faceted_model.rb
108
+ - test/facets/test_target_manager.rb
109
+ - test/helper.rb
110
+ homepage: https://github.com/realityforge/reality-facets
111
+ licenses: []
112
+ metadata: {}
113
+ post_install_message:
114
+ rdoc_options:
115
+ - "--line-numbers"
116
+ - "--inline-source"
117
+ - "--title"
118
+ - reality-facets
119
+ require_paths:
120
+ - lib
121
+ required_ruby_version: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ required_rubygems_version: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ requirements: []
132
+ rubyforge_project:
133
+ rubygems_version: 2.5.1
134
+ signing_key:
135
+ specification_version: 4
136
+ summary: A basic toolkit for binding facets or extensions to model objects.
137
+ test_files: []