lib/zenps/payload.rb
module Zenps
# Class for structuring subjects into array of hashes from:
# - (array of) string(s)
# - (array of) hash(es)
# - (array of) object(s)
class Payload
def get(subjects)
@subjects = subjects
payload
end
private
attr_reader :subjects
def payload
@subjects = [subjects] unless array_but_not_hash?
build_payload
end
def build_payload
subjects.map do |subject|
{
email: get_email(subject),
first_name: get_attribute(subject, :first_name),
last_name: get_attribute(subject, :last_name),
locale: get_attribute(subject, :locale)
}.compact
end
end
def get_email(subject)
subject.class == String ? subject : get_attribute(subject, :email)
end
def get_attribute(subject, attribute)
return if subject.class == String
return subject[attribute.to_s] || subject[attribute] if subject.class == Hash
return subject.send(attribute) if subject.respond_to?(attribute)
end
def array_but_not_hash?
subjects.respond_to?(:each) && !subjects.respond_to?(:keys)
end
end
end