ish_models 0.0.33.191 → 0.0.33.192

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0d6a32875f72d683db8e0ceb5fe80d8e4ec97763069cd9b440d6dbf596186dfb
4
- data.tar.gz: c12b5d7614616ee9138a6349e330d76dd8856129c13836deca7cb40a06594ace
3
+ metadata.gz: 6da0c443f4fa1d09ab99af29832021711aaa151abd165a0b5e70ef5c60361b77
4
+ data.tar.gz: d5acaf403668bc945aee9fc93ecbfaca3a46621dbe596035f7cd5afb1bed8e06
5
5
  SHA512:
6
- metadata.gz: 217723c9b7e8e728eec1faa918d79bca3134ccf3cd4a9115f0182f32dabcd5474c5ded002605999e99b8c5692452b911af6ad581dad8ddbc14a441bbc0521dda
7
- data.tar.gz: 5b79b4986bb4e3ab4be66350a6d3cf511fd395c5ea06d8266b3ced8114e42181856eb8a2452b646aa673cc2ceb187bdc81f5144d94d6d9b25fb77508e648c395
6
+ metadata.gz: e101f25e3b4c00530cbd1dfaad7510fa0204b6e226e01075107d0a6bf41d07fbde8c6889368657345db175b03e82c0a0167a7f448ac464fcbbf7a24d32241d0d
7
+ data.tar.gz: e16cc3d97165e974b24649a9759c87ec3c6a7e49a8ad158bfeda23a7d6e7bb57decf6571363d5cc12848aa0f7e4ef4e2a9616d558b09c900472484b53119f0d5
@@ -0,0 +1,68 @@
1
+
2
+ #
3
+ # Sends a campaign.
4
+ # _vp_ 2023-02-02
5
+ #
6
+
7
+ class Ish::EmailCampaign
8
+ include Mongoid::Document
9
+ include Mongoid::Timestamps
10
+
11
+ field :title
12
+ def slug
13
+ title
14
+ end
15
+
16
+ PAGE_PARAM_NAME = 'email_contexts_page'
17
+
18
+ FROM_EMAILS = %w| hello@infiniteshelter.com no-reply@infiniteshelter.com
19
+ piousbox@gmail.com victor@piousbox.com no-reply@piousbox.com
20
+ admin@wasya.co hello@wasya.co no-reply@wasya.co victor@wasya.co |
21
+ field :from_email
22
+ validates_presence_of :from_email
23
+ def self.from_email_list
24
+ [ [nil, nil] ] + FROM_EMAILS.map { |i| [i, i] }
25
+ end
26
+
27
+ field :subject
28
+ validates_presence_of :subject
29
+
30
+ field :body
31
+ # validates_presence_of :body
32
+
33
+ belongs_to :email_template
34
+
35
+ field :sent_at, type: DateTime
36
+ field :send_at, type: DateTime
37
+
38
+ # def campaign_leads
39
+ # return ::EmailCampaignLead.where( email_campaign_id: self.id.to_s ).includes( :lead )
40
+ # end
41
+
42
+ # def leads
43
+ # campaign_leads&.map { |p| p.lead }
44
+ # end
45
+
46
+
47
+ ##
48
+ ## For templating:
49
+ ##
50
+ ## commonly: name, companyName
51
+ field :tmpl, type: Hash, default: {}
52
+ def body_templated
53
+ out = email_template.body
54
+ tmpl.each do |k, v|
55
+ out.gsub!("{#{k}}", v)
56
+ end
57
+ out
58
+ end
59
+
60
+ field :to_email
61
+ validates_presence_of :to_email, if: -> { type == TYPE_SINGLE }
62
+
63
+ #
64
+ # For tracking
65
+ #
66
+ attr_reader :tid
67
+
68
+ end
@@ -1,20 +1,23 @@
1
1
 
2
2
  #
3
- # Sends a single email, or a campaign.
3
+ # Sends a single email
4
4
  #
5
5
 
6
6
  class Ish::EmailContext
7
7
  include Mongoid::Document
8
8
  include Mongoid::Timestamps
9
9
 
10
- field :title
11
- def slug
12
- title
10
+ ## @TODO: probably rename it to slug
11
+ field :slug
12
+ validates_uniqueness_of :slug, allow_nil: true
13
+ def title
14
+ slug
13
15
  end
14
16
 
15
17
  PAGE_PARAM_NAME = 'email_contexts_page'
16
18
 
17
- FROM_EMAILS = %w| piousbox@gmail.com victor@piousbox.com no-reply@piousbox.com
19
+ FROM_EMAILS = %w| hello@infiniteshelter.com no-reply@infiniteshelter.com
20
+ piousbox@gmail.com victor@piousbox.com no-reply@piousbox.com
18
21
  admin@wasya.co hello@wasya.co no-reply@wasya.co victor@wasya.co |
19
22
  field :from_email
20
23
  validates_presence_of :from_email
@@ -22,6 +25,7 @@ class Ish::EmailContext
22
25
  [ [nil, nil] ] + FROM_EMAILS.map { |i| [i, i] }
23
26
  end
24
27
 
28
+ ## @deprecated, campaigns are now separate.
25
29
  TYPE_SINGLE = 'TYPE_SINGLE'
26
30
  TYPE_CAMPAIGN = 'TYPE_CAMPAIGN'
27
31
  field :type, default: TYPE_SINGLE
data/lib/ish_models.rb CHANGED
@@ -13,6 +13,8 @@ module Ish; end
13
13
  # I need this thing for permissions???
14
14
  class Manager; end
15
15
 
16
+ module Office; end
17
+
16
18
  module Warbler; end
17
19
 
18
20
  module IshModels
@@ -44,6 +46,7 @@ require 'gameui/premium_purchase'
44
46
 
45
47
  require 'ish/cache_key'
46
48
  require 'ish/crawler'
49
+ require 'ish/email_campaign'
47
50
  require 'ish/email_context'
48
51
  require 'ish/email_template'
49
52
  require 'ish/email_unsubscribe'
@@ -63,6 +66,10 @@ require 'photo'
63
66
  require 'report'
64
67
  require 'video'
65
68
 
69
+ require 'office/action'
70
+ require 'office/email_message'
71
+
72
+
66
73
 
67
74
 
68
75
 
@@ -0,0 +1,44 @@
1
+
2
+ ##
3
+ ## Such actions as auto-responder.
4
+ ##
5
+ class Office::Action
6
+ include Mongoid::Document
7
+ include Mongoid::Timestamps
8
+
9
+ field :status, type: String, default: 'active'
10
+ field :channel, type: String ## eg 'email'
11
+ field :match_from, type: String ## eg '@synchrony.com', '*@synchrony.com$'
12
+
13
+ scope :active, -> { where( status: 'active' ) }
14
+
15
+ ## eg [ { 'method': 'create_lead', 'params': {} },
16
+ ## { 'method': 'autorespond', 'params': {}, ... ]
17
+ field :actions, type: Array, default: []
18
+
19
+ def self.create_lead params
20
+ msg = params[:msg]
21
+ leadset = Leadset.find_or_create_by({ company_url: msg.company_url })
22
+ lead = Lead.new({
23
+ email: msg.from_str,
24
+ name: msg.name,
25
+ leadset: leadset,
26
+ })
27
+ lead.save
28
+ end
29
+
30
+ def self.autorespond params
31
+ msg = params[:msg]
32
+ email_template = ::Ish::EmailTemplate.find_by!({ slug: '20230207-autorespond' })
33
+ email_ctx = ::Ish::EmailContext.new({
34
+ to_email: '',
35
+ subject: '',
36
+ from_email: '',
37
+ body: '',
38
+ email_template_id: email_template.id.to_s,
39
+ })
40
+ email_ctx.save!
41
+ IshManager::OfficeMailer.send_context_email( email_ctx ).deliver_later
42
+ end
43
+
44
+ end
@@ -0,0 +1,77 @@
1
+
2
+ ##
3
+ ## When I receive one.
4
+ ##
5
+ class Office::EmailMessage
6
+ include Mongoid::Document
7
+ include Mongoid::Timestamps
8
+
9
+ field :raw, type: :string
10
+ field :object_key, type: :string ## aka 'filename', use with bucket name + prefix
11
+ # validates_presence_of :object_key
12
+ field :object_path, type: :string ## A routable s3 url
13
+
14
+ field :subject
15
+ field :part_txt
16
+ field :part_html
17
+ # attachments ?
18
+
19
+ field :from, type: Array, default: []
20
+ def from_str
21
+ from.join(", ")
22
+ end
23
+
24
+ field :to, type: Array, default: []
25
+ field :cc, type: Array, default: []
26
+ field :bss, type: Array, default: []
27
+ field :date, type: DateTime
28
+ def received_at
29
+ date
30
+ end
31
+
32
+ ## @TODO: reimplement, look at footer instead.
33
+ def name
34
+ return 'associate'
35
+ # from[0].split('@')[0].upcase
36
+ end
37
+
38
+ def company_url
39
+ from[0].split('@')[1]
40
+ end
41
+
42
+ def process
43
+ Aws.config[:credentials] = Aws::Credentials.new(
44
+ ::S3_CREDENTIALS[:access_key_id],
45
+ ::S3_CREDENTIALS[:secret_access_key]
46
+ )
47
+ s3 = Aws::S3::Client.new
48
+
49
+ obj = s3.get_object({
50
+ bucket: 'ish-ses',
51
+ key: self.object_key
52
+ })
53
+ obj2 = obj.body.read
54
+
55
+ mail = Mail.read_from_string( obj2 )
56
+ self.from = mail.from
57
+ self.to = mail.to
58
+ self.subject = mail.subject
59
+ self.date = mail.date
60
+ self.raw = obj2
61
+
62
+ self.save
63
+ end
64
+
65
+ ## action.match_from = '@synchrony.com'
66
+ def apply_actions
67
+ triggers = Office::Action.active.where({ channel: 'email' })
68
+ triggers.each do |trigger|
69
+ if self.from_str.match(/#{trigger.match_from}/i)
70
+ trigger.actions do |action|
71
+ Office::Action.call( action[:method], { msg: self }.merge( action[:params] ))
72
+ end
73
+ end
74
+ end
75
+ end
76
+
77
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ish_models
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.33.191
4
+ version: 0.0.33.192
5
5
  platform: ruby
6
6
  authors:
7
7
  - piousbox
@@ -125,6 +125,7 @@ files:
125
125
  - lib/ish/cache_key.rb
126
126
  - lib/ish/configuration.rb
127
127
  - lib/ish/crawler.rb
128
+ - lib/ish/email_campaign.rb
128
129
  - lib/ish/email_context.rb
129
130
  - lib/ish/email_template.rb
130
131
  - lib/ish/email_unsubscribe.rb
@@ -146,6 +147,8 @@ files:
146
147
  - lib/mongoid/votable.rb
147
148
  - lib/mongoid/voter.rb
148
149
  - lib/newsitem.rb
150
+ - lib/office/action.rb
151
+ - lib/office/email_message.rb
149
152
  - lib/photo.rb
150
153
  - lib/report.rb
151
154
  - lib/trash/app_model2.rb