Module: SfdoAPI
- Defined in:
- lib/SFDO/API.rb
Instance Method Summary
collapse
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method_called, *args, &block) ⇒ Object
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
# File 'lib/SFDO/API.rb', line 109
def method_missing(method_called, *args, &block)
breakdown = method_called.to_s.split('_')
obj_type = breakdown.last.capitalize
case method_called.to_s
when /^delete_all_/
delete_all *args
when /^delete_one/
delete obj_type, *args
when /^create_/
else
super.method_missing
end
end
|
Instance Method Details
#api_client ⇒ Object
6
7
8
9
10
11
12
|
# File 'lib/SFDO/API.rb', line 6
def api_client
@api_client ||= Restforce.new api_version: '32.0',
refresh_token: ENV['SF_REFRESH_TOKEN'],
client_id: ENV['SF_CLIENT_KEY'],
client_secret: ENV['SF_CLIENT_SECRET']
yield
end
|
#create(type, obj_hash) ⇒ Object
14
15
16
17
18
19
20
21
|
# File 'lib/SFDO/API.rb', line 14
def create(type, obj_hash)
if is_valid_obj_hash?(type, obj_hash, @fields_acceptibly_nil)
obj_id = api_client do
@api_client.create! type, obj_hash
end
end
obj_id
end
|
#delete(type, obj_id) ⇒ Object
93
94
95
|
# File 'lib/SFDO/API.rb', line 93
def delete(type, obj_id)
delete_by_id(obj_id)
end
|
#delete_all(id) ⇒ Object
103
104
105
106
107
|
# File 'lib/SFDO/API.rb', line 103
def delete_all(id)
api_client do
id.each(&:destroy)
end
end
|
#delete_by_id(obj_id) ⇒ Object
97
98
99
100
101
|
# File 'lib/SFDO/API.rb', line 97
def delete_by_id(obj_id)
api_client do
@api_client.destroy(true_object_name(obj_id), obj_id)
end
end
|
#get_object_describe(object_name) ⇒ Object
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
# File 'lib/SFDO/API.rb', line 77
def get_object_describe(object_name)
api_client do
@description = @api_client.get("/services/data/v35.0/sobjects/#{object_name}/describe")
describeobject = Hashie::Mash.new(@description.body)
required = describeobject.fields.map do |x|
Hashie::Mash.new(
fieldName: x.name,
required: (!x.nillable && !x.defaultedOnCreate),
default: x.defaultValue)
end
required.select(&:required)
end
end
|
#is_valid_obj_hash?(object_name, obj_hash, fields_acceptibly_nil) ⇒ Boolean
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
# File 'lib/SFDO/API.rb', line 23
def is_valid_obj_hash?(object_name, obj_hash, fields_acceptibly_nil)
required_fields = get_object_describe(object_name).map(&:fieldName)
valid = true
required_fields.each do |f|
valid = false if (!obj_hash.key? f.to_sym) && (begin
!fields_acceptibly_nil[object_name].contains? f
puts 'This field must be populated in order to create this object in this environment: ' + f.inspect
rescue
false
end)
end
valid
end
|
#obj_names_without_namespace ⇒ Object
67
68
69
70
71
72
73
74
75
|
# File 'lib/SFDO/API.rb', line 67
def obj_names_without_namespace
if @obj_names_without_namespace.nil? || !@obj_names_without_namespace.respond_to?(:contains)
@obj_names_without_namespace = {}
org_describe.each do |z|
@obj_names_without_namespace.store(z.name.split("__",2).last, z.name)
end
end
@obj_names_without_namespace
end
|
#org_describe ⇒ Object
38
39
40
41
42
43
44
45
|
# File 'lib/SFDO/API.rb', line 38
def org_describe()
if @org_description.nil? || !@org_description.respond_to?(:contains)
@org_description = api_client do
@api_client.describe
end
end
return @org_description
end
|
#prefix_to_name ⇒ Object
47
48
49
50
51
52
53
54
55
|
# File 'lib/SFDO/API.rb', line 47
def prefix_to_name
if @prefix_to_name.nil? || !@prefix_to_name.respond_to?(:contains)
@prefix_to_name = {}
org_describe.each do |z|
@prefix_to_name.store(z.keyPrefix, z.name)
end
end
return @prefix_to_name
end
|
#true_object_name(handle) ⇒ Object
either an ID or a string name
57
58
59
60
61
62
63
64
65
|
# File 'lib/SFDO/API.rb', line 57
def true_object_name(handle) from_id = prefix_to_name[handle[0..2]]
from_name = obj_names_without_namespace[handle]
if !from_name.nil? || !from_id.nil?
return from_name if from_id.nil?
return from_id if from_name.nil?
end
return 'invalid'
end
|