ols 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +4 -0
- data/README.rdoc +46 -9
- data/lib/ols.rb +62 -5
- data/lib/ols/cache.rb +120 -0
- data/lib/ols/graph.rb +2 -1
- data/lib/ols/term.rb +3 -0
- data/lib/ols/version.rb +1 -1
- data/test/fixtures/EMAP0.marshal +0 -0
- data/test/fixtures/MP0000001.marshal +0 -0
- data/test/fixtures/cached_ontologies.yaml +9 -0
- data/test/test_ols_cache.rb +106 -0
- data/test/test_ols_term.rb +2 -6
- metadata +27 -18
data/History.txt
CHANGED
data/README.rdoc
CHANGED
@@ -22,24 +22,24 @@ Then, to lookup an ontology term:
|
|
22
22
|
|
23
23
|
This will create a simple tree object for the EMAP term EMAP:3018
|
24
24
|
|
25
|
-
ont.term_id
|
26
|
-
ont.term_name
|
25
|
+
ont.term_id # => "EMAP:3018"
|
26
|
+
ont.term_name # => "TS18,nose"
|
27
27
|
|
28
28
|
Find out about your ontology term
|
29
29
|
|
30
|
-
ont.is_root?
|
31
|
-
ont.is_leaf?
|
32
|
-
ont.to_s
|
30
|
+
ont.is_root? # => false
|
31
|
+
ont.is_leaf? # => false
|
32
|
+
ont.to_s # => "EMAP:3018 - TS18,nose"
|
33
33
|
|
34
34
|
The graph for the term is built up (parents) and down (children) as it is requested:
|
35
35
|
|
36
|
-
ont.parents
|
37
|
-
ont.children
|
36
|
+
ont.parents # => Array of all parent terms objects
|
37
|
+
ont.children # => Array of all direct child term objects
|
38
38
|
|
39
39
|
Alternatively, if you want to force load the graph (around this term):
|
40
40
|
|
41
|
-
ont.focus_graph!
|
42
|
-
ont.size
|
41
|
+
ont.focus_graph! # => Will load all parents and children into the graph
|
42
|
+
ont.size # => 19
|
43
43
|
|
44
44
|
Find out more about your graph:
|
45
45
|
|
@@ -76,6 +76,43 @@ Visualise your graph (useful for exploring):
|
|
76
76
|
# |---> EMAP:3021
|
77
77
|
#
|
78
78
|
|
79
|
+
More documentation can be found on the OLS module and OLS::Term rdoc pages.
|
80
|
+
|
81
|
+
== Advanced Usage
|
82
|
+
|
83
|
+
More to come...
|
84
|
+
|
85
|
+
== Caching
|
86
|
+
|
87
|
+
If you regularly hit up one or more ontology with lots of queries it might be in
|
88
|
+
your interest to store a local on-disk copy of the entire ontology graph. This
|
89
|
+
will protect you against network problems and will stop you hitting OLS with many
|
90
|
+
repeated service calls.
|
91
|
+
|
92
|
+
The OLS gem has a basic caching layer built into it that allows you to store the
|
93
|
+
entire graph for your most used ontologies on disk. To setup/invoke the cache, do
|
94
|
+
the following:
|
95
|
+
|
96
|
+
OLS.setup_cache({ :directory => '/tmp/ols_cache' })
|
97
|
+
|
98
|
+
This will create a cache directory (/tmp/ols_cache) if it does not exist, or read in
|
99
|
+
configuration files etc if it is an already existing OLS cache directory. If you do not
|
100
|
+
pass in a configuration hash it will use the current working directory by default.
|
101
|
+
|
102
|
+
Now, to add an ontology to the cache, you do the following:
|
103
|
+
|
104
|
+
OLS.add_ontology_to_cache("EMAP")
|
105
|
+
|
106
|
+
This will add the entire EMAP ontology graph to the cache (this will take a while) - now
|
107
|
+
all calls for EMAP terms will go via the cache, all other queries will still call the OLS web
|
108
|
+
services. (There is no dynamic cache build-up over time).
|
109
|
+
|
110
|
+
To remove an ontology graph from the cache:
|
111
|
+
|
112
|
+
OLS.remove_ontology_from_cache("EMAP")
|
113
|
+
|
114
|
+
Different cache back-ends and other features will be built into future releases.
|
115
|
+
|
79
116
|
== Meta
|
80
117
|
|
81
118
|
Written by Darren Oakley (daz dot oakley at gmail dot com)
|
data/lib/ols.rb
CHANGED
@@ -82,17 +82,23 @@ module OLS
|
|
82
82
|
# @return [OLS::Term] An OLS::Term object for the requested ontology id
|
83
83
|
# @raise OLS::TermNotFoundError Raised if the requested ontology id cannot be found
|
84
84
|
def find_by_id(term_id)
|
85
|
-
|
86
|
-
|
87
|
-
|
85
|
+
term = nil
|
86
|
+
|
87
|
+
term = @cache.find_by_id(term_id) if using_cache?
|
88
|
+
|
89
|
+
if term.nil?
|
90
|
+
term_name = request(:get_term_by_id) { soap.body = { :termId => term_id } }
|
91
|
+
raise TermNotFoundError if term_name.eql?(term_id)
|
92
|
+
term = OLS::Term.new(term_id,term_name)
|
93
|
+
end
|
94
|
+
|
95
|
+
term
|
88
96
|
end
|
89
97
|
|
90
98
|
# Set whether to log HTTP requests - pass in +true+ or +false+
|
91
99
|
attr_writer :log
|
92
100
|
|
93
101
|
# Returns whether to log HTTP/SOAP requests. Defaults to +false+
|
94
|
-
#
|
95
|
-
# @return [Boolean] To log or not to log, that is the question...
|
96
102
|
def log?
|
97
103
|
@log ? true : false
|
98
104
|
end
|
@@ -121,6 +127,56 @@ module OLS
|
|
121
127
|
@proxy ||= ( ENV['http_proxy'] || ENV['HTTP_PROXY'] )
|
122
128
|
end
|
123
129
|
|
130
|
+
# Are we using a local cache? Defaults to +false+.
|
131
|
+
# @see #setup_cache
|
132
|
+
# @since 0.2.0
|
133
|
+
def using_cache?
|
134
|
+
@cache ? true : false
|
135
|
+
end
|
136
|
+
|
137
|
+
# Configure the OLS gem to use a local cache. Useful if you have some serious ontology
|
138
|
+
# activity going on, or you want to insulate yourself from server outages and the like.
|
139
|
+
#
|
140
|
+
# *NOTE:* We only support a file-based (on-disk) cache at the moment. By default it will
|
141
|
+
# look in/use the current working directory, or you can pass a configuration hash as follows:
|
142
|
+
#
|
143
|
+
# OLS.setup_cache({ :directory => '/path/to/cache_directory' })
|
144
|
+
#
|
145
|
+
# Support for other cache backends will come in future builds.
|
146
|
+
#
|
147
|
+
# @since 0.2.0
|
148
|
+
def setup_cache(options={})
|
149
|
+
@cache = OLS::Cache.new(options)
|
150
|
+
end
|
151
|
+
|
152
|
+
# Returns a list of the cached ontologies.
|
153
|
+
#
|
154
|
+
# @return [Array] A list of the cached ontologies
|
155
|
+
# @since 0.2.0
|
156
|
+
def cached_ontologies
|
157
|
+
@cache.cached_ontologies
|
158
|
+
end
|
159
|
+
|
160
|
+
# Add an ontology to the cache.
|
161
|
+
#
|
162
|
+
# @param [String] ontology The ontology to add
|
163
|
+
# @raise [ArgumentError] Raised if the ontology is not part of OLS
|
164
|
+
# @since 0.2.0
|
165
|
+
def add_ontology_to_cache(ontology)
|
166
|
+
@cache.add_ontology_to_cache(ontology)
|
167
|
+
end
|
168
|
+
|
169
|
+
alias :refresh_ontology_in_cache :add_ontology_to_cache
|
170
|
+
|
171
|
+
# Remove an ontology from the cache.
|
172
|
+
#
|
173
|
+
# @param [String] ontology The ontology to remove
|
174
|
+
# @raise [ArgumentError] Raised if the ontology is not part of OLS
|
175
|
+
# @since 0.2.0
|
176
|
+
def remove_ontology_from_cache(ontology)
|
177
|
+
@cache.remove_ontology_from_cache(ontology)
|
178
|
+
end
|
179
|
+
|
124
180
|
private
|
125
181
|
|
126
182
|
# Helper function to initialize the (Savon) SOAP client
|
@@ -148,3 +204,4 @@ directory = File.expand_path(File.dirname(__FILE__))
|
|
148
204
|
require File.join(directory, 'ols', 'version')
|
149
205
|
require File.join(directory, 'ols', 'graph')
|
150
206
|
require File.join(directory, 'ols', 'term')
|
207
|
+
require File.join(directory, 'ols', 'cache')
|
data/lib/ols/cache.rb
ADDED
@@ -0,0 +1,120 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module OLS
|
4
|
+
|
5
|
+
# Utility class responsible for handling caching in the OLS gem. You should *NOT*
|
6
|
+
# really interact with instances of this class directly, use the methods on the OLS
|
7
|
+
# module and the resulting OLS::Term objects.
|
8
|
+
#
|
9
|
+
# @author Darren Oakley (https://github.com/dazoakley)
|
10
|
+
class Cache
|
11
|
+
# Creates a new OLS::Cache object and scans the cache directory for cached terms.
|
12
|
+
def initialize(args={})
|
13
|
+
options = { :directory => Dir.getwd }.merge(args)
|
14
|
+
@cache_directory = options[:directory]
|
15
|
+
|
16
|
+
prepare_cache
|
17
|
+
end
|
18
|
+
|
19
|
+
# Pull an OLS::Term object out of the cache. Returns +nil+ if the term is not found.
|
20
|
+
#
|
21
|
+
# @param [String] term_id The ontology term_id to look up
|
22
|
+
# @return [OLS::Term] The found OLS::Term object or +nil+
|
23
|
+
def find_by_id(term_id)
|
24
|
+
found_term = nil
|
25
|
+
filename = @term_id_to_files[term_id].to_s
|
26
|
+
|
27
|
+
unless filename.nil? || filename.empty?
|
28
|
+
Dir.chdir(@cache_directory) do
|
29
|
+
root_term = Marshal.load( File.open(filename) )
|
30
|
+
found_term = root_term.send(:find_in_graph,term_id)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
found_term
|
35
|
+
end
|
36
|
+
|
37
|
+
# Returns a list of the cached ontologies.
|
38
|
+
#
|
39
|
+
# @return [Array] A list of the cached ontologies
|
40
|
+
def cached_ontologies
|
41
|
+
@cached_ontologies.keys
|
42
|
+
end
|
43
|
+
|
44
|
+
# Add an ontology to the cache.
|
45
|
+
#
|
46
|
+
# @param [String] ontology The ontology to add
|
47
|
+
# @raise [ArgumentError] Raised if the ontology is not part of OLS
|
48
|
+
def add_ontology_to_cache(ontology)
|
49
|
+
raise ArgumentError, "'#{ontology}' is not a valid OLS ontology" unless OLS.ontologies.include?(ontology)
|
50
|
+
|
51
|
+
new_filenames = []
|
52
|
+
|
53
|
+
Dir.chdir(@cache_directory) do
|
54
|
+
OLS.root_terms(ontology).each do |term|
|
55
|
+
term_filename = "#{term.term_id.gsub(':','')}.marshal"
|
56
|
+
term.focus_graph!
|
57
|
+
File.open("#{term_filename}",'w') { |f| f << Marshal.dump(term) }
|
58
|
+
@cached_ontologies[ontology] ||= { :filenames => [], :date => Date.today }
|
59
|
+
@cached_ontologies[ontology][:filenames].push(term_filename) unless @cached_ontologies[ontology][:filenames].include? term_filename
|
60
|
+
new_filenames.push(term_filename)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
@cached_ontologies[ontology][:filenames].delete_if { |file| !new_filenames.include?(file) }
|
65
|
+
|
66
|
+
write_cached_ontologies_to_disk
|
67
|
+
prepare_cache
|
68
|
+
end
|
69
|
+
|
70
|
+
alias :refresh_ontology_in_cache :add_ontology_to_cache
|
71
|
+
|
72
|
+
# Remove an ontology from the cache.
|
73
|
+
#
|
74
|
+
# @param [String] ontology The ontology to remove
|
75
|
+
# @raise [ArgumentError] Raised if the ontology is not part of OLS
|
76
|
+
def remove_ontology_from_cache(ontology)
|
77
|
+
raise ArgumentError, "'#{ontology}' is not part of the cache" unless OLS.ontologies.include?(ontology)
|
78
|
+
|
79
|
+
Dir.chdir(@cache_directory) do
|
80
|
+
@cached_ontologies[ontology][:filenames].each do |file|
|
81
|
+
File.delete(file)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
@cached_ontologies.delete(ontology)
|
86
|
+
|
87
|
+
write_cached_ontologies_to_disk
|
88
|
+
prepare_cache
|
89
|
+
end
|
90
|
+
|
91
|
+
private
|
92
|
+
|
93
|
+
# writes the @cached_ontologies variable to disk
|
94
|
+
def write_cached_ontologies_to_disk
|
95
|
+
Dir.chdir(@cache_directory) do
|
96
|
+
File.open('cached_ontologies.yaml','w') { |f| f << @cached_ontologies.to_yaml }
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
# Utility function to prepare the cache.
|
101
|
+
def prepare_cache
|
102
|
+
@cached_ontologies = {}
|
103
|
+
@term_id_to_files = {}
|
104
|
+
|
105
|
+
Dir.mkdir(@cache_directory) unless Dir.exists?(@cache_directory)
|
106
|
+
Dir.chdir(@cache_directory) do
|
107
|
+
@cached_ontologies = YAML.load( File.open('cached_ontologies.yaml') ) if File.exists?('cached_ontologies.yaml')
|
108
|
+
|
109
|
+
@cached_ontologies.each do |ontology,details|
|
110
|
+
details[:filenames].each do |filename|
|
111
|
+
root_term = Marshal.load( File.open(filename) )
|
112
|
+
next unless root_term.is_a? OLS::Term
|
113
|
+
@term_id_to_files[ root_term.term_id ] = filename.to_sym
|
114
|
+
root_term.all_child_ids.each { |term_id| @term_id_to_files[term_id] = filename.to_sym }
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
data/lib/ols/graph.rb
CHANGED
@@ -3,7 +3,8 @@
|
|
3
3
|
module OLS
|
4
4
|
|
5
5
|
# Utility class for representing an ontology graph. You should *NOT* really interact with
|
6
|
-
# instances of this class directly, use OLS
|
6
|
+
# instances of this class directly, use the methods on the OLS module and the resulting
|
7
|
+
# OLS::Term objects.
|
7
8
|
#
|
8
9
|
# @author Darren Oakley (https://github.com/dazoakley)
|
9
10
|
class Graph
|
data/lib/ols/term.rb
CHANGED
@@ -13,6 +13,9 @@ module OLS
|
|
13
13
|
# @param [String] term_id The ontology term id
|
14
14
|
# @param [String] term_name The ontology term name
|
15
15
|
def initialize(term_id,term_name,graph=nil)
|
16
|
+
raise ArgumentError, "term_id cannot be empty/nil" if term_id.nil? || term_id =~ /^\s$/
|
17
|
+
raise ArgumentError, "term_name cannot be empty/nil" if term_name.nil? || term_name =~ /^\s$/
|
18
|
+
|
16
19
|
@term_id = term_id
|
17
20
|
@term_name = term_name
|
18
21
|
|
data/lib/ols/version.rb
CHANGED
Binary file
|
Binary file
|
@@ -0,0 +1,106 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class OLSTermTest < Test::Unit::TestCase
|
4
|
+
context 'An OLS::Cache object' do
|
5
|
+
setup do
|
6
|
+
@cache_directory = "#{File.expand_path(File.dirname(__FILE__))}/fixtures"
|
7
|
+
OLS.setup_cache({ :directory => @cache_directory })
|
8
|
+
|
9
|
+
if OLS.cached_ontologies.include?('TRANS')
|
10
|
+
Dir.chdir(@cache_directory) do
|
11
|
+
Dir.glob('TRANS*').each do |file|
|
12
|
+
File.delete(file)
|
13
|
+
end
|
14
|
+
File.open('cached_ontologies.yaml','w') do |file|
|
15
|
+
file << { 'EMAP' => ['EMAP0.marshal'], 'MP' => ['MP0000001.marshal'] }.to_yaml
|
16
|
+
end
|
17
|
+
end
|
18
|
+
OLS.setup_cache({ :directory => @cache_directory })
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
teardown do
|
23
|
+
OLS.instance_variable_set(:@cache,nil)
|
24
|
+
end
|
25
|
+
|
26
|
+
should 'read in a fixture/cache directory of marshalled objects upon initialisation' do
|
27
|
+
cache = OLS.instance_variable_get(:@cache)
|
28
|
+
assert cache.is_a? OLS::Cache
|
29
|
+
assert OLS.using_cache?
|
30
|
+
assert cache.instance_variable_get(:@term_id_to_files).size > 10000
|
31
|
+
end
|
32
|
+
|
33
|
+
should 'be able to access ontology data without connecting to the OLS service' do
|
34
|
+
OLS.stubs(:request).returns(nil)
|
35
|
+
|
36
|
+
assert_respond_to OLS.instance_variable_get(:@cache), :find_by_id
|
37
|
+
|
38
|
+
emap_term = OLS.find_by_id('EMAP:3018')
|
39
|
+
|
40
|
+
assert emap_term.is_a? OLS::Term
|
41
|
+
assert_equal 'EMAP:3018', emap_term.term_id
|
42
|
+
assert_equal 'EMAP:0', emap_term.root.term_id
|
43
|
+
assert_equal 13731, emap_term.size
|
44
|
+
|
45
|
+
# Also check that we can re-request the terms easily without object bumping into each other...
|
46
|
+
emap_term2 = OLS.find_by_id('EMAP:3018')
|
47
|
+
emap_term.focus_graph!
|
48
|
+
|
49
|
+
assert_equal 19, emap_term.size
|
50
|
+
assert_equal 13731, emap_term2.size
|
51
|
+
|
52
|
+
OLS.unstub(:request)
|
53
|
+
end
|
54
|
+
|
55
|
+
should 'not get in the way when we request something that is not in the cache' do
|
56
|
+
VCR.use_cassette('test_ols_cache') do
|
57
|
+
assert_equal nil, OLS.instance_variable_get(:@cache).instance_variable_get(:@term_id_to_files)['GO:0008150']
|
58
|
+
|
59
|
+
biological_process = OLS.find_by_id('GO:0008150')
|
60
|
+
|
61
|
+
assert biological_process.is_a? OLS::Term
|
62
|
+
assert biological_process.is_root?
|
63
|
+
assert_equal false, biological_process.is_leaf?
|
64
|
+
assert_equal 28, biological_process.children.size
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
should 'setup/manage cached objects for the user' do
|
69
|
+
Dir.chdir(@cache_directory) do
|
70
|
+
files = Dir.glob('*')
|
71
|
+
assert files.include?('cached_ontologies.yaml')
|
72
|
+
assert_equal false, files.include?('TRANS0000000.marshal')
|
73
|
+
end
|
74
|
+
|
75
|
+
VCR.use_cassette('test_ols_cache') do
|
76
|
+
# list cached ontologies
|
77
|
+
assert OLS.cached_ontologies.is_a? Array
|
78
|
+
assert OLS.cached_ontologies.include? 'EMAP'
|
79
|
+
assert OLS.cached_ontologies.include? 'MP'
|
80
|
+
|
81
|
+
# add a new ontology to the cache
|
82
|
+
assert OLS.ontologies.keys.include? 'TRANS'
|
83
|
+
OLS.add_ontology_to_cache('TRANS')
|
84
|
+
assert OLS.cached_ontologies.include? 'TRANS'
|
85
|
+
|
86
|
+
Dir.chdir(@cache_directory) do
|
87
|
+
files = Dir.glob('*')
|
88
|
+
assert files.include?('TRANS0000000.marshal')
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
trans = OLS.find_by_id('TRANS:0000000')
|
93
|
+
assert_equal 25, trans.size
|
94
|
+
|
95
|
+
VCR.use_cassette('test_ols_cache') do
|
96
|
+
# remove an ontology from the cache
|
97
|
+
OLS.remove_ontology_from_cache('TRANS')
|
98
|
+
assert_equal false, OLS.cached_ontologies.include?('TRANS')
|
99
|
+
Dir.chdir(@cache_directory) do
|
100
|
+
files = Dir.glob('*')
|
101
|
+
assert_equal false, files.include?('TRANS0000000.marshal')
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
data/test/test_ols_term.rb
CHANGED
@@ -397,9 +397,7 @@ class OLSTermTest < Test::Unit::TestCase
|
|
397
397
|
OLS.stubs(:request).returns(nil)
|
398
398
|
|
399
399
|
# check the stubbing is okay...
|
400
|
-
foo = OLS.find_by_id('EMAP:3003')
|
401
|
-
foo.focus_graph!
|
402
|
-
assert_equal 1, foo.size
|
400
|
+
assert_raise(ArgumentError) { foo = OLS.find_by_id('EMAP:3003') }
|
403
401
|
|
404
402
|
# now get on with testing marshal...
|
405
403
|
data = Marshal.dump(@emap_term)
|
@@ -423,9 +421,7 @@ class OLSTermTest < Test::Unit::TestCase
|
|
423
421
|
require 'yaml'
|
424
422
|
|
425
423
|
# check the stubbing is okay...
|
426
|
-
foo = OLS.find_by_id('EMAP:3003')
|
427
|
-
foo.focus_graph!
|
428
|
-
assert_equal 1, foo.size
|
424
|
+
assert_raise(ArgumentError) { foo = OLS.find_by_id('EMAP:3003') }
|
429
425
|
|
430
426
|
# now get on with testing yaml...
|
431
427
|
data = @emap_term.to_yaml
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ols
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-11-
|
12
|
+
date: 2011-11-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: savon
|
16
|
-
requirement: &
|
16
|
+
requirement: &2152592920 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2152592920
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rake
|
27
|
-
requirement: &
|
27
|
+
requirement: &2152592420 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2152592420
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: shoulda
|
38
|
-
requirement: &
|
38
|
+
requirement: &2152591680 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2152591680
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: vcr
|
49
|
-
requirement: &
|
49
|
+
requirement: &2152590620 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *2152590620
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: webmock
|
60
|
-
requirement: &
|
60
|
+
requirement: &2152589180 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *2152589180
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: simplecov
|
71
|
-
requirement: &
|
71
|
+
requirement: &2152587220 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *2152587220
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: simplecov-rcov
|
82
|
-
requirement: &
|
82
|
+
requirement: &2152585760 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *2152585760
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: mocha
|
93
|
-
requirement: &
|
93
|
+
requirement: &2152584200 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,7 +98,7 @@ dependencies:
|
|
98
98
|
version: '0'
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *2152584200
|
102
102
|
description: ! "\n OLS provides a simple interface to the EBI's Ontology Lookup
|
103
103
|
Service (http://www.ebi.ac.uk/ontology-lookup/).\n It provides an easy lookup
|
104
104
|
of ontology terms and automagically builds up ontology trees for you.\n "
|
@@ -114,13 +114,18 @@ files:
|
|
114
114
|
- README.rdoc
|
115
115
|
- Rakefile
|
116
116
|
- lib/ols.rb
|
117
|
+
- lib/ols/cache.rb
|
117
118
|
- lib/ols/graph.rb
|
118
119
|
- lib/ols/term.rb
|
119
120
|
- lib/ols/version.rb
|
120
121
|
- ols.gemspec
|
121
122
|
- script/console
|
123
|
+
- test/fixtures/EMAP0.marshal
|
124
|
+
- test/fixtures/MP0000001.marshal
|
125
|
+
- test/fixtures/cached_ontologies.yaml
|
122
126
|
- test/test_helper.rb
|
123
127
|
- test/test_ols.rb
|
128
|
+
- test/test_ols_cache.rb
|
124
129
|
- test/test_ols_graph.rb
|
125
130
|
- test/test_ols_term.rb
|
126
131
|
homepage: https://github.com/dazoakley/ols
|
@@ -148,8 +153,12 @@ signing_key:
|
|
148
153
|
specification_version: 3
|
149
154
|
summary: A simple wrapper around the EBI's Ontology Lookup Service (OLS)
|
150
155
|
test_files:
|
156
|
+
- test/fixtures/EMAP0.marshal
|
157
|
+
- test/fixtures/MP0000001.marshal
|
158
|
+
- test/fixtures/cached_ontologies.yaml
|
151
159
|
- test/test_helper.rb
|
152
160
|
- test/test_ols.rb
|
161
|
+
- test/test_ols_cache.rb
|
153
162
|
- test/test_ols_graph.rb
|
154
163
|
- test/test_ols_term.rb
|
155
164
|
has_rdoc:
|