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.
@@ -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: