mixology 0.1.0 → 0.2.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/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