summaryrefslogtreecommitdiff
path: root/redis/dataset.rb
blob: f7fafa09ec5ffeb8ef408e6da47751b5f7181a2a (plain)
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