Skip to content

Instantly share code, notes, and snippets.

@absk1317
Last active August 20, 2020 09:11
Show Gist options
  • Select an option

  • Save absk1317/051acd8d68f687772b03c47b95c117d4 to your computer and use it in GitHub Desktop.

Select an option

Save absk1317/051acd8d68f687772b03c47b95c117d4 to your computer and use it in GitHub Desktop.

Revisions

  1. absk1317 revised this gist Aug 20, 2020. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion users.rb
    Original file line number Diff line number Diff line change
    @@ -1,6 +1,6 @@
    # frozen_string_literal: true

    # For abstracting out updating approved businesses sheet
    # For abstracting out updating approved users sheet
    class GoogleSheets::Users
    SHEET_NAME = 'users'
    QUEUE_NAME = 'google_sheet'
  2. absk1317 created this gist Aug 1, 2020.
    62 changes: 62 additions & 0 deletions users.rb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,62 @@
    # frozen_string_literal: true

    # For abstracting out updating approved businesses sheet
    class GoogleSheets::Users
    SHEET_NAME = 'users'
    QUEUE_NAME = 'google_sheet'

    include Sidekiq::Worker
    sidekiq_options queue: QUEUE_NAME
    sidekiq_options lock: :until_and_while_executing

    attr_accessor :user

    def perform(user_id)
    # trigger only for production
    return unless Rails.env.production?

    @user = User.find(user_id)

    Google::Apis.logger = Logger.new('/dev/null') # throws Huge logs on stdout
    add_new_entry
    worksheet.save
    end

    private

    def add_new_entry
    (1..worksheet.num_rows).each do |row|
    if worksheet[row, 1] == login
    @existing_entry = true
    break
    end
    end

    return if @existing_entry

    worksheet.insert_rows(worksheet.num_rows + 1, [
    [
    login,
    user.created_at,
    user.address&.city_name,
    user.profile_type,
    user.name,
    user.approved_at,
    user.posts.count,
    # ... more fields
    ]
    ])
    end

    def worksheet
    @worksheet ||= session.spreadsheet_by_title(SHEET_NAME)&.worksheets&.first
    end

    def session
    @session ||= GoogleDrive::Session.from_config('config/google_drive.json')
    end

    def login
    @login ||= user.login.to_s
    end
    end