Provides a numbering object that will produce letters. Accepts four options
for numbering that will control how the letters are presented when given as
#[](index). This numbering object will only provide 26 values (“a” .. “z”)
unless :wrap is true
.
:transform
The symbol representing the method to be called on the letter. This must be a method that does not require any arguments.
:postfix
The value that will be appended to the letter presented by #[]. Defaults to
nil
.
:prefix
The value that will be prepended to the letter presented by #[]. Defaults
to nil
.
:wrap
If true
, then indexes will be wrapped from “z” to “a”.
a1 = Text::Format::Alpha.new(:postfix => ".") puts a1[0] # => "a." puts a1[1] # => "b. puts a1[27] # => "" a2 = Text::Format::Alpha.new(:prefix => "A.") puts a2[0] # => "A.a" puts a2[1] # => "A.b" puts a2[27] # => "" a3 = Text::Format::Alpha.new(:transform => :upcase) puts a3[0] # => "A" puts a3[1] # => "B" puts a3[27] # => "" a4 = Text::Format::Alpha.new(:wrap => true) puts a4[0] # => "a" puts a4[27] # => "b"
# File lib/text/format/alpha.rb, line 55 def initialize(options = {}) #:yields self: @transform = options[:transform] || nil @wrap = options[:wrap] || false @postfix = options[:postfix] || nil @prefix = options[:prefix] || nil end
# File lib/text/format/alpha.rb, line 35 def [](index) if @wrap ltr = (a + (index % 26)).chr elsif index.between?(0, 25) ltr = (a + index).chr else ltr = nil end if ltr if @transform "#{@prefix}#{ltr.send(transform)}#{@postfix}" else "#{@prefix}#{ltr}#{@postfix}" end else "" end end