discourse/lib/reviewable/actions.rb
Sam Saffron 30990006a9 DEV: enable frozen string literal on all files
This reduces chances of errors where consumers of strings mutate inputs
and reduces memory usage of the app.

Test suite passes now, but there may be some stuff left, so we will run
a few sites on a branch prior to merging
2019-05-13 09:31:32 +08:00

61 lines
1.5 KiB
Ruby

# frozen_string_literal: true
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'),
delete: Action.new(:delete, 'trash-alt', 'reviewables.actions.delete_single.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