metaclass-0.0.1/0000755000175000017500000000000011677067663013065 5ustar boutilboutilmetaclass-0.0.1/metadata.yml0000644000175000017500000000253411677067663015374 0ustar boutilboutil--- !ruby/object:Gem::Specification name: metaclass version: !ruby/object:Gem::Version hash: 29 prerelease: segments: - 0 - 0 - 1 version: 0.0.1 platform: ruby authors: - James Mead autorequire: bindir: bin cert_chain: [] date: 2011-08-11 00:00:00 +01:00 default_executable: dependencies: [] description: email: - james@floehopper.org executables: [] extensions: [] extra_rdoc_files: [] files: - .gitignore - Gemfile - README.md - Rakefile - lib/metaclass.rb - lib/metaclass/object_methods.rb - lib/metaclass/version.rb - metaclass.gemspec - test/object_methods_test.rb - test/test_helper.rb has_rdoc: true homepage: http://github.com/floehopper/metaclass licenses: [] post_install_message: rdoc_options: [] require_paths: - lib required_ruby_version: !ruby/object:Gem::Requirement none: false requirements: - - ">=" - !ruby/object:Gem::Version hash: 3 segments: - 0 version: "0" required_rubygems_version: !ruby/object:Gem::Requirement none: false requirements: - - ">=" - !ruby/object:Gem::Version hash: 3 segments: - 0 version: "0" requirements: [] rubyforge_project: metaclass rubygems_version: 1.6.2 signing_key: specification_version: 3 summary: Adds a metaclass method to all Ruby objects test_files: - test/object_methods_test.rb - test/test_helper.rb metaclass-0.0.1/test/0000755000175000017500000000000011677067663014044 5ustar boutilboutilmetaclass-0.0.1/test/test_helper.rb0000644000175000017500000000012411677067663016704 0ustar boutilboutilrequire "rubygems" require "bundler/setup" require "metaclass" require "test/unit" metaclass-0.0.1/test/object_methods_test.rb0000644000175000017500000000144111677067663020421 0ustar boutilboutilrequire "test_helper" class ObjectMethodsTest < Test::Unit::TestCase def setup @klass = Class.new end def test_define_method_on_only_one_instance_of_a_class instance = @klass.new assert_raises(NoMethodError) { instance.success? } instance.__metaclass__.class_eval { def success?; true; end } assert_nothing_raised(NoMethodError) { assert instance.success? } another_instance = @klass.new assert_raises(NoMethodError) { another_instance.success? } end def test_metaclass_ancestors instance = @klass.new assert instance.__metaclass__.ancestors.include?(Object) assert instance.__metaclass__.ancestors.include?(Kernel) end def test_metaclass_is_itself_a_class instance = @klass.new assert instance.__metaclass__.is_a?(Class) end endmetaclass-0.0.1/metaclass.gemspec0000644000175000017500000000124011677067663016403 0ustar boutilboutil# -*- encoding: utf-8 -*- $:.push File.expand_path("../lib", __FILE__) require "metaclass/version" Gem::Specification.new do |s| s.name = "metaclass" s.version = Metaclass::VERSION s.authors = ["James Mead"] s.email = ["james@floehopper.org"] s.homepage = "http://github.com/floehopper/metaclass" s.summary = %q{Adds a metaclass method to all Ruby objects} s.rubyforge_project = "metaclass" s.files = `git ls-files`.split("\n") s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n") s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) } s.require_paths = ["lib"] end metaclass-0.0.1/lib/0000755000175000017500000000000011677067663013633 5ustar boutilboutilmetaclass-0.0.1/lib/metaclass/0000755000175000017500000000000011677067663015607 5ustar boutilboutilmetaclass-0.0.1/lib/metaclass/version.rb0000644000175000017500000000005111677067663017615 0ustar boutilboutilmodule Metaclass VERSION = "0.0.1" end metaclass-0.0.1/lib/metaclass/object_methods.rb0000644000175000017500000000022711677067663021126 0ustar boutilboutilmodule Metaclass::ObjectMethods def __metaclass__ class << self self end end end class Object include Metaclass::ObjectMethods endmetaclass-0.0.1/lib/metaclass.rb0000644000175000017500000000012511677067663016132 0ustar boutilboutilmodule Metaclass end require "metaclass/version" require "metaclass/object_methods" metaclass-0.0.1/Rakefile0000644000175000017500000000030111677067663014524 0ustar boutilboutilrequire 'bundler/gem_tasks' require "rake/testtask" Rake::TestTask.new do |t| t.libs << "test" t.test_files = FileList["test/**/*_test.rb"] t.verbose = true end task :default => :test metaclass-0.0.1/README.md0000644000175000017500000000075211677067663014350 0ustar boutilboutilAdds a `__metaclass__` method to all Ruby objects. Motivations :- * 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). * I'm trying to extract code out of the [mocha gem](https://github.com/floehopper/mocha) and this is an obvious candidate. metaclass-0.0.1/Gemfile0000644000175000017500000000004611677067663014360 0ustar boutilboutilsource "http://rubygems.org" gemspec metaclass-0.0.1/.gitignore0000644000175000017500000000004111677067663015050 0ustar boutilboutil*.gem .bundle Gemfile.lock pkg/*