Как мне создать функцию .find_by_label (x), которая эквивалентна .find_by (label: x)? - PullRequest
0 голосов
/ 26 января 2019

Мой код имеет две функции, которые по сути одинаковы, кроме имени параметра.Было бы здорово объединить две функции и сделать их общими.Например:

def self.find_global_variable_by_id(id) ## RSpec - Ok
    if result_global_unscoped = Variable.global.find_by(id: id)
        return result_global_unscoped
    end
    if result_global_scoped_workspace = Variable.find_by(id: id)
        return result_global_scoped_workspace
    end 
end
def self.find_global_variable_by_label(label) ## RSpec - Ok
    if result_global_unscoped = Variable.global.find_by(label: label)
        return result_global_unscoped
    end
    if result_global_scoped_workspace = Variable.find_by(label: label)
        return result_global_scoped_workspace
    end 
end 

И мне хотелось бы что-то вроде этого:

def self.find_global_variable_by_<id/label>(x)
    if result_global_unscoped = Variable.global.find_by_<id/label>(x)
        return result_global_unscoped
    end
    if result_global_scoped_workspace = Variable.find_by_<id/label>(x)
        return result_global_scoped_workspace
    end 
end

Возможно ли это?

Ответы [ 2 ]

0 голосов
/ 26 января 2019
class Klass
  def self.find_global_variable(h)
    Variable.global.find_by(h) || Variable.find_by(h)
  end
end

называется

Klass.find_global_variable(id: id)

или

Klass.find_global_variable(label: label)
0 голосов
/ 26 января 2019

Это возможно, используя method_missing.

def self.method_missing(message, *args, &block)
  if message =~ /find_global_variable_by_(id|label)/
    puts message
    # something
    return
  end
  super
end
...