56 lines
1.5 KiB
Ruby
56 lines
1.5 KiB
Ruby
|
require_relative 'permission_user_presenter'
|
||
|
require_relative 'permission_organization_presenter'
|
||
|
require_relative 'permission_group_presenter'
|
||
|
|
||
|
module CartoDB
|
||
|
class PermissionPresenter
|
||
|
def initialize(permission)
|
||
|
@permission = permission
|
||
|
@user_presenter = CartoDB::PermissionUserPresenter.new
|
||
|
@org_presenter = CartoDB::PermissionOrganizationPresenter.new
|
||
|
end
|
||
|
|
||
|
def to_poro
|
||
|
{
|
||
|
id: @permission.id,
|
||
|
owner: @user_presenter.decorate_user(@permission.owner),
|
||
|
entity: {
|
||
|
id: @permission.entity_id,
|
||
|
type: @permission.entity_type
|
||
|
},
|
||
|
acl: @permission.acl.map { |entry|
|
||
|
entity = entity_decoration(entry)
|
||
|
if entity.blank?
|
||
|
nil
|
||
|
else
|
||
|
{
|
||
|
type: entry[:type],
|
||
|
entity: entity,
|
||
|
access: entry[:access]
|
||
|
}
|
||
|
end
|
||
|
}.reject(&:nil?),
|
||
|
created_at: @permission.created_at,
|
||
|
updated_at: @permission.updated_at
|
||
|
}
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def entity_decoration(entry)
|
||
|
case entry[:type]
|
||
|
when CartoDB::Permission::TYPE_USER
|
||
|
@user_presenter.decorate(entry[:id])
|
||
|
when CartoDB::Permission::TYPE_ORGANIZATION
|
||
|
@org_presenter.decorate(entry[:id])
|
||
|
when CartoDB::Permission::TYPE_GROUP
|
||
|
CartoDB::PermissionGroupPresenter.new.decorate(entry[:id])
|
||
|
else
|
||
|
raise "Unknown entity type for entry #{entry}"
|
||
|
end
|
||
|
end
|
||
|
|
||
|
end
|
||
|
end
|
||
|
|