Translation strategy
Steps
Minimal example
require 'net/http'
require 'json'
require 'uri'
module App
module Collections
# Minimal implementation of a readonly data source
class MyCollection < ForestAdminDatasourceToolkit::Collection
include ForestAdminDatasourceToolkit::Schema
# The real work is in writing this module
# Expect a full featured query translation module to be over 1000 LOCs
include QueryGenerator
def initialize(datasource)
# Set name of the collection once imported
super(datasource, 'MyCollection')
add_field('id', ColumnSchema.new(
column_type: 'Number',
filter_operators: [], # As we are using the query translation strategy => define capabilities
is_primary_key: true,
is_read_only: true, # field is readonly
is_sortable: false # field is not sortable
))
add_field('title', ColumnSchema.new(
column_type: 'String',
filter_operators: [],
is_primary_key: false,
is_read_only: true,
is_sortable: false
))
end
def list(caller, filter, projection)
params = QueryGenerator.generate_list_query_string(filter, projection)
uri = URI.parse('http://my-api/my-collection')
uri.query = URI.encode_www_form(params)
response = Net::HTTP.get_response(uri)
body = JSON.parse(response.body)
body['items']
end
def aggregate(caller, filter, aggregation, limit = nil)
params = QueryGenerator.generate_aggregate_query_string(filter, aggregation, limit)
uri = URI.parse('http://my-api/my-collection')
uri.query = URI.encode_www_form(params)
response = Net::HTTP.get_response(uri)
body = JSON.parse(response.body)
body
end
end
end
endRead more
Last updated