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_/
      #TODO
    else
      super.method_missing
  end
end

Instance Method Details

#api_clientObject



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

Returns:

  • (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_namespaceObject



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_describeObject



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_nameObject



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) #either an ID or a string name
  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