Sha256: 17f98bfdca5d1ea1700f406818c503dbba185709208758e11a46b96ac44c0ac0

Contents?: true

Size: 1.56 KB

Versions: 1

Compression:

Stored size: 1.56 KB

Contents

# frozen_string_literal: true
# Effective::ContentReplacer.new.replace!("foo", "bar")

module Effective
  class ContentReplacer
    attr_accessor :places

    def initialize(places = nil)
      @places = (places || default_places)
    end

    def default_places
      { action_text_rich_texts: [:body] }
    end

    def replace!(old_value, new_value)
      raise("old_value cannot contain a \' character") if old_value.include?("'")
      raise("new_value cannot contain a \' character") if new_value.include?("'")
  
      places.each do |table, columns|
        columns.each do |column|
          sql = "SELECT COUNT(*) FROM #{table} WHERE #{column} ILIKE '%#{old_value}%'"
          existing = ActiveRecord::Base.connection.execute(sql).first['count'].to_i

          puts "Replacing #{existing} occurrences of #{old_value} with #{new_value} in #{table}.#{column}"

          sql = "UPDATE #{table} SET #{column} = REPLACE(#{column}, '#{old_value}', '#{new_value}') WHERE #{column} ILIKE '%#{old_value}%'"
          ActiveRecord::Base.connection.execute(sql)
        end
      end
      
      true
    end

    def count(old_value)
      raise("old_value cannot contain a \' character") if old_value.include?("'")

      places.each do |table, columns|
        columns.each do |column|
          sql = "SELECT COUNT(*) FROM #{table} WHERE #{column} ILIKE '%#{old_value}%'"
          existing = ActiveRecord::Base.connection.execute(sql).first['count'].to_i

          puts "There are #{existing} occurrences of #{old_value} in #{table}.#{column}"
        end
      end
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
effective_developer-0.8.4 app/models/effective/content_replacer.rb