Skip to content

Instantly share code, notes, and snippets.

@bplexico
bplexico / pre-post.rb
Created May 26, 2013 20:27
Before refactoring Post to remove duplication
# Ensure maximum amount of mentions in a post
def max_mention_validator
if acting_user.present? && acting_user.has_trust_level?(:basic)
errors.add(:base, I18n.t(:too_many_mentions, count: SiteSetting.max_mentions_per_post)) if raw_mentions.size > SiteSetting.max_mentions_per_post
else
errors.add(:base, I18n.t(:too_many_mentions_newuser, count: SiteSetting.newuser_max_mentions_per_post)) if raw_mentions.size > SiteSetting.newuser_max_mentions_per_post
end
end
@bplexico
bplexico / gist:5653958
Created May 26, 2013 20:44
private method to add error
def add_error_if_count_exceeded(key_for_translation, current_count, max_count)
errors.add(:base, I18n.t(key_for_translation, count: max_count)) if current_count > max_count
end
@bplexico
bplexico / gist:5653929
Created May 26, 2013 20:32
refactoring the user check
def acting_user_is_trusted?
acting_user.present? && acting_user.has_trust_level?(:basic)
end
@bplexico
bplexico / gist:5653948
Created May 26, 2013 20:38
call to private method for user check
# Ensure maximum amount of mentions in a post
def max_mention_validator
if acting_user_is_trusted?
errors.add(:base, I18n.t(:too_many_mentions, count: SiteSetting.max_mentions_per_post)) if raw_mentions.size > SiteSetting.max_mentions_per_post
else
errors.add(:base, I18n.t(:too_many_mentions_newuser, count: SiteSetting.newuser_max_mentions_per_post)) if raw_mentions.size > SiteSetting.newuser_max_mentions_per_post
end
end
@bplexico
bplexico / gist:5653972
Created May 26, 2013 20:48
final post refactoring
# Ensure maximum amount of mentions in a post
def max_mention_validator
if acting_user_is_trusted?
add_error_if_count_exceeded(:too_many_mentions, raw_mentions.size, SiteSetting.max_mentions_per_post)
else
add_error_if_count_exceeded(:too_many_mentions_newuser, raw_mentions.size, SiteSetting.newuser_max_mentions_per_post)
end
end
# Ensure new users can not put too many images in a post
@bplexico
bplexico / invite_redeemer.rb
Created May 31, 2013 19:06
New InviteRedeemer struct
InviteRedeemer = Struct.new(:invite) do
def redeem
end
end
@bplexico
bplexico / invite.rb
Created May 31, 2013 19:08
call InviteRedeemer from Invite#redeem
def redeem
InviteRedeemer.new(self).redeem unless expired? || destroyed?
end
@bplexico
bplexico / invite_redeemer.rb
Created May 31, 2013 19:12
InviteRedeemer#redeem with calls to invite attribute added
def redeem
result = nil
Invite.transaction do
# Avoid a race condition
row_count = Invite.update_all('redeemed_at = CURRENT_TIMESTAMP',
['id = ? AND redeemed_at IS NULL AND created_at >= ?', invite.id, SiteSetting.invite_expiry_days.days.ago])
if row_count == 1
# Create the user if we are redeeming the invite and the user doesn't exist
@bplexico
bplexico / invite.rb
Created May 31, 2013 19:04
Original redeem method
def redeem
result = nil
Invite.transaction do
# Avoid a race condition
row_count = Invite.update_all('redeemed_at = CURRENT_TIMESTAMP',
['id = ? AND redeemed_at IS NULL AND created_at >= ?', id, SiteSetting.invite_expiry_days.days.ago])
if row_count == 1
# Create the user if we are redeeming the invite and the user doesn't exist
@bplexico
bplexico / invite_redeemer.rb
Created May 31, 2013 19:44
Intermediate refactoring of InviteRedeemer
InviteRedeemer = Struct.new(:invite) do
def redeem
result = nil
Invite.transaction do
# Avoid a race condition
row_count = Invite.update_all('redeemed_at = CURRENT_TIMESTAMP',
['id = ? AND redeemed_at IS NULL AND created_at >= ?', invite.id, SiteSetting.invite_expiry_days.days.ago])
if row_count == 1