class RelateIq::Utils::FieldValueEncoder

Attributes

list[RW]

Public Class Methods

new(attrs = {}) click to toggle source
# File lib/relateiq/utils/field_value_encoder.rb, line 6
def initialize(attrs = {})
  @list = attrs.fetch(:list)
end

Public Instance Methods

decode(encoded_value) click to toggle source
# File lib/relateiq/utils/field_value_encoder.rb, line 20
def decode(encoded_value)
  return {} if encoded_value.nil?
  id = encoded_value.keys[0]
  values = encoded_value.values[0]
  field = find_field(id)
  { "#{field[:name]}" => decode_values(field, values) }
end
encode(decoded_value) click to toggle source
# File lib/relateiq/utils/field_value_encoder.rb, line 10
def encode(decoded_value)
  return {} if decoded_value.nil?
  name = decoded_value.keys[0]
  values = decoded_value.values[0]
  field = find_field_by_name(name)
  encoded_value = encode_values(field, values)
  return {} if encoded_value == []
  { "#{field[:id]}" =>  encoded_value }
end

Private Instance Methods

decode_values(field, field_values) click to toggle source
# File lib/relateiq/utils/field_value_encoder.rb, line 30
def decode_values(field, field_values)
  result = []
  field_values.each { |fv| result << list_option_value(field, fv[:raw], 'id', 'display') }
  result.count > 1 ? result : result[0]
end
encode_values(field, field_values) click to toggle source
# File lib/relateiq/utils/field_value_encoder.rb, line 36
def encode_values(field, field_values)
  result = []
  to_array(field_values).each do |fv|
    list_option = list_option_value(field, fv, 'display', 'id')
    result << { 'raw' => list_option } unless list_option.nil?
  end
  result
end
find_field(id) click to toggle source
# File lib/relateiq/utils/field_value_encoder.rb, line 61
def find_field(id)
  list.fields.find { |f| f[:id] == id.to_s } || fail(FieldNotFoundError, id)
end
find_field_by_name(name) click to toggle source
# File lib/relateiq/utils/field_value_encoder.rb, line 57
def find_field_by_name(name)
  list.fields.find { |f| f[:name] == name } || fail(FieldNotFoundError, name)
end
list_option_value(field, value, key, value_key) click to toggle source
# File lib/relateiq/utils/field_value_encoder.rb, line 45
def list_option_value(field, value, key, value_key)
  return nil if value.nil?
  list_options = field[:listOptions]
  if list_options && list_options.count > 0
    option = list_options.find { |lo| lo[key.to_sym].downcase == value.downcase }
    option ||= fail(FieldListOptionNotFoundError, key => value)
    option[value_key.to_sym]
  else
    value
  end
end
to_array(value) click to toggle source
# File lib/relateiq/utils/field_value_encoder.rb, line 65
def to_array(value)
  value.is_a?(Array) ? value : [value]
end