class ActiveFedora::FilesHash

def [] (name)

def [] (name)
  association(name).reader if association(name)
end

def []= (name, object)

def []= (name, object)
  association(name).writer(object) if association(name)
end

def association(name)

def association(name)
  # Check to see if the key exists before casting to a symbol, because symbols
  # are not garbage collected in earlier versions of Ruby
  @base.association(name.to_sym) if key?(name)
end

def each

def each
  keys.each do |k|
    yield k, self[k]
  end
end

def each_value

def each_value
  keys.each do |k|
    yield self[k]
  end
end

def empty?

def empty?
  reflections.empty?
end

def freeze

def freeze
  keys.each do |name|
    association(name).reader.freeze if association(name).loaded?
  end
  super
end

def has_key?(key)

def has_key?(key)
  keys.include?(key)
end

def initialize (model)

def initialize (model)
  @base = model
end

def key?(key)

in earlier versions of ruby.
manner that avoids generating extra symbols. Symbols are not garbage collected
Check that the key exists with indifferent access (symbol or string) in a
def key?(key)
  keys.include?(key) || keys.map(&:to_s).include?(key)
end

def keys

def keys
  reflections.keys + @base.undeclared_files
end

def reflections

def reflections
  @base.class.child_resource_reflections
end

def select

def select
  keys.each_with_object({}) do |k, h|
    val = self[k]
    h[k] = val if yield k, val
  end
end

def size

def size
  keys.size
end

def values

def values
  keys.map { |k| self[k] }
end