Sha256: 8af90702ef0a0d4c3e31adfd0cb2e9820bad82756cce52f088fd1136b9689b9d

Contents?: true

Size: 784 Bytes

Versions: 4

Compression:

Stored size: 784 Bytes

Contents

module Jimmy
  module TransformKeys
    def camel_upper(str)
      camel_lower(str).sub(/\A(.)/) { $1.upcase }
    end

    def camel_lower(str)
      str.gsub(/[-_\s]+(.)/) { $1.upcase }
    end

    class Transformer
      include TransformKeys

      def cache(method)
        (@cache ||= {})[method] ||= {}
      end

      def transform(sym, method)
        if method
          cache(method)[sym] ||= __send__(method, sym.to_s).to_sym
        else
          sym
        end
      end

      def transform_ref(str, method)
        if method
          str.sub(/#(.+)/) { '#' << $1.split('/').map { |part| __send__ method, part }.join('/') }
        else
          str
        end
      end
    end

    def self.transformer
      @transformer ||= Transformer.new
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
jimmy-0.5.4 lib/jimmy/transform_keys.rb
jimmy-0.5.3 lib/jimmy/transform_keys.rb
jimmy-0.5.2 lib/jimmy/transform_keys.rb
jimmy-0.5.1 lib/jimmy/transform_keys.rb