Skip to content

Instantly share code, notes, and snippets.

@sb25
Created November 17, 2009 15:18
Show Gist options
  • Save sb25/236970 to your computer and use it in GitHub Desktop.
Save sb25/236970 to your computer and use it in GitHub Desktop.
#! /usr/bin/env ruby -wKU
# Author:: Sébastien Briois (mailto:sebriois@gmail.com)
require "rubygems"
require "rest_client"
require "json"
IDCC_SITE = "http://user:password@localhost:3000"
# Generic helper method for handling the web calls to the repository.
def request(method, url, data = nil, datatype = "application/json", repository = IDCC_SITE)
resource = RestClient::Resource.new( repository )
response =
case method.upcase
when "GET" then resource[url].get
when "POST" then resource[url].post data, :content_type => datatype
when "PUT" then resource[url].put data, :content_type => datatype
when "DELETE" then resource[url].delete
else
raise "Method #{method} unknown when requesting url #{url}"
end
puts "#{method} #{url} - #{response.code} #{RestClient::STATUSES[response.code]}"
return response.body
end
##
## Scenarios:
## - GET, CREATE, UPDATE some allele(s)
## - CREATE a Targeting Vector
## - CREATE a ES Cell
## - DELETE created objects
##
# Get allele lists - first page
response = request( 'GET' , 'alleles.json?page=1' )
alleles = JSON.parse( response )
first_allele = alleles[0]
# Get first allele from this page - no need to keep track of the ids
# a search method is provided, see extended example.
request( 'GET', "alleles/#{first_allele['id']}.json" )
# Create an allele
data = {
:pipeline_id => 1,
:mgi_accession_id => "MGI:123456",
:project_design_id => 1,
:cassette => "L1L2_gt2",
:backbone => "L3L4_pZero_kan",
:assembly => "NCBIM37",
:chromosome => "1",
:strand => "+",
:design_type => "Knock Out",
:design_subtype => "Frameshift",
:homology_arm_start => 10,
:homology_arm_end => 10000,
:cassette_start => 50,
:cassette_end => 500,
:loxp_start => 600,
:loxp_end => 700
}
allele_json = JSON.generate( {:molecular_structure => data} )
response = request( 'POST', 'alleles.json', allele_json )
created_allele = JSON.parse( response )
# Update an allele (for example: the one created above)
data = { :subtype_description => "SOME NEW INFORMATION" }
allele_json = JSON.generate( {:molecular_structure => data} )
response = request( 'PUT', "alleles/#{created_allele['id']}.json", allele_json )
updated_allele = JSON.parse( response )
# Create a targeting vector related to this allele
data = {
:molecular_structure_id => created_allele['id'],
:name => 'PGDGR001',
:ikmc_project_id => 1
}
targ_vec_json = JSON.generate( {:targeting_vector => data} )
response = request( 'POST', 'targeting_vectors.json', targ_vec_json )
created_targ_vec = JSON.parse( response )
# Create an ES Cell related to these targeting vector and allele
data = {
:molecular_structure_id => created_allele['id'],
:targeting_vector_id => created_targ_vec['id'],
:name => 'EPD001'
}
es_cell_json = JSON.generate( {:es_cell => data} )
response = request( 'POST', 'es_cells.json', es_cell_json )
created_es_cell = JSON.parse( response )
# Delete everything
request( 'DELETE', "es_cells/#{created_es_cell['id']}" )
request( 'DELETE', "targeting_vectors/#{created_targ_vec['id']}" )
request( 'DELETE', "alleles/#{created_allele['id']}" )
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment