1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
class Dataset
attr_reader :uri, :members
# key: /datasets
# set: dataset uris
# key: :dataset_uri/compounds
# set: compound uris
# key: :dataset_uri/features
# set: feature uris
# key: :dataset_uri/compound/:inchi
# set: feature uris
def initialize(uri)
@uri = uri
end
def name
URI.unescape File.basename(uri)
end
def self.create(uri)
@@redis.set_add "datasets", uri
Dataset.new(uri)
end
def self.find(uri)
Dataset.new(uri) if @@redis.set_member? "datasets", uri
end
def self.find_or_create(uri)
Dataset.find(uri) or Dataset.create(uri)
end
def self.find_all
@@redis.set_members "datasets"
end
def compounds
@@redis.set_members(File.join(@uri,'compounds'))
end
def features
@@redis.set_members(File.join(@uri,'features'))
end
def compound_features(compound_uri)
@@redis.set_members(File.join(@uri,'compound',inchi(compound_uri)))
end
def add(yaml)
YAML.load(yaml).each do |compound_uri,feature_uris|
@@redis.set_add File.join(@uri,'compounds'), compound_uri
feature_uris.each do |feature_uri|
@@redis.set_add File.join(@uri,'features'), feature_uri
@@redis.set_add File.join(@uri,'compound',inchi(compound_uri)), feature_uri
end
end
end
def delete
@@redis.set_members(File.join(@uri,'compounds')).each do |compound_uri|
@@redis.delete File.join(@uri,'compound',inchi(compound_uri))
end
@@redis.delete(File.join(@uri,'compounds'))
@@redis.delete(File.join(@uri,'features'))
@@redis.delete @uri
@@redis.set_delete "datasets", @uri
end
def inchi(compound_uri)
inchi = compound_uri.sub(/^.*\/InChI/,'InChI')
end
end
|