Sha256: 9cef2ff4104e8500e8200ed3c027bd6e5c3baf8b49e1df3d238a26725e13d83b

Contents?: true

Size: 1.55 KB

Versions: 3

Compression:

Stored size: 1.55 KB

Contents

## String
class String
  # def perma_string(sep = '_')
  #   ActiveSupport::Inflector.parameterize(self, sep).to_s
  # end
  
  def slugify(options = {})
    options = { :sep => '_', :without_extension => false, :downcase => false, :underscore => false }.merge(options)
    # replace accented chars with ther ascii equivalents
    s = ActiveSupport::Inflector.transliterate(self).to_s
    # No more than one slash in a row
    s.gsub!(/(\/[\/]+)/, '/')
    # Remove leading or trailing space
    s.strip!
    # Remove leading or trailing slash
    s.gsub! /(^[\/]+)|([\/]+$)/, ''
    # Remove extensions
    s.gsub! /(\.[a-zA-Z]{2,})/, '' if options[:without_extension]
    # Downcase
    s.downcase! if options[:downcase]
    # Turn unwanted chars into the seperator
    s.gsub!(/[^a-zA-Z0-9\-_\+\/]+/i, options[:sep])
    # Underscore
    s.gsub!(/[\-]/i, '_') if options[:underscore]
    s
  end
  
  def slugify!(options = {})
    replace(self.slugify(options))
  end
  
end

## Hash

class Hash
  
  def underscore_keys
    new_hash = {}
    
    self.each_pair do |key, value| 
      if value.respond_to?(:collect!) # Array
        value.collect do |item|
          if item.respond_to?(:each_pair) # Hash item within
            item.underscore_keys
          else
            item
          end
        end
      elsif value.respond_to?(:each_pair) # Hash
        value = value.underscore_keys
      end
      
      new_key = key.is_a?(String) ? key.underscore : key # only String keys
      
      new_hash[new_key] = value
    end
    
    self.replace(new_hash)
  end
  
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
locomotive_cms-0.0.3.3 lib/core_ext.rb
locomotive_cms-0.0.3.1 lib/core_ext.rb
locomotive_cms-0.0.2.9 lib/core_ext.rb