discourse/lib/reviewable/actions.rb
Robin Ward b58867b6e9 FEATURE: New 'Reviewable' model to make reviewable items generic
Includes support for flags, reviewable users and queued posts, with REST API
backwards compatibility.

Co-Authored-By: romanrizzi <romanalejandro@gmail.com>
Co-Authored-By: jjaffeux <j.jaffeux@gmail.com>
2019-03-28 12:45:10 -04:00

58 lines
1.4 KiB
Ruby

require_dependency 'reviewable/collection'
class Reviewable < ActiveRecord::Base
class Actions < Reviewable::Collection
attr_reader :bundles
def initialize(reviewable, guardian, args = nil)
super(reviewable, guardian, args)
@bundles = []
end
# Add common actions here to make them easier for reviewables to re-use. If it's a
# one off, add it manually.
def self.common_actions
{
approve: Action.new(:approve, 'thumbs-up', 'reviewables.actions.approve.title'),
reject: Action.new(:reject, 'thumbs-down', 'reviewables.actions.reject.title'),
}
end
class Bundle < Item
attr_accessor :icon, :label, :actions
def initialize(id, icon: nil, label: nil)
super(id)
@icon = icon
@label = label
@actions = []
end
end
class Action < Item
attr_accessor :icon, :label, :description, :confirm_message, :client_action
def initialize(id, icon = nil, label = nil)
super(id)
@icon, @label = icon, label
end
end
def add_bundle(id, icon: nil, label: nil)
bundle = Bundle.new(id, icon: icon, label: label)
@bundles << bundle
bundle
end
def add(id, bundle: nil)
action = Actions.common_actions[id] || Action.new(id)
yield action if block_given?
@content << action
bundle ||= add_bundle(id)
bundle.actions << action
end
end
end