remix 0.3.0-i386-mingw32 → 0.3.4-i386-mingw32

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
@@ -1,16 +1,15 @@
1
- $LOAD_PATH.unshift File.join(File.expand_path(__FILE__), '..')
1
+ dlext = Config::CONFIG['DLEXT']
2
+ direc = File.dirname(__FILE__)
2
3
 
3
4
  require 'rake/clean'
4
5
  require 'rake/gempackagetask'
6
+ require "#{direc}/lib/remix/version"
5
7
 
6
- require 'lib/remix/version'
7
8
 
8
- $dlext = Config::CONFIG['DLEXT']
9
+ CLEAN.include("ext/**/*.#{dlext}", "ext/**/*.log", "ext/**/*.o", "ext/**/*~", "ext/**/*#*", "ext/**/*.obj", "ext/**/*.def", "ext/**/*.pdb")
10
+ CLOBBER.include("**/*.#{dlext}", "**/*~", "**/*#*", "**/*.log", "**/*.o")
9
11
 
10
- CLEAN.include("ext/**/*.#{$dlext}", "ext/**/*.log", "ext/**/*.o", "ext/**/*~", "ext/**/*#*", "ext/**/*.obj", "ext/**/*.def", "ext/**/*.pdb")
11
- CLOBBER.include("**/*.#{$dlext}", "**/*~", "**/*#*", "**/*.log", "**/*.o")
12
-
13
- specification = Gem::Specification.new do |s|
12
+ def apply_spec_defaults(s)
14
13
  s.name = "remix"
15
14
  s.summary = "Ruby modules re-mixed and remastered"
16
15
  s.version = Remix::VERSION
@@ -19,19 +18,45 @@ specification = Gem::Specification.new do |s|
19
18
  s.email = 'jrmair@gmail.com'
20
19
  s.description = s.summary
21
20
  s.require_path = 'lib'
22
- #s.platform = Gem::Platform::RUBY
23
- s.platform = 'i386-mingw32'
24
21
  s.homepage = "http://banisterfiend.wordpress.com"
25
22
  s.has_rdoc = 'yard'
23
+ s.files = FileList["ext/**/extconf.rb", "ext/**/*.h", "ext/**/*.c", "lib/**/*.rb",
24
+ "test/*.rb", "CHANGELOG", "README.markdown", "Rakefile"].to_a
25
+ end
26
+
27
+ task :test do
28
+ sh "bacon -k #{direc}/test/test.rb"
29
+ end
26
30
 
27
- #s.extensions = ["ext/remix/extconf.rb"]
28
- s.files =
29
- ["lib/1.9/remix.so", "lib/1.8/remix.so"] +
30
- FileList["ext/**/extconf.rb", "ext/**/*.h", "ext/**/*.c", "lib/**/*.rb", "test/*.rb",
31
- "CHANGELOG", "README.markdown", "Rakefile"].to_a
31
+ [:mingw32, :mswin32].each do |v|
32
+ task v do
33
+ spec = Gem::Specification.new do |s|
34
+ apply_spec_defaults(s)
35
+ s.platform = "i386-#{v}"
36
+ s.files += FileList["lib/**/*.#{dlext}"].to_a
37
+ end
38
+
39
+ Rake::GemPackageTask.new(spec) do |pkg|
40
+ pkg.need_zip = false
41
+ pkg.need_tar = false
42
+ end
43
+
44
+ Rake::Task[:gem].invoke
45
+ end
32
46
  end
33
47
 
34
- Rake::GemPackageTask.new(specification) do |package|
35
- package.need_zip = false
36
- package.need_tar = false
48
+ task :ruby do
49
+ spec = Gem::Specification.new do |s|
50
+ apply_spec_defaults(s)
51
+ s.platform = Gem::Platform::RUBY
52
+ s.extensions = ["ext/remix/extconf.rb"]
53
+ end
54
+
55
+ Rake::GemPackageTask.new(spec) do |pkg|
56
+ pkg.need_zip = false
57
+ pkg.need_tar = false
58
+ end
59
+
60
+ Rake::Task[:gem].invoke
37
61
  end
62
+
data/ext/remix/remix.c CHANGED
@@ -14,16 +14,19 @@ VALUE rb_swap_modules(VALUE self, VALUE mod1, VALUE mod2);
14
14
  rb_raise(rb_eTypeError, "Must be a Module or Class type."); \
15
15
  } while(0)
16
16
 
17
+ #define Validate_Type(klass) \
18
+ do { \
19
+ if (TYPE(klass) != T_OBJECT && TYPE(klass) != T_CLASS && TYPE(klass) != T_MODULE && TYPE(klass) != T_ICLASS && \
20
+ TYPE(klass) != T_FALSE) \
21
+ rb_raise(rb_eTypeError, "Must be a T_MODULE, T_CLASS, T_ICLASS, T_OBJECT, or T_FALSE type."); \
22
+ } while(0)
23
+
17
24
  /* a modified version of include_class_new from class.c */
18
25
  static VALUE
19
26
  j_class_new(VALUE module, VALUE sup)
20
27
  {
21
28
  VALUE klass = create_class(T_ICLASS, rb_cClass);
22
29
 
23
- if (TYPE(module) == T_ICLASS) {
24
- // klass = module;
25
- }
26
-
27
30
  if (!RCLASS_IV_TBL(module)) {
28
31
  RCLASS_IV_TBL(module) = (struct st_table *)st_init_numtable();
29
32
  }
@@ -106,8 +109,11 @@ get_source_module(VALUE mod)
106
109
  case T_MODULE:
107
110
  return mod;
108
111
  break;
112
+ case T_OBJECT:
113
+ return rb_singleton_class(mod);
114
+ break;
109
115
  default:
110
- rb_raise(rb_eRuntimeError, "get_source_module: mod is not a class or iclass!");
116
+ Validate_Type(mod);
111
117
  }
112
118
 
113
119
  /* never reached */
@@ -117,9 +123,8 @@ get_source_module(VALUE mod)
117
123
  static VALUE
118
124
  retrieve_before_mod(VALUE m, VALUE before)
119
125
  {
120
- if (!RTEST(rb_obj_is_kind_of(before, rb_cModule)) && TYPE(before) != T_FALSE)
121
- rb_raise(rb_eTypeError, "Must be a Module or Class type.");
122
-
126
+ Validate_Type(before);
127
+
123
128
  VALUE k = get_source_module(RCLASS_SUPER(m));
124
129
  while(k != before && m != 0 && m != rb_cObject) {
125
130
  m = RCLASS_SUPER(m);
@@ -134,9 +139,8 @@ retrieve_before_mod(VALUE m, VALUE before)
134
139
  static VALUE
135
140
  retrieve_mod(VALUE m, VALUE after)
136
141
  {
137
- if (!RTEST(rb_obj_is_kind_of(after, rb_cModule)) && TYPE(after) != T_FALSE)
138
- rb_raise(rb_eTypeError, "Must be a Module or Class type.");
139
-
142
+ Validate_Type(after);
143
+
140
144
  VALUE k = get_source_module(m);
141
145
  while(k != after && m != 0 && m != rb_cObject) {
142
146
  m = RCLASS_SUPER(m);
@@ -277,7 +281,7 @@ rb_classmod_include_p(VALUE mod, VALUE mod2)
277
281
  {
278
282
  VALUE p;
279
283
 
280
- Enforce_Classmod(mod2);
284
+ Enforce_Classmod(mod);
281
285
 
282
286
  for (p = RCLASS_SUPER(mod); p; p = RCLASS_SUPER(p)) {
283
287
  if (BUILTIN_TYPE(p) == T_ICLASS) {
@@ -300,6 +304,9 @@ rb_uninclude(int argc, VALUE * argv, VALUE self)
300
304
  VALUE mod1, recurse = Qfalse;
301
305
  rb_scan_args(argc, argv, "11", &mod1, &recurse);
302
306
 
307
+ if (TYPE(mod1) == T_OBJECT)
308
+ mod1 = rb_singleton_class(mod1);
309
+
303
310
  if (!RTEST(rb_classmod_include_p(self, mod1)))
304
311
  rb_raise(rb_eArgError, "Module not found");
305
312
 
data/lib/1.8/remix.so CHANGED
Binary file
data/lib/1.9/remix.so CHANGED
Binary file
data/lib/remix/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module Remix
2
- VERSION = "0.3.0"
2
+ VERSION = "0.3.4"
3
3
  end
4
4
 
data/test/test.rb CHANGED
@@ -1,11 +1,14 @@
1
+ direc = File.dirname(__FILE__)
1
2
  require 'rubygems'
2
- require '../lib/remix'
3
+ require "#{direc}/../lib/remix"
3
4
  require 'bacon'
4
5
 
5
6
  class Module
6
7
  public :include, :remove_const
7
8
  end
8
9
 
10
+ puts "testing Remix version #{Remix::VERSION}..."
11
+
9
12
  describe 'Test basic remix functionality' do
10
13
  before do
11
14
  A = Module.new
@@ -0,0 +1,162 @@
1
+ direc = File.dirname(__FILE__)
2
+ require 'rubygems'
3
+ require 'bacon'
4
+ require 'object2module'
5
+ require "#{direc}/../lib/remix"
6
+
7
+ class Module
8
+ public :include, :remove_const
9
+ end
10
+
11
+ puts "testing Remix version #{Remix::VERSION} with Object2module version #{Object2module::VERSION}..."
12
+
13
+ describe Remix do
14
+ before do
15
+ class A
16
+ def hello
17
+ :a
18
+ end
19
+ end
20
+
21
+ class B
22
+ def hello
23
+ :b
24
+ end
25
+ end
26
+
27
+ module M
28
+ def m
29
+ :m
30
+ end
31
+ end
32
+
33
+ O = Object.new
34
+ class << O
35
+ def o
36
+ :o
37
+ end
38
+ end
39
+
40
+ C = Class.new
41
+ end
42
+
43
+ after do
44
+ Object.remove_const(:A)
45
+ Object.remove_const(:B)
46
+ Object.remove_const(:C)
47
+ Object.remove_const(:M)
48
+ Object.remove_const(:O)
49
+ end
50
+
51
+ describe 'gen_include' do
52
+ it 'includes two classes and swaps them' do
53
+ C.gen_include A
54
+ C.gen_include B
55
+ C.new.hello.should == :b
56
+ C.swap_modules A, B
57
+ C.new.hello.should == :a
58
+ end
59
+
60
+ it 'includes a class into a class and swaps them' do
61
+ A.gen_include B
62
+ C.gen_include A
63
+ C.new.hello.should == :a
64
+ C.swap_modules A, B
65
+ C.new.hello.should == :b
66
+ end
67
+
68
+ it 'unincludes a gen_included class' do
69
+ C.gen_include A
70
+ C.new.hello.should == :a
71
+ C.uninclude A
72
+ lambda { C.new.hello }.should.raise NameError
73
+ end
74
+
75
+ it 'recursively unincludes a gen_included class' do
76
+ A.gen_include B
77
+ C.gen_include A
78
+ C.new.hello.should == :a
79
+ C.ancestors.should[0..2] == [C, A, B]
80
+ C.uninclude A, true
81
+ C.ancestors.should[0..1] == [C, Object]
82
+ end
83
+
84
+ it 'unincludes a singleton class' do
85
+ o = Object.new
86
+ class << o
87
+ def hello
88
+ :o
89
+ end
90
+ end
91
+
92
+ C.gen_include o
93
+ C.new.hello.should == :o
94
+ C.uninclude C.ancestors[1]
95
+ lambda { C.new.hello }.should.raise NameError
96
+ C.ancestors[1].should == Object
97
+ end
98
+ end
99
+
100
+ describe 'gen_extend' do
101
+ it 'extends two classes into an object and swaps them' do
102
+ o = Object.new
103
+ o.gen_extend A, B
104
+ o.hello.should == :a
105
+ end
106
+
107
+ it 'unextends a class from an object' do
108
+ o = Object.new
109
+ o.gen_extend A
110
+ o.hello.should == :a
111
+ o.singleton_class.ancestors[0].should == A
112
+ o.unextend A
113
+ lambda { o.hello }.should.raise NameError
114
+ o.singleton_class.ancestors[0].should == Object
115
+ end
116
+
117
+ it 'recursively unextends a class from an object' do
118
+ o = Object.new
119
+ A.gen_include B
120
+ o.gen_extend A
121
+ o.singleton_class.ancestors[0..2].should == [A, B, Object]
122
+ o.unextend A, true
123
+ o.singleton_class.ancestors.first.should == Object
124
+ end
125
+
126
+ it 'unextends an object by object (not by singleton)' do
127
+ o = Object.new
128
+ def o.hello
129
+ :o
130
+ end
131
+
132
+ n = Object.new
133
+ n.gen_extend o
134
+ n.hello.should == :o
135
+ n.unextend o
136
+ lambda { n.hello }.should.raise NameError
137
+ end
138
+
139
+
140
+ it 'recursively unextends a singleton class gen_extended into another singleton class' do
141
+ o = Object.new
142
+ def o.hello
143
+ :o
144
+ end
145
+
146
+ n = Object.new
147
+ def n.hello
148
+ :n
149
+ end
150
+
151
+ n.gen_extend o
152
+
153
+ v = Object.new
154
+ v.gen_extend n
155
+
156
+ v.hello.should == :n
157
+ v.unextend n.singleton_class, true
158
+ lambda { v.hello }.should.raise NameError
159
+ v.singleton_class.ancestors.first.should == Object
160
+ end
161
+ end
162
+ end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 3
8
- - 0
9
- version: 0.3.0
8
+ - 4
9
+ version: 0.3.4
10
10
  platform: i386-mingw32
11
11
  authors:
12
12
  - John Mair (banisterfiend)
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-10-29 00:00:00 +13:00
17
+ date: 2010-11-01 00:00:00 +13:00
18
18
  default_executable:
19
19
  dependencies: []
20
20
 
@@ -27,8 +27,6 @@ extensions: []
27
27
  extra_rdoc_files: []
28
28
 
29
29
  files:
30
- - lib/1.9/remix.so
31
- - lib/1.8/remix.so
32
30
  - ext/remix/extconf.rb
33
31
  - ext/remix/compat.h
34
32
  - ext/remix/remix.c
@@ -36,9 +34,12 @@ files:
36
34
  - lib/remix/version.rb
37
35
  - lib/remix.rb
38
36
  - test/test.rb
37
+ - test/test_with_object2module.rb
39
38
  - CHANGELOG
40
39
  - README.markdown
41
40
  - Rakefile
41
+ - lib/1.8/remix.so
42
+ - lib/1.9/remix.so
42
43
  has_rdoc: yard
43
44
  homepage: http://banisterfiend.wordpress.com
44
45
  licenses: []