I can''t entirely tell if this is intended behavior or not. However,
here goes:
It appears that load_file in dependencies.rb does not check whether the
newly_defined_paths contains constants that cannot be unloaded. It
assumes that everything is unloadable and concatenates the results to
autoloaded_constants. The autoloaded_constants are then unloaded
(during development) after reloading a page.
This issue crops up in a scenario like the following:
a.rb:
class A
B # just causes missing_constant to load the file for B
end
b.rb:
class B
end
The situation here is that b.rb is contained in a path that has been
added to Dependencies.load_once_paths, while a.rb has not. As a
result, when load_file is called for a.rb, the newly defined paths will
be [A, B].
I have found that adding the following code BEFORE adding anything to
the autoloaded_constants ensures that unloadable constants are not
unloaded:
...
result = nil
newly_defined_paths = new_constants_in(*parent_paths) do
result = load_without_new_constant_marking path
end
# New code starts here...
newly_defined_paths.reject! do |new_path|
if file_path = search_for_file(new_path.underscore)
!loadable_constants_for_path(file_path).include?(new_path)
else
false
end
end
# And ends here...
autoloaded_constants.concat newly_defined_paths
autoloaded_constants.uniq!
log "loading #{path} defined #{newly_defined_paths * '',
''}" unless
newly_defined_paths.empty?
return result
This now prevents b.rb from ever being added to autoloaded_constants.
I hope that description made sense.
I was wondering if someone from core or with knowledge of the
Dependencies system could verify this as an issue or as expected
behavior... Thanks!
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Core" group.
To post to this group, send email to rubyonrails-core@googlegroups.com
To unsubscribe from this group, send email to
rubyonrails-core-unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/rubyonrails-core?hl=en
-~----------~----~----~----~------~----~------~--~---