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