Mike Belyakov
Mike Belyakov

Reputation: 1375

Refactor how one options hash is built from another

This code is written for ActiveAdmin, but actually it does not matter. How I can optimize it? Thank you.

module ActiveAdminSimpleMenu
  # in options can take:
  # menu_priority:integer
  # menu_parent:string
  # permitted_params:array for some additions to main_fields permitted params

  def simple_menu_for(klass, options = {})
    ActiveAdmin.register klass do
      menu_options = {}
      menu_options[:priority] = options[:menu_priority] if options[:menu_priority]
      menu_options[:parent] = options[:menu_parent] if options[:menu_parent]
      menu menu_options unless menu_options.empty?
      permit_params(*(klass.main_fields + (options[:permitted_params] ? options[:permitted_params] : [])))
      ...

Upvotes: 0

Views: 41

Answers (1)

Dave Schweisguth
Dave Schweisguth

Reputation: 37657

I presume by "optimize" you mean refactor. You can

  • use Hash#slice (a Rails method) to build menu_options
  • eliminate the double negative by using if and any?
  • use || to test options[:permitted_params]

All together:

def simple_menu_for(klass, options = {})
  ActiveAdmin.register klass do
    menu_options = options.slice(:menu_priority, :menu_parent)
    menu menu_options if menu_options.any?
    permit_params(*(klass.main_fields + (options[:permitted_params] || [])))
    ...

Upvotes: 2

Related Questions