class RelateIq::ListItem

Attributes

account_id[RW]
contact_ids[RW]
field_values[RW]
id[RW]
list_id[RW]
name[RW]

Public Class Methods

create(attrs) click to toggle source
# File lib/relateiq/list_item.rb, line 53
def self.create(attrs)
  ListItem.new(attrs).save
end
find_by_contact(list_id, contact_id) click to toggle source
# File lib/relateiq/list_item.rb, line 57
def self.find_by_contact(list_id, contact_id)
  from_json(resource(list_id)["?contactIds=#{contact_id}"].get)
end
from_json(json_string) click to toggle source
# File lib/relateiq/list_item.rb, line 44
def self.from_json(json_string)
  list_item_hash = JSON.parse(json_string, symbolize_names: true)
  if list_item_hash.key? :objects
    list_item_hash[:objects].map { |li| ListItem.new(li) }
  else
    ListItem.new(list_item_hash)
  end
end
new(attrs = {}) click to toggle source

field values always contains decoded values for example { ‘Status’ => ‘Application Submitted’ }

# File lib/relateiq/list_item.rb, line 13
def initialize(attrs = {})
  if attrs.key? :listId
    initialize_from_api(attrs)
  else
    initialize_by_user(attrs)
  end
end
resource(list_id) click to toggle source
# File lib/relateiq/list_item.rb, line 39
def self.resource(list_id)
  @resource ||= ServiceFactory.get_endpoint('lists')
  @resource["#{list_id}/listitems"]
end

Public Instance Methods

initialize_by_user(attrs) click to toggle source
# File lib/relateiq/list_item.rb, line 21
def initialize_by_user(attrs)
  @list_id = attrs.fetch(:list_id)
  @id = attrs.fetch(:id, nil)
  @name = attrs.fetch(:name, nil)
  @account_id = attrs.fetch(:account_id, nil)
  @contact_ids = attrs.fetch(:contact_ids, [])
  @field_values = attrs.fetch(:field_values, [])
end
initialize_from_api(attrs) click to toggle source
# File lib/relateiq/list_item.rb, line 30
def initialize_from_api(attrs)
  @list_id = attrs.fetch(:listId)
  @id = attrs.fetch(:id, nil)
  @name = attrs.fetch(:name, nil)
  @account_id = attrs.fetch(:accountId, nil)
  @contact_ids = attrs.fetch(:contactIds, [])
  @field_values = decode_field_values(attrs.fetch(:fieldValues, nil))
end
save() click to toggle source
# File lib/relateiq/list_item.rb, line 61
def save
  if id
    ListItem.from_json(ListItem.resource(list_id)["#{id}"].put to_json)
  else
    ListItem.from_json(ListItem.resource(list_id).post to_json)
  end
end
to_json() click to toggle source
# File lib/relateiq/list_item.rb, line 69
def to_json
  to_hash.to_json
end

Private Instance Methods

decode_field_values(values) click to toggle source
# File lib/relateiq/list_item.rb, line 93
def decode_field_values(values)
  return [] unless values
  encoder = field_value_encoder.new(list: list)
  values.map { |k, v| encoder.decode(k => v) }
end
encode_field_values(values) click to toggle source
# File lib/relateiq/list_item.rb, line 85
def encode_field_values(values)
  return [] unless values
  encoder = field_value_encoder.new(list: list)
  encoded_values = {}
  values.each { |fv| encoded_values.merge!(encoder.encode(fv)) }
  encoded_values
end
field_value_encoder() click to toggle source
# File lib/relateiq/list_item.rb, line 99
def field_value_encoder
  @field_value_encoder ||= RelateIq::Utils::FieldValueEncoder
end
list() click to toggle source
# File lib/relateiq/list_item.rb, line 103
def list
  List.find(list_id)
end
to_hash() click to toggle source
# File lib/relateiq/list_item.rb, line 75
def to_hash
  result = { 'listId' => list_id }
  result.merge!('id' => id) if id
  result.merge!('name' => name) if name
  result.merge!('accountId' => account_id) if account_id && list.list_type == 'account'
  result.merge!('contactIds' => contact_ids) if contact_ids && contact_ids.count > 0
  result.merge!('fieldValues' => encode_field_values(field_values)) if field_values && field_values.count > 0
  result
end