paramix 1.0.1 → 1.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.
data/HISTORY CHANGED
@@ -1,5 +1,26 @@
1
1
  = RELEASE HISTORY
2
2
 
3
+ == 1.1.0 // 2010-04-05
4
+
5
+ The previous versions did not properly support nested parametric
6
+ includes, i.e. including one parametirc mixin into another. This
7
+ release fixed this issue. However, to do so provided difficult
8
+ and required some changes to the API. In particular, instead
9
+ of +mixin_params[M][:p]+ one must now use +mixin_param(M,:p)+.
10
+ It was not longer possible to simply return a hash, since special
11
+ lookup logic is required to handle nested mixins. It should also
12
+ be noted that +Module#mixin_parameters+, which stores the actual
13
+ parameters is no longer accessible at the instance level, just
14
+ as +mixin_param()+ is soley an instance method (at the class level
15
+ it is used to access the singleton parameters).
16
+
17
+ Changes:
18
+
19
+ * Proper support for nested parametric mixins.
20
+ * Provide #mixin_param method to lookup parameters.
21
+ * The mixin_parameters method is class-level only.
22
+
23
+
3
24
  == 1.0.1 // 2010-04-03
4
25
 
5
26
  This release simply removed dependencies on Facets.
@@ -12,8 +33,9 @@ Changes:
12
33
 
13
34
  == 1.0.0 // 2009-06-29
14
35
 
15
- This is the initial stand-alone release of Paramix
16
- spun-off from Ruby Facets.
36
+ This is the initial stand-alone release of Paramix spun-off
37
+ from Ruby Facets (and is actually he second major version, the
38
+ original being spun of from the Nitro/Og Glue library).
17
39
 
18
40
  Changes:
19
41
 
@@ -1,43 +1,16 @@
1
- # TITLE:
2
- #
3
- # Parametric Mixins
4
- #
5
- # SUMMARY:
6
- #
7
- # Parametric Mixins provides parameters for mixin modules.
8
- #
9
- # COPYRIGHT:
10
- #
11
- # Copyright (c) 2008 T. Sawyer
12
- #
13
- # LICENSE:
14
- #
15
- # Ruby License
16
- #
17
- # This module is free software. You may use, modify, and/or redistribute this
18
- # software under the same terms as Ruby.
19
- #
20
- # This program is distributed in the hope that it will be useful, but WITHOUT
21
- # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
22
- # FOR A PARTICULAR PURPOSE.
23
- #
24
- # AUTHORS:
25
- #
26
- # - Thomas Sawyer
27
-
28
-
29
1
  # = Parametric Mixin
30
2
  #
31
3
  # Parametric Mixins provides parameters for mixin modules.
32
4
  # Module parameters can be set at the time of inclusion
33
5
  # or extension using Module#[] method, then parameters
34
- # can be accessed via the #mixin_parameters method.
6
+ # can be accessed via the #mixin_param and #mixin_parameters
7
+ # methods.
35
8
  #
36
9
  # module MyMixin
37
10
  # include Paramix
38
11
  #
39
12
  # def hello
40
- # puts "Hello from #{mixin_parameters[MyMixin][:name]}!"
13
+ # puts "Hello from #{ mixin_param(MyMixin, :name) }!"
41
14
  # end
42
15
  # end
43
16
  #
@@ -48,154 +21,170 @@
48
21
  # m = MyClass.new
49
22
  # m.hello #=> 'Hello from Ruby!'
50
23
  #
51
- # You can view the full set of parameters via the #mixin_parameters
52
- # class method, which returns a hash keyed on the included modules.
24
+ # You can view the full set of parameters via the +mixin_parameters+ method.
53
25
  #
54
- # MyClass.mixin_parameters #=> {MyMixin=>{:name=>'Ruby'}}
55
- # MyClass.mixin_parameters[MyMixin] #=> {:name=>'ruby'}
26
+ # MyClass.mixin_parameters #=> {MyMixin => {:name => 'ruby'}}
56
27
  #
57
- # The include Paramix is equivalent to:
28
+ # Including Paramix into a module is essentially equivalent to defining
29
+ # a module method:
58
30
  #
59
31
  # def [](parameters)
60
- # Paramix.new(self, parameters)
32
+ # Paramix::Proxy.new(self, parameters)
61
33
  # end
62
34
  #
63
- # Paramix.new can also take a block that injects code into the class
64
- # or module including the parametric mixin. This is useful as an
65
- # alternative to using the #included callback for creating dynamic
66
- # mixins. For example:
35
+ # Paramix::Proxy.new can also take a block that injects code into the
36
+ # mixin. This is useful as an alternative to using the #included
37
+ # callback for creating metaclass dynamics based on mixin parameters.
38
+ # For example:
67
39
  #
68
- # def self.[](parameters)
69
- # Paramix.new(self, parameters) do
70
- # attr_accessor mixin_params[MyMixin][:name]
40
+ # module MyMixin
41
+ # def self.[](parameters)
42
+ # Paramix::Mixin.new(self, parameters) do
43
+ # attr_accessor parameters[MyMixin][:name]
44
+ # end
71
45
  # end
72
46
  # end
73
47
  #
74
48
  # As opposed to:
75
49
  #
76
- # module Mixin
50
+ # module MyMixin
51
+ # include Paramix
52
+ #
77
53
  # def self.included(base)
78
54
  # base.class_eval do
79
- # attr_accessor mixin_params[MyMixin][:name]
55
+ # attr_accessor base.mixin_parameters[:name]
80
56
  # end
57
+ # super(base)
81
58
  # end
82
59
  # end
83
60
  #
84
- #--
85
- # More conveniently a new callback has been added, #included_with_parameters,
86
- # which passes in the parameters in addition to the base class/module.
87
- #
88
- # module Mixin
89
- # def self.included_with_parameters( base, parms )
90
- # base.class_eval {
91
- # def hello
92
- # puts "Hello from #{mixin_parameters[Mixin][:name]}"
93
- # end
94
- # }
95
- # end
96
- # end
97
- #
98
- # We would prefer to have passed the parameters through the #included callback
99
- # method itself, but implementation of such a feature is much more complicated.
100
- # If a reasonable solution presents itself in the future however, we will fix.
101
- #++
102
-
103
- module Paramix # or PatrametricMixin ?
61
+ module Paramix
104
62
 
105
- def self.append_features(base)
106
- (class << base; self; end).class_eval do
107
- define_method(:[]) do |parameters| # TODO until 1.9 no &block
108
- Delegator.new(base, parameters)
109
- end
110
- end
111
- end
112
-
113
- # It you want to define the module's ::[] method by hand. You
114
- # can use Paramix.new instead of Paramix::Delegator.new.
115
-
116
- def self.new(delegate_module, parameters={}, &base_block)
117
- Delegator.new(delegate_module, parameters, &base_block)
63
+ #
64
+ def self.included(base)
65
+ base.extend(ClassMethods)
66
+ super(base)
118
67
  end
119
68
 
120
69
  #
70
+ module ClassMethods
71
+ def [](parameters)
72
+ Proxy.new(self, parameters)
73
+ end
121
74
 
122
- class Delegator < Module
75
+ def included(base)
76
+ base.extend(ClassMethods)
77
+ super(base)
78
+ end
79
+ end
123
80
 
124
- attr :module_delegate
81
+ class Proxy < Module
82
+ attr :mixin
125
83
  attr :parameters
126
- attr :base_block
84
+ attr :block
127
85
 
128
86
  #
129
-
130
- def initialize(module_delegate, parameters={}, &base_block)
131
- @module_delegate = module_delegate
132
- @parameters = parameters
133
- @base_block = base_block
87
+ def initialize(mixin, parameters, &block)
88
+ @mixin = mixin
89
+ @parameters = parameters || {}
90
+ @block = block
134
91
  end
135
92
 
136
93
  #
137
-
138
94
  def append_features(base)
139
- base.mixin_parameters[module_delegate] = parameters
95
+ mixin = @mixin
140
96
 
141
- base.module_eval do
142
- define_method(:mixin_parameters) do
143
- base.mixin_parameters
144
- end
145
- alias_method :mixin_params, :mixin_parameters
146
- end
97
+ base.mixin_parameters[mixin] ||= {}
98
+ base.mixin_parameters[mixin].update(@parameters)
99
+
100
+ mixin.module_eval{ append_features(base) }
147
101
 
148
- base.module_eval(&@base_block) if base_block
102
+ base.module_eval{ include InstanceParameterize }
103
+ #base.extend ClassParameterize
149
104
 
150
- base.__send__(:include, module_delegate)
105
+ mixin.module_eval{ included(base) }
106
+
107
+ base.module_eval(&@block) if @block
151
108
  end
152
109
 
153
110
  #
154
-
155
111
  def extend_object(base)
156
- baseclass = (class << base; self; end)
112
+ mixin = @mixin
157
113
 
158
- baseclass.mixin_parameters[module_delegate] = parameters
114
+ metabase = (class << base; self; end)
159
115
 
160
- baseclass.module_eval do
161
- define_method(:mixin_parameters) do
162
- baseclass.mixin_parameters
163
- end
164
- alias_method :mixin_params, :mixin_parameters
165
- end
116
+ metabase.mixin_parameters[mixin] ||= {}
117
+ metabase.mixin_parameters[mixin].update(@parameters)
166
118
 
167
- baseclass.module_eval(&@base_block) if base_block
119
+ mixin.module_eval{ extend_object(base) }
120
+
121
+ base.extend ClassParameterize
122
+
123
+ metabase.module_eval(&@block) if @block
124
+ end
168
125
 
169
- base.__send__(:extend, module_delegate)
126
+ #
127
+ module InstanceParameterize
128
+ #
129
+ def mixin_param(m, n)
130
+ h = {}; r = nil
131
+ self.class.ancestors.each do |a|
132
+ break if Paramix == a
133
+ break if m == a
134
+ q = a.mixin_parameters
135
+ #if q = Paramix.mixin_params[a]
136
+ if q[m] && q[m].key?(n)
137
+ r = q[m][n]
138
+ else
139
+ q.each do |k,v|
140
+ h.update(v)
141
+ end
142
+ end
143
+ #end
144
+ end
145
+ r ? r : h[n]
146
+ end
170
147
  end
171
148
 
172
- def [](name)
173
- @parameters[name]
149
+ #
150
+ module ClassParameterize
151
+ #
152
+ def mixin_param(m, n)
153
+ h = {}; r = nil
154
+ ancestors.each do |a|
155
+ break if Paramix==a
156
+ if q = a.meta_class.mixin_parameters #[class << a; self ; end]
157
+ #if q = Paramix.mixin_params[class << a; self ; end]
158
+ if q[m] && q[m].key?(n)
159
+ r = q[m][n]
160
+ else
161
+ q.each do |k,v|
162
+ h.update(v)
163
+ end
164
+ end
165
+ end
166
+ end
167
+ r ? r : h[n]
168
+ end
174
169
  end
175
170
 
176
171
  end
177
172
 
178
173
  end
179
174
 
180
-
175
+ #
181
176
  class Module
182
177
 
183
- # Store for parametric mixin parameters.
184
- #
185
- # Returns a hash, the keys of which are the parametric mixin module
186
- # and the values are the parameters associacted with this module/class.
187
- #
188
- # class C
189
- # include P(:x=>1)
190
- # end
191
- #
192
- # C.mixin_parameters[P] #=> {:x=>1}
193
- #
194
178
  def mixin_parameters
195
- @mixin_parameters ||= {}
179
+ @mixin_params ||= {}
196
180
  end
197
181
 
198
182
  alias_method :mixin_params, :mixin_parameters
199
183
 
200
184
  end
201
185
 
186
+ module Kernel
187
+ def meta_class
188
+ (class << self; self; end)
189
+ end
190
+ end
@@ -1 +1 @@
1
- 1.0.1
1
+ 1.1.0
@@ -0,0 +1,44 @@
1
+ require 'paramix'
2
+ require 'test/unit'
3
+
4
+ class TC_Paramix_Nested_Both < Test::Unit::TestCase
5
+
6
+ # -- fixture ------------------------------
7
+
8
+ module M
9
+ include Paramix
10
+
11
+ def f
12
+ mixin_param(M,:p)
13
+ end
14
+ end
15
+
16
+ module N
17
+ include Paramix
18
+ include M[:p=>"mood"]
19
+
20
+ def g
21
+ mixin_params(N,:p)
22
+ end
23
+ end
24
+
25
+ class I
26
+ include N[:p => "mosh"]
27
+ end
28
+
29
+ class E
30
+ extend N[:p => "many"]
31
+ end
32
+
33
+ # -- tests --------------------------------
34
+
35
+ def test_include
36
+ assert_equal( "mood", I.new.f )
37
+ end
38
+
39
+ #def test_extend
40
+ # assert_equal( "many", E.f )
41
+ #end
42
+
43
+ end
44
+
@@ -0,0 +1,51 @@
1
+ require 'paramix'
2
+ require 'test/unit'
3
+
4
+ class TC_Paramix_Nested_Bottom < Test::Unit::TestCase
5
+
6
+ # -- fixture ------------------------------
7
+
8
+ module M
9
+ include Paramix
10
+
11
+ def f
12
+ mixin_param(M,:p)
13
+ end
14
+ end
15
+
16
+ module N
17
+ include M
18
+
19
+ def g
20
+ mixin_param(N,:p)
21
+ end
22
+ end
23
+
24
+ class I
25
+ include N[:p => "mosh"]
26
+ end
27
+
28
+ class E
29
+ extend N[:p => "many"]
30
+ end
31
+
32
+ # -- tests --------------------------------
33
+
34
+ def test_include_f
35
+ assert_equal( "mosh", I.new.f )
36
+ end
37
+
38
+ def test_include_g
39
+ assert_equal( "mosh", I.new.g )
40
+ end
41
+
42
+ def test_extend_f
43
+ assert_equal( "many", E.f )
44
+ end
45
+
46
+ def test_extend_g
47
+ assert_equal( "many", E.g )
48
+ end
49
+
50
+ end
51
+
@@ -0,0 +1,47 @@
1
+ require 'paramix'
2
+ require 'test/unit'
3
+
4
+ class TC_Paramix_Nested_Top < Test::Unit::TestCase
5
+
6
+ # -- fixture ------------------------------
7
+
8
+ module M
9
+ include Paramix
10
+
11
+ def f
12
+ mixin_param(M,:p)
13
+ end
14
+ end
15
+
16
+ module N
17
+ include M[:p=>"mood"]
18
+
19
+ def g
20
+ mixin_param(N,:p)
21
+ end
22
+ end
23
+
24
+ class I
25
+ include N
26
+ end
27
+
28
+ class E
29
+ extend N
30
+ end
31
+
32
+ # -- tests --------------------------------
33
+
34
+ def test_include_f
35
+ assert_equal( "mood", I.new.f )
36
+ end
37
+
38
+ def test_include_g
39
+ assert_equal( nil, I.new.g ) # TODO: or error ?
40
+ end
41
+
42
+ #def test_extend
43
+ # assert_equal( "many", E.f )
44
+ #end
45
+
46
+ end
47
+
@@ -3,53 +3,56 @@ require 'test/unit'
3
3
 
4
4
  class TC_Paramix_Callback < Test::Unit::TestCase
5
5
 
6
+ # -- fixture ------------------------------
7
+
6
8
  module M
7
9
  include Paramix
8
10
 
9
11
  def f
10
- mixin_params[M][:p]
12
+ mixin_param(M,:p)
11
13
  end
12
14
 
15
+ #
13
16
  def self.included(base)
14
- params = base.mixin_params[self]
15
17
  base.class_eval do
16
- define_method :check do
17
- params
18
- end
18
+ attr_accessor mixin_parameters[M][:p]
19
19
  end
20
+ super(base)
20
21
  end
21
22
  end
22
23
 
23
- class C
24
- include M[:p => "check"]
24
+ class C1
25
+ include M[:p => "c1"]
25
26
  end
26
27
 
27
- class D
28
- include M[:p => "steak"]
28
+ class C2
29
+ include M[:p => "c2"]
29
30
  end
30
31
 
31
- def test_01_001
32
- c = C.new
33
- assert_equal( "check", c.mixin_params[M][:p] )
34
- assert_equal( "check", c.f )
32
+ # -- tests --------------------------------
33
+
34
+ def test_class_1
35
+ c = C1.new
36
+ #assert_equal( "c1", c.mixin_params[:p] )
37
+ assert_equal( "c1", c.f )
35
38
  end
36
39
 
37
- def test_01_002
38
- d = D.new
39
- assert_equal( "steak", d.mixin_params[M][:p] )
40
- assert_equal( "steak", d.f )
40
+ def test_class_2
41
+ c = C2.new
42
+ #assert_equal( "c2", c.mixin_params[:p] )
43
+ assert_equal( "c2", c.f )
41
44
  end
42
45
 
43
- def test_01_003
44
- assert_equal( {M=>{:p => "check"}}, C.mixin_parameters )
45
- assert_equal( {M=>{:p => "steak"}}, D.mixin_parameters )
46
+ def test_callback_class_1
47
+ c = C1.new
48
+ c.c1 = :yes1
49
+ assert_equal(:yes1, c.c1)
46
50
  end
47
51
 
48
- def test_01_004
49
- c = C.new
50
- assert_equal( {:p => "check"}, c.check )
51
- d = D.new
52
- assert_equal( {:p => "steak"}, d.check )
52
+ def test_callback_class_2
53
+ c = C2.new
54
+ c.c2 = :yes2
55
+ assert_equal(:yes2, c.c2)
53
56
  end
54
57
 
55
58
  end
@@ -0,0 +1,35 @@
1
+ require 'paramix'
2
+ require 'test/unit'
3
+
4
+ class TC_Paramix_Extend < Test::Unit::TestCase
5
+
6
+ # -- fixture ------------------------------
7
+
8
+ module M
9
+ include Paramix
10
+
11
+ def f
12
+ mixin_param(M,:p)
13
+ end
14
+ end
15
+
16
+ class C1
17
+ extend M[:p => "mosh"]
18
+ end
19
+
20
+ class C2
21
+ extend M[:p => "many"]
22
+ end
23
+
24
+ # -- tests --------------------------------
25
+
26
+ def test_class_1
27
+ assert_equal( "mosh", C1.f )
28
+ end
29
+
30
+ def test_class_2
31
+ assert_equal( "many", C2.f )
32
+ end
33
+
34
+ end
35
+
@@ -0,0 +1,35 @@
1
+ require 'paramix'
2
+ require 'test/unit'
3
+
4
+ class TC_Paramix_Include < Test::Unit::TestCase
5
+
6
+ # -- fixture ------------------------------
7
+
8
+ module M
9
+ include Paramix
10
+
11
+ def f
12
+ mixin_param(M,:p)
13
+ end
14
+ end
15
+
16
+ class C1
17
+ include M[:p => "mosh"]
18
+ end
19
+
20
+ class C2
21
+ include M[:p => "many"]
22
+ end
23
+
24
+ # -- tests --------------------------------
25
+
26
+ def test_class_1
27
+ assert_equal( "mosh", C1.new.f )
28
+ end
29
+
30
+ def test_class_2
31
+ assert_equal( "many", C2.new.f )
32
+ end
33
+
34
+ end
35
+
@@ -1,63 +1,14 @@
1
1
  require 'paramix'
2
2
  require 'test/unit'
3
3
 
4
- class TC_Paramix_02 < Test::Unit::TestCase
4
+ class TC_Paramix_Inject < Test::Unit::TestCase
5
5
 
6
- module M
7
- # Manually define Paramix method.
8
- def self.[](parameters)
9
- Paramix.new(self, parameters) do
10
- define_method :check do
11
- mixin_params[M] # or parameters
12
- end
13
- end
14
- end
15
-
16
- def f
17
- mixin_params[M][:p]
18
- end
19
- end
20
-
21
- class C
22
- include M[:p => "check"]
23
- end
24
-
25
- class D
26
- include M[:p => "steak"]
27
- end
28
-
29
- def test_02_001
30
- c = C.new
31
- assert_equal( "check", c.mixin_params[M][:p] )
32
- assert_equal( "check", c.f )
33
- end
34
-
35
- def test_02_002
36
- d = D.new
37
- assert_equal( "steak", d.mixin_params[M][:p] )
38
- assert_equal( "steak", d.f )
39
- end
40
-
41
- def test_02_003
42
- assert_equal( {M=>{:p => "check"}}, C.mixin_parameters )
43
- assert_equal( {M=>{:p => "steak"}}, D.mixin_parameters )
44
- end
45
-
46
- def test_02_004
47
- c = C.new
48
- assert_equal( {:p => "check"}, c.check )
49
- d = D.new
50
- assert_equal( {:p => "steak"}, d.check )
51
- end
52
-
53
- end
54
-
55
- class TC_Paramix_04 < Test::Unit::TestCase
6
+ # -- fixture ------------------------------
56
7
 
57
8
  module O
58
9
  def self.[](parameters)
59
- Paramix.new(self, parameters) do
60
- attr_accessor mixin_parameters[O][:name]
10
+ Paramix::Proxy.new(self, parameters) do
11
+ attr_accessor mixin_parameters[O][:name] #mixin_params(O, :name)
61
12
  end
62
13
  end
63
14
  end
@@ -66,6 +17,8 @@ class TC_Paramix_04 < Test::Unit::TestCase
66
17
  include O[:name=>"x"]
67
18
  end
68
19
 
20
+ # -- tests --------------------------------
21
+
69
22
  def test_attribute
70
23
  o = X.new
71
24
  assert_nothing_raised{ o.x = 10 }
@@ -1,39 +1,38 @@
1
1
  require 'paramix'
2
2
  require 'test/unit'
3
3
 
4
- class TC_Paramix_Basic < Test::Unit::TestCase
4
+ class TC_Paramix_Namespace < Test::Unit::TestCase
5
5
 
6
- module Q1
6
+ # -- fixture ------------------------------
7
+
8
+ module N1
7
9
  module M
8
10
  include Paramix
9
11
 
10
12
  def f
11
- mixin_params[M][:p]
13
+ mixin_param(M,:p)
12
14
  end
13
15
  end
14
16
  end
15
17
 
16
- module Q2
17
- class C
18
- extend Q1::M[:p => "mosh"]
18
+ module N2
19
+ class I
20
+ include N1::M[:p => "mosh"]
19
21
  end
20
22
 
21
- class D
22
- extend Q1::M[:p => "many"]
23
+ class E
24
+ extend N1::M[:p => "many"]
23
25
  end
24
26
  end
25
27
 
26
- def test_03_001
27
- assert_equal( "mosh", Q2::C.f )
28
- end
28
+ # -- tests --------------------------------
29
29
 
30
- def test_03_002
31
- assert_equal( "many", Q2::D.f )
30
+ def test_class_1
31
+ assert_equal( "mosh", N2::I.new.f )
32
32
  end
33
33
 
34
- def test_03_003
35
- assert_equal( {Q1::M=>{:p => "mosh"}}, (class << Q2::C; self; end).mixin_parameters )
36
- assert_equal( {Q1::M=>{:p => "many"}}, (class << Q2::D; self; end).mixin_parameters )
34
+ def test_class_2
35
+ assert_equal( "many", N2::E.f )
37
36
  end
38
37
 
39
38
  end
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 1
7
- - 0
8
7
  - 1
9
- version: 1.0.1
8
+ - 0
9
+ version: 1.1.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Thomas Sawyer
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-04-03 00:00:00 -04:00
17
+ date: 2010-04-05 00:00:00 -04:00
18
18
  default_executable:
19
19
  dependencies: []
20
20
 
@@ -42,14 +42,17 @@ files:
42
42
  - meta/summary
43
43
  - meta/title
44
44
  - meta/version
45
- - test/test_paramix_basic.rb
45
+ - test/nested/test_nested_both.rb
46
+ - test/nested/test_nested_bottom.rb
47
+ - test/nested/test_nested_top.rb
46
48
  - test/test_paramix_callback.rb
49
+ - test/test_paramix_extend.rb
50
+ - test/test_paramix_include.rb
47
51
  - test/test_paramix_inject.rb
48
52
  - test/test_paramix_namespace.rb
49
53
  - LICENSE
50
54
  - README.rdoc
51
55
  - HISTORY
52
- - Syckfile
53
56
  has_rdoc: true
54
57
  homepage: http://rubyworks.github.com/paramix
55
58
  licenses: []
@@ -82,7 +85,11 @@ signing_key:
82
85
  specification_version: 3
83
86
  summary: Parametric Mixins
84
87
  test_files:
85
- - test/test_paramix_basic.rb
88
+ - test/nested/test_nested_both.rb
89
+ - test/nested/test_nested_bottom.rb
90
+ - test/nested/test_nested_top.rb
86
91
  - test/test_paramix_callback.rb
92
+ - test/test_paramix_extend.rb
93
+ - test/test_paramix_include.rb
87
94
  - test/test_paramix_inject.rb
88
95
  - test/test_paramix_namespace.rb
data/Syckfile DELETED
@@ -1,79 +0,0 @@
1
- ---
2
- announce:
3
- service : Email
4
- file : ~
5
- subject : ~
6
- mailto : ruby-talk@ruby-lang.org
7
- active : true
8
-
9
- box:
10
- service: Box
11
- active : true
12
- types : [gem, tar]
13
- include: [bin, demo, lib, meta, test, "[A-Z]*"]
14
- exclude: ~
15
-
16
- rdoc:
17
- service : RDoc
18
- template : redfish
19
- include : ~
20
- exclude : ~
21
- main : ~
22
- extra : ~
23
- active : true
24
-
25
- ridoc:
26
- service: RIDoc
27
- include: ~
28
- exclude: ~
29
- active : true
30
-
31
- notes:
32
- service : DNotes
33
- loadpath : ~
34
- labels : ~
35
- output : ~
36
- format : ~
37
- active : false
38
-
39
- stats:
40
- service : Stats
41
- title : ~
42
- loadpath : ~
43
- exclude : ~
44
- output : ~
45
- active : true
46
-
47
- testrb:
48
- service : testrb
49
- tests : ~
50
- exclude : ~
51
- loadpath : ~
52
- requires : ~
53
- live : false
54
- active : true
55
-
56
- syntax:
57
- service : Syntax
58
- loadpath : ~
59
- exclude : ~
60
- active : false
61
-
62
- vclog:
63
- service : VClog
64
- format : html # xml, txt
65
- layout : rel # gnu
66
- typed : false
67
- output : ~
68
- active : false
69
-
70
-
71
- #rubyforge:
72
- # service : Rubyforge
73
- # unixname: <%= project %>
74
- # groupid : ~
75
- # package : <%= package %>
76
- # sitemap:
77
- # doc/rdoc: <%= package %>
78
- # active : false
79
-
@@ -1,36 +0,0 @@
1
- require 'paramix'
2
- require 'test/unit'
3
-
4
- class TC_Paramix_Basic < Test::Unit::TestCase
5
-
6
- module M
7
- include Paramix
8
-
9
- def f
10
- mixin_params[M][:p]
11
- end
12
- end
13
-
14
- class C
15
- extend M[:p => "mosh"]
16
- end
17
-
18
- class D
19
- extend M[:p => "many"]
20
- end
21
-
22
- def test_03_001
23
- assert_equal( "mosh", C.f )
24
- end
25
-
26
- def test_03_002
27
- assert_equal( "many", D.f )
28
- end
29
-
30
- def test_03_003
31
- assert_equal( {M=>{:p => "mosh"}}, (class << C; self; end).mixin_parameters )
32
- assert_equal( {M=>{:p => "many"}}, (class << D; self; end).mixin_parameters )
33
- end
34
-
35
- end
36
-