object2module 0.4.3 → 0.4.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -56,12 +56,12 @@ Object2module simply removes the check for `T_MODULE` from `rb_include_module()`
56
56
  Companion Libraries
57
57
  --------------------
58
58
 
59
- Remix is one of a series of experimental libraries that mess with
59
+ Object2module is one of a series of experimental libraries that mess with
60
60
  the internals of Ruby to bring new and interesting functionality to
61
61
  the language, see also:
62
62
 
63
63
  * [Remix](http://github.com/banister/remix) - Makes ancestor chains read/write
64
- * [Real Include](http://github.com/banister/real_include) - Brings in
64
+ * [Include Complete](http://github.com/banister/include_complete) - Brings in
65
65
  module singleton classes during an include. No more ugly ClassMethods and included() hook hacks.
66
66
  * [Prepend](http://github.com/banister/prepend) - Prepends modules in front of a class; so method lookup starts with the module
67
67
  * [GenEval](http://github.com/banister/gen_eval) - A strange new breed of instance_eval
data/Rakefile CHANGED
@@ -7,9 +7,10 @@ require './lib/object2module/version.rb'
7
7
  dlext = Config::CONFIG['DLEXT']
8
8
  direc = File.dirname(__FILE__)
9
9
 
10
- CLEAN.include("ext/**/*.#{dlext}", "ext/**/.log", "ext/**/.o", "ext/**/*~", "ext/**/*#*", "ext/**/.obj", "ext/**/.def", "ext/**/.pdb")
11
10
  CLOBBER.include("**/*.#{dlext}", "**/*~", "**/*#*", "**/*.log", "**/*.o", "doc/**")
12
-
11
+ CLEAN.include("ext/**/*.#{dlext}", "ext/**/.log", "ext/**/.o", "ext/**/*~",
12
+ "ext/**/*#*", "ext/**/.obj", "ext/**/.def", "ext/**/.pdb")
13
+
13
14
  def apply_spec_defaults(s)
14
15
  s.name = "object2module"
15
16
  s.summary = "object2module enables ruby classes and objects to be used as modules"
@@ -21,9 +22,9 @@ def apply_spec_defaults(s)
21
22
  s.date = Time.now.strftime '%Y-%m-%d'
22
23
  s.require_path = 'lib'
23
24
  s.homepage = "http://banisterfiend.wordpress.com"
24
- s.files = FileList["Rakefile", "README.markdown", "LICENSE",
25
+ s.files = Dir["Rakefile", "README.markdown", "LICENSE",
25
26
  "lib/**/*.rb", "test/**/*.rb", "ext/**/extconf.rb",
26
- "ext/**/*.h", "ext/**/*.c"].to_a
27
+ "ext/**/*.h", "ext/**/*.c"]
27
28
 
28
29
  end
29
30
 
@@ -32,23 +33,21 @@ task :test do
32
33
  end
33
34
 
34
35
  [:mingw32, :mswin32].each do |v|
35
- task v do
36
+ namespace v do
36
37
  spec = Gem::Specification.new do |s|
37
38
  apply_spec_defaults(s)
38
39
  s.platform = "i386-#{v}"
39
- s.files += FileList["lib/**/*.#{dlext}"].to_a
40
+ s.files += Dir["lib/**/*.#{dlext}"]
40
41
  end
41
42
 
42
43
  Rake::GemPackageTask.new(spec) do |pkg|
43
44
  pkg.need_zip = false
44
45
  pkg.need_tar = false
45
46
  end
46
-
47
- Rake::Task[:gem].invoke
48
47
  end
49
48
  end
50
49
 
51
- task :ruby do
50
+ namespace :ruby do
52
51
  spec = Gem::Specification.new do |s|
53
52
  apply_spec_defaults(s)
54
53
  s.platform = Gem::Platform::RUBY
@@ -59,7 +58,38 @@ task :ruby do
59
58
  pkg.need_zip = false
60
59
  pkg.need_tar = false
61
60
  end
61
+ end
62
62
 
63
- Rake::Task[:gem].invoke
63
+ desc "build the 1.8 and 1.9 binaries from source and copy to lib/"
64
+ task :compile do
65
+ build_for = proc do |pik_ver, ver|
66
+ sh %{ \
67
+ c:\\devkit\\devkitvars.bat && \
68
+ pik #{pik_ver} && \
69
+ ruby extconf.rb && \
70
+ make clean && \
71
+ make && \
72
+ cp *.so #{direc}/lib/#{ver} \
73
+ }
74
+ end
75
+
76
+ chdir("#{direc}/ext/object2module") do
77
+ build_for.call("187", "1.8")
78
+ build_for.call("192", "1.9")
79
+ end
64
80
  end
65
81
 
82
+ desc "build all platform gems at once"
83
+ task :gems => [:rmgems, "mingw32:gem", "mswin32:gem", "ruby:gem"]
84
+
85
+ desc "remove all platform gems"
86
+ task :rmgems => ["ruby:clobber_package"]
87
+
88
+ desc "build and push latest gems"
89
+ task :pushgems => :gems do
90
+ chdir("#{direc}/pkg") do
91
+ Dir["*.gem"].each do |gemfile|
92
+ sh "gem push #{gemfile}"
93
+ end
94
+ end
95
+ end
@@ -6,6 +6,37 @@
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
+
9
40
  static VALUE
10
41
  include_class_new(VALUE module, VALUE super)
11
42
  {
@@ -13,13 +44,16 @@ include_class_new(VALUE module, VALUE super)
13
44
 
14
45
  if (BUILTIN_TYPE(module) == T_ICLASS) {
15
46
 
16
- /* for real_include compat */
47
+ /* for include_complete compat */
17
48
  if (!NIL_P(rb_iv_get(module, "__module__")))
18
49
  module = rb_iv_get(module, "__module__");
19
50
  else
20
51
  module = RBASIC(module)->klass;
21
52
  }
22
53
 
54
+ rb_define_singleton_method(module, "to_s", class_to_s, 0);
55
+ rb_define_method(module, "to_s", class_to_s, 0);
56
+
23
57
  if (!RCLASS_IV_TBL(module)) {
24
58
  RCLASS_IV_TBL(module) = st_init_numtable();
25
59
  }
@@ -1,3 +1,3 @@
1
1
  module Object2module
2
- VERSION = "0.4.3"
2
+ VERSION = "0.4.5"
3
3
  end
@@ -10,6 +10,7 @@ class Module
10
10
  end
11
11
 
12
12
  puts "testing Object2module version #{Object2module::VERSION} with Remix version #{Remix::VERSION}..."
13
+ puts "Ruby version: #{RUBY_VERSION}"
13
14
 
14
15
  describe Object2module do
15
16
  before do
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 4
8
- - 3
9
- version: 0.4.3
8
+ - 5
9
+ version: 0.4.5
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-01 00:00:00 +13:00
17
+ date: 2010-11-16 00:00:00 +13:00
18
18
  default_executable:
19
19
  dependencies: []
20
20
 
@@ -39,7 +39,7 @@ files:
39
39
  - ext/object2module/compat.h
40
40
  - ext/object2module/object2module.h
41
41
  - ext/object2module/object2module.c
42
- has_rdoc: yard
42
+ has_rdoc: true
43
43
  homepage: http://banisterfiend.wordpress.com
44
44
  licenses: []
45
45