Sha256: 96c5fab059dbd2684d49e173a12687e7d84cbf362d5b8f0987b49a7834c8ddea

Contents?: true

Size: 989 Bytes

Versions: 2

Compression:

Stored size: 989 Bytes

Contents

module Cheferize
  # A ChefString provides an additional public method for String.  in_same_case_as.
  class ChefString
    instance_methods.each { |m| undef_method m unless m =~ /(^__|^send$|^object_id$)/ }

    def initialize(str)
      @target = str
    end

    # return target string, transformed into the same case as the first character of target.
    def in_same_case_as(target)
      to_case(@target, get_case(target))
    end

    def get_case(letter)
      code = letter.codepoints[0]
      if code > 96 && code < 123
        :lower
      elsif code > 64 && code < 91
        :upper
      else
        :non_alpha
      end
    end

    def to_case(letter, sym)
      case sym
      when :upper
        letter.upcase
      when :lower
        letter.downcase
      else
        letter
      end
    end

    protected

    # proxy any remaining calls to the underlying string.
    def method_missing(name, *args, &block)
      @target.send(name, *args, &block)
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
cheferize-0.1.1 lib/cheferize/chef_string.rb
cheferize-0.1.0 lib/cheferize/chef_string.rb