Class: Restforce::Mash

Inherits:
Hashie::Mash
  • Object
show all
Defined in:
lib/restforce/mash.rb

Direct Known Subclasses

SObject

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(source_hash = nil, client = nil, default = nil, &blk) ⇒ Mash

Returns a new instance of Mash.



44
45
46
47
48
# File 'lib/restforce/mash.rb', line 44

def initialize(source_hash = nil, client = nil, default = nil, &blk)
  @client = client
  deep_update(source_hash) if source_hash
  default ? super(default) : super(&blk)
end

Class Method Details

.build(val, client) ⇒ Object

Pass in an Array or Hash and it will be recursively converted into the appropriate Restforce::Collection, Restforce::SObject and Restforce::Mash objects.



9
10
11
12
13
14
15
16
17
# File 'lib/restforce/mash.rb', line 9

def build(val, client)
  if val.is_a?(Array)
    val.collect { |a_val| self.build(a_val, client) }
  elsif val.is_a?(Hash)
    self.klass(val).new(val, client)
  else
    val
  end
end

.klass(val) ⇒ Object

When passed a hash, it will determine what class is appropriate to represent the data.



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/restforce/mash.rb', line 21

def klass(val)
  if val.key? 'records'
    # When the hash has a records key, it should be considered a collection
    # of sobject records.
    Restforce::Collection
  elsif val.key? 'attributes'
    case (val['attributes']['type'])
    when "Attachment"
      Restforce::Attachment
    when "Document"
      Restforce::Document
    else
      # When the hash contains an attributes key, it should be considered an
      # sobject record
      Restforce::SObject
    end
  else
    # Fallback to a standard Restforce::Mash for everything else
    Restforce::Mash
  end
end

Instance Method Details

#convert_value(val, duping = false) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/restforce/mash.rb', line 54

def convert_value(val, duping = false)
  case val
  when self.class
    val.dup
  when ::Hash
    val = val.dup if duping
    self.class.klass(val).new(val, @client)
  when Array
    val.collect { |e| convert_value(e) }
  else
    val
  end
end

#dupObject



50
51
52
# File 'lib/restforce/mash.rb', line 50

def dup
  self.class.new(self, @client, self.default)
end