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

[View source]

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

[View source]

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

[View source]

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

[View source]

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

[View source]

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

def reset_enum_folder
  FileUtils.rm_rf ENUM_FOLDER
end