Class: SmSmsCampaignWebhook::CampaignEngagement
- Inherits:
-
Object
- Object
- SmSmsCampaignWebhook::CampaignEngagement
- Defined in:
- app/models/sm_sms_campaign_webhook/campaign_engagement.rb,
app/models/sm_sms_campaign_webhook/campaign_engagement/answer.rb
Overview
Data model for campaign engagement event from SMS campaign.
Defined Under Namespace
Classes: Answer
Instance Attribute Summary collapse
-
#payload ⇒ Object
readonly
Returns the value of attribute payload.
Instance Method Summary collapse
-
#answer_for(field:) ⇒ Answer, NilClass
Modeled answer for field when found.
-
#campaign_id ⇒ Integer
ID of the engaged campaign.
-
#campaign_keyword ⇒ String
Keyword of the engaged campaign.
-
#event_created_at ⇒ DateTime
Campaign engagement event timestamp.
-
#event_type ⇒ String
Campaign engagement event type.
-
#event_uuid ⇒ String
Campaign engagement event UUID.
-
#initialize(payload:) ⇒ CampaignEngagement
constructor
A new instance of CampaignEngagement.
-
#phone_campaign_state_answers ⇒ Array<Answer>
Modeled campaign engagement answers.
-
#phone_campaign_state_answers? ⇒ TrueClass, FalseClass
Are any campaign engagement answers present?.
-
#phone_campaign_state_completed? ⇒ TrueClass, FalseClass
Has campaign engagement completed?.
-
#phone_campaign_state_completed_at ⇒ DateTime, NilClass
Timestamp of campaign engagement completion if completed.
-
#phone_campaign_state_id ⇒ Integer
ID of campaign engagement state record.
-
#phone_id ⇒ Integer
ID of the engaging phone.
-
#phone_number ⇒ String
Phone number engaging the campaign.
Constructor Details
#initialize(payload:) ⇒ CampaignEngagement
Returns a new instance of CampaignEngagement.
11 12 13 |
# File 'app/models/sm_sms_campaign_webhook/campaign_engagement.rb', line 11 def initialize(payload:) @payload = payload.deep_dup.freeze end |
Instance Attribute Details
#payload ⇒ Object (readonly)
Returns the value of attribute payload.
8 9 10 |
# File 'app/models/sm_sms_campaign_webhook/campaign_engagement.rb', line 8 def payload @payload end |
Instance Method Details
#answer_for(field:) ⇒ Answer, NilClass
Returns Modeled answer for field when found.
181 182 183 184 185 |
# File 'app/models/sm_sms_campaign_webhook/campaign_engagement.rb', line 181 def answer_for(field:) phone_campaign_state_answers.detect do |answer| answer.field == field end end |
#campaign_id ⇒ Integer
Returns ID of the engaged campaign.
53 54 55 56 57 58 59 60 61 62 |
# File 'app/models/sm_sms_campaign_webhook/campaign_engagement.rb', line 53 def campaign_id @campaign_id ||= Integer( campaign_hash.fetch("id") { raise_invalid_payload_for("campaign id") } ) rescue ArgumentError raise InvalidPayloadValue, "campaign id has invalid integer value #{payload.inspect}" end |
#campaign_keyword ⇒ String
Returns Keyword of the engaged campaign.
66 67 68 69 70 71 72 |
# File 'app/models/sm_sms_campaign_webhook/campaign_engagement.rb', line 66 def campaign_keyword @campaign_keyword ||= String( campaign_hash.fetch("keyword") { raise_invalid_payload_for("campaign keyword") }.freeze ) end |
#event_created_at ⇒ DateTime
Returns Campaign engagement event timestamp.
38 39 40 41 42 43 44 45 46 47 48 |
# File 'app/models/sm_sms_campaign_webhook/campaign_engagement.rb', line 38 def event_created_at @event_created_at ||= begin raw_created_at = payload.fetch("created_at") { raise_invalid_payload_for("created_at") } DateTime.parse(raw_created_at).freeze end rescue ArgumentError raise InvalidPayloadValue, "created_at has invalid datetime value #{payload.inspect}" end |
#event_type ⇒ String
Returns Campaign engagement event type.
27 28 29 30 31 32 33 |
# File 'app/models/sm_sms_campaign_webhook/campaign_engagement.rb', line 27 def event_type @event_type ||= String( payload.fetch("type") { raise_invalid_payload_for("type") }.freeze ) end |
#event_uuid ⇒ String
Returns Campaign engagement event UUID.
17 18 19 20 21 22 23 |
# File 'app/models/sm_sms_campaign_webhook/campaign_engagement.rb', line 17 def event_uuid @event_uuid ||= String( payload.fetch("uuid") { raise_invalid_payload_for("uuid") }.freeze ) end |
#phone_campaign_state_answers ⇒ Array<Answer>
Returns Modeled campaign engagement answers.
156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 |
# File 'app/models/sm_sms_campaign_webhook/campaign_engagement.rb', line 156 def phone_campaign_state_answers @phone_campaign_state_answers ||= begin # Extract answers data from payload. data = phone_campaign_state_hash.fetch("answers") { raise_invalid_payload_for("phone_campaign_state answers") } # Is this hash data? unless data.is_a?(Hash) raise InvalidPayloadValue, "phone_campaign_state answers has invalid hash value #{payload.inspect}" end # Cast answers data. Answer.cast(data: data).freeze end end |
#phone_campaign_state_answers? ⇒ TrueClass, FalseClass
Returns Are any campaign engagement answers present?.
175 176 177 |
# File 'app/models/sm_sms_campaign_webhook/campaign_engagement.rb', line 175 def phone_campaign_state_answers? !phone_campaign_state_answers.empty? end |
#phone_campaign_state_completed? ⇒ TrueClass, FalseClass
Returns Has campaign engagement completed?.
115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'app/models/sm_sms_campaign_webhook/campaign_engagement.rb', line 115 def phone_campaign_state_completed? # Has the boolean value already been assigned? unless @phone_campaign_state_completed.nil? return @phone_campaign_state_completed end # Extract the value and memoize it. @phone_campaign_state_completed = begin completed = phone_campaign_state_hash .fetch("completed") { raise_invalid_payload_for("phone_campaign_state completed") } # Is this a boolean value? if [true, false].none?(completed) raise InvalidPayloadValue, "phone_campaign_state completed has invalid boolean value #{payload.inspect}" end completed end end |
#phone_campaign_state_completed_at ⇒ DateTime, NilClass
Returns Timestamp of campaign engagement completion if completed.
141 142 143 144 145 146 147 148 149 150 151 |
# File 'app/models/sm_sms_campaign_webhook/campaign_engagement.rb', line 141 def phone_campaign_state_completed_at @phone_campaign_state_completed_at ||= begin raw_completed_at = phone_campaign_state_hash.fetch("completed_at") { raise_invalid_payload_for("phone_campaign_state completed_at") } DateTime.parse(raw_completed_at).freeze if raw_completed_at end rescue ArgumentError raise InvalidPayloadValue, "phone_campaign_state completed_at has invalid datetime value #{payload.inspect}" end |
#phone_campaign_state_id ⇒ Integer
Returns ID of campaign engagement state record.
101 102 103 104 105 106 107 108 109 110 |
# File 'app/models/sm_sms_campaign_webhook/campaign_engagement.rb', line 101 def phone_campaign_state_id @phone_campaign_state_id ||= Integer( phone_campaign_state_hash.fetch("id") { raise_invalid_payload_for("phone_campaign_state id") } ) rescue ArgumentError raise InvalidPayloadValue, "phone_campaign_state id has invalid integer value #{payload.inspect}" end |
#phone_id ⇒ Integer
Returns ID of the engaging phone.
77 78 79 80 81 82 83 84 85 86 |
# File 'app/models/sm_sms_campaign_webhook/campaign_engagement.rb', line 77 def phone_id @phone_id ||= Integer( phone_hash.fetch("id") { raise_invalid_payload_for("phone id") } ) rescue ArgumentError raise InvalidPayloadValue, "phone id has invalid integer value #{payload.inspect}" end |
#phone_number ⇒ String
Returns Phone number engaging the campaign.
90 91 92 93 94 95 96 |
# File 'app/models/sm_sms_campaign_webhook/campaign_engagement.rb', line 90 def phone_number @phone_number ||= String( phone_hash.fetch("number") { raise_invalid_payload_for("phone number") }.freeze ) end |