mirror of
https://github.com/discourse/discourse.git
synced 2024-12-01 09:14:14 +08:00
58 lines
1.4 KiB
Ruby
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
|