snippet art assert_redirected_to ${1:action}: '${2:index}' snippet artnp assert_redirected_to ${1:parent}_${2:child}_path(${3:@$1}, ${0:@$2}) snippet artnpp assert_redirected_to ${1:parent}_${2:child}_path(${0:@$1}) snippet artp assert_redirected_to ${1:model}_path(${0:@$1}) snippet artpp assert_redirected_to ${0:model}s_path snippet asd assert_difference '${1:Model}.${2:count}', ${3:1} do ${0} end snippet asnd assert_no_difference '${1:Model}.${2:count}' do ${0} end snippet asre assert_response :${1:success}, @response.body snippet asrj assert_rjs :${1:replace}, '${0:dom id}' snippet ass assert_select(..) assert_select '${1:path}', ${2:text}: '${3:inner_html}' ${4:do} ${0} end snippet ba before_action :${0:method} snippet bf before_filter :${0:method} snippet bt belongs_to :${0:association} snippet btp belongs_to :${1:association}, polymorphic: true snippet crw cattr_accessor :${0:attr_names} snippet defcreate def create @${1:model_class_name} = ${2:ModelClassName}.new($1_params) respond_to do |format| if @$1.save flash[:notice] = '$2 was successfully created.' format.html { redirect_to(@$1) } format.xml { render xml: @$1, status: :created, location: @$1 } else format.html { render action: 'new' } format.xml { render xml: @$1.errors, status: :unprocessable_entity } end end end snippet defdestroy def destroy @${1:model_class_name} = ${2:ModelClassName}.find(params[:id]) @$1.destroy respond_to do |format| format.html { redirect_to($1s_url) } format.xml { head :ok } end end snippet defedit def edit @${1:model_class_name} = ${0:ModelClassName}.find(params[:id]) end snippet defindex def index @${1:model_class_name} = ${2:ModelClassName}.all respond_to do |format| format.html # index.html.erb format.xml { render xml: @$1s } end end snippet defnew def new @${1:model_class_name} = ${2:ModelClassName}.new respond_to do |format| format.html # new.html.erb format.xml { render xml: @$1 } end end snippet defshow def show @${1:model_class_name} = ${2:ModelClassName}.find(params[:id]) respond_to do |format| format.html # show.html.erb format.xml { render xml: @$1 } end end snippet defupdate def update @${1:model_class_name} = ${2:ModelClassName}.find(params[:id]) respond_to do |format| if @$1.update($1_params) flash[:notice] = '$2 was successfully updated.' format.html { redirect_to(@$1) } format.xml { head :ok } else format.html { render action: 'edit' } format.xml { render xml: @$1.errors, status: :unprocessable_entity } end end end snippet defparams def ${1:model_class_name}_params params.require(:$1).permit() end snippet dele delegate .. to delegate :${1:methods}, to: :${0:object} snippet dele delegate .. to .. prefix .. allow_nil delegate :${1:methods}, to: :${2:object}, prefix: :${3:prefix}, allow_nil: ${0:allow_nil} snippet amc alias_method_chain :${1:method_name}, :${0:feature} snippet flash flash[:${1:notice}] = '${0}' snippet habtm has_and_belongs_to_many :${1:object}, join_table: '${2:table_name}', foreign_key: '${3}_id' snippet hm has_many :${0:object} snippet hmd has_many :${1:other}s, class_name: '${2:$1}', foreign_key: '${3:$1}_id', dependent: :destroy snippet hmt has_many :${1:object}, through: :${0:object} snippet ho has_one :${0:object} snippet hod has_one :${1:object}, dependent: :${0:destroy} snippet i18 I18n.t('${1:type.key}') snippet ist <%= image_submit_tag('${1:agree.png}', id: '${2:id}'${0}) %> snippet log Rails.logger.${1:debug} ${0} snippet log2 RAILS_DEFAULT_LOGGER.${1:debug} ${0} snippet logd logger.debug { '${1:message}' } snippet loge logger.error { '${1:message}' } snippet logf logger.fatal { '${1:message}' } snippet logi logger.info { '${1:message}' } snippet logw logger.warn { '${1:message}' } snippet mapc ${1:map}.${2:connect} '${0:controller/:action/:id}' snippet mapca ${1:map}.catch_all '*${2:anything}', controller: '${3:default}', action: '${4:error}' snippet mapr ${1:map}.resource :${0:resource} snippet maprs ${1:map}.resources :${0:resource} snippet mapwo ${1:map}.with_options ${2:controller}: '${3:thing}' do |$3| ${0} end ############################### # model callback snippets # ############################### # before callback snippet mbv before_validation :${0:method} snippet mbc before_create :${0:method} snippet mbu before_update :${0:method} snippet mbs before_save :${0:method} snippet mbd before_destroy :${0:method} # after callback snippet mav after_validation :${0:method} snippet maf after_find :${0:method} snippet mat after_touch :${0:method} snippet macr after_create :${0:method} snippet mau after_update :${0:method} snippet mas after_save :${0:method} snippet mad after_destroy :${0:method} # around callback snippet marc around_create :${0:method} snippet maru around_update :${0:method} snippet mars around_save :${0:method} snippet mard around_destroy :${0:method} snippet mcht change_table :${1:table_name} do |t| ${0} end snippet mp map(&:${0:id}) snippet mrw mattr_accessor :${0:attr_names} snippet oa order('${0:field}') snippet od order('${0:field} DESC') snippet pa params[:${1:id}] snippet ra render action: '${0:action}' snippet ral render action: '${1:action}', layout: '${0:layoutname}' snippet rest respond_to do |format| format.${1:html} { ${0} } end snippet rf render file: '${0:filepath}' snippet rfu render file: '${1:filepath}', use_full_path: ${0:false} snippet ri render inline: "${0:<%= 'hello' %>}" snippet ril render inline: "${1:<%= 'hello' %>}", locals: { ${2:name}: '${3:value}'${0} } snippet rit render inline: "${1:<%= 'hello' %>}", type: ${0::rxml} snippet rjson render json: '${0:text to render}' snippet rl render layout: '${0:layoutname}' snippet rn render nothing: ${0:true} snippet rns render nothing: ${1:true}, status: ${0:401} snippet rp render partial: '${0:item}' snippet rpc render partial: '${1:item}', collection: ${0:@$1s} snippet rpl render partial: '${1:item}', locals: { ${2:$1}: ${0:@$1} } snippet rpo render partial: '${1:item}', object: ${0:@$1} snippet rps render partial: '${1:item}', status: ${0:500} snippet rt render text: '${0:text to render}' snippet rtl render text: '${1:text to render}', layout: '${0:layoutname}' snippet rtlt render text: '${1:text to render}', layout: ${0:true} snippet rts render text: '${1:text to render}', status: ${0:401} snippet ru render :update do |${1:page}| $1.${0} end snippet rxml render xml: '${0:text to render}' snippet sc scope :${1:name}, -> { where(${2:field}: ${0:value}) } snippet sl scope :${1:name}, lambda do |${2:value}| where('${3:field = ?}', ${0:value}) end snippet sha1 Digest::SHA1.hexdigest(${0:string}) snippet sweeper class ${1:ModelClassName}Sweeper < ActionController::Caching::Sweeper observe $1 def after_save(${0:model_class_name}) expire_cache($2) end def after_destroy($2) expire_cache($2) end def expire_cache($2) expire_page end end snippet va validates_associated validates_associated :${0:attribute} snippet va validates .., acceptance: true validates :${0:terms}, acceptance: true snippet vc validates :${0:attribute}, confirmation: true snippet ve validates :${1:attribute}, exclusion: { in: ${0:%w( mov avi )} } snippet vf validates :${1:attribute}, format: { with: /${0:regex}/ } snippet vi validates :${1:attribute}, inclusion: { in: %w(${0: mov avi }) } snippet vl validates :${1:attribute}, length: { in: ${2:3}..${0:20} } snippet vn validates :${0:attribute}, numericality: true snippet vp validates :${0:attribute}, presence: true snippet vu validates :${0:attribute}, uniqueness: true snippet format format.${1:js|xml|html} { ${0} } snippet wc where(${1:'conditions'}${0:, bind_var}) snippet wf where(${1:field}: ${0:value}) snippet xdelete xhr :delete, :${1:destroy}, id: ${2:1} snippet xget xhr :get, :${1:show}, id: ${2:1} snippet xpost xhr :post, :${1:create}, ${2:object}: ${3:object} snippet xput xhr :put, :${1:update}, id: ${2:1}, ${3:object}: ${4:object} snippet test test 'should ${1:do something}' do ${0} end ########################### # migrations snippets # ########################### snippet mac add_column :${1:table_name}, :${2:column_name}, :${0:data_type} snippet mai add_index :${1:table_name}, :${0:column_name} snippet mrc remove_column :${1:table_name}, :${0:column_name} snippet mrnc rename_column :${1:table_name}, :${2:old_column_name}, :${0:new_column_name} snippet mcc change_column :${1:table}, :${2:column}, :${0:type} snippet mnc t.${1:string} :${2:title}${3:, null: false} snippet mct create_table :${1:table_name} do |t| ${0} end snippet migration class .. < ActiveRecord::Migration .. def up .. def down .. end class ${1:class_name} < ActiveRecord::Migration def up ${0} end def down end end snippet migration class .. < ActiveRecord::Migration .. def change .. end class ${1:class_name} < ActiveRecord::Migration def change ${0} end end snippet trc t.remove :${0:column} snippet tre t.rename :${1:old_column_name}, :${2:new_column_name} ${0} snippet tref t.references :${0:model} snippet tcb t.boolean :${1:title} ${0} snippet tcbi t.binary :${1:title}, limit: ${2:2}.megabytes ${0} snippet tcd t.decimal :${1:title}, precision: ${2:10}, scale: ${3:2} ${0} snippet tcda t.date :${1:title} ${0} snippet tcdt t.datetime :${1:title} ${0} snippet tcf t.float :${1:title} ${0} snippet tch t.change :${1:name}, :${2:string}, ${3:limit}: ${4:80} ${0} snippet tci t.integer :${1:title} ${0} snippet tcl t.integer :lock_version, null: false, default: 0 ${0} snippet tcr t.references :${1:taggable}, polymorphic: { default: '${2:Photo}' } ${0} snippet tcs t.string :${1:title} ${0} snippet tct t.text :${1:title} ${0} snippet tcti t.time :${1:title} ${0} snippet tcts t.timestamp :${1:title} ${0} snippet tctss t.timestamps ${0} ########################## # Rspec snippets # ########################## #ShouldaMatchers#ActionController snippet isfp it { should filter_param :${0:key} } snippet isrt it { should redirect_to ${0:url} } snippet isrtp it { should render_template ${0} } snippet isrwl it { should render_with_layout ${0} } snippet isrf it { should rescue_from ${0:exception} } snippet isrw it { should respond_with ${0:status} } snippet isr it { should route(:${1:method}, '${0:path}') } snippet isss it { should set_session :${0:key} } snippet issf it { should set_the_flash('${0}') } #ShouldaMatchers#ActiveModel snippet isama it { should allow_mass_assignment_of :${0} } snippet isav it { should allow_value(${1}).for :${0} } snippet isee it { should ensure_exclusion_of :${0} } snippet isei it { should ensure_inclusion_of :${0} } snippet isel it { should ensure_length_of :${0} } snippet isva it { should validate_acceptance_of :${0} } snippet isvc it { should validate_confirmation_of :${0} } snippet isvn it { should validate_numericality_of :${0} } snippet isvp it { should validate_presence_of :${0} } snippet isvu it { should validate_uniqueness_of :${0} } #ShouldaMatchers#ActiveRecord snippet isana it { should accept_nested_attributes_for :${0} } snippet isbt it { should belong_to :${0} } snippet isbtcc it { should belong_to(:${1}).counter_cache ${0:true} } snippet ishbtm it { should have_and_belong_to_many :${0} } snippet isbv it { should be_valid } snippet ishc it { should have_db_column :${0} } snippet ishi it { should have_db_index :${0} } snippet ishm it { should have_many :${0} } snippet ishmt it { should have_many(:${1}).through :${0} } snippet isho it { should have_one :${0} } snippet ishro it { should have_readonly_attribute :${0} } snippet iss it { should serialize :${0} } snippet isres it { should respond_to :${0} } snippet isresw it { should respond_to(:${1}).with(${0}).arguments } snippet super_call ${1:super_class}.instance_method(:${0:method}).bind(self).call