38 lines
744 B
Ruby
38 lines
744 B
Ruby
# frozen_string_literal: true
|
|
|
|
module GroupLinkable
|
|
extend ActiveSupport::Concern
|
|
|
|
def execute
|
|
return error('Not Found', 404) unless valid_to_create?
|
|
|
|
build_link
|
|
|
|
if link.save
|
|
after_successful_save
|
|
success(link: link)
|
|
else
|
|
error(link.errors.full_messages.to_sentence, 409)
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
attr_reader :shared_with_group, :link
|
|
|
|
def sharing_allowed?
|
|
sharing_outside_hierarchy_allowed? || within_hierarchy?
|
|
end
|
|
|
|
def sharing_outside_hierarchy_allowed?
|
|
!root_ancestor.prevent_sharing_groups_outside_hierarchy
|
|
end
|
|
|
|
def within_hierarchy?
|
|
root_ancestor.self_and_descendants_ids.include?(shared_with_group.id)
|
|
end
|
|
|
|
def after_successful_save
|
|
setup_authorizations
|
|
end
|
|
end
|