Updated

app/controllers/accounts / contacts_controller.rb

D
135 lines of codes
14 methods
12.9 complexity/method
45 churn
181.17 complexity
34 duplications
class Accounts::ContactsController < InternalController
  1. Accounts::ContactsController assumes too much for instance variable '@contact'
  2. Accounts::ContactsController assumes too much for instance variable '@contacts'
  3. Accounts::ContactsController assumes too much for instance variable '@results'
  4. Accounts::ContactsController has no descriptive comment
  5. Accounts::ContactsController has at least 10 instance variables
before_action :set_contact, only: %i[show edit update destroy chatwoot_conversation_link hovercard_preview] def show @pagy_deals, @deals = pagy(@contact.deals.order(created_at: :desc), items: 10, page_param: :deals_page)
  1. Identical code found in 2 nodes Locations: 0 1
respond_to do |format| format.html format.turbo_stream end end # GET /contacts or /contacts.json def index @contacts = if params[:query].present?
  1. Accounts::ContactsController#index calls 'params[:query]' 2 times Locations: 0 1
Contact.where( 'full_name ILIKE :search OR email ILIKE :search OR phone ILIKE :search', search: "%#{params[:query]}%"
  1. Accounts::ContactsController#index calls 'params[:query]' 2 times Locations: 0 1
).order(updated_at: :desc) else Contact.all.order(created_at: :desc) end @pagy, @contacts = pagy(@contacts) end def select_contact_search
  1. Accounts::ContactsController#select_contact_search has a flog score of 25
@contacts = if params[:query].present?
  1. Accounts::ContactsController#select_contact_search calls 'params[:query]' 2 times Locations: 0 1
current_user.account.contacts.where(
  1. Accounts::ContactsController#select_contact_search calls 'current_user.account' 2 times Locations: 0 1
  2. Accounts::ContactsController#select_contact_search calls 'current_user.account.contacts' 2 times Locations: 0 1
'full_name ILIKE :search OR email ILIKE :search OR phone ILIKE :search', search: "%#{params[:query]}%"
  1. Accounts::ContactsController#select_contact_search calls 'params[:query]' 2 times Locations: 0 1
).order(updated_at: :desc).limit(5) else current_user.account.contacts.order(updated_at: :desc).limit(5)
  1. Accounts::ContactsController#select_contact_search calls 'current_user.account' 2 times Locations: 0 1
  2. Accounts::ContactsController#select_contact_search calls 'current_user.account.contacts' 2 times Locations: 0 1
end end def search
  1. Accounts::ContactsController#search has approx 7 statements
@contacts = current_user.account.contacts.where( 'full_name ILIKE :search OR email ILIKE :search OR phone ILIKE :search', search: "%#{params[:q]}%" ).limit(5).map(&:attributes) @results = @contacts.each do |c|
  1. Accounts::ContactsController#search has the variable name 'c'
c[:text] = "#{c['full_name']} - #{c['email']} - #{c['phone']}" c end @results.insert(0, { "id": 0, "text": 'New contact' }) json = { "results": @results } render json: end # GET /contacts/new def new @contact = Contact.new end # GET /contacts/1/edit def edit; end def edit_custom_attributes @contact = current_user.account.contacts.find(params[:contact_id])
  1. Accounts::ContactsController#edit_custom_attributes calls 'current_user.account' 2 times Locations: 0 1
@custom_attribute_definitions = current_user.account.custom_attribute_definitions.contact_attribute
  1. Accounts::ContactsController#edit_custom_attributes calls 'current_user.account' 2 times Locations: 0 1
end # POST /contacts or /contacts.json def create
  1. Accounts::ContactsController#create has a flog score of 31
  2. Accounts::ContactsController#create has approx 7 statements
@contact = current_user.account.contacts.new(contact_params)
  1. Accounts::ContactsController#create calls 'current_user.account' 2 times Locations: 0 1
if @contact.save @pagy_deals, @deals = pagy(@contact.deals.order(created_at: :desc), items: 10, page_param: :deals_page)
  1. Identical code found in 2 nodes Locations: 0 1
respond_to do |format| format.html do redirect_to account_contact_path(current_user.account, @contact),
  1. Accounts::ContactsController#create calls 'current_user.account' 2 times Locations: 0 1
notice: t('flash_messages.created', model: Contact.model_name.human) end format.turbo_stream end else render :new, status: :unprocessable_entity end end # PATCH/PUT /contacts/1 or /contacts/1.json def update
  1. Accounts::ContactsController#update has a flog score of 34
  2. Accounts::ContactsController#update has approx 7 statements
if params[:contact][:att_key].present?
  1. Accounts::ContactsController#update calls 'params[:contact]' 3 times Locations: 0 1
  2. Accounts::ContactsController#update calls 'params[:contact][:att_key]' 2 times Locations: 0 1
@contact.custom_attributes[params[:contact][:att_key]] = params[:contact][:att_value]
  1. Accounts::ContactsController#update calls 'params[:contact]' 3 times Locations: 0 1
  2. Accounts::ContactsController#update calls 'params[:contact][:att_key]' 2 times Locations: 0 1
end if @contact.update(contact_params) flash[:notice] = t('flash_messages.updated', model: Contact.model_name.human) respond_to do |format| format.html { redirect_to account_contact_path(current_user.account, @contact) } format.turbo_stream end else render :edit, status: :unprocessable_entity end end # DELETE /contacts/1 or /contacts/1.json def destroy
  1. Accounts::ContactsController#destroy has approx 6 statements
@contact.destroy respond_to do |format| format.html do redirect_to account_contacts_path(current_user.account), notice: t('flash_messages.deleted', model: Contact.model_name.human) end format.json { head :no_content } end end def chatwoot_conversation_link @display_format = params[:display_format].presence || 'icon' @chatwoot_conversation_link = Contact::Integrations::Chatwoot::GenerateConversationLink.new(@contact).call[:ok] rescue Faraday::TimeoutError, Faraday::ConnectionFailed, JSON::ParserError @connection_error = true end def hovercard_preview end private # Use callbacks to share common setup or constraints between actions. def set_contact @contact = Contact.find(params[:id]) end # Only allow a list of trusted parameters through. def contact_params params.require(:contact).permit(:full_name, :phone, :email, :label_list, custom_attributes: {}) end end