Skip to content
Snippets Groups Projects

Experiment: "Build iOS app guide" email campaign

Merged Eugie Limpin requested to merge experiment/publish-ios-apps-with-fastlane into master
1 file
+ 35
11
Compare changes
  • Side-by-side
  • Inline
@@ -31,7+31,7 @@
create: 0,
verify: 1,
trial: 2,
team: 3,
experience: 4,
team_short: 5,
trial_short: 6,
@@ -44,7+44,7 @@
INACTIVE_TRACK_NAMES = %w(invite_team).freeze
ACTIVE_TRACKS = tracks.except(*INACTIVE_TRACK_NAMES)
scope :for_user_with_track_and_series, -> (user, track, series) do
where(user: user, track: track, series: series)
end
scope :for_user_with_campaign, -> (user, campaign) do
where(user: user, campaign: campaign)
end
scope :without_track_and_series, -> (track, series) do
users = User.arel_table
product_emails = arel_table
join_condition = for_user.and(for_track_and_series(track, series))
users_without_records(join_condition)
end
join_condition = users[:id].eq(product_emails[:user_id])
.and(product_emails[:track]).eq(ACTIVE_TRACKS[track])
.and(product_emails[:series]).eq(series)
scope :without_campaign, -> (campaign) do
join_condition = for_user.and(for_campaign(campaign))
users_without_records(join_condition)
end
arel_join = users.join(product_emails, Arel::Nodes::OuterJoin).on(join_condition)
def self.users_table
User.arel_table
end
def self.distinct_users_sql
name = users_table.table_name
Arel.sql("DISTINCT ON(#{name}.id) #{name}.*")
end
def self.users_without_records(condition)
arel_join = users_table.join(arel_table, Arel::Nodes::OuterJoin).on(condition)
joins(arel_join.join_sources)
.where(in_product_marketing_emails: { id: nil })
.select(Arel.sql("DISTINCT ON(#{users.table_name}.id) #{users.table_name}.*"))
.select(distinct_users_sql)
end
scope :for_user_with_track_and_series, -> (user, track, series) do
where(user: user, track: track, series: series)
def self.for_user
arel_table[:user_id].eq(users_table[:id])
end
scope :for_user_with_campaign, -> (user, campaign) do
where(user: user, campaign: campaign)
def self.for_campaign(campaign)
arel_table[:campaign].eq(campaign)
end
def self.for_track_and_series(track, series)
arel_table[:track].eq(ACTIVE_TRACKS[track])
.and(arel_table[:series]).eq(series)
end
def self.save_cta_click(user, track, series)
Loading