Skip to content

endeepak/transformers

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Transformers Build Status

Transformers is an extension to hash to allow various transformations using simple DSL. It also has optional rails extension to dry up frequently applied transformations on controller params.

Install

    gem install transformers

OR Add dependency in Gemfile for projects using bundler

    gem 'transformers'

Available Transformations

  • Convert values

      hash = {:foo => 'bar'}
    
      hash.convert :eric, :to => lambda { |value| value.upcase }
    
    OR use short hand notation to call a method on the value
    
      hash.convert :foo, :to => :upcase
    
  • Combine keys

      hash.convert :begin, :end, :as => :range
    
  • Rename keys

      hash.rename :foo, :to => :bar
    
    OR
    
      hash.convert :foo, :as => :bar
    
  • Alias key

      hash.copy :foo, :to => :bar
    
  • Convert and combine

      hash.convert :first_name, :last_name, :as => :name, :to => lambda { |first_name, last_name| first_name + ' '+ last_name }
    
  • Conversion using type converters

      hash = {:foo => 'true'}
    
      hash.convert :foo, :to => :boolean         #built-in
    
  • Using Custom converters : You can pass a lambda or define a module or an object which has a call method. This method will receive values for given keys and should return the converted value.

      module Transformers::Name
        def self.call(first_name, last_name)
          return first_name + ' '+ last_name
        end
      end
    

    Register the converter

      Transformers.register(:name, Transformers::Name)
    

    Usage

      hash.convert :first_name, :last_name, :as => :name, :to => :name
    
  • Use them together in a transform block

      hash.transform do
        delete :unwanted
        rename :foo, :to => :bar
        convert :first_name, :last_name, :as => :name, :to => :name
      end
    

Rails Extensions

To Include rails extensions add the below line in a config/initializer/transformers.rb. You can register the custom transformers in the same file.

    require 'transformers/rails'

This adds transform_params extension to action controller. You can define the transformations for any action as,

    transform_params :search, :only => :index do
      convert :first_name, :last_name, :as => :name, :to => :name
    end

This will add a before_filter in the controller to apply transformations on params[:search]. If the first argument is omitted, the transformations will be applied directly on the params. The options for transform_params are same as before_filter options.

Rspec Matcher

This gem has a rspec matcher for testing the custom converters. To use this, add the below line in the spec_helper

    require 'rspec/transformers'

The converter spec can be written as

    describe Transformers::Boolean do
      it { should convert('true').to(true)}
      it { should convert('false').to(false)}
    end

About

An extension to hash to allow various transformations using simple DSL + Rails controller extension

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages