Sha256: fe73dfcb75e09bc05964f7c7dc0d77a56b3c4cbc5b73e5c9ed3f7c0c7de63d4e

Contents?: true

Size: 934 Bytes

Versions: 1

Compression:

Stored size: 934 Bytes

Contents

module PM

# A ListContainer responds to messages that manipulate the cursors for one
# or more List objects.
module ListContainer

  def method_missing(sym, *args)
    case sym.to_s
    when /^curr_(\w+)=$/
      name = $1
      ivar_sym = "@#{pluralize(name)}".to_sym
      raise "no such ivar #{ivar_sym} in #{self.class}" unless instance_variable_defined?(ivar_sym)
      instance_variable_get(ivar_sym).send(:curr=, args[0])
    when /^(first|next|prev|curr|last)_(\w+)(\?)?$/
      method, ivar, qmark = $1, $2, $3
      ivar_sym = "@#{pluralize(ivar)}".to_sym
      raise "no such ivar #{ivar_sym} in #{self.class}" unless instance_variable_defined?(ivar_sym)
      instance_variable_get(ivar_sym).send("#{method}#{qmark}".to_sym)
    else
      super
    end
  end

  def pluralize(str)
    case str
    when /s$/, /ch$/
      "#{str}es"
    when /y$/
      "#{str[0..-2]}ies}"
    else
      "#{str}s"
    end
  end

end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
patchmaster-0.0.0 lib/patchmaster/list_container.rb