metaruby 1.0.0.rc1 → 1.0.0.rc2
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.
- checksums.yaml +4 -4
- data/.gitignore +3 -0
- data/.travis.yml +5 -0
- data/Gemfile +3 -0
- data/Rakefile +9 -36
- data/{.gemtest → bin/.gitattributes} +0 -0
- data/lib/metaruby/class.rb +5 -0
- data/lib/metaruby/gui/exception_view.rb +58 -15
- data/lib/metaruby/gui/html/collection.rb +10 -3
- data/lib/metaruby/gui/html/fragment.rhtml +5 -0
- data/lib/metaruby/gui/html/list.rhtml +1 -1
- data/lib/metaruby/gui/html/page.css +2 -0
- data/lib/metaruby/gui/html/page.rb +39 -19
- data/lib/metaruby/gui/html/page.rhtml +4 -1
- data/lib/metaruby/gui/html/page_body.rhtml +3 -10
- data/lib/metaruby/gui/model_browser.rb +55 -24
- data/lib/metaruby/gui/model_selector.rb +6 -6
- data/lib/metaruby/gui/ruby_constants_item_model.rb +12 -3
- data/lib/metaruby/inherited_attribute.rb +6 -0
- data/lib/metaruby/module.rb +2 -2
- data/lib/metaruby/registration.rb +3 -3
- data/lib/metaruby/test.rb +4 -20
- data/lib/metaruby/version.rb +3 -0
- data/lib/yard-metaruby.rb +117 -0
- data/manifest.xml +1 -4
- data/metaruby.gemspec +26 -0
- metadata +50 -48
- data/History.txt +0 -1
- data/Manifest.txt +0 -40
- data/test/suite.rb +0 -15
- data/test/test_attributes.rb +0 -323
- data/test/test_class.rb +0 -68
- data/test/test_dsls.rb +0 -49
- data/test/test_module.rb +0 -105
- data/test/test_registration.rb +0 -182
data/manifest.xml
CHANGED
@@ -1,12 +1,9 @@
|
|
1
1
|
<package>
|
2
|
-
<description brief="
|
2
|
+
<description brief="">
|
3
3
|
</description>
|
4
4
|
<maintainer>Sylvain Joyeux/sylvain.joyeux@m4x.org</maintainer>
|
5
5
|
<license>LGPLv3</license>
|
6
6
|
|
7
7
|
<depend package="utilrb" />
|
8
8
|
<depend package="kramdown" optional="1" />
|
9
|
-
|
10
|
-
<test_depend package="minitest" />
|
11
|
-
<test_depend package="flexmock" />
|
12
9
|
</package>
|
data/metaruby.gemspec
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'metaruby/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = "metaruby"
|
8
|
+
s.version = MetaRuby::VERSION
|
9
|
+
s.authors = ["Sylvain Joyeux"]
|
10
|
+
s.email = "sylvain.joyeux@m4x.org"
|
11
|
+
s.summary = "Modelling using the Ruby language as a metamodel"
|
12
|
+
s.description = "MetaRuby is a set of module and classes that help one use the Ruby type system as a basis for modelling."
|
13
|
+
s.homepage = "http://rock-robotics.org"
|
14
|
+
s.licenses = ["BSD"]
|
15
|
+
|
16
|
+
s.require_paths = ["lib"]
|
17
|
+
s.extensions = []
|
18
|
+
s.extra_rdoc_files = ["README.md"]
|
19
|
+
s.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
20
|
+
|
21
|
+
s.add_runtime_dependency "utilrb", ">= 2.1.0.a"
|
22
|
+
s.add_runtime_dependency "kramdown"
|
23
|
+
s.add_development_dependency "flexmock", ">= 2.0.0"
|
24
|
+
s.add_development_dependency "minitest", ">= 5.0", "~> 5.0"
|
25
|
+
s.add_development_dependency "coveralls"
|
26
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metaruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.
|
4
|
+
version: 1.0.0.rc2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sylvain Joyeux
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-09-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: utilrb
|
@@ -16,84 +16,90 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 1.
|
19
|
+
version: 2.1.0.a
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 1.
|
26
|
+
version: 2.1.0.a
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: kramdown
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0
|
34
|
-
type: :
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0
|
40
|
+
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: flexmock
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 2.0.0
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 2.0.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: minitest
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '5.0'
|
59
62
|
- - "~>"
|
60
63
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
64
|
+
version: '5.0'
|
62
65
|
type: :development
|
63
66
|
prerelease: false
|
64
67
|
version_requirements: !ruby/object:Gem::Requirement
|
65
68
|
requirements:
|
69
|
+
- - ">="
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: '5.0'
|
66
72
|
- - "~>"
|
67
73
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
74
|
+
version: '5.0'
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: coveralls
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
type: :development
|
83
|
+
prerelease: false
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
description: MetaRuby is a set of module and classes that help one use the Ruby type
|
90
|
+
system as a basis for modelling.
|
91
|
+
email: sylvain.joyeux@m4x.org
|
85
92
|
executables: []
|
86
93
|
extensions: []
|
87
94
|
extra_rdoc_files:
|
88
|
-
- History.txt
|
89
|
-
- Manifest.txt
|
90
95
|
- README.md
|
91
96
|
files:
|
92
|
-
- ".
|
93
|
-
-
|
94
|
-
-
|
97
|
+
- ".gitignore"
|
98
|
+
- ".travis.yml"
|
99
|
+
- Gemfile
|
95
100
|
- README.md
|
96
101
|
- Rakefile
|
102
|
+
- bin/.gitattributes
|
97
103
|
- lib/metaruby.rb
|
98
104
|
- lib/metaruby/class.rb
|
99
105
|
- lib/metaruby/dsls.rb
|
@@ -105,6 +111,7 @@ files:
|
|
105
111
|
- lib/metaruby/gui/html/button.rb
|
106
112
|
- lib/metaruby/gui/html/collection.rb
|
107
113
|
- lib/metaruby/gui/html/exception_view.css
|
114
|
+
- lib/metaruby/gui/html/fragment.rhtml
|
108
115
|
- lib/metaruby/gui/html/jquery.min.js
|
109
116
|
- lib/metaruby/gui/html/jquery.selectfilter.js
|
110
117
|
- lib/metaruby/gui/html/jquery.tagcloud.min.js
|
@@ -123,22 +130,16 @@ files:
|
|
123
130
|
- lib/metaruby/module.rb
|
124
131
|
- lib/metaruby/registration.rb
|
125
132
|
- lib/metaruby/test.rb
|
133
|
+
- lib/metaruby/version.rb
|
134
|
+
- lib/yard-metaruby.rb
|
126
135
|
- manifest.xml
|
127
|
-
-
|
128
|
-
-
|
129
|
-
- test/test_class.rb
|
130
|
-
- test/test_dsls.rb
|
131
|
-
- test/test_module.rb
|
132
|
-
- test/test_registration.rb
|
133
|
-
homepage: https://gitorious.org/rock-toolchain/metaruby
|
136
|
+
- metaruby.gemspec
|
137
|
+
homepage: http://rock-robotics.org
|
134
138
|
licenses:
|
135
|
-
-
|
139
|
+
- BSD
|
136
140
|
metadata: {}
|
137
141
|
post_install_message:
|
138
|
-
rdoc_options:
|
139
|
-
- "--title"
|
140
|
-
- TestMetaruby Documentation
|
141
|
-
- "--quiet"
|
142
|
+
rdoc_options: []
|
142
143
|
require_paths:
|
143
144
|
- lib
|
144
145
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -153,8 +154,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
153
154
|
version: 1.3.1
|
154
155
|
requirements: []
|
155
156
|
rubyforge_project:
|
156
|
-
rubygems_version: 2.2.
|
157
|
+
rubygems_version: 2.2.3
|
157
158
|
signing_key:
|
158
159
|
specification_version: 4
|
159
160
|
summary: Modelling using the Ruby language as a metamodel
|
160
161
|
test_files: []
|
162
|
+
has_rdoc:
|
data/History.txt
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
===
|
data/Manifest.txt
DELETED
@@ -1,40 +0,0 @@
|
|
1
|
-
History.txt
|
2
|
-
Manifest.txt
|
3
|
-
README.md
|
4
|
-
Rakefile
|
5
|
-
lib/metaruby.rb
|
6
|
-
lib/metaruby/class.rb
|
7
|
-
lib/metaruby/dsls.rb
|
8
|
-
lib/metaruby/dsls/doc.rb
|
9
|
-
lib/metaruby/dsls/find_through_method_missing.rb
|
10
|
-
lib/metaruby/gui.rb
|
11
|
-
lib/metaruby/gui/exception_view.rb
|
12
|
-
lib/metaruby/gui/html.rb
|
13
|
-
lib/metaruby/gui/html/button.rb
|
14
|
-
lib/metaruby/gui/html/collection.rb
|
15
|
-
lib/metaruby/gui/html/exception_view.css
|
16
|
-
lib/metaruby/gui/html/jquery.min.js
|
17
|
-
lib/metaruby/gui/html/jquery.selectfilter.js
|
18
|
-
lib/metaruby/gui/html/jquery.tagcloud.min.js
|
19
|
-
lib/metaruby/gui/html/jquery.tinysort.min.js
|
20
|
-
lib/metaruby/gui/html/list.rhtml
|
21
|
-
lib/metaruby/gui/html/page.css
|
22
|
-
lib/metaruby/gui/html/page.rb
|
23
|
-
lib/metaruby/gui/html/page.rhtml
|
24
|
-
lib/metaruby/gui/html/page_body.rhtml
|
25
|
-
lib/metaruby/gui/html/rock-website.css
|
26
|
-
lib/metaruby/gui/model_browser.rb
|
27
|
-
lib/metaruby/gui/model_selector.rb
|
28
|
-
lib/metaruby/gui/rendering_manager.rb
|
29
|
-
lib/metaruby/gui/ruby_constants_item_model.rb
|
30
|
-
lib/metaruby/inherited_attribute.rb
|
31
|
-
lib/metaruby/module.rb
|
32
|
-
lib/metaruby/registration.rb
|
33
|
-
lib/metaruby/test.rb
|
34
|
-
manifest.xml
|
35
|
-
test/suite.rb
|
36
|
-
test/test_attributes.rb
|
37
|
-
test/test_class.rb
|
38
|
-
test/test_dsls.rb
|
39
|
-
test/test_module.rb
|
40
|
-
test/test_registration.rb
|
data/test/suite.rb
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
# Coverage is enabled by default when running the whole suite
|
2
|
-
ENV['TEST_ENABLE_COVERAGE'] ||= '1'
|
3
|
-
|
4
|
-
# Require all your test files here. Always prepend ./ and use the relative path
|
5
|
-
# to the Ruby library root
|
6
|
-
require 'metaruby/test'
|
7
|
-
require './test/test_class'
|
8
|
-
require './test/test_module'
|
9
|
-
require './test/test_attributes'
|
10
|
-
require './test/test_registration'
|
11
|
-
require './test/test_dsls'
|
12
|
-
|
13
|
-
# Put the root logger to DEBUG so that all debug blocks are executed
|
14
|
-
MetaRuby.logger = Logger.new(File.open("/dev/null", 'w'))
|
15
|
-
MetaRuby.logger.level = Logger::DEBUG
|
data/test/test_attributes.rb
DELETED
@@ -1,323 +0,0 @@
|
|
1
|
-
require 'metaruby/test'
|
2
|
-
|
3
|
-
class TC_Models < MiniTest::Test
|
4
|
-
def test_inherited_attribute_class
|
5
|
-
a = Class.new do
|
6
|
-
class << self
|
7
|
-
extend MetaRuby::Attributes
|
8
|
-
inherited_attribute(:signature, :signatures) { Array.new }
|
9
|
-
inherited_attribute(:mapped, :map, :map => true) { Hash.new }
|
10
|
-
end
|
11
|
-
end
|
12
|
-
b = Class.new(a) do
|
13
|
-
include Module.new # include an empty module between a and b to check that the module
|
14
|
-
# is skipped transparently
|
15
|
-
singleton_class.inherited_attribute(:child_attribute) { Array.new }
|
16
|
-
end
|
17
|
-
check_inherited_attribute(a, b)
|
18
|
-
|
19
|
-
# Test for singleton class support
|
20
|
-
object = b.new
|
21
|
-
assert(object.singleton_class.respond_to?(:signatures))
|
22
|
-
object.singleton_class.signatures << :in_singleton
|
23
|
-
assert_equal([:in_singleton], object.singleton_class.signatures)
|
24
|
-
end
|
25
|
-
|
26
|
-
def check_inherited_attribute(base, derived)
|
27
|
-
assert(base.respond_to?(:each_signature))
|
28
|
-
assert(base.respond_to?(:signatures))
|
29
|
-
assert(!base.respond_to?(:has_signature?))
|
30
|
-
assert(!base.respond_to?(:find_signatures))
|
31
|
-
|
32
|
-
assert(base.respond_to?(:each_mapped))
|
33
|
-
assert(base.respond_to?(:map))
|
34
|
-
assert(base.respond_to?(:has_mapped?))
|
35
|
-
|
36
|
-
base.signatures << :in_base
|
37
|
-
base.map[:base] = 10
|
38
|
-
base.map[:overriden] = 20
|
39
|
-
assert_equal([:in_base], base.enum_for(:each_signature).to_a)
|
40
|
-
assert_equal([10].to_set, base.enum_for(:each_mapped, :base, false).to_set)
|
41
|
-
|
42
|
-
assert(!base.respond_to?(:child_attribute))
|
43
|
-
assert(!base.respond_to?(:each_child_attribute))
|
44
|
-
assert(derived.respond_to?(:child_attribute))
|
45
|
-
assert(derived.respond_to?(:each_child_attribute))
|
46
|
-
|
47
|
-
derived.signatures << :in_derived
|
48
|
-
|
49
|
-
derived.map[:overriden] = 15
|
50
|
-
derived.map[:derived] = 25
|
51
|
-
|
52
|
-
assert_equal([:in_derived, :in_base], derived.enum_for(:each_signature).to_a)
|
53
|
-
assert_equal([20, 15].to_set, derived.enum_for(:each_mapped, :overriden, false).to_set)
|
54
|
-
assert_equal([15].to_set, derived.enum_for(:each_mapped, :overriden, true).to_set)
|
55
|
-
assert_equal([25].to_set, derived.enum_for(:each_mapped, :derived).to_set)
|
56
|
-
assert_equal([[:base, 10], [:overriden, 20], [:overriden, 15], [:derived, 25]].to_set, derived.enum_for(:each_mapped, nil, false).to_set)
|
57
|
-
assert_equal([[:base, 10], [:overriden, 15], [:derived, 25]].to_set, derived.enum_for(:each_mapped, nil, true).to_set)
|
58
|
-
end
|
59
|
-
|
60
|
-
def test_inherited_attribute_non_mapping_promote
|
61
|
-
a = Class.new do
|
62
|
-
class << self
|
63
|
-
extend MetaRuby::Attributes
|
64
|
-
def promote_value(v)
|
65
|
-
v
|
66
|
-
end
|
67
|
-
inherited_attribute(:value, :values) { Array.new }
|
68
|
-
end
|
69
|
-
end
|
70
|
-
b = flexmock(Class.new(a), 'b')
|
71
|
-
c = flexmock(Class.new(b), 'c')
|
72
|
-
d = flexmock(Class.new(c), 'd')
|
73
|
-
|
74
|
-
c.should_receive(:promote_value).with(10).and_return("10_b_c").once.ordered
|
75
|
-
d.should_receive(:promote_value).with("10_b_c").and_return(12).once.ordered
|
76
|
-
c.should_receive(:promote_value).with(11).and_return("11_b_c").once.ordered
|
77
|
-
d.should_receive(:promote_value).with("11_b_c").and_return(13).once.ordered
|
78
|
-
b.should_receive(:promote_value).with(0).and_return("0_b_c").once.ordered
|
79
|
-
c.should_receive(:promote_value).with("0_b_c").and_return("0_c_d").once.ordered
|
80
|
-
d.should_receive(:promote_value).with("0_c_d").and_return(2).once.ordered
|
81
|
-
b.should_receive(:promote_value).with(1).and_return("1_b_c").once.ordered
|
82
|
-
c.should_receive(:promote_value).with("1_b_c").and_return("1_c_d").once.ordered
|
83
|
-
d.should_receive(:promote_value).with("1_c_d").and_return(3).once.ordered
|
84
|
-
|
85
|
-
a.values << 0 << 1
|
86
|
-
b.values << 10 << 11
|
87
|
-
# Do NOT add anything at the level of C. Its promote_value method should
|
88
|
-
# still be called, though
|
89
|
-
d.values << 100 << 110
|
90
|
-
assert_equal [0, 1], a.each_value.to_a
|
91
|
-
assert_equal [100, 110, 12, 13, 2, 3], d.each_value.to_a
|
92
|
-
end
|
93
|
-
|
94
|
-
def test_inherited_attribute_mapping_promote
|
95
|
-
a = Class.new do
|
96
|
-
class << self
|
97
|
-
extend MetaRuby::Attributes
|
98
|
-
def promote_value(key, v)
|
99
|
-
end
|
100
|
-
def name; 'A' end
|
101
|
-
inherited_attribute(:value, :values, :map => true) { Hash.new }
|
102
|
-
end
|
103
|
-
end
|
104
|
-
b = Class.new(a)
|
105
|
-
c = Class.new(b)
|
106
|
-
d = Class.new(c)
|
107
|
-
|
108
|
-
flexmock(c).should_receive(:promote_value).with('b', 2).and_return("b2_b_c").once.ordered
|
109
|
-
flexmock(d).should_receive(:promote_value).with('b', "b2_b_c").and_return(15).once.ordered
|
110
|
-
|
111
|
-
flexmock(c).should_receive(:promote_value).with('c', 3).and_return("c3_b_c").once.ordered
|
112
|
-
flexmock(d).should_receive(:promote_value).with('c', "c3_b_c").and_return(16).once.ordered
|
113
|
-
|
114
|
-
flexmock(b).should_receive(:promote_value).with('a', 0).and_return("a0_a_b").once.ordered
|
115
|
-
flexmock(c).should_receive(:promote_value).with('a', "a0_a_b").and_return("a0_b_c").once.ordered
|
116
|
-
flexmock(d).should_receive(:promote_value).with('a', "a0_b_c").and_return(10).once.ordered
|
117
|
-
|
118
|
-
a.values.merge!('a' => 0, 'b' => 1)
|
119
|
-
b.values.merge!('b' => 2, 'c' => 3, 'd' => 4)
|
120
|
-
d.values.merge!('d' => 5, 'e' => 6)
|
121
|
-
assert_equal [['d', 5], ['e', 6], ['b', 15], ['c', 16], ['a', 10]], d.each_value.to_a
|
122
|
-
end
|
123
|
-
|
124
|
-
def test_inherited_attribute_mapping_promote_non_uniq
|
125
|
-
a = Class.new do
|
126
|
-
class << self
|
127
|
-
extend MetaRuby::Attributes
|
128
|
-
def promote_value(key, v)
|
129
|
-
end
|
130
|
-
inherited_attribute(:value, :values, :map => true) { Hash.new }
|
131
|
-
end
|
132
|
-
end
|
133
|
-
b = flexmock(Class.new(a), 'b')
|
134
|
-
c = flexmock(Class.new(b), 'c')
|
135
|
-
d = flexmock(Class.new(c), 'd')
|
136
|
-
|
137
|
-
c.should_receive(:promote_value).with('b', 2).and_return("b2_b_c").once.ordered
|
138
|
-
d.should_receive(:promote_value).with('b', "b2_b_c").and_return(12).once.ordered
|
139
|
-
|
140
|
-
c.should_receive(:promote_value).with('c', 3).and_return("c3_b_c").once.ordered
|
141
|
-
d.should_receive(:promote_value).with('c', "c3_b_c").and_return(13).once.ordered
|
142
|
-
|
143
|
-
c.should_receive(:promote_value).with('d', 4).and_return("d4_b_c").once.ordered
|
144
|
-
d.should_receive(:promote_value).with('d', "d4_b_c").and_return(14).once.ordered
|
145
|
-
|
146
|
-
b.should_receive(:promote_value).with('a', 0).and_return("a0_a_b").once.ordered
|
147
|
-
c.should_receive(:promote_value).with('a', "a0_a_b").and_return("a0_b_c").once.ordered
|
148
|
-
d.should_receive(:promote_value).with('a', "a0_b_c").and_return(10).once.ordered
|
149
|
-
|
150
|
-
b.should_receive(:promote_value).with('b', 1).and_return("b1_a_b").once.ordered
|
151
|
-
c.should_receive(:promote_value).with('b', "b1_a_b").and_return("b1_b_c").once.ordered
|
152
|
-
d.should_receive(:promote_value).with('b', "b1_b_c").and_return(11).once.ordered
|
153
|
-
|
154
|
-
a.values.merge!('a' => 0, 'b' => 1)
|
155
|
-
b.values.merge!('b' => 2, 'c' => 3, 'd' => 4)
|
156
|
-
d.values.merge!('d' => 5, 'e' => 6)
|
157
|
-
assert_equal [['d', 5], ['e', 6], ['b', 12], ['c', 13], ['d', 14], ['a', 10], ['b', 11]], d.each_value(nil, false).to_a
|
158
|
-
end
|
159
|
-
|
160
|
-
def test_inherited_attribute_mapping_promote_with_key_uniq
|
161
|
-
a = Class.new do
|
162
|
-
class << self
|
163
|
-
extend MetaRuby::Attributes
|
164
|
-
def promote_value(key, v)
|
165
|
-
end
|
166
|
-
inherited_attribute(:value, :values, :map => true) { Hash.new }
|
167
|
-
end
|
168
|
-
end
|
169
|
-
b = flexmock(Class.new(a), 'b')
|
170
|
-
c = flexmock(Class.new(b), 'c')
|
171
|
-
d = flexmock(Class.new(c), 'd')
|
172
|
-
|
173
|
-
c.should_receive(:promote_value).with('b', 2).and_return("b2_b_c").once.ordered
|
174
|
-
d.should_receive(:promote_value).with('b', "b2_b_c").and_return(12).once.ordered
|
175
|
-
|
176
|
-
a.values.merge!('a' => 0, 'b' => 1)
|
177
|
-
b.values.merge!('b' => 2, 'c' => 3, 'd' => 4)
|
178
|
-
d.values.merge!('d' => 5, 'e' => 6)
|
179
|
-
assert_equal [12], d.each_value('b', true).to_a
|
180
|
-
end
|
181
|
-
|
182
|
-
def test_inherited_attribute_mapping_promote_with_key_non_uniq
|
183
|
-
a = Class.new do
|
184
|
-
class << self
|
185
|
-
extend MetaRuby::Attributes
|
186
|
-
def promote_value(key, v)
|
187
|
-
end
|
188
|
-
inherited_attribute(:value, :values, :map => true) { Hash.new }
|
189
|
-
end
|
190
|
-
end
|
191
|
-
b = flexmock(Class.new(a), 'b')
|
192
|
-
c = flexmock(Class.new(b), 'c')
|
193
|
-
d = flexmock(Class.new(c), 'd')
|
194
|
-
|
195
|
-
c.should_receive(:promote_value).with('b', 2).and_return("b2_b_c").once.ordered
|
196
|
-
d.should_receive(:promote_value).with('b', "b2_b_c").and_return(12).once.ordered
|
197
|
-
|
198
|
-
b.should_receive(:promote_value).with('b', 1).and_return("b1_a_b").once.ordered
|
199
|
-
c.should_receive(:promote_value).with('b', "b1_a_b").and_return("b1_b_c").once.ordered
|
200
|
-
d.should_receive(:promote_value).with('b', "b1_b_c").and_return(11).once.ordered
|
201
|
-
|
202
|
-
a.values.merge!('a' => 0, 'b' => 1)
|
203
|
-
b.values.merge!('b' => 2, 'c' => 3, 'd' => 4)
|
204
|
-
d.values.merge!('d' => 5, 'e' => 6)
|
205
|
-
assert_equal [12, 11], d.each_value('b', false).to_a
|
206
|
-
end
|
207
|
-
end
|
208
|
-
|
209
|
-
describe MetaRuby::Attributes do
|
210
|
-
describe "#inherited_single_value_attribute" do
|
211
|
-
attr_reader :base, :sub, :subsub
|
212
|
-
describe "plain" do
|
213
|
-
before do
|
214
|
-
@base = Class.new do
|
215
|
-
class << self
|
216
|
-
extend MetaRuby::Attributes
|
217
|
-
inherited_single_value_attribute :var
|
218
|
-
end
|
219
|
-
end
|
220
|
-
@sub = Class.new(base)
|
221
|
-
@subsub = Class.new(sub)
|
222
|
-
end
|
223
|
-
|
224
|
-
it "should set the value if given an argument" do
|
225
|
-
base.var(10)
|
226
|
-
assert_equal 10, base.var
|
227
|
-
end
|
228
|
-
it "should return the value from the parent model if not set" do
|
229
|
-
base.var(10)
|
230
|
-
assert_equal 10, sub.var
|
231
|
-
end
|
232
|
-
it "should return nil if the instance variable is explicitly set to nil" do
|
233
|
-
base.var 10
|
234
|
-
sub.var nil
|
235
|
-
assert_equal nil, subsub.var
|
236
|
-
end
|
237
|
-
end
|
238
|
-
|
239
|
-
describe "with default" do
|
240
|
-
before do
|
241
|
-
@base = Class.new do
|
242
|
-
class << self
|
243
|
-
extend MetaRuby::Attributes
|
244
|
-
inherited_single_value_attribute(:var) { 10 }
|
245
|
-
end
|
246
|
-
end
|
247
|
-
@sub = Class.new(base)
|
248
|
-
@subsub = Class.new(sub)
|
249
|
-
end
|
250
|
-
|
251
|
-
it "should be accessible at each level" do
|
252
|
-
assert_equal 10, base.var
|
253
|
-
assert_equal 10, sub.var
|
254
|
-
assert_equal 10, subsub.var
|
255
|
-
end
|
256
|
-
|
257
|
-
it "should set only the bottom class" do
|
258
|
-
assert_equal 10, base.var
|
259
|
-
sub.var(nil)
|
260
|
-
assert_equal nil, sub.var
|
261
|
-
assert_equal nil, subsub.var
|
262
|
-
end
|
263
|
-
end
|
264
|
-
|
265
|
-
describe "with promotion" do
|
266
|
-
before do
|
267
|
-
@base = Class.new do
|
268
|
-
class << self
|
269
|
-
extend MetaRuby::Attributes
|
270
|
-
def promote_var(value); value * 2 end
|
271
|
-
inherited_single_value_attribute(:var)
|
272
|
-
end
|
273
|
-
end
|
274
|
-
@sub = Class.new(base) do
|
275
|
-
class << self
|
276
|
-
def promote_var(value); value * 4 end
|
277
|
-
end
|
278
|
-
end
|
279
|
-
@subsub = Class.new(sub) do
|
280
|
-
class << self
|
281
|
-
def promote_var(value); value - 10 end
|
282
|
-
end
|
283
|
-
end
|
284
|
-
end
|
285
|
-
|
286
|
-
it "should apply the promotion method at each level" do
|
287
|
-
base.var(10)
|
288
|
-
assert_equal 10, base.var
|
289
|
-
assert_equal 40, sub.var
|
290
|
-
assert_equal 30, subsub.var
|
291
|
-
end
|
292
|
-
end
|
293
|
-
|
294
|
-
describe "with default with promotion" do
|
295
|
-
before do
|
296
|
-
@base = Class.new do
|
297
|
-
class << self
|
298
|
-
extend MetaRuby::Attributes
|
299
|
-
def promote_var(value); value * 2 end
|
300
|
-
inherited_single_value_attribute(:var) { 10 }
|
301
|
-
end
|
302
|
-
end
|
303
|
-
@sub = Class.new(base) do
|
304
|
-
class << self
|
305
|
-
def promote_var(value); value * 4 end
|
306
|
-
end
|
307
|
-
end
|
308
|
-
@subsub = Class.new(sub) do
|
309
|
-
class << self
|
310
|
-
def promote_var(value); value - 10 end
|
311
|
-
end
|
312
|
-
end
|
313
|
-
end
|
314
|
-
|
315
|
-
it "should apply the promotion method at each level" do
|
316
|
-
assert_equal 10, base.var
|
317
|
-
assert_equal 40, sub.var
|
318
|
-
assert_equal 30, subsub.var
|
319
|
-
end
|
320
|
-
end
|
321
|
-
end
|
322
|
-
end
|
323
|
-
|