mixology 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -3,18 +3,19 @@ require 'rake/clean'
3
3
  require 'rake/gempackagetask'
4
4
  require "rake/testtask"
5
5
 
6
- if RUBY_PLATFORM =~ /java/
7
- task :default => %w[clean compile_java test]
8
- else
9
- task :default => %w[clean compile test]
10
- end
6
+ desc "clean, compile, test"
7
+ task :default => %w[clean compile test]
11
8
 
12
9
  Rake::TestTask.new("test") do |t|
13
10
  t.pattern = "test/**/*_test.rb"
14
11
  end
15
12
 
16
13
  desc "Builds the extension"
17
- task :compile => ["ext/mixology/Makefile", "ext/mixology/mixology.#{Config::CONFIG['DLEXT']}" ]
14
+ if RUBY_PLATFORM =~ /java/
15
+ task :compile => :compile_java
16
+ else
17
+ task :compile => %W[ext/mixology/Makefile ext/mixology/mixology.#{Config::CONFIG['DLEXT']}]
18
+ end
18
19
 
19
20
  file "ext/mixology/Makefile" => ["ext/mixology/extconf.rb"] do
20
21
  Dir.chdir("ext/mixology") do
@@ -29,15 +30,13 @@ file "ext/mixology/mixology.#{Config::CONFIG['DLEXT']}" do
29
30
  cp "ext/mixology/mixology.#{Config::CONFIG['DLEXT']}", "lib"
30
31
  end
31
32
 
32
- CLEAN.include %w[ext/mixology/Makefile ext/mixology/mixology.bundle lib/mixology.bundle]
33
+ CLEAN.include %w[ext/mixology/Makefile ext/mixology/mixology.bundle ext/mixology/mixology.so lib/mixology.bundle lib/mixology.so ext/mixology/mixology.o]
33
34
  CLEAN.include %w[ext/mixology/MixableService.class ext/mixology/mixable.jar lib/mixology.jar]
34
35
 
35
- Gem::manage_gems
36
-
37
36
  specification = Gem::Specification.new do |s|
38
37
  s.name = "mixology"
39
38
  s.summary = "Mixology enables objects to mixin and unmix modules."
40
- s.version = "0.1.0"
39
+ s.version = "0.2.0"
41
40
  s.author = "anonymous z, Pat Farley, Dan Manges"
42
41
  s.description = s.summary
43
42
  s.homepage = "http://mixology.rubyforge.org"
@@ -49,7 +48,7 @@ specification = Gem::Specification.new do |s|
49
48
  s.platform = Gem::Platform::WIN32
50
49
  s.files += ["lib/mixology.so"]
51
50
  elsif RUBY_PLATFORM =~ /java/
52
- s.platform = "jruby"
51
+ s.platform = "java"
53
52
  s.files += ["lib/mixology.jar"]
54
53
  else
55
54
  s.platform = Gem::Platform::RUBY
@@ -64,8 +63,37 @@ end
64
63
  desc "Compiles the JRuby extension"
65
64
  task :compile_java do
66
65
  Dir.chdir("ext/mixology") do
67
- sh %{javac -source 1.4 -target 1.4 -classpath $JRUBY_HOME/lib/jruby.jar MixologyService.java}
66
+ sh %{javac -source 1.5 -target 1.5 -classpath $JRUBY_HOME/lib/jruby.jar MixologyService.java}
68
67
  sh %{jar cf mixology.jar MixologyService.class}
69
68
  cp "mixology.jar", "../../lib/mixology.jar"
70
69
  end
71
70
  end
71
+
72
+ desc "test against multiple ruby implementations"
73
+ task :test_multi do
74
+ # this is specific to how I have Ruby installed on my machine -Dan
75
+ jruby = %w[1.1.3 1.1.4]
76
+ mri = %w[1.8.6-p368 1.9.1-p129]
77
+ failed = false
78
+ test_implementation = proc do |implementation, command|
79
+ print "#{implementation}: "
80
+ output = `#{command} 2>&1`
81
+ if $?.success? && output =~ /\d\d+ tests.*0 failures, 0 errors/
82
+ puts "PASS"
83
+ else
84
+ puts "FAIL"
85
+ failed = true
86
+ end
87
+ end
88
+ jruby.each do |jruby_version|
89
+ test_implementation.call(
90
+ "JRuby #{jruby_version}",
91
+ "JRUBY_HOME=/usr/local/jruby-#{jruby_version} /usr/local/jruby-#{jruby_version}/bin/jruby -S rake"
92
+ )
93
+ end
94
+ mri.each do |mri_version|
95
+ test_implementation.call "MRI #{mri_version}", "/usr/local/ruby-#{mri_version}/bin/rake"
96
+ end
97
+ fail if failed
98
+ end
99
+
@@ -1,3 +1,4 @@
1
1
  require "mkmf"
2
2
  dir_config "mixology"
3
+ $CPPFLAGS += " -DRUBY_19" if RUBY_VERSION =~ /1.9/
3
4
  create_makefile "mixology"
@@ -1,78 +1,125 @@
1
1
  #include "ruby.h"
2
2
 
3
- static void remove_nested_module(VALUE klass, VALUE include_class) {
4
-
5
- if(RBASIC(RCLASS(klass)->super)->klass != RBASIC(RCLASS(include_class)->super)->klass) {
6
- return;
7
- }
8
- if(RCLASS(RCLASS(include_class)->super)->super && BUILTIN_TYPE(RCLASS(include_class)->super) == T_ICLASS) {
9
- remove_nested_module(RCLASS(klass)->super, RCLASS(include_class)->super);
10
- }
11
- RCLASS(klass)->super = RCLASS(RCLASS(klass)->super)->super;
3
+ /* cannot use ordinary CLASS_OF as it does not return an lvalue */
4
+ #define KLASS_OF(c) (RBASIC(c)->klass)
5
+
6
+ /* macros for backwards compatibility with 1.8 */
7
+ #ifndef RUBY_19
8
+ # define RCLASS_M_TBL(c) (RCLASS(c)->m_tbl)
9
+ # define RCLASS_SUPER(c) (RCLASS(c)->super)
10
+ # define RCLASS_IV_TBL(c) (RCLASS(c)->iv_tbl)
11
+ #endif
12
+
13
+ #ifdef RUBY_19
14
+ static VALUE class_alloc(VALUE flags, VALUE klass)
15
+ {
16
+ rb_classext_t *ext = ALLOC(rb_classext_t);
17
+ NEWOBJ(obj, struct RClass);
18
+ OBJSETUP(obj, klass, flags);
19
+ obj->ptr = ext;
20
+ RCLASS_IV_TBL(obj) = 0;
21
+ RCLASS_M_TBL(obj) = 0;
22
+ RCLASS_SUPER(obj) = 0;
23
+ RCLASS_IV_INDEX_TBL(obj) = 0;
24
+ return (VALUE)obj;
12
25
  }
26
+ #endif
13
27
 
14
- static VALUE rb_unmix(VALUE self, VALUE module) {
15
- VALUE klass;
16
- for (klass = RBASIC(self)->klass; klass != rb_class_real(klass); klass = RCLASS(klass)->super) {
17
- VALUE super = RCLASS(klass)->super;
18
- if (BUILTIN_TYPE(super) == T_ICLASS) {
19
- if (RBASIC(super)->klass == module) {
20
- if(RCLASS(module)->super && BUILTIN_TYPE(RCLASS(module)->super) == T_ICLASS)
21
- remove_nested_module(super, module);
22
- RCLASS(klass)->super = RCLASS(RCLASS(klass)->super)->super;
23
- rb_clear_cache();
24
- }
25
- }
26
- }
27
- return self;
28
+ static void remove_nested_module(VALUE klass, VALUE include_class)
29
+ {
30
+ if (KLASS_OF(RCLASS_SUPER(klass)) != KLASS_OF(RCLASS_SUPER(include_class))) {
31
+ return;
32
+ }
33
+ if (RCLASS_SUPER(RCLASS_SUPER(include_class)) && BUILTIN_TYPE(RCLASS_SUPER(include_class)) == T_ICLASS) {
34
+ remove_nested_module(RCLASS_SUPER(klass), RCLASS_SUPER(include_class));
35
+ }
36
+ RCLASS_SUPER(klass) = RCLASS_SUPER(RCLASS_SUPER(klass));
28
37
  }
29
38
 
30
- static void add_module(VALUE self, VALUE module) {
31
- VALUE super = RCLASS(rb_singleton_class(self))->super;
32
- NEWOBJ(klass, struct RClass);
33
- OBJSETUP(klass, rb_cClass, T_ICLASS);
34
-
35
- if (BUILTIN_TYPE(module) == T_ICLASS) {
36
- module = RBASIC(module)->klass;
37
- }
38
- if (!RCLASS(module)->iv_tbl) {
39
- RCLASS(module)->iv_tbl = (void*)st_init_numtable();
40
- }
41
- klass->iv_tbl = RCLASS(module)->iv_tbl;
42
- klass->m_tbl = RCLASS(module)->m_tbl;
43
- klass->super = super;
44
- if (TYPE(module) == T_ICLASS) {
45
- RBASIC(klass)->klass = RBASIC(module)->klass;
46
- }
47
- else {
48
- RBASIC(klass)->klass = module;
49
- }
50
- OBJ_INFECT(klass, module);
51
- OBJ_INFECT(klass, super);
52
-
53
- RCLASS(rb_singleton_class(self))->super = (int)klass;
39
+ static VALUE rb_unmix(VALUE self, VALUE module)
40
+ {
41
+ VALUE klass;
42
+
43
+ /* check that module is valid */
44
+ if (TYPE(module) != T_MODULE)
45
+ rb_raise(rb_eArgError, "error: parameter must be a module");
46
+
47
+ for (klass = KLASS_OF(self); klass != rb_class_real(klass); klass = RCLASS_SUPER(klass)) {
48
+ VALUE super = RCLASS_SUPER(klass);
49
+ if (BUILTIN_TYPE(super) == T_ICLASS) {
50
+ if (KLASS_OF(super) == module) {
51
+ if (RCLASS_SUPER(module) && BUILTIN_TYPE(RCLASS_SUPER(module)) == T_ICLASS)
52
+ remove_nested_module(super, module);
54
53
 
54
+ RCLASS_SUPER(klass) = RCLASS_SUPER(RCLASS_SUPER(klass));
55
+ rb_clear_cache();
56
+ }
57
+ }
58
+ }
59
+ return self;
55
60
  }
56
61
 
57
- static VALUE rb_mixin(VALUE self, VALUE module) {
58
- rb_unmix(self, module);
62
+ static void add_module(VALUE self, VALUE module)
63
+ {
64
+ VALUE super = RCLASS_SUPER(rb_singleton_class(self));
59
65
 
60
- VALUE nested_modules = rb_mod_included_modules(module);
61
- int index;
62
- for (index = RARRAY(nested_modules)->len; index > 0; index--) {
63
- VALUE nested_module = RARRAY(nested_modules)->ptr[index-1];
64
- add_module(self, nested_module);
65
- }
66
+ #ifdef RUBY_19
67
+ VALUE klass = class_alloc(T_ICLASS, rb_cClass);
68
+ #else
69
+ NEWOBJ(klass, struct RClass);
70
+ OBJSETUP(klass, rb_cClass, T_ICLASS);
71
+ #endif
66
72
 
67
- add_module(self, module);
73
+ if (BUILTIN_TYPE(module) == T_ICLASS) {
74
+ module = KLASS_OF(module);
75
+ }
76
+ if (!RCLASS_IV_TBL(module)) {
77
+ RCLASS_IV_TBL(module) = (void*)st_init_numtable();
78
+ }
68
79
 
69
- rb_clear_cache();
70
- return self;
80
+ RCLASS_IV_TBL(klass) = RCLASS_IV_TBL(module);
81
+ RCLASS_M_TBL(klass) = RCLASS_M_TBL(module);
82
+ RCLASS_SUPER(klass) = super;
83
+
84
+ if (TYPE(module) == T_ICLASS) {
85
+ KLASS_OF(klass) = KLASS_OF(module);
86
+ } else {
87
+ KLASS_OF(klass) = module;
88
+ }
89
+ OBJ_INFECT(klass, module);
90
+ OBJ_INFECT(klass, super);
91
+
92
+ RCLASS_SUPER(rb_singleton_class(self)) = (VALUE)klass;
71
93
  }
72
94
 
73
- void Init_mixology() {
74
- VALUE Mixology = rb_define_module("Mixology");
75
- rb_define_method(Mixology, "mixin", rb_mixin, 1);
76
- rb_define_method(Mixology, "unmix", rb_unmix, 1);
77
- rb_include_module(rb_cObject, Mixology);
78
- }
95
+ static VALUE rb_mixin(VALUE self, VALUE module)
96
+ {
97
+ VALUE nested_modules;
98
+ int index;
99
+
100
+ /* check that module is valid */
101
+ if (TYPE(module) != T_MODULE)
102
+ rb_raise(rb_eArgError, "error: parameter must be a module");
103
+
104
+ rb_unmix(self, module);
105
+ nested_modules = rb_mod_included_modules(module);
106
+
107
+ for (index = RARRAY_LEN(nested_modules); index > 0; index--) {
108
+ VALUE nested_module = RARRAY_PTR(nested_modules)[index - 1];
109
+ add_module(self, nested_module);
110
+ }
111
+
112
+ add_module(self, module);
113
+
114
+ rb_clear_cache();
115
+ return self;
116
+ }
117
+
118
+ void Init_mixology()
119
+ {
120
+ VALUE Mixology = rb_define_module("Mixology");
121
+
122
+ rb_define_method(Mixology, "mixin", rb_mixin, 1);
123
+ rb_define_method(Mixology, "unmix", rb_unmix, 1);
124
+ rb_include_module(rb_cObject, Mixology);
125
+ }
@@ -0,0 +1,39 @@
1
+ module Mixology
2
+ def mixin(mod)
3
+ unmix mod
4
+ reset_method_cache
5
+ IncludedModule.new(mod).attach_to metaclass
6
+ reset_method_cache
7
+ self
8
+ end
9
+
10
+ def unmix(mod_to_unmix)
11
+ last_super = metaclass
12
+ this_super = metaclass.direct_superclass
13
+ while this_super
14
+ break if this_super == self.class
15
+ if (this_super == mod_to_unmix ||
16
+ this_super.respond_to?(:module) && this_super.module == mod_to_unmix)
17
+ reset_method_cache
18
+ last_super.superclass = this_super.direct_superclass
19
+ reset_method_cache
20
+ return self
21
+ else
22
+ last_super = this_super
23
+ this_super = this_super.direct_superclass
24
+ end
25
+ end
26
+ self
27
+ end
28
+
29
+ protected
30
+
31
+ def reset_method_cache
32
+ self.methods.each do |name|
33
+ name = self.metaclass.send(:normalize_name,name)
34
+ Rubinius::VM.reset_method_cache(name)
35
+ end
36
+ end
37
+ end
38
+
39
+ Object.send :include, Mixology
@@ -2,14 +2,14 @@ require File.dirname(__FILE__) + "/test_helper"
2
2
 
3
3
  class MixologyTest < Test::Unit::TestCase
4
4
 
5
- test "mixin" do
5
+ def test_mixin
6
6
  mixin = Module.new { def foo; "foo"; end }
7
7
  object = Object.new
8
8
  object.mixin mixin
9
9
  assert_equal "foo", object.foo
10
10
  end
11
11
 
12
- test "unmix" do
12
+ def test_unmix
13
13
  mixin = Module.new { def foo; "mixin"; end }
14
14
  object = Class.new { def foo; "object"; end }.new
15
15
  object.mixin mixin
@@ -18,7 +18,7 @@ class MixologyTest < Test::Unit::TestCase
18
18
  assert_equal "object", object.foo
19
19
  end
20
20
 
21
- test "mixin twice" do
21
+ def test_mixin_twice
22
22
  first_mixin = Module.new { def foo; "first"; end }
23
23
  second_mixin = Module.new { def foo; "second"; end }
24
24
  object = Object.new
@@ -27,13 +27,13 @@ class MixologyTest < Test::Unit::TestCase
27
27
  assert_equal "second", object.foo
28
28
  end
29
29
 
30
- test "mixin to class" do
30
+ def test_mixin_to_class
31
31
  mix = Module.new { def foo; "foo"; end }
32
32
  klass = Class.new { mixin mix }
33
33
  assert_equal "foo", klass.foo
34
34
  end
35
35
 
36
- test "can mixin again" do
36
+ def test_can_mixin_again
37
37
  first_mixin = Module.new { def foo; "first"; end }
38
38
  second_mixin = Module.new { def foo; "second"; end }
39
39
  object = Object.new
@@ -43,7 +43,7 @@ class MixologyTest < Test::Unit::TestCase
43
43
  assert_equal "first", object.foo
44
44
  end
45
45
 
46
- test "unmix effects limited to instance" do
46
+ def test_unmix_effects_limited_to_instance
47
47
  mixin = Module.new { def foo; "mixin"; end }
48
48
  object = Class.new {include mixin}.new
49
49
  assert_equal "mixin", object.foo
@@ -51,7 +51,7 @@ class MixologyTest < Test::Unit::TestCase
51
51
  assert_equal "mixin", object.foo
52
52
  end
53
53
 
54
- test "can add mod to an instance even when already included by class" do
54
+ def test_can_add_mod_to_an_instance_even_when_already_included_by_class
55
55
  mixin = Module.new { def foo; "mixin"; end }
56
56
  klass = Class.new {include mixin; def foo; "class"; end }
57
57
  object = klass.new
@@ -60,92 +60,101 @@ class MixologyTest < Test::Unit::TestCase
60
60
  assert_equal "mixin", object.foo
61
61
  end
62
62
 
63
- test "included modules after mixin" do
63
+ def test_included_modules_after_mixin
64
64
  mixin = Module.new
65
65
  object = Object.new
66
66
  object.mixin mixin
67
- assert_equal [mixin, Mixology, Kernel], (class << object; self; end).included_modules
67
+ assert_equal [mixin, Mixology, PP::ObjectMixin, Kernel], (class << object; self; end).included_modules
68
68
  end
69
69
 
70
- test "included modules after unmix" do
70
+ def test_included_modules_after_unmix
71
71
  mixin = Module.new
72
72
  object = Object.new
73
73
  object.mixin mixin
74
74
  object.unmix mixin
75
- assert_equal [Mixology, Kernel], (class << object; self; end).included_modules
75
+ assert_equal [Mixology, PP::ObjectMixin, Kernel], (class << object; self; end).included_modules
76
76
  end
77
77
 
78
- test "included modules after remix" do
78
+ def test_included_modules_after_remix
79
79
  mixin_one = Module.new
80
80
  mixin_two = Module.new
81
81
  object = Object.new
82
82
  object.mixin mixin_one
83
83
  object.mixin mixin_two
84
- assert_equal [mixin_two, mixin_one, Mixology, Kernel], (class << object; self; end).included_modules
84
+ assert_equal [mixin_two, mixin_one, Mixology, PP::ObjectMixin, Kernel], (class << object; self; end).included_modules
85
85
  object.mixin mixin_one
86
- assert_equal [mixin_one, mixin_two, Mixology, Kernel], (class << object; self; end).included_modules
86
+ assert_equal [mixin_one, mixin_two, Mixology, PP::ObjectMixin, Kernel], (class << object; self; end).included_modules
87
87
  end
88
88
 
89
- test "mixin returns object" do
89
+ def test_mixin_returns_object
90
90
  object = Object.new
91
91
  mixin = Module.new
92
92
  assert_equal object, object.mixin(mixin)
93
93
  end
94
94
 
95
- test "unmix returns object" do
95
+ def test_unmix_returns_object
96
96
  object = Object.new
97
97
  mixin = Module.new
98
98
  object.mixin mixin
99
99
  assert_equal object, object.unmix(mixin)
100
100
  end
101
101
 
102
- test "nested modules are mixedin" do
102
+ def test_nested_modules_are_mixedin
103
+ if rubinius?
104
+ print "PENDING"; return
105
+ end
103
106
  nested_module = Module.new { def foo; "foo"; end }
104
107
  mixin = Module.new { include nested_module }
105
108
  object = Object.new
106
109
  object.mixin mixin
107
- assert_equal [mixin, nested_module, Mixology, Kernel], (class << object; self; end).included_modules
110
+ assert_equal [mixin, nested_module, Mixology, PP::ObjectMixin, Kernel], (class << object; self; end).included_modules
108
111
  end
109
112
 
110
- test "nested modules are mixedin deeply" do
113
+ def test_nested_modules_are_mixedin_deeply
114
+ if rubinius?
115
+ print "PENDING"; return
116
+ end
111
117
  nested_module_ultimate = Module.new
112
118
  nested_module_penultimate = Module.new { include nested_module_ultimate }
113
119
  nested_module = Module.new { include nested_module_penultimate }
114
120
  mixin = Module.new { include nested_module }
115
121
  object = Object.new
116
122
  object.mixin mixin
117
- assert_equal [mixin, nested_module, nested_module_penultimate, nested_module_ultimate, Mixology, Kernel], (class << object; self; end).included_modules
123
+ assert_equal [mixin, nested_module, nested_module_penultimate, nested_module_ultimate, Mixology, PP::ObjectMixin, Kernel], (class << object; self; end).included_modules
118
124
  end
119
125
 
120
- test "nested modules are mixedin even if alrady mixed in" do
126
+ def test_nested_modules_are_mixedin_even_if_already_mixed_in
127
+ if rubinius?
128
+ print "PENDING"; return
129
+ end
121
130
  nested_module = Module.new { def foo; "foo"; end }
122
131
  mixin = Module.new { include nested_module }
123
132
  object = Object.new
124
133
  object.mixin nested_module
125
134
  object.mixin mixin
126
- assert_equal [mixin, nested_module, nested_module, Mixology, Kernel], (class << object; self; end).included_modules
135
+ assert_equal [mixin, nested_module, nested_module, Mixology, PP::ObjectMixin, Kernel], (class << object; self; end).included_modules
127
136
  end
128
137
 
129
- test "module is not unmixed if it is outside nested chain" do
138
+ def test_module_is_not_unmixed_if_it_is_outside_nested_chain
130
139
  nested_module = Module.new
131
140
  mixin = Module.new { include nested_module }
132
141
  object = Object.new
133
142
  object.mixin nested_module
134
143
  object.mixin mixin
135
144
  object.unmix mixin
136
- assert_equal [nested_module, Mixology, Kernel], (class << object; self; end).included_modules
145
+ assert_equal [nested_module, Mixology, PP::ObjectMixin, Kernel], (class << object; self; end).included_modules
137
146
  end
138
147
 
139
- test "nested modules are unmixed" do
148
+ def test_nested_modules_are_unmixed
140
149
  nested_module = Module.new
141
150
  mixin = Module.new { include nested_module }
142
151
  object = Object.new
143
152
  object.mixin mixin
144
153
  object.unmix mixin
145
- assert_equal [Mixology, Kernel], (class << object; self; end).included_modules
154
+ assert_equal [Mixology, PP::ObjectMixin, Kernel], (class << object; self; end).included_modules
146
155
  end
147
156
 
148
- test "nested modules are unmixed deeply" do
157
+ def test_nested_modules_are_unmixed_deeply
149
158
  nested_module_ultimate = Module.new
150
159
  nested_module_penultimate = Module.new { include nested_module_ultimate }
151
160
  nested_module = Module.new { include nested_module_penultimate }
@@ -153,10 +162,10 @@ class MixologyTest < Test::Unit::TestCase
153
162
  object = Object.new
154
163
  object.mixin mixin
155
164
  object.unmix mixin
156
- assert_equal [Mixology, Kernel], (class << object; self; end).included_modules
165
+ assert_equal [Mixology, PP::ObjectMixin, Kernel], (class << object; self; end).included_modules
157
166
  end
158
167
 
159
- test "unrelated modules are not unmixed" do
168
+ def test_unrelated_modules_are_not_unmixed
160
169
  unrelated = Module.new
161
170
  nested_module = Module.new
162
171
  mixin = Module.new { include nested_module }
@@ -164,7 +173,11 @@ class MixologyTest < Test::Unit::TestCase
164
173
  object.mixin unrelated
165
174
  object.mixin mixin
166
175
  object.unmix mixin
167
- assert_equal [unrelated, Mixology, Kernel], (class << object; self; end).included_modules
176
+ assert_equal [unrelated, Mixology, PP::ObjectMixin, Kernel], (class << object; self; end).included_modules
177
+ end
178
+
179
+ def rubinius?
180
+ defined?(RUBY_ENGINE) && RUBY_ENGINE == "rbx"
168
181
  end
169
182
 
170
183
  end
@@ -1,20 +1,10 @@
1
1
  require "test/unit"
2
- require "rubygems"
2
+ # In Ruby 1.9, require test/unit will implicitly require pp, we do it here explicitly to ensure compatibily.
3
+ require "pp"
3
4
 
4
- if RUBY_PLATFORM =~ /java/
5
- Test::Unit::TestCase.class_eval do
6
- def self.test(test_name, &block)
7
- define_method("test_#{test_name}", &block)
8
- end
9
- end
5
+ $LOAD_PATH.unshift File.dirname(__FILE__) + "/../lib"
6
+ if defined?(RUBY_ENGINE) && RUBY_ENGINE == "rbx"
7
+ require "mixology_rubinius"
10
8
  else
11
- begin
12
- gem "dust"
13
- require "dust"
14
- rescue LoadError
15
- raise "To run the tests, 'gem install dust'"
16
- end
9
+ require "mixology"
17
10
  end
18
-
19
- $LOAD_PATH.unshift File.dirname(__FILE__) + "/../lib"
20
- require "mixology"
metadata CHANGED
@@ -1,51 +1,58 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.3
3
- specification_version: 1
4
2
  name: mixology
5
3
  version: !ruby/object:Gem::Version
6
- version: 0.1.0
7
- date: 2007-08-31 00:00:00 -04:00
8
- summary: Mixology enables objects to mixin and unmix modules.
9
- require_paths:
10
- - lib
11
- email:
12
- homepage: http://mixology.rubyforge.org
13
- rubyforge_project: mixology
14
- description: Mixology enables objects to mixin and unmix modules.
15
- autorequire: mixology
16
- default_executable:
17
- bindir: bin
18
- has_rdoc: false
19
- required_ruby_version: !ruby/object:Gem::Version::Requirement
20
- requirements:
21
- - - ">"
22
- - !ruby/object:Gem::Version
23
- version: 0.0.0
24
- version:
4
+ version: 0.2.0
25
5
  platform: ruby
26
- signing_key:
27
- cert_chain:
28
- post_install_message:
29
6
  authors:
30
7
  - anonymous z, Pat Farley, Dan Manges
8
+ autorequire: mixology
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-08-24 00:00:00 -05:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: Mixology enables objects to mixin and unmix modules.
17
+ email:
18
+ executables: []
19
+
20
+ extensions:
21
+ - ext/mixology/extconf.rb
22
+ extra_rdoc_files: []
23
+
31
24
  files:
32
25
  - ext/mixology/mixology.c
33
26
  - ext/mixology/extconf.rb
34
- - ext/mixology/rbconfig.rb
35
- - test/mixology_test.rb
27
+ - lib/mixology_rubinius.rb
36
28
  - test/test_helper.rb
29
+ - test/mixology_test.rb
37
30
  - Rakefile
38
- test_files: []
39
-
31
+ has_rdoc: false
32
+ homepage: http://mixology.rubyforge.org
33
+ post_install_message:
40
34
  rdoc_options: []
41
35
 
42
- extra_rdoc_files: []
43
-
44
- executables: []
45
-
46
- extensions:
47
- - ext/mixology/extconf.rb
36
+ require_paths:
37
+ - lib
38
+ required_ruby_version: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: "0"
43
+ version:
44
+ required_rubygems_version: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: "0"
49
+ version:
48
50
  requirements: []
49
51
 
50
- dependencies: []
52
+ rubyforge_project: mixology
53
+ rubygems_version: 1.3.1
54
+ signing_key:
55
+ specification_version: 2
56
+ summary: Mixology enables objects to mixin and unmix modules.
57
+ test_files: []
51
58
 
@@ -1,169 +0,0 @@
1
- # This file was created by mkconfig.rb when ruby was built. Any
2
- # changes made to this file will be lost the next time ruby is built.
3
-
4
- module Config
5
- RUBY_VERSION == "1.8.5" or
6
- raise "ruby lib version (1.8.4) doesn't match executable version (#{RUBY_VERSION})"
7
-
8
- TOPDIR = File.dirname(__FILE__).chomp!("/lib/ruby/1.8/i386-mingw32")
9
- DESTDIR = '' unless defined? DESTDIR
10
- CONFIG = {}
11
- CONFIG["DESTDIR"] = DESTDIR
12
- CONFIG["INSTALL"] = "/usr/bin/install -c"
13
- CONFIG["prefix"] = (TOPDIR || DESTDIR + "/where/to/install/ruby-mingw32")
14
- CONFIG["EXEEXT"] = ".exe"
15
- CONFIG["ruby_install_name"] = "ruby"
16
- CONFIG["RUBY_INSTALL_NAME"] = "ruby"
17
- CONFIG["RUBY_SO_NAME"] = "msvcrt-ruby18"
18
- CONFIG["SHELL"] = "/bin/sh"
19
- CONFIG["PATH_SEPARATOR"] = ":"
20
- CONFIG["PACKAGE_NAME"] = ""
21
- CONFIG["PACKAGE_TARNAME"] = ""
22
- CONFIG["PACKAGE_VERSION"] = ""
23
- CONFIG["PACKAGE_STRING"] = ""
24
- CONFIG["PACKAGE_BUGREPORT"] = ""
25
- CONFIG["exec_prefix"] = "$(prefix)"
26
- CONFIG["bindir"] = "$(exec_prefix)/bin"
27
- CONFIG["sbindir"] = "$(exec_prefix)/sbin"
28
- CONFIG["libexecdir"] = "$(exec_prefix)/libexec"
29
- CONFIG["datadir"] = "$(prefix)/share"
30
- CONFIG["sysconfdir"] = "$(prefix)/etc"
31
- CONFIG["sharedstatedir"] = "$(prefix)/com"
32
- CONFIG["localstatedir"] = "$(prefix)/var"
33
- CONFIG["libdir"] = "$(exec_prefix)/lib"
34
- CONFIG["includedir"] = "$(prefix)/include"
35
- CONFIG["oldincludedir"] = "/usr/include"
36
- CONFIG["infodir"] = "$(prefix)/info"
37
- CONFIG["mandir"] = "$(prefix)/man"
38
- CONFIG["build_alias"] = "i686-linux"
39
- CONFIG["host_alias"] = "i586-mingw32msvc"
40
- CONFIG["target_alias"] = "i386-mingw32"
41
- CONFIG["ECHO_C"] = ""
42
- CONFIG["ECHO_N"] = "-n"
43
- CONFIG["ECHO_T"] = ""
44
- CONFIG["LIBS"] = "-lwsock32 "
45
- CONFIG["MAJOR"] = "1"
46
- CONFIG["MINOR"] = "8"
47
- CONFIG["TEENY"] = "4"
48
- CONFIG["build"] = "i686-pc-linux"
49
- CONFIG["build_cpu"] = "i686"
50
- CONFIG["build_vendor"] = "pc"
51
- CONFIG["build_os"] = "linux"
52
- CONFIG["host"] = "i586-pc-mingw32msvc"
53
- CONFIG["host_cpu"] = "i586"
54
- CONFIG["host_vendor"] = "pc"
55
- CONFIG["host_os"] = "mingw32msvc"
56
- CONFIG["target"] = "i386-pc-mingw32"
57
- CONFIG["target_cpu"] = "i386"
58
- CONFIG["target_vendor"] = "pc"
59
- CONFIG["target_os"] = "mingw32"
60
- CONFIG["CC"] = "i586-mingw32msvc-gcc"
61
- CONFIG["CFLAGS"] = "-g -O2 "
62
- CONFIG["LDFLAGS"] = ""
63
- CONFIG["CPPFLAGS"] = ""
64
- CONFIG["OBJEXT"] = "o"
65
- CONFIG["CPP"] = "i586-mingw32msvc-gcc -E"
66
- CONFIG["EGREP"] = "grep -E"
67
- CONFIG["GNU_LD"] = "yes"
68
- CONFIG["CPPOUTFILE"] = "-o conftest.i"
69
- CONFIG["OUTFLAG"] = "-o "
70
- CONFIG["YACC"] = "bison -y"
71
- CONFIG["RANLIB"] = "i586-mingw32msvc-ranlib"
72
- CONFIG["AR"] = "i586-mingw32msvc-ar"
73
- CONFIG["NM"] = "i586-mingw32msvc-nm"
74
- CONFIG["WINDRES"] = "i586-mingw32msvc-windres"
75
- CONFIG["DLLWRAP"] = "i586-mingw32msvc-dllwrap"
76
- CONFIG["OBJDUMP"] = "i586-mingw32msvc-objdump"
77
- CONFIG["LN_S"] = "ln -s"
78
- CONFIG["SET_MAKE"] = ""
79
- CONFIG["INSTALL_PROGRAM"] = "$(INSTALL)"
80
- CONFIG["INSTALL_SCRIPT"] = "$(INSTALL)"
81
- CONFIG["INSTALL_DATA"] = "$(INSTALL) -m 644"
82
- CONFIG["RM"] = "rm -f"
83
- CONFIG["CP"] = "cp"
84
- CONFIG["MAKEDIRS"] = "mkdir -p"
85
- CONFIG["LIBOBJS"] = " fileblocks$(U).o crypt$(U).o flock$(U).o acosh$(U).o win32$(U).o"
86
- CONFIG["ALLOCA"] = ""
87
- CONFIG["DLDFLAGS"] = " -Wl,--enable-auto-import,--export-all"
88
- CONFIG["ARCH_FLAG"] = ""
89
- CONFIG["STATIC"] = ""
90
- CONFIG["CCDLFLAGS"] = ""
91
- CONFIG["LDSHARED"] = "i586-mingw32msvc-gcc -shared -s"
92
- CONFIG["DLEXT"] = "so"
93
- CONFIG["DLEXT2"] = "dll"
94
- CONFIG["LIBEXT"] = "a"
95
- CONFIG["LINK_SO"] = ""
96
- CONFIG["LIBPATHFLAG"] = " -L\"%s\""
97
- CONFIG["RPATHFLAG"] = ""
98
- CONFIG["LIBPATHENV"] = ""
99
- CONFIG["TRY_LINK"] = ""
100
- CONFIG["STRIP"] = "strip"
101
- CONFIG["EXTSTATIC"] = ""
102
- CONFIG["setup"] = "Setup"
103
- CONFIG["MINIRUBY"] = "ruby -I/home/batsman/mess/current/ruby -rfake"
104
- CONFIG["PREP"] = "fake.rb"
105
- CONFIG["RUNRUBY"] = "$(MINIRUBY) -I`cd $(srcdir)/lib; pwd`"
106
- CONFIG["EXTOUT"] = ".ext"
107
- CONFIG["ARCHFILE"] = ""
108
- CONFIG["RDOCTARGET"] = ""
109
- CONFIG["XCFLAGS"] = " -DRUBY_EXPORT"
110
- CONFIG["XLDFLAGS"] = " -Wl,--stack,0x02000000 -L."
111
- CONFIG["LIBRUBY_LDSHARED"] = "i586-mingw32msvc-gcc -shared -s"
112
- CONFIG["LIBRUBY_DLDFLAGS"] = " -Wl,--enable-auto-import,--export-all -Wl,--out-implib=$(LIBRUBY)"
113
- CONFIG["rubyw_install_name"] = "rubyw"
114
- CONFIG["RUBYW_INSTALL_NAME"] = "rubyw"
115
- CONFIG["LIBRUBY_A"] = "lib$(RUBY_SO_NAME)-static.a"
116
- CONFIG["LIBRUBY_SO"] = "$(RUBY_SO_NAME).dll"
117
- CONFIG["LIBRUBY_ALIASES"] = ""
118
- CONFIG["LIBRUBY"] = "lib$(LIBRUBY_SO).a"
119
- CONFIG["LIBRUBYARG"] = "$(LIBRUBYARG_SHARED)"
120
- CONFIG["LIBRUBYARG_STATIC"] = "-l$(RUBY_SO_NAME)-static"
121
- CONFIG["LIBRUBYARG_SHARED"] = "-l$(RUBY_SO_NAME)"
122
- CONFIG["SOLIBS"] = "$(LIBS)"
123
- CONFIG["DLDLIBS"] = ""
124
- CONFIG["ENABLE_SHARED"] = "yes"
125
- CONFIG["MAINLIBS"] = ""
126
- CONFIG["COMMON_LIBS"] = "m"
127
- CONFIG["COMMON_MACROS"] = ""
128
- CONFIG["COMMON_HEADERS"] = "windows.h winsock.h"
129
- CONFIG["EXPORT_PREFIX"] = ""
130
- CONFIG["MINIOBJS"] = "dmydln.o"
131
- CONFIG["MAKEFILES"] = "Makefile GNUmakefile"
132
- CONFIG["arch"] = "i386-mingw32"
133
- CONFIG["sitearch"] = "i386-msvcrt"
134
- CONFIG["sitedir"] = "$(prefix)/lib/ruby/site_ruby"
135
- CONFIG["configure_args"] = "'--host=i586-mingw32msvc' '--target=i386-mingw32' '--build=i686-linux' '--prefix=/home/batsman/mess/current/ruby-mingw32' 'build_alias=i686-linux' 'host_alias=i586-mingw32msvc' 'target_alias=i386-mingw32'"
136
- CONFIG["NROFF"] = "/usr/bin/nroff"
137
- CONFIG["MANTYPE"] = "doc"
138
- CONFIG["LTLIBOBJS"] = " fileblocks$(U).lo crypt$(U).lo flock$(U).lo acosh$(U).lo win32$(U).lo"
139
- CONFIG["ruby_version"] = "$(MAJOR).$(MINOR)"
140
- CONFIG["rubylibdir"] = "$(libdir)/ruby/$(ruby_version)"
141
- CONFIG["archdir"] = "$(rubylibdir)/$(arch)"
142
- CONFIG["sitelibdir"] = "$(sitedir)/$(ruby_version)"
143
- CONFIG["sitearchdir"] = "$(sitelibdir)/$(sitearch)"
144
- CONFIG["topdir"] = File.dirname(__FILE__)
145
- MAKEFILE_CONFIG = {}
146
- CONFIG.each{|k,v| MAKEFILE_CONFIG[k] = v.dup}
147
- def Config::expand(val, config = CONFIG)
148
- val.gsub!(/\$\$|\$\(([^()]+)\)|\$\{([^{}]+)\}/) do |var|
149
- if !(v = $1 || $2)
150
- '$'
151
- elsif key = config[v = v[/\A[^:]+(?=(?::(.*?)=(.*))?\z)/]]
152
- pat, sub = $1, $2
153
- config[v] = false
154
- Config::expand(key, config)
155
- config[v] = key
156
- key = key.gsub(/#{Regexp.quote(pat)}(?=\s|\z)/n) {sub} if pat
157
- key
158
- else
159
- var
160
- end
161
- end
162
- val
163
- end
164
- CONFIG.each_value do |val|
165
- Config::expand(val)
166
- end
167
- end
168
- RbConfig = Config # compatibility for ruby-1.9
169
- CROSS_COMPILING = nil unless defined? CROSS_COMPILING