class LeapSalesforce::Generator::SoqlObjects

Creates SoqlObjects and related modules

Constants

FACTORY_FOLDER
SOQL_OBJECT_FOLDER

Public Instance Methods

create_all() click to toggle source

Generate soql_object and it's related modules, factories

# File lib/leap_salesforce/generator/soql_objects.rb, line 55
def create_all
  puts "Generating Soql objects for #{LeapSalesforce.soql_objects.count} objects"
  LeapSalesforce.soql_objects.each do |soql_object| # Soql object is now special class
    # extract_info_from_object soql_object
    @soql_object = soql_object
    @field_name_file = "#{soql_object.reference}_field_names"
    generate_soql_object
    generate_field_module
    generate_factory
  end
  `rubocop -A #{SOQL_OBJECT_FOLDER} --enable-pending-cops`
  `rubocop -A #{FACTORY_FOLDER} --enable-pending-cops`
end
ensure_class_defined() click to toggle source

Create temporary class for building API requests on

# File lib/leap_salesforce/generator/soql_objects.rb, line 19
def ensure_class_defined
  @soql_class = Object.const_get @soql_object.class_name
rescue NameError
  @soql_class = Object.const_set @soql_object.class_name, Class.new(SoqlData)
  @soql_class.instance_variable_set(:@soql_object_name, @soql_object.backend_name)
end
generate_factory() click to toggle source

Generate factory for mass generating objects using FactoryBot

# File lib/leap_salesforce/generator/soql_objects.rb, line 47
def generate_factory
  @default_fields, @other_fields = filter_fields
  content = read_template 'factory.rb.erb', binding
  file = File.join(FACTORY_FOLDER, "#{@soql_object.reference}.rb")
  generate_file file, content, overwrite: false
end
generate_field_module() click to toggle source

Generate module with fields for Soql Object

# File lib/leap_salesforce/generator/soql_objects.rb, line 40
def generate_field_module
  field_content = read_template 'soql_object_field_names.rb.erb', binding
  field_file = File.join(SOQL_OBJECT_FOLDER, "#{@field_name_file}.rb")
  generate_file field_file, field_content
end
generate_soql_object() click to toggle source

Generate Soql object file

# File lib/leap_salesforce/generator/soql_objects.rb, line 27
def generate_soql_object
  ensure_class_defined
  desc = @soql_class.description
  unless desc.soql_fields?
    raise LeapSalesforce::SetupError, "Error producing Soql data for '#{@soql_class}', soql table " \
    " '#{@soql_object.backend_name}'. Error message: '#{desc.error_message}'"
  end
  content = read_template 'soql_object.rb.erb', binding
  file = File.join(SOQL_OBJECT_FOLDER, "#{@soql_object.reference}.rb")
  generate_file file, content, overwrite: false
end

Private Instance Methods

filter_fields() click to toggle source

@return [Array] Returns Array with first list being default fields for Factory and the 2nd being

all other fields
# File lib/leap_salesforce/generator/soql_objects.rb, line 73
def filter_fields
  all_fields = @soql_class.fields
  if Default::Fields.respond_to? @soql_object.reference
    all_fields.partition { |field| Default::Fields.send(@soql_object.reference).include? field['name'] }
  else
    [[], all_fields]
  end
end