Skip to content

Instantly share code, notes, and snippets.

@terotil
Created January 3, 2012 21:01
Show Gist options
  • Save terotil/1556915 to your computer and use it in GitHub Desktop.
Save terotil/1556915 to your computer and use it in GitHub Desktop.
Cross-loading ruby classes from multiple files
puts 'foo'
class Foo
@@loaded ||= []
@@loaded << 'foo.rb'
def foo
'Foo#foo in foo'
end
def bar
'Foo#bar in foo'
end
load 'foo2.rb' unless @@loaded.include? 'foo2.rb'
load 'foo3.rb' unless @@loaded.include? 'foo3.rb'
end
puts Foo.new.foo
puts Foo.new.bar
puts Foo.new.baz
puts 'foo2'
class Foo
@@loaded ||= []
@@loaded << 'foo2.rb'
def bar
'Foo#bar in foo2'
end
def baz
'Foo#baz in foo2'
end
load 'foo.rb' unless @@loaded.include? 'foo.rb'
load 'foo3.rb' unless @@loaded.include? 'foo3.rb'
end
puts 'foo3'
Foo.class_eval '@@loaded ||= []'
Foo.class_eval '@@loaded << "foo3.rb"'
def Foo.baz
'Foo#baz in foo3'
end
load 'foo.rb' unless Foo.class_eval('@@loaded').include? 'foo.rb'
load 'foo2.rb' unless Foo.class_eval('@@loaded').include? 'foo2.rb'
puts 'foo3'
class Foo
@@loaded ||= []
@@loaded << 'foo3.rb'
def baz
'Foo#baz in foo3'
end
load 'foo.rb' unless @@loaded.include? 'foo.rb'
load 'foo2.rb' unless @@loaded.include? 'foo2.rb'
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment