class CFBundle::Resource::Enumerator
@private
Performs the enumeration of a bundle's resources.
Public Class Methods
new(bundle, subdirectory, localization, preferred_languages)
click to toggle source
@param bundle [Bundle] The bundle that contains the resources. @param subdirectory [String?] The name of the bundle subdirectory to
search.
@param localization [String?, Symbol?] A language identifier to restrict
the search to a specific localization.
@param preferred_languages [Array] An array of strings (or symbols)
corresponding to a user's preferred languages.
# File lib/cfbundle/resource.rb, line 76 def initialize(bundle, subdirectory, localization, preferred_languages) @bundle = bundle @directory = PathUtils.join(bundle.resources_directory, subdirectory) @localizations = localizations_for(bundle, localization, preferred_languages) @enumerator = [].to_enum end
Public Instance Methods
next()
click to toggle source
Returns the next resource in the bundle.
@return [Resource] @raise [StopIteration]
# File lib/cfbundle/resource.rb, line 88 def next Resource.new(@bundle, @enumerator.next) rescue StopIteration @enumerator = next_enumerator retry end
Private Instance Methods
localizations_for(bundle, localization, preferred_languages)
click to toggle source
# File lib/cfbundle/resource.rb, line 113 def localizations_for(bundle, localization, preferred_languages) return [nil, localization.to_s] if localization [ nil, *bundle.preferred_localizations(preferred_languages || []), bundle.development_localization ].uniq end
localized_directory_for(localization)
click to toggle source
# File lib/cfbundle/resource.rb, line 108 def localized_directory_for(localization) return @directory unless localization PathUtils.join(@directory, localization + '.lproj') end
next_enumerator()
click to toggle source
# File lib/cfbundle/resource.rb, line 97 def next_enumerator loop do break if @localizations.empty? localization = @localizations.shift directory = localized_directory_for(localization) next unless @bundle.storage.directory?(directory) return @bundle.storage.foreach(directory) end raise StopIteration end