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