metaclass 0.0.1

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.
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "http://rubygems.org"
2
+
3
+ gemspec
@@ -0,0 +1,6 @@
1
+ Adds a `__metaclass__` method to all Ruby objects.
2
+
3
+ Motivations :-
4
+
5
+ * Even though WhyTheLuckyStiff's [metaid gem](https://rubygems.org/gems/metaid) does something similar, apparently the metaclass method without underscores [doesn't play well with Rails v2.3](https://github.com/floehopper/mocha/commit/f0749d6d291164cc9280aa8ba16f33d652d45fe1#commitcomment-475799).
6
+ * I'm trying to extract code out of the [mocha gem](https://github.com/floehopper/mocha) and this is an obvious candidate.
@@ -0,0 +1,11 @@
1
+ require 'bundler/gem_tasks'
2
+
3
+
4
+ require "rake/testtask"
5
+ Rake::TestTask.new do |t|
6
+ t.libs << "test"
7
+ t.test_files = FileList["test/**/*_test.rb"]
8
+ t.verbose = true
9
+ end
10
+
11
+ task :default => :test
@@ -0,0 +1,5 @@
1
+ module Metaclass
2
+ end
3
+
4
+ require "metaclass/version"
5
+ require "metaclass/object_methods"
@@ -0,0 +1,11 @@
1
+ module Metaclass::ObjectMethods
2
+ def __metaclass__
3
+ class << self
4
+ self
5
+ end
6
+ end
7
+ end
8
+
9
+ class Object
10
+ include Metaclass::ObjectMethods
11
+ end
@@ -0,0 +1,3 @@
1
+ module Metaclass
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,19 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "metaclass/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "metaclass"
7
+ s.version = Metaclass::VERSION
8
+ s.authors = ["James Mead"]
9
+ s.email = ["james@floehopper.org"]
10
+ s.homepage = "http://github.com/floehopper/metaclass"
11
+ s.summary = %q{Adds a metaclass method to all Ruby objects}
12
+
13
+ s.rubyforge_project = "metaclass"
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
+ s.require_paths = ["lib"]
19
+ end
@@ -0,0 +1,31 @@
1
+ require "test_helper"
2
+
3
+ class ObjectMethodsTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @klass = Class.new
7
+ end
8
+
9
+ def test_define_method_on_only_one_instance_of_a_class
10
+ instance = @klass.new
11
+ assert_raises(NoMethodError) { instance.success? }
12
+
13
+ instance.__metaclass__.class_eval { def success?; true; end }
14
+ assert_nothing_raised(NoMethodError) { assert instance.success? }
15
+
16
+ another_instance = @klass.new
17
+ assert_raises(NoMethodError) { another_instance.success? }
18
+ end
19
+
20
+ def test_metaclass_ancestors
21
+ instance = @klass.new
22
+ assert instance.__metaclass__.ancestors.include?(Object)
23
+ assert instance.__metaclass__.ancestors.include?(Kernel)
24
+ end
25
+
26
+ def test_metaclass_is_itself_a_class
27
+ instance = @klass.new
28
+ assert instance.__metaclass__.is_a?(Class)
29
+ end
30
+
31
+ end
@@ -0,0 +1,5 @@
1
+ require "rubygems"
2
+ require "bundler/setup"
3
+
4
+ require "metaclass"
5
+ require "test/unit"
metadata ADDED
@@ -0,0 +1,78 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: metaclass
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - James Mead
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-08-11 00:00:00 +01:00
19
+ default_executable:
20
+ dependencies: []
21
+
22
+ description:
23
+ email:
24
+ - james@floehopper.org
25
+ executables: []
26
+
27
+ extensions: []
28
+
29
+ extra_rdoc_files: []
30
+
31
+ files:
32
+ - .gitignore
33
+ - Gemfile
34
+ - README.md
35
+ - Rakefile
36
+ - lib/metaclass.rb
37
+ - lib/metaclass/object_methods.rb
38
+ - lib/metaclass/version.rb
39
+ - metaclass.gemspec
40
+ - test/object_methods_test.rb
41
+ - test/test_helper.rb
42
+ has_rdoc: true
43
+ homepage: http://github.com/floehopper/metaclass
44
+ licenses: []
45
+
46
+ post_install_message:
47
+ rdoc_options: []
48
+
49
+ require_paths:
50
+ - lib
51
+ required_ruby_version: !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ hash: 3
57
+ segments:
58
+ - 0
59
+ version: "0"
60
+ required_rubygems_version: !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ hash: 3
66
+ segments:
67
+ - 0
68
+ version: "0"
69
+ requirements: []
70
+
71
+ rubyforge_project: metaclass
72
+ rubygems_version: 1.6.2
73
+ signing_key:
74
+ specification_version: 3
75
+ summary: Adds a metaclass method to all Ruby objects
76
+ test_files:
77
+ - test/object_methods_test.rb
78
+ - test/test_helper.rb