Class: LeapSalesforce::Generator::SoqlEnums

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

Overview

Creates Soql Enumerations / Picklists from objects in LeapSalesforce.soql_objects

Constant Summary collapse

ENUM_FOLDER =
File.join(LeapSalesforce.lib_folder, 'metadata', 'enum').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

#cleanup_files_createdObject

Clean up files generated for all picklists



91
92
93
94
95
# File 'lib/leap_salesforce/generator/soql_enums.rb', line 91

def cleanup_files_created
  return unless LeapSalesforce.language == "ruby" 

  `rubocop -A #{ENUM_FOLDER} --display-only-fail-level-offenses --enable-pending-cops`
end

#createObject

Create Soql enumerations for all objects specified in .leap_salesforce.yml



21
22
23
24
25
26
27
28
29
30
# File 'lib/leap_salesforce/generator/soql_enums.rb', line 21

def create
  if LeapSalesforce.soql_objects.empty?
    raise LeapSalesforce::SetupError, 'LeapSalesforce.soql_objects is empty. ' \
  'Please set the list of objects you want to create enums for in .leap_salesforce:soql_objects ' \
  'and then run task "leaps:create_soql_objects" to create objects'
  end
  reset_enum_folder
  LeapSalesforce.soql_objects.each { |entity| create_picklists_for entity }
  cleanup_files_created
end

#create_picklists_for(entity) ⇒ Object

Create files for each picklist found for that entity

Parameters:

  • entity (LeapSalesforce::SoqlData)

    An object representing an object in Salesforce Object inheriting from SoqlData that has picklists underneath it



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/leap_salesforce/generator/soql_enums.rb', line 35

def create_picklists_for(entity)
  soql_object = entity # LeapSalesforce.soql_objects.find { |so| so.class_name == entity.to_s }
  @soql_data_object = Class.new(SoqlData) do
    soql_object soql_object.backend_name
  end
  @entity_name = entity.class_name
  unless soql_object
    LeapSalesforce.logger.warn "Could not find soql object for '#{@entity_name}', ignoring" 
    return
  end

  unless soql_object.create_enum != false
    puts "Skipping picklists for #{@entity_name}"
    return
  end
  puts "Creating picklists for #{@entity_name}"
  
  picklists = @soql_data_object.picklists
  puts "#{picklists.count} picklists found"
  picklists.each do |picklist|
    if soql_object.excludes?(picklist)
      puts "Excluding picklist '#{picklist}'"
    else
      generate_picklist_file picklist
    end
  end
end

#generate_picklist_file(picklist) ⇒ Object

Generate file for a picklist from it’s metadata



64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/leap_salesforce/generator/soql_enums.rb', line 64

def generate_picklist_file(picklist)
  @picklist = picklist
  @enum_name = picklist.to_class_name
  picklist_name = picklist.to_key_name
  values = @soql_data_object.picklist_for(picklist)
  @enum_values = {}
  values.each do |value|
    @enum_values[value.to_key_name_for(@enum_values)] = value
  end
  if LeapSalesforce.language == "ruby"
    content = read_template 'picklist.rb.erb', binding
    file = File.join(ENUM_FOLDER, @entity_name.to_s.snakecase, "#{picklist_name}.rb")
  elsif LeapSalesforce.language == 'java'
    content = read_template 'picklist.java.erb', binding
    file = File.join(ENUM_FOLDER, @entity_name.to_s, "#{@enum_name}.java")
  else
    raise LeapSalesforce::SetupError, "Unsupported language '#{LeapSalesforce.language}'"
  end
  generate_file file, content
end

#reset_enum_folderObject

Reset state of Enum folder so that enums that no longer exist do not persist



86
87
88
# File 'lib/leap_salesforce/generator/soql_enums.rb', line 86

def reset_enum_folder
  FileUtils.rm_rf ENUM_FOLDER
end