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.



46
47
48
49
50
# File 'lib/restforce/mash.rb', line 46

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.



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

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.



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

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



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

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



52
53
54
# File 'lib/restforce/mash.rb', line 52

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