object2module 0.5.0 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -51,7 +51,9 @@ example: gen_extend()
51
51
  How it works
52
52
  --------------
53
53
 
54
- Object2module simply removes the check for `T_MODULE` from `rb_include_module()`
54
+ Object2module removes the check for `T_MODULE` from
55
+ `rb_include_module()` and prevents inclusion of classes above Object
56
+ (or meta^n(Object) for singleton classes).
55
57
 
56
58
  Companion Libraries
57
59
  --------------------
@@ -65,6 +67,7 @@ the language, see also:
65
67
  module singleton classes during an include. No more ugly ClassMethods and included() hook hacks.
66
68
  * [Prepend](http://github.com/banister/prepend) - Prepends modules in front of a class; so method lookup starts with the module
67
69
  * [GenEval](http://github.com/banister/gen_eval) - A strange new breed of instance_eval
70
+ * [LocalEval](http://github.com/banister/local_eval) - instance_eval without changing self
68
71
 
69
72
  Contact
70
73
  -------
data/Rakefile CHANGED
@@ -60,8 +60,11 @@ namespace :ruby do
60
60
  end
61
61
  end
62
62
 
63
+ directories = ["#{direc}/lib/1.8", "#{direc}/lib/1.9"]
64
+ directories.each { |d| directory d }
65
+
63
66
  desc "build the 1.8 and 1.9 binaries from source and copy to lib/"
64
- task :compile do
67
+ task :compile => [:clean, *directories] do
65
68
  build_for = proc do |pik_ver, ver|
66
69
  sh %{ \
67
70
  c:\\devkit\\devkitvars.bat && \
@@ -80,7 +83,7 @@ task :compile do
80
83
  end
81
84
 
82
85
  desc "build all platform gems at once"
83
- task :gems => [:rmgems, "mingw32:gem", "mswin32:gem", "ruby:gem"]
86
+ task :gems => [:clean, :rmgems, "mingw32:gem", "mswin32:gem", "ruby:gem"]
84
87
 
85
88
  desc "remove all platform gems"
86
89
  task :rmgems => ["ruby:clobber_package"]
@@ -6,37 +6,6 @@
6
6
  #include <ruby.h>
7
7
  #include "compat.h"
8
8
 
9
- static VALUE
10
- class_to_s(VALUE self)
11
- {
12
- if (!rb_obj_is_kind_of(self, rb_cModule) || self == Qnil)
13
- return rb_str_new2("Anon");
14
-
15
- VALUE attached = rb_iv_get(self, "__attached__");
16
- VALUE name;
17
-
18
- if (attached) {
19
- VALUE val = rb_iv_get(attached, "__module__");
20
- /* if (NIL_P(val)) */
21
- /* return rb_str_new2("Anon"); */
22
-
23
- name = rb_mod_name(val);
24
- }
25
- else {
26
- VALUE val = rb_iv_get(attached, "__module__");
27
- /* if (NIL_P(val)) */
28
- /* return rb_str_new2("Anon"); */
29
-
30
- name = rb_mod_name(val);
31
- }
32
-
33
- /* if module does not have a name, return "Anon" */
34
- if (NIL_P(name) || RSTRING_LEN(name) == 0)
35
- return rb_str_new2("Anon");
36
- else
37
- return name;
38
- }
39
-
40
9
  // also returns true for receiver
41
10
  static VALUE
42
11
  is_meta_singleton_of(VALUE self, VALUE obj)
@@ -65,9 +34,6 @@ include_class_new(VALUE module, VALUE super)
65
34
  module = RBASIC(module)->klass;
66
35
  }
67
36
 
68
- // rb_define_singleton_method(module, "to_s", class_to_s, 0);
69
- // rb_define_method(module, "to_s", class_to_s, 0);
70
-
71
37
  if (!RCLASS_IV_TBL(module)) {
72
38
  RCLASS_IV_TBL(module) = st_init_numtable();
73
39
  }
@@ -106,7 +72,7 @@ rb_gen_include_one(VALUE klass, VALUE module)
106
72
  c = klass;
107
73
 
108
74
  // loop until superclass is 0 (for modules) or superclass is a meta^n singleton of Object (for classes)
109
- while (module && !rb_is_meta_singleton_of(module, rb_cObject)) {
75
+ while (module && !is_meta_singleton_of(module, rb_cObject)) {
110
76
  int superclass_seen = FALSE;
111
77
 
112
78
  if (RCLASS_M_TBL(klass) == RCLASS_M_TBL(module))
@@ -1,3 +1,3 @@
1
1
  module Object2module
2
- VERSION = "0.5.0"
2
+ VERSION = "0.5.1"
3
3
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 5
8
- - 0
9
- version: 0.5.0
8
+ - 1
9
+ version: 0.5.1
10
10
  platform: ruby
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-11-17 00:00:00 +13:00
17
+ date: 2010-11-18 00:00:00 +13:00
18
18
  default_executable:
19
19
  dependencies: []
20
20
 
@@ -33,7 +33,6 @@ files:
33
33
  - lib/object2module/version.rb
34
34
  - lib/object2module.rb
35
35
  - test/test.rb
36
- - test/test_flymake.rb
37
36
  - test/test_simple.rb
38
37
  - test/test_stress.rb
39
38
  - test/test_with_remix.rb
@@ -1,166 +0,0 @@
1
- direc = File.dirname(__FILE__)
2
- require 'rubygems'
3
- require 'bacon'
4
- require "#{direc}/../lib/object2module"
5
-
6
- class Module
7
- public :include, :remove_const
8
- end
9
-
10
- puts "testing Object2module version #{Object2module::VERSION}..."
11
-
12
- describe Object2module do
13
- before do
14
- class A
15
- def a
16
- :a
17
- end
18
- end
19
-
20
- class B
21
- def b
22
- :b
23
- end
24
- end
25
-
26
- module M
27
- def m
28
- :m
29
- end
30
- end
31
-
32
- O = Object.new
33
- class << O
34
- def o
35
- :o
36
- end
37
- end
38
-
39
- C = Class.new
40
- end
41
-
42
- after do
43
- Object.remove_const(:A)
44
- Object.remove_const(:B)
45
- Object.remove_const(:C)
46
- Object.remove_const(:M)
47
- Object.remove_const(:O)
48
- end
49
-
50
- describe 'gen_include' do
51
- it 'includes a module' do
52
- C.gen_include M
53
- C.new.m.should == :m
54
- end
55
-
56
- it 'includes a class' do
57
- C.gen_include A
58
- C.new.a.should == :a
59
- end
60
-
61
- it 'includes an object' do
62
- C.gen_include O
63
- C.new.o.should == :o
64
- end
65
-
66
- it 'includes a class that includes a class' do
67
- A.gen_include B
68
- C.gen_include A
69
- C.new.b.should == :b
70
- C.new.a.should == :a
71
- end
72
-
73
- it 'includes an object that includes a class that includes a class' do
74
- A.gen_include B
75
- O.gen_extend A
76
- C.gen_include O
77
- C.new.o.should == :o
78
- C.new.a.should == :a
79
- C.new.b.should == :b
80
- end
81
-
82
- it 'includes an object that includes an object' do
83
- n = Object.new
84
- class << n
85
- def n
86
- :n
87
- end
88
- end
89
-
90
- l = Object.new
91
- class << l
92
- def l
93
- :l
94
- end
95
- self
96
- end.gen_include n
97
-
98
- C.gen_include l
99
- C.new.l.should == :l
100
- C.new.n.should == :n
101
- end
102
- end
103
-
104
- describe 'gen_extend' do
105
- it 'extends a module' do
106
- O.gen_extend M
107
- O.m.should == :m
108
- end
109
-
110
- it 'extends a class' do
111
- O.gen_extend A
112
- O.a.should == :a
113
- end
114
-
115
- it 'extends an object' do
116
- n = Object.new
117
- class << n
118
- def n
119
- :n
120
- end
121
- end
122
- O.gen_extend n
123
- O.n.should == :n
124
- end
125
-
126
- it 'extends a class that includes a class' do
127
- A.gen_include B
128
- O.gen_extend A
129
- O.b.should == :b
130
- O.a.should == :a
131
- end
132
-
133
- it 'extends an object that includes a class that includes a class' do
134
- A.gen_include B
135
- C.gen_include A
136
- O.gen_extend C
137
- O.o.should == :o
138
- O.a.should == :a
139
- O.b.should == :b
140
- end
141
-
142
- it 'extends an object that extends an object' do
143
- n = Object.new
144
- class << n
145
- def n
146
- :n
147
- end
148
- end
149
-
150
- l = Object.new
151
- class << l
152
- def l
153
- :l
154
- end
155
- self
156
- end
157
-
158
- l.gen_extend n
159
-
160
- O.gen_extend l
161
- O.l.should == :l
162
- O.n.should == :n
163
- end
164
- end
165
- end
166
-