Add badge achievemnt context message markdown (#382)
* Add badge achievemnt context message markdown * Add badge rewarder method for beloved comments
This commit is contained in:
parent
535f3d02b3
commit
fd4390983c
10 changed files with 49 additions and 7 deletions
|
|
@ -13,6 +13,7 @@ class BadgeAchievementDashboard < Administrate::BaseDashboard
|
|||
name_of_user: NameOfUserField,
|
||||
badge: Field::BelongsTo,
|
||||
rewarder: Field::BelongsTo.with_options(class_name: "User"),
|
||||
rewarding_context_message_markdown: Field::String,
|
||||
rewarding_context_message: Field::String,
|
||||
id: Field::Number,
|
||||
rewarder_id: UserIdField,
|
||||
|
|
@ -50,7 +51,7 @@ class BadgeAchievementDashboard < Administrate::BaseDashboard
|
|||
# on the model's form (`new` and `edit`) pages.
|
||||
FORM_ATTRIBUTES = [
|
||||
:user_id,
|
||||
:rewarding_context_message,
|
||||
:rewarding_context_message_markdown,
|
||||
:badge,
|
||||
:rewarder_id,
|
||||
].freeze
|
||||
|
|
|
|||
|
|
@ -1,9 +1,23 @@
|
|||
class BadgeRewarder
|
||||
def award_yearly_club_badges
|
||||
message = "Happy DEV birthday!"
|
||||
User.where("created_at < ? AND created_at > ?",1.year.ago, 367.days.ago).each do |user|
|
||||
BadgeAchievement.create(user_id: user.id, badge_id: 2, rewarding_context_message: message)
|
||||
User.where("created_at < ? AND created_at > ?", 1.year.ago, 367.days.ago).each do |user|
|
||||
BadgeAchievement.create(
|
||||
user_id: user.id,
|
||||
badge_id: 2,
|
||||
rewarding_context_message_markdown: message)
|
||||
# ID 2 is the proper ID in prod. We should change in future to ENV var.
|
||||
end
|
||||
end
|
||||
|
||||
def award_beloved_comment_badges
|
||||
Comment.where("positive_reactions_count > ?", 24).each do |comment|
|
||||
message = "You're DEV famous! [This is the comment](https://dev.to#{comment.path}) for which you are being recognized. 😄"
|
||||
BadgeAchievement.create(
|
||||
user_id: comment.user_id,
|
||||
badge_id: 3,
|
||||
rewarding_context_message_markdown: message)
|
||||
# ID 3 is the proper ID in prod. We should change in future to ENV var.
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -11,6 +11,18 @@ class BadgeAchievement < ApplicationRecord
|
|||
as_activity
|
||||
|
||||
after_create :send_email_notification
|
||||
before_validation :render_rewarding_context_message_html
|
||||
|
||||
def render_rewarding_context_message_html
|
||||
if rewarding_context_message_markdown.present?
|
||||
parsed_markdown = MarkdownParser.new(rewarding_context_message_markdown)
|
||||
html = parsed_markdown.finalize
|
||||
final_html = ActionController::Base.helpers.sanitize html,
|
||||
tags: %w(strong em i b u a code),
|
||||
attributes: %w(href name)
|
||||
self.rewarding_context_message = final_html
|
||||
end
|
||||
end
|
||||
|
||||
def name_of_user
|
||||
user.name
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
</p>
|
||||
<p>
|
||||
<em>
|
||||
<%= @badge_achievement.rewarding_context_message %>
|
||||
<%= @badge_achievement.rewarding_context_message.html_safe %>
|
||||
</em>
|
||||
</p>
|
||||
<br/>
|
||||
|
|
|
|||
|
|
@ -2,6 +2,6 @@ Congratulations, <%= @user.name %>! You got the <%= @badge.title %> badge! Be su
|
|||
|
||||
<%= @badge.description %>
|
||||
|
||||
<%= @badge_achievement.rewarding_context_message %>
|
||||
<%= strip_tags @badge_achievement.rewarding_context_message %>
|
||||
|
||||
https://dev.to/<%= @user.username%>
|
||||
|
|
@ -11,7 +11,7 @@
|
|||
<% end %>
|
||||
<p style="width: 90%;margin: 8px auto">
|
||||
<em>
|
||||
<%= activity['actor'].rewarding_context_message %>
|
||||
<%= activity['actor'].rewarding_context_message.html_safe %>
|
||||
</em>
|
||||
</p>
|
||||
<a href="/<%= activity['object'].username %>">
|
||||
|
|
|
|||
|
|
@ -0,0 +1,5 @@
|
|||
class AddRewardingContextMessageMarkdownToBadgeAchievements < ActiveRecord::Migration[5.1]
|
||||
def change
|
||||
add_column :badge_achievements, :rewarding_context_message_markdown, :text
|
||||
end
|
||||
end
|
||||
|
|
@ -10,7 +10,7 @@
|
|||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(version: 20180601195848) do
|
||||
ActiveRecord::Schema.define(version: 20180604200603) do
|
||||
# These are extensions that must be enabled in order to support this database
|
||||
enable_extension "plpgsql"
|
||||
|
||||
|
|
@ -115,6 +115,7 @@ ActiveRecord::Schema.define(version: 20180601195848) do
|
|||
t.datetime "created_at", null: false
|
||||
t.integer "rewarder_id"
|
||||
t.text "rewarding_context_message"
|
||||
t.text "rewarding_context_message_markdown"
|
||||
t.datetime "updated_at", null: false
|
||||
t.bigint "user_id", null: false
|
||||
t.index ["badge_id"], name: "index_badge_achievements_on_badge_id"
|
||||
|
|
|
|||
|
|
@ -69,6 +69,7 @@ end
|
|||
|
||||
task :award_badges => :environment do
|
||||
BadgeRewarder.new.award_yearly_club_badges
|
||||
BadgeRewarder.new.award_beloved_comment_badges
|
||||
end
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -18,4 +18,12 @@ RSpec.describe BadgeAchievement, type: :model do
|
|||
BadgeAchievement.create!(user_id: user.id, badge_id: badge.id, rewarder_id: create(:user).id)
|
||||
end.to raise_error
|
||||
end
|
||||
|
||||
it "turns rewarding_context_message_markdown into rewarding_context_message HTML" do
|
||||
achievement = BadgeAchievement.create(user_id: user.id,
|
||||
badge_id: badge.id,
|
||||
rewarder_id: create(:user).id,
|
||||
rewarding_context_message_markdown: "Hello [Yoho](/hey)")
|
||||
expect(achievement.rewarding_context_message.include?("</a>"))
|
||||
end
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue