Method: Fit::FixtureLoader#find_class
- Defined in:
- lib/fit/fixture_loader.rb
#find_class(name) ⇒ Object
Try to load the named class. We first see if it’s already loaded by looking for the class name. If not, we convert the class name to a file name (by changing ‘::’ to ‘/’, then try to require that file. We then look for the constant again. This means that the class Example::Sqrt must be in the file Example/sqrt.rb or the file example/sqrt.rb.
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/fit/fixture_loader.rb', line 26 def find_class name klass = find_constant name unless klass ([''] + @@fixture_packages.to_a).detect do |prefix| file_path = (prefix + name).gsub(/::/, '/').gsub(/\./, '/') classname = basename = File::basename(file_path) if basename.index('$') basename_parts = basename.split(/\$/) basename = basename_parts[0] classname = basename_parts.join('::') end file_basename = basename.split(/([A-Z][^A-Z]+)/).delete_if {|e| e.empty?}.collect {|e| e.downcase!}.join('_') file_dirname = File::dirname(file_path) file_name = (file_dirname == '.' ? '' : file_dirname + '/') + file_basename require_file file_name if file_dirname == '.' klass_name = classname else klass_name = File::dirname(file_path).split(%r{/}).collect { |e| e.index(/[A-Z]/).nil? ? e.capitalize : e }.join('::') + "::#{classname}" end klass = find_constant klass_name end end klass end |