ols 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,7 @@
1
+ === 0.2.0 2011-11-07
2
+
3
+ * Addition of a basic cache layer. Users can now cache regularly used ontologies on disk.
4
+
1
5
  === 0.1.0 2011-11-04
2
6
 
3
7
  * Total rewrite (as a result please note API changes)...
@@ -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 # => "EMAP:3018"
26
- ont.term_name # => "TS18,nose"
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? # => false
31
- ont.is_leaf? # => false
32
- ont.to_s # => "EMAP:3018 - TS18,nose"
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 # => Array of all parent terms objects
37
- ont.children # => Array of all direct child term objects
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! # => Will load all parents and children into the graph
42
- ont.size # => 19
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
- term_name = request(:get_term_by_id) { soap.body = { :termId => term_id } }
86
- raise TermNotFoundError if term_name.eql?(term_id)
87
- OLS::Term.new(term_id,term_name)
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')
@@ -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
@@ -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.find_by_id etc.
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
@@ -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
 
@@ -2,5 +2,5 @@
2
2
 
3
3
  module OLS
4
4
  # OLS::VERSION - The OLS gem version
5
- VERSION = "0.1.0"
5
+ VERSION = "0.2.0"
6
6
  end
@@ -0,0 +1,9 @@
1
+ ---
2
+ EMAP:
3
+ :filenames:
4
+ - EMAP0.marshal
5
+ :date: 2011-11-07
6
+ MP:
7
+ :filenames:
8
+ - MP0000001.marshal
9
+ :date: 2011-11-07
@@ -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
@@ -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.1.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-04 00:00:00.000000000 Z
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: &2152733760 !ruby/object:Gem::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: *2152733760
24
+ version_requirements: *2152592920
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rake
27
- requirement: &2152733260 !ruby/object:Gem::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: *2152733260
35
+ version_requirements: *2152592420
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: shoulda
38
- requirement: &2152732720 !ruby/object:Gem::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: *2152732720
46
+ version_requirements: *2152591680
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: vcr
49
- requirement: &2152731500 !ruby/object:Gem::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: *2152731500
57
+ version_requirements: *2152590620
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: webmock
60
- requirement: &2152730520 !ruby/object:Gem::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: *2152730520
68
+ version_requirements: *2152589180
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: simplecov
71
- requirement: &2152728460 !ruby/object:Gem::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: *2152728460
79
+ version_requirements: *2152587220
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: simplecov-rcov
82
- requirement: &2152727120 !ruby/object:Gem::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: *2152727120
90
+ version_requirements: *2152585760
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: mocha
93
- requirement: &2152725360 !ruby/object:Gem::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: *2152725360
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: