Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
namara / lib / grants.rb
Size: Mime:
require_relative 'rpc/grants/grants_twirp'
require_relative 'helpers/object_to_hash'

class Namara
  def add_grant(grant = {})
    response = rpc_request(grant_client) do |client|
      client.add_grant(serialize_grant(grant), rpc_headers)
    end

    OpenStruct.new(response.data.grant.to_h)
  end

  def list_grants(dataset_ids, filter = {})
    sanitized_filters =   {}

    filter.fetch(:offset, nil)? sanitized_filters.merge!(offset: {value: filter[:offset]}): sanitized_filters
    filter.fetch(:limit, nil)? sanitized_filters.merge!(limit: {value: filter[:limit]}): sanitized_filters
    payload = {
        filter: sanitized_filters,
        dataset_ids: Array(dataset_ids)
    }

    response = rpc_request(grant_client) do |client|
      client.list_grants(payload, rpc_headers)
    end

    ObjectToHash.to_hash_array(response.data.grants.to_a)
  end

  def list_group_grants(organization_id, group_ids, filter = {})
    sanitized_filters =   {}

    filter.fetch(:offset, nil)? sanitized_filters.merge!(offset: {value: filter[:offset]}): sanitized_filters
    filter.fetch(:limit, nil)? sanitized_filters.merge!(limit: {value: filter[:limit]}): sanitized_filters
    payload = {
        filter: sanitized_filters,
        organization_id: organization_id,
        group_ids: Array(group_ids)
    }

    response = rpc_request(grant_client) do |client|
      client.list_group_grants(payload, rpc_headers)
    end

    ObjectToHash.to_hash_array(response.data.grants.to_a)
  end

  def update_grant(grant)
    response = rpc_request(grant_client) do |client|
      client.update_grant(serialize_grant(grant), rpc_headers)
    end

    OpenStruct.new(response.data.grant.to_h)
  end

  def remove_grant(grant = {})
    rpc_request(grant_client) do |client|
      client.remove_grant(serialize_grant(grant), rpc_headers)
    end
  end

  private

  def serialize_grant(grant)
    { grant: grant.to_h }
  end

  def grant_client
    @grant_client ||= Grants::GrantsServiceClient.new(api_url)
  end
end