簡體   English   中英

重構代碼以減少分配分支條件大小

[英]Refactor the code to reduce Assignment Branch Condition size

我正在開發一個 Rails Web 應用程序。 但是當我運行 rubocop 來檢查代碼時。 它說下面方法的ABC(分配分支條件)大小太高。 雖然我是 Ruby on Rails 的新手,但有人能給我一些建議來重構這段代碼嗎? 有關更多詳細信息,我正在實施第三方身份驗證,允許用戶通過 facebook 或 google 等登錄。

謝謝

  def self.from_omniauth auth, current_user
    identity = Identity.find_by(provider: auth.provider, uid: auth.id)
                       .first_or_initialize
    if identity.user.blank?
      user = current_user || User.find_by("email = ?",
                                          auth["info"]["email"])
      if user.blank?
        user = User.new
        user.password = Devise.friendly_token[0, 10]
        user.name = auth.info.name
        user.email = auth.info.email
        user.picture = auth.info.image
        return user.save(validate: false) if auth.provider == "twitter"

        user.save
      end
      identity.user_id = user.id
      identity.save
    end
    identity.user
  end

  def self.from_omniauth auth, current_user
    identity = Identity.find_by(provider: auth.provider, uid: auth.id)
                       .first_or_initialize
    if identity.user.blank?
      user = current_user || User.find_by("email = ?",
                                          auth["info"]["email"])
      create_user(auth) if user.blank?

      identity.user_id = user.id
      identity.save
    end
    identity.user
  end

  def self.create_user(auth)
    user = User.new
    user.password = Devise.friendly_token[0, 10]
    user.name = auth.info.name
    user.email = auth.info.email
    user.picture = auth.info.image
    return user.save(validate: false) if auth.provider == "twitter"

    user.save
  end

是你可以嘗試的東西。 但是,如果確實需要復雜性,您可以設置注釋以忽略該 cop # rubocop:disable ABC (Assignment Branch Condition) ,或者無論 cop 的實際名稱是什么。 如果您覺得尺寸設置太小,您也可以配置 ABC 尺寸

我沒有得到您所說的任何錯誤,所以您可能應該嘗試 # rubocop:disable ABC

當我保存它時,它在參數中添加了括號

def self.from_omniauth(auth, current_user)
  identity = Identity.find_by(provider: auth.provider, uid: auth.id)
                     .first_or_initialize
  if identity.user.blank?
    user = current_user || User.find_by("email = ?",
                                        auth["info"]["email"])
    if user.blank?
      user = User.new
      user.password = Devise.friendly_token[0, 10]
      user.name = auth.info.name
      user.email = auth.info.email
      user.picture = auth.info.image
      return user.save(validate: false) if auth.provider == "twitter"

      user.save
    end
    identity.user_id = user.id
    identity.save
  end
  identity.user
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM