sylfy 0.0.2 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -0
  3. data/Rakefile +13 -0
  4. data/lib/sylfy.rb +12 -25
  5. data/lib/sylfy/add.rb +10 -0
  6. data/lib/sylfy/add/bio_kegg_kgml.rb +108 -0
  7. data/lib/sylfy/datamodel.rb +141 -0
  8. data/lib/sylfy/feature.rb +128 -0
  9. data/lib/sylfy/mathf.rb +40 -0
  10. data/lib/sylfy/pattern.rb +14 -0
  11. data/lib/sylfy/service.rb +34 -0
  12. data/lib/sylfy/service/biocycrest.rb +41 -0
  13. data/lib/sylfy/service/cactusncirest.rb +64 -0
  14. data/lib/sylfy/service/cbioportal.rb +156 -0
  15. data/lib/sylfy/service/chembl.rb +106 -0
  16. data/lib/sylfy/service/ebisoap.rb +55 -0
  17. data/lib/sylfy/service/ensemblrest.rb +64 -0
  18. data/lib/sylfy/service/ensemblrest/archive.rb +35 -0
  19. data/lib/sylfy/service/ensemblrest/comparative.rb +146 -0
  20. data/lib/sylfy/service/ensemblrest/xrefs.rb +73 -0
  21. data/lib/sylfy/service/hgncrest.rb +52 -0
  22. data/lib/sylfy/service/keggrest.rb +6 -19
  23. data/lib/sylfy/service/keggrest/conv.rb +64 -40
  24. data/lib/sylfy/service/keggrest/find.rb +27 -48
  25. data/lib/sylfy/service/keggrest/get.rb +82 -0
  26. data/lib/sylfy/service/keggrest/link.rb +17 -37
  27. data/lib/sylfy/service/keggrest/list.rb +18 -50
  28. data/lib/sylfy/service/lipidmaprest.rb +228 -0
  29. data/lib/sylfy/service/pubchem.rb +71 -0
  30. data/lib/sylfy/service/pubchemrest.rb +249 -0
  31. data/lib/sylfy/service/rest.rb +26 -0
  32. data/lib/sylfy/service/soapwsdl.rb +78 -0
  33. data/lib/sylfy/service/unichemrest.rb +106 -0
  34. data/lib/sylfy/utils.rb +18 -0
  35. data/lib/sylfy/utils/keyhash.rb +1149 -0
  36. data/lib/sylfy/utils/reactionkey.rb +197 -0
  37. data/lib/sylfy/version.rb +1 -1
  38. data/sylfy.gemspec +11 -15
  39. data/test/test_kegg_rest.rb +58 -0
  40. data/test/test_reactionkey.rb +37 -0
  41. metadata +87 -15
  42. data/lib/sylfy/math.rb +0 -24
  43. data/lib/sylfy/service/keggrest/restKegg_get.rb +0 -130
@@ -0,0 +1,71 @@
1
+ #
2
+ # UniSysDB library in Ruby
3
+ # Copyright (C) 2012
4
+ #
5
+ # @author Natapol Pornputtapong <natapol@chalmers.se>
6
+ #
7
+ require 'open-uri'
8
+ require 'net/http'
9
+ require 'json'
10
+
11
+ require 'sylfy/service/pubchemrest'
12
+
13
+ module Sylfy
14
+
15
+ module Service
16
+
17
+ module PubChem
18
+
19
+ module_function
20
+
21
+ # Method for setting inchi data member
22
+ #
23
+ # == Parameters:
24
+ # id::
25
+ # LipidMap id to search
26
+ # :id, :dataPrimarySource, :xrefs, :relations :inchi, :formula, :smiles, :inchiKey :names
27
+ def idbyinchi(inchi)
28
+ result = []
29
+ if inchi =~ /^InChI\=1S\/[A-Za-z0-9]+(\/[cnpqbtmsih][A-Za-z0-9\-\+\(\)\,]+)+$/
30
+ REST::compound(Rubabel[inchi, :inchi].write(:inchikey), 'inchikey', "cids")["IdentifierList"]["CID"].each {|e| result.push("urn:miriam:pubchem.compound:#{e}")}
31
+ elsif inchi =~ /^[A-Z]{14}\-[A-Z]{10}(\-[A-N])?/
32
+ REST::compound(inchi, 'inchikey', "cids")["IdentifierList"]["CID"].each {|e| result.push("urn:miriam:pubchem.compound:#{e}")}
33
+ end
34
+
35
+ return result
36
+ end
37
+
38
+ # Method for setting inchi data member
39
+ #
40
+ # == Parameters:
41
+ # id::
42
+ # LipidMap id to search
43
+ # :id, :dataPrimarySource, :xrefs, :relations :inchi, :formula, :smiles, :inchiKey :names
44
+ def getnames(inchi)
45
+ result = []
46
+ inchi = Rubabel[inchi, :inchi].to_s(:inchikey) if inchi =~ /^InChI\=1S\/[A-Za-z0-9]+(\/[cnpqbtmsih][A-Za-z0-9\-\+\(\)\,]+)+$/
47
+
48
+ if inchi =~ /^[A-Z]{14}\-[A-Z]{10}(\-[A-N])?/
49
+ Sylfy::Service::PubChem::REST.compound(inchi, :inchikey, "property/IUPACName")["PropertyTable"]["Properties"].each {|e| result.push(e["IUPACName"])}
50
+ Sylfy::Service::PubChem::REST.compound(inchi, :inchikey, :synonyms)["InformationList"]["Information"].each {|e| result += e["Synonym"]}
51
+ end
52
+
53
+ return result.uniq[0..21]
54
+ end
55
+ end
56
+ end
57
+ end
58
+
59
+
60
+
61
+ #require 'json'
62
+ #require './unisys.rb'
63
+
64
+ #http://pubchem.ncbi.nlm.nih.gov/rest/pug/assay/aid/1000/sids/XML?sids_type=inactive
65
+
66
+ #p JSON.load(Unisys::Service::RESTPubChem.assay("1000", :aid, :sids, :JSON ,{:sids_type => :inactive}))
67
+ #p JSON.load(Unisys::Service::RESTPubChem.substance("747285", "sourceid/DTP.NCI"))
68
+ #p JSON.load(Unisys::Service::RESTPubChem.compound("2244", :cid, "property/MolecularFormula,CanonicalSMILES,InChI,InChIKey,IUPACName", "JSON"))
69
+ #p Unisys::Service::RESTPubChem.getSmallMolecule(2244, :cid)
70
+ #p Unisys::Service::RESTPubChem.idconv('D00001')
71
+ #p JSON.load(Unisys::Service::RESTPubChem.compound("LMFA08040013", 'xref/RegistryID', "property/MolecularFormula,CanonicalSMILES,InChI,InChIKey,IUPACName", "JSON"))
@@ -0,0 +1,249 @@
1
+ #
2
+ # UniSysDB library in Ruby
3
+ # Copyright (C) 2012
4
+ #
5
+ # @author Natapol Pornputtapong <natapol@chalmers.se>
6
+ #
7
+ require 'open-uri'
8
+ require 'net/http'
9
+ require 'json'
10
+
11
+ module Sylfy
12
+
13
+ module Service
14
+
15
+
16
+ module PubChem
17
+
18
+ module REST
19
+ @@baseuri = "http://pubchem.ncbi.nlm.nih.gov/rest/pug"
20
+ @@output_type = [:XML, :ASNT, :ASNB, :JSON, :JSONP, :SDF, :CSV, :PNG, :TXT]
21
+ @@main_oper = [:record, :aids, :sids, :cids]
22
+ @@cmp_property = ["MolecularFormula", "MolecularWeight", "CanonicalSMILES", "IsomericSMILES", "InChI", "InChIKey", "IUPACName", "XLogP", "ExactMass", \
23
+ "MonoisotopicMass", "TPSA", "Complexity", "Charge", "HBondDonorCount", "HBondAcceptorCount", "RotatableBondCount", "HeavyAtomCount", \
24
+ "IsotopeAtomCount", "AtomStereoCount", "DefinedAtomStereoCount", "UndefinedAtomStereoCount", "BondStereoCount", "DefinedBondStereoCount", \
25
+ "UndefinedBondStereoCount", "CovalentUnitCount", "Volume3D", "XStericQuadrupole3D", "YStericQuadrupole3D", "ZStericQuadrupole3D", "FeatureCount3D", \
26
+ "FeatureAcceptorCount3D", "FeatureDonorCount3D", "FeatureAnionCount3D", "FeatureCationCount3D", "FeatureRingCount3D", "FeatureHydrophobeCount3D", \
27
+ "ConformerModelRMSD3D", "EffectiveRotorCount3D", "ConformerCount3D"]
28
+ @@xref_ns = ['RegistryID', 'RN', 'PubMedID', 'MMDBID', 'ProteinGI', 'NucleotideGI', 'TaxonomyID', 'MIMID', 'GeneID', 'ProbeID', 'PatentID']
29
+ @@xref_oper = ['RegistryID', 'RN', 'PubMedID', 'MMDBID', 'DBURL', 'SBURL', 'ProteinGI', 'NucleotideGI', 'TaxonomyID', 'MIMID', 'GeneID', 'ProbeID', 'PatentID']
30
+
31
+ @@assay_type = ['all', 'confirmatory', 'doseresponse', 'onhold', 'panel', 'rnai', 'screening', 'summary']
32
+
33
+ #http://pubchem.ncbi.nlm.nih.gov/rest/pug/<input specification>/<operation specification>/[<output specification>][?<operation_options>]
34
+
35
+ #<input specification> = <domain>/<namespace>/<identifiers>
36
+ # <domain> = substance | compound | assay | <other inputs>
37
+ # compound domain <namespace> = cid | name | smiles | inchi | sdf | inchikey | <structure search> | <xref> | listkey
38
+ # <structure search> = {substructure | superstructure | similarity | identity}/{smiles | inchi | sdf | cid}
39
+ # <xref> = xref/{RegistryID | RN | PubMedID | MMDBID | ProteinGI | NucleotideGI | TaxonomyID | MIMID | GeneID | ProbeID | PatentID}
40
+ # substance domain <namespace> = sid | sourceid/<source name> | sourceall/<source name> | name | <xref> | listkey
41
+ # <source name> = any valid PubChem depositor name
42
+ # assay domain <namespace> = aid | listkey | type/<assay type> | sourceall/<source name>
43
+ # <assay type> = all | confirmatory | doseresponse | onhold | panel | rnai | screening | summary
44
+ # <other inputs> = sources/[substance, assay]
45
+ # <identifiers> = comma-separated list of positive integers (cid, sid, aid) or identifier strings (source, inchikey, listkey); single identifier string (name, smiles, xref; inchi, sdf by POST only)
46
+ #
47
+ #
48
+ #compound domain <operation specification> = record | <compound property> | synonyms | sids | cids | aids | assaysummary | classification
49
+ # <compound property> = property / [comma-separated list of property tags]
50
+ #substance domain <operation specification> = record | synonyms | sids | cids | aids | assaysummary | classification
51
+ #assay domain <operation specification> = record | aids | sids | cids | description | targets/<target type> | <doseresponse> | summary
52
+ # target_type = {ProteinGI, ProteinName, GeneID, GeneSymbol}
53
+ # <doseresponse> = doseresponse/sid
54
+ #
55
+ #
56
+ #<output specification> = XML | ASNT | ASNB | JSON | JSONP [ ?callback=<callback name> ] | SDF | CSV | PNG | TXT
57
+
58
+ module_function
59
+
60
+ def perform(input, operation = '', output = :JSON, option = nil)
61
+
62
+ option_text = []
63
+ option.each_pair{|k, v| option_text.push("#{k.to_s}=#{v.to_s}")} if option.class == Hash
64
+
65
+ if @@output_type.include?(output.to_sym)
66
+ uri = "#{@@baseuri}/#{URI.escape(input, "[] ")}"
67
+ uri += "/#{operation}" if operation != nil && operation != ''
68
+ uri += "/#{output}"
69
+ uri += "?#{option_text.join(',')}" if option_text.length > 0
70
+
71
+ case output.to_sym
72
+ when :JSON
73
+ JSON.parse(URI.parse(uri).read().strip())
74
+ else
75
+ return URI.parse(uri).read().strip()
76
+ end
77
+
78
+ else
79
+ raise Sylfy::Service::ParameterError, "Wrong output type. Should be #{@@output_type.inspect}"
80
+ end
81
+
82
+ end
83
+
84
+ # Method for setting inchi data member
85
+ #
86
+ # == Parameters:
87
+ # id::
88
+ # LipidMap id to search
89
+ # :id, :dataPrimarySource, :xrefs, :relations :inchi, :formula, :smiles, :inchiKey :names
90
+ def substance(identifiers, namespace, operation = '', output = :JSON, option = nil)
91
+
92
+ oper = @@main_oper + [:synonyms, :assaysummary, :classification]
93
+ ns = [:sid, :name, :listkey]
94
+
95
+ tmp_operation = ""
96
+
97
+ if ns.include?(namespace.to_sym)
98
+ namespace = namespace.to_s
99
+ else
100
+ namespace = namespace.to_s.split(/\//)
101
+ if ['sourceid', 'sourceall'].include?(namespace[0])
102
+ namespace = namespace.join('/')
103
+ elsif namespace[0] == 'xref' && @@xref_ns.include?(namespace[1])
104
+ namespace = namespace[0..2].join('/')
105
+ else
106
+ raise ServiceException::ParameterError, "Wrong domain type. Should be #{ns.join(', ')}, \
107
+ xref/{#{@@xref_ns.join(' | ')}}, \
108
+ sourceid/<source name> or sourceall/<source name>"
109
+ end
110
+ end
111
+
112
+ if oper.include?(operation.to_sym)
113
+ tmp_operation = operation.to_s
114
+ else
115
+ tmp_operation = ""
116
+ end
117
+
118
+
119
+
120
+ begin
121
+ return perform("substance/#{namespace}/#{identifiers.to_s}", tmp_operation, output, option)
122
+ rescue OpenURI::HTTPError
123
+ return {}
124
+ end
125
+
126
+ end
127
+
128
+ # Method for setting inchi data member
129
+ #
130
+ # == Parameters:
131
+ # id::
132
+ # LipidMap id to search
133
+ # :id, :dataPrimarySource, :xrefs, :relations :inchi, :formula, :smiles, :inchiKey :names
134
+ def compound(identifiers, namespace, operation = '', output = :JSON, option = nil)
135
+ oper = @@main_oper + [:synonyms, :assaysummary, :classification]
136
+ ns = [:cid, :name, :smiles, :inchi, :sdf, :inchikey, :listkey]
137
+
138
+ tmp_operation = ""
139
+
140
+ if ns.include?(namespace.to_sym)
141
+ namespace = namespace.to_s
142
+ else
143
+ namespace = namespace.to_s.split(/\//)
144
+ if ['substructure', 'superstructure', 'similarity', 'identity'].include?(namespace[0]) && ['smiles', 'inchi', 'sdf', 'cid'].include?(namespace[1])
145
+ namespace = namespace[0..1].join('/')
146
+ elsif namespace[0] == 'xref' && @@xref_ns.include?(namespace[1])
147
+ namespace = namespace[0..2].join('/')
148
+ else
149
+ raise ServiceException::ParameterError, "Wrong domain type. Should be #{ns.join(', ')}, \
150
+ xref/{#{@@xref_ns.join(' | ')}} or \
151
+ {substructure | superstructure | similarity | identity}/{smiles | inchi | sdf | cid}"
152
+ end
153
+ end
154
+
155
+ if oper.include?(operation.to_sym)
156
+ tmp_operation = operation.to_s
157
+ else
158
+ operation = operation.to_s.split(/\//)
159
+ if operation[0] == 'property' #&& @@cmp_property.repeated_permutation(n).include?()
160
+ tmp_operation = operation[0..1].join('/')
161
+ elsif operation[0] == 'xrefs' && @@xref_oper.include?(operation[1])
162
+ tmp_operation = operation[0..1].join('/')
163
+ else
164
+ tmp_operation = ""
165
+ end
166
+ end
167
+
168
+ begin
169
+ return perform("compound/#{namespace}/#{identifiers.to_s}", tmp_operation, output, option)
170
+ rescue OpenURI::HTTPError
171
+ return {}
172
+ end
173
+
174
+ end
175
+
176
+ # Method for setting inchi data member
177
+ #
178
+ # == Parameters:
179
+ # id::
180
+ # LipidMap id to search
181
+ # :id, :dataPrimarySource, :xrefs, :relations :inchi, :formula, :smiles, :inchiKey :names
182
+ def assay(identifiers, namespace, operation = '', output = :JSON, option = nil)
183
+ oper = @@main_oper + [:description]
184
+ ns = [:aid, :listkey]
185
+
186
+ tmp_operation = ""
187
+
188
+ if ns.include?(namespace.to_sym)
189
+ namespace = namespace.to_s
190
+ else
191
+ namespace = namespace.split(/\//)
192
+ if namespace[0] == 'type' && @@assay_type.include?(namespace[1])
193
+ namespace = namespace[0..1].join('/')
194
+ elsif namespace[0] == 'sourceall'
195
+ namespace = namespace[0..1].join('/')
196
+ else
197
+ raise ServiceException::ParameterError, "Wrong domain type. Should be #{ns.join(', ')}, \
198
+ type/{#{@@assay_type.join(' | ')}} or sourceall/<source name>"
199
+ end
200
+ end
201
+
202
+ if oper.include?(operation.to_sym)
203
+ tmp_operation = operation.to_s
204
+ elsif operation.to_s =~ /^targets\/([\w,]+)/ #target_type = {ProteinGI, ProteinName, GeneID, GeneSymbol}
205
+ tmp_operation = operation.to_s
206
+ elsif operation.to_s =~ /^doseresponse\/([\w,]+)/ #doseresponse/sid
207
+ tmp_operation = operation.to_s
208
+ else
209
+ tmp_operation = ""
210
+ end
211
+
212
+ begin
213
+ return perform("assay/#{namespace}/#{identifiers.to_s}", tmp_operation, output, option)
214
+ rescue OpenURI::HTTPError
215
+ return {}
216
+ end
217
+
218
+ end
219
+
220
+ # Method for setting inchi data member
221
+ #
222
+ # == Parameters:
223
+ # id::
224
+ # LipidMap id to search
225
+ # :id, :dataPrimarySource, :xrefs, :relations :inchi, :formula, :smiles, :inchiKey :names
226
+ def idconv(id)
227
+ return JSON.load(compound(id, 'xref/RegistryID', "cids"))["IdentifierList"]["CID"]
228
+ end
229
+
230
+
231
+ end
232
+
233
+ end
234
+ end
235
+ end
236
+
237
+
238
+
239
+ #require 'json'
240
+ #require './unisys.rb'
241
+
242
+ #http://pubchem.ncbi.nlm.nih.gov/rest/pug/assay/aid/1000/sids/XML?sids_type=inactive
243
+
244
+ #p JSON.load(Unisys::Service::RESTPubChem.assay("1000", :aid, :sids, :JSON ,{:sids_type => :inactive}))
245
+ #p JSON.load(Unisys::Service::RESTPubChem.substance("747285", "sourceid/DTP.NCI"))
246
+ #p JSON.load(Unisys::Service::RESTPubChem.compound("2244", :cid, "property/MolecularFormula,CanonicalSMILES,InChI,InChIKey,IUPACName", "JSON"))
247
+ #p Unisys::Service::RESTPubChem.getSmallMolecule(2244, :cid)
248
+ #p Unisys::Service::RESTPubChem.idconv('D00001')
249
+ #p JSON.load(Unisys::Service::RESTPubChem.compound("LMFA08040013", 'xref/RegistryID', "property/MolecularFormula,CanonicalSMILES,InChI,InChIKey,IUPACName", "JSON"))
@@ -0,0 +1,26 @@
1
+ # @author Natapol Pornputtapong <natapol@chalmers.se>
2
+ #
3
+ require 'open-uri'
4
+ require 'net/http'
5
+ require 'rexml/document'
6
+ require 'json'
7
+ require 'yaml'
8
+
9
+ require 'sylfy/service/ensemblrest/xrefs.rb'
10
+ require 'sylfy/service/ensemblrest/archive.rb'
11
+ require 'sylfy/service/ensemblrest/comparative.rb'
12
+
13
+ module Sylfy
14
+
15
+ module Service
16
+
17
+ module RESTInclude
18
+
19
+ def resolve(args)
20
+ #code
21
+ end
22
+ end
23
+
24
+ end
25
+
26
+ end
@@ -0,0 +1,78 @@
1
+ #
2
+ # Systems biology library for Ruby (Sylfy)
3
+ # Copyright:: Copyright (C) 2006
4
+ # Toshiaki Katayama <k@bioruby.org>
5
+ # Copyright (C) 2012-2013
6
+ #
7
+ # author: Natapol Pornputtapong <natapol@chalmers.se>
8
+ #
9
+ # Documentation: Natapol Pornputtapong (RDoc'd and embellished by William Webber)
10
+ #
11
+
12
+ # raise "Please, use ruby 1.9.0 or later." if RUBY_VERSION < "1.9.0"
13
+
14
+ require 'savon'
15
+ #namespaces = {
16
+ # "xmlns:v2" => "http://v2.example.com",
17
+ #}
18
+ #
19
+ #Savon.client(namespaces: namespaces)
20
+ # debug log_level: :debug, log: true, pretty_print_xml: true
21
+ module Sylfy
22
+ # A module supports as interfaces for web services
23
+ module Service
24
+
25
+ class SOAPWSDL
26
+ # Initialize SOAP service
27
+ #
28
+ # == Parameters:
29
+ # wsdl::
30
+ #
31
+ # options::
32
+ #
33
+ def initialize(wsdl, options = {})
34
+ @options = options
35
+ @options[:wsdl] = wsdl
36
+ @options[:log] = false if !@options.has_key?(:log)
37
+ @options[:pretty_print_xml] = true if @options.has_key?(:log_level) && @options[:log_level] == :debug
38
+ @client = Savon.client(@options)
39
+ end
40
+
41
+ # List of methods defined by WSDL
42
+ def list_methods
43
+ @client.operations
44
+ end
45
+
46
+ def method_missing(m, *args, &block)
47
+ response = @client.call(m, message: args[0])
48
+ if @options[:log_level] == :debug
49
+ puts response.body
50
+ puts response.success? # => false
51
+ puts response.soap_fault? # => true
52
+ puts response.http_error?
53
+ end
54
+
55
+ if response.body[:"#{m}_response"].has_key?(:"#{m}_return")
56
+ result = response.body[:"#{m}_response"][:"#{m}_return"]
57
+ else
58
+ result = response.body[:"#{m}_response"][:return]
59
+ end
60
+
61
+ if result.class == Hash
62
+ result.delete_if {|k, v| k.to_s =~ /^@/}
63
+ return result.empty? ? "" : result
64
+ else
65
+ return result
66
+ end
67
+ end
68
+
69
+ private :method_missing
70
+ end
71
+
72
+ end
73
+ end
74
+
75
+
76
+ #a = Sylfy::Service::SOAPWSDL.new('http://www.ebi.ac.uk/webservices/chebi/2.0/webservice?wsdl')
77
+ #p a.list_methods
78
+ #p a.get_complete_entity(chebiId: '15377').keys #to_xml
@@ -0,0 +1,106 @@
1
+ #
2
+ # Sylfy library in Ruby
3
+ # Copyright (C) 2012
4
+ #
5
+ # @author Natapol Pornputtapong <natapol@chalmers.se>
6
+ #
7
+ require 'open-uri'
8
+ require 'net/http'
9
+ require 'json'
10
+
11
+
12
+ module Sylfy
13
+
14
+ module Service
15
+
16
+ module UniChem
17
+
18
+ module REST
19
+
20
+ @@baseuri = "https://www.ebi.ac.uk/unichem/rest"
21
+ NAMEURIMAPPING = {
22
+ chembl: "chembl.compound",
23
+ drugbank: "drugbank",
24
+ pdb: "pdb",
25
+ iuphar: "iuphar.ligand",
26
+ kegg_ligand: "kegg.compound",
27
+ chebi: "chebi",
28
+ #emolecules: "",
29
+ #ibm: "",
30
+ #atlas: "",
31
+ #patents: "",
32
+ #fdasrs: "",
33
+ #surechem: "",
34
+ pharmgkb: "pharmgkb.drug",
35
+ #pubchem_tpharma: "",
36
+ hmdb: "hmdb",
37
+ pubchem: "pubchem.compound"
38
+ #mcule: ""
39
+ }
40
+
41
+ module_function
42
+
43
+ def perform(input)
44
+
45
+ uri = "#{@@baseuri}/#{input}"
46
+
47
+ begin
48
+ return JSON.parse(open(uri, "content_type" => 'application/json').read().strip())
49
+ rescue OpenURI::HTTPError
50
+ return JSON.parse("{}")
51
+ end
52
+ end
53
+
54
+ def src_compound_id(src_cpd_id, src_id = 1, to_src_id = nil, all = false)
55
+ input = "src_compound_id#{all == true ? "_all" : ''}/#{src_cpd_id}/#{src_id}#{to_src_id != nil ? "/#{to_src_id}" : ""}"
56
+ return perform(input)
57
+ end
58
+
59
+ def src_compound_id_all(src_cpd_id, src_id = 1, to_src_id = nil)
60
+ return src_compound_id(src_cpd_id, src_id, to_src_id, true)
61
+ end
62
+
63
+ def mapping(src_id, to_src_id)
64
+ input = "mapping/#{src_id}/#{to_src_id}"
65
+ return perform(input)
66
+ end
67
+
68
+ def inchikey(key, all = false)
69
+ input = "inchikey#{all == true ? "_all" : ''}/#{key}"
70
+ return perform(input)
71
+ end
72
+
73
+ def inchikey_all(key)
74
+ return inchikey(key, true)
75
+ end
76
+
77
+ def structure(src_cpd_id, src_id)
78
+ input = "structure/#{src_cpd_id}/#{src_id}"
79
+ return perform(input)
80
+ end
81
+
82
+ def verbose_inchikey(key)
83
+ input = "verbose_inchikey/#{key}"
84
+ return perform(input)
85
+ end
86
+ end
87
+
88
+ module_function
89
+
90
+ def idbyinchi(inchi)
91
+ result = []
92
+ inchi = Rubabel[inchi, :inchi].to_s(:inchikey) if inchi =~ Sylfy::Pattern::INCHI
93
+
94
+ if inchi =~ Sylfy::Pattern::INCHIKEY
95
+ REST.verbose_inchikey(inchi).each do |entry|
96
+ if REST::NAMEURIMAPPING.has_key?(entry["name"].to_sym)
97
+ entry["src_compound_id"].each {|e| result.push("urn:miriam:#{REST::NAMEURIMAPPING[entry["name"].to_sym]}:#{e}")}
98
+ end
99
+ end
100
+ end
101
+
102
+ return result
103
+ end
104
+ end
105
+ end
106
+ end