Ruby函数调用取决于提供的参数

时间:2016-03-17 10:12:53

标签: ruby

def retrieve_transaction(from_when: '', to_when: '')
  from_when = Time.parse(from_when).to_i
  to_when = Time.parse(to_when).to_i

  starting_after = nil
  all_transaction = []
  loop do
    results = Stripe::BalanceTransaction.all(limit: 100, starting_after: starting_after, available_on: { gt: from_when, lt: to_when })
    break if results.data.length == 0
    all_transaction += results.data
    starting_after = results.data.last.id
  end
  all_transaction
end

此代码与提取事务有关。 但是,如果from_when: '', to_when: ''都是空的,我很乐意执行

results = Stripe::BalanceTransaction.all(limit: 100, starting_after: starting_after)

如果他们都提供了,我很乐意执行

results = Stripe::BalanceTransaction.all(limit: 100, starting_after: starting_after, available_on: { gt: from_when, lt: to_when })

我可以编写switch语句,或if语句,但我觉得它根本没有效率。你是否知道以更多Ruby方式处理这种情况的任何其他更好的方法(我对Ruby来说很新......)?

修改

  

如果一个是空的并且提供了一个怎么办?

如果提供from_when: ''Stripe::BalanceTransaction.all(limit: 100, starting_after: starting_after, available_on: { gt: from_when}) 应该执行,反之亦然。

1 个答案:

答案 0 :(得分:0)

也许这样的事情会适用于你的情况。 使用

构建要调用方法的所有参数的哈希
params = {
  starting_after: starting_after
}

params[:available_on] = { 
  gt: from_when,
  lt: to_when
} unless (from_when.empty? || to_when.empty?)

...
results = Stripe::BalanceTransaction.all(params)