class MetadataInitializer

MetadataInitializer exposes functionality to automatically add an external Synchronization ID to your Salesforce models.

Public Class Methods

new(config_file, *models) click to toggle source

Public: Initialize a new MetadataInitializer.

config_file - The path to a configuration file. models - An Array of String Salesforce model names.

# File lib/generators/templates/script, line 18
def initialize(config_file, *models)
  @models = models
  @config = YAML.load_file(config_file)
end

Public Instance Methods

client() click to toggle source

Internal: Get a Metaforce client to process the custom field CRUD requests.

Returns a Metaforce::Metadata:Client.

# File lib/generators/templates/script, line 53
def client
  @client ||= begin
    Metaforce.configure do |configuration|
      configuration.host = @config["client"]["host"]
      configuration.log = false
    end

    options = {
      username: @config["client"]["username"],
      password: @config["client"]["password"],
      security_token: @config["client"]["security_token"],
    }

    # Verify the login credentials
    Metaforce.login(options)
    Metaforce.new(options)
  end
end
setup() click to toggle source

Public: Set up an external Synchronization ID for each specified Salesforce model.

Returns nothing.

# File lib/generators/templates/script, line 27
def setup
  @models.each do |model|
    print "ADDING SynchronizationId__c to #{model}... "
    job = client.create(
      :custom_field,
      full_name: "#{model}.SynchronizationId__c",
      description: "External Synchronization ID",
      label: "Synchronization ID",
      type: "Text",
      external_id: true,
      unique: true,
      length: ENV["UUID_LENGTH"] || 255,
    )

    begin
      job.on_complete { |_| puts "DONE" }.on_error { |_| puts "FAILED" }.perform
    rescue Savon::SOAP::Fault => e
      puts "\n(#{e.class}) #{e.message}\n#{e.backtrace.join("\n")}"
    end
  end
end