Module: Bulkforce::Helper

Extended by:
Helper
Included in:
Helper
Defined in:
lib/bulkforce/helper.rb

Constant Summary collapse

ENCODING =
"utf-8"
CSV_OPTIONS =
{
  col_sep: ",",
  quote_char: "\"",
  force_quotes: true,
  encoding: ENCODING,
}

Instance Method Summary collapse

Instance Method Details

#absolute_to_relative_path(input, replacement) ⇒ Object



72
73
74
# File 'lib/bulkforce/helper.rb', line 72

def absolute_to_relative_path input, replacement
  input.gsub(/(^C:[\/\\])|(^\/)/,replacement)
end

#attachment_keys(records) ⇒ Object



48
49
50
51
52
53
54
# File 'lib/bulkforce/helper.rb', line 48

def attachment_keys records
  records.map do |record|
    record.select do |key, value|
      value.class == File
    end.keys
  end.flatten.uniq
end

#fetch_instance_from_server_url(server_url) ⇒ Object



43
44
45
46
# File 'lib/bulkforce/helper.rb', line 43

def fetch_instance_from_server_url server_url
  before_sf = server_url[/^https?:\/\/(.+)\.salesforce\.com/, 1]
  before_sf.gsub(/-api$/,"")
end

#parse_csv(csv_string) ⇒ Object



76
77
78
# File 'lib/bulkforce/helper.rb', line 76

def parse_csv csv_string
  CSV.parse(csv_string.force_encoding(ENCODING), headers: true).map{|r| r.to_hash}
end

#records_to_csv(records) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/bulkforce/helper.rb', line 16

def records_to_csv records
  file_mock = StringIO.new
  csv_client = CSV.new(file_mock, CSV_OPTIONS)
  all_headers = []
  all_rows = []
  records.each do |hash|
    row = CSV::Row.new([],[],false)
    to_store = hash.inject({}) do |h, (k, v)|
      if v == nil || v == "" || v == []
        h[k] = "#N/A"
      else
        h[k] = v.class == Array ? v.join(";") : v
      end
      h
    end
    row << to_store
    all_headers << row.headers
    all_rows << row
  end
  all_headers.flatten!.uniq!
  csv_client << all_headers
  all_rows.each do |row|
    csv_client << row.fields(*all_headers)
  end
  file_mock.string
end

#transform_values!(records, keys) ⇒ Object



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/bulkforce/helper.rb', line 56

def transform_values! records, keys
  keys.each do |key|
    records.each do |record|
      file_handle = record[key]
      if file_handle
        file_path = File.absolute_path(file_handle)
        record
          .merge!({
            key => Bulkforce::Helper.absolute_to_relative_path(file_path,"#")
          })
        yield file_path if block_given?
      end
    end
  end
end