ruby - Accessing variable name -


i trying parameter validation outside of rails.

def create_statement(action, ...)   valid_one_of(action, ['add', 'move', 'delete'])   ... end 

validation method:

def valid_one_of(input, valid_values)   return true if valid_values.include?(input)   raise "#{input} not valid value #{input.var_name}"  end 

sample call:

create_statement('bob') 

so output be:

bob not valid value action

the problem how input.var_name ?


i workaround pass

valid_one_of(action, ['add', 'move', 'delete'], 'action') 

(and use 3rd parm output) doesn't seem feels bit redundant.

if not possible access variable name there more dry coding style workaround?

i don't know of way name of local variable, , if could, name want? name of parameter define on method definition? name of variable in caller?

i don't think "work-around" horrible, suggest couple of slight variations might read little better.

also not sure if intent pass in list of valid values @ call site, or if might have, hash of valid values might use passed in type valid values from.

def valid_one_of_type type, input:, valid_values:   return true if valid_values.include?(input)   raise "#{input} not valid value #{type}"  end  my_action = "bob"  valid_one_of_type :action , input: my_action, valid_values: ['add', 'move', 'delete']   def valid_one_of_type type, input, valid_values   return true if valid_values.include?(input)   raise "#{input} not valid value #{type}"  end  my_action = "bob"  valid_one_of_type :action , my_action, ['add', 'move', 'delete']  

another option wrap actions in class , validations on creation:

class action    valid_actions = ['add', 'move', 'delete']   def initialize action     unless valid_actions.include? action        raise "#{action} not valid value #{self.class.name}"     end   end end  my_action = action.new "bob" 

Comments

Popular posts from this blog

PySide and Qt Properties: Connecting signals from Python to QML -

c# - DevExpress.Wpf.Grid.InfiniteGridSizeException was unhandled -

scala - 'wrong top statement declaration' when using slick in IntelliJ -