Class: LeapSalesforce::Generator::SoqlObjects

Inherits:
Object
  • Object
show all
Includes:
LeapSalesforce::Generator
Defined in:
lib/leap_salesforce/generator/soql_objects.rb

Overview

Creates SoqlObjects and related modules

Constant Summary collapse

SOQL_DATA_FOLDER =
LeapSalesforce.language == 'java' ? 'SoqlObjects' : 'soql_data'
SOQL_OBJECT_FOLDER =
File.join(LeapSalesforce.lib_folder, SOQL_DATA_FOLDER).freeze
FACTORY_FOLDER =
File.join(LeapSalesforce.lib_folder, 'factories').freeze

Instance Method Summary collapse

Methods included from LeapSalesforce::Generator

#create_inner_file, #generate_file, #generate_files, #generate_from_template, #read_template, #template_loc

Instance Method Details

#create_allObject

Generate soql_object and it’s related modules, factories

[View source]

67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/leap_salesforce/generator/soql_objects.rb', line 67

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
  return unless LeapSalesforce.language == 'ruby'

  `rubocop -A #{SOQL_OBJECT_FOLDER} --enable-pending-cops`
  `rubocop -A #{FACTORY_FOLDER} --enable-pending-cops`
end

#ensure_class_definedObject

Create temporary class for building API requests on

[View source]

20
21
22
23
24
25
# File 'lib/leap_salesforce/generator/soql_objects.rb', line 20

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_factoryObject

Generate factory for mass generating objects using FactoryBot

[View source]

57
58
59
60
61
62
63
64
# File 'lib/leap_salesforce/generator/soql_objects.rb', line 57

def generate_factory
  return unless LeapSalesforce.language == 'ruby'

  @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_moduleObject

Generate module with fields for Soql Object

[View source]

43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/leap_salesforce/generator/soql_objects.rb', line 43

def generate_field_module
  if LeapSalesforce.language == 'ruby'
    field_content = read_template 'soql_object_field_names.rb.erb', binding
    field_file = File.join(SOQL_OBJECT_FOLDER, "#{@field_name_file}.rb")
  elsif LeapSalesforce.language == 'java'
    field_content = read_template 'soql_object_field_names.java.erb', binding
    field_file = File.join(SOQL_OBJECT_FOLDER, "#{@soql_object.class_name}.java")
  else
    raise LeapSalesforce::SetupError, "Unsupported language '#{LeapSalesforce.language}'"
  end
  generate_file field_file, field_content
end

#generate_soql_objectObject

Generate Soql object file

[View source]

28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/leap_salesforce/generator/soql_objects.rb', line 28

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
  return unless LeapSalesforce.language == 'ruby'

  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