Skip to content

Instantly share code, notes, and snippets.

@Xanthus
Last active August 29, 2015 14:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Xanthus/9494347f4345798113d9 to your computer and use it in GitHub Desktop.
Save Xanthus/9494347f4345798113d9 to your computer and use it in GitHub Desktop.
JRuby self requiring file errors
base_class = <<-FILE
class BaseClass
end
require_relative 'subclasses/middle_class'
registered_sublcasses = MiddleClass.registered_subclass_names
expected_subclasses = ['Subclass1', 'Subclass2']
puts BaseClass.name + ' loaded'
puts MiddleClass.name + ' loaded'
puts Subclass1.name + ' loaded'
puts Subclass2.name + ' loaded'
if registered_sublcasses == expected_subclasses
puts 'All good here'
else
raise "Checked sublcasses of MiddleClass from inheritance hook. Got: " + registered_sublcasses.join(', ') + ", expected: " + expected_subclasses.join(', ')
end
FILE
middle_class = <<-FILE
class MiddleClass < BaseClass
@registry = {}
class << self
def inherited(subclass)
@registry[subclass.name] = subclass
end
def registered_subclass_names
@registry.keys
end
end
end
# This is where things blow up - as the file is required, it requires a subclass file, then requires itself again and
# then one more subclass file (due to file name order)
Dir[File.dirname(__FILE__) + '/*.rb'].each {|file| require file }
FILE
a_subclass = <<-FILE
class Subclass1 < MiddleClass
end
FILE
z_subclass = <<-FILE
class Subclass2 < MiddleClass
end
FILE
`rm base_class.rb`
`rm -r subclasses`
`mkdir subclasses`
(File.new('base_class.rb', 'w') << base_class).close
(File.new('subclasses/middle_class.rb', 'w') << middle_class).close
(File.new('subclasses/a_subclass.rb', 'w') << a_subclass).close
(File.new('subclasses/z_subclass.rb', 'w') << z_subclass).close
puts 'Files created, run "ruby base_class.rb to test"'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment