intermine 0.98.06 → 0.98.08
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/Rakefile +8 -1
- data/lib/intermine/model.rb +7 -3
- data/lib/intermine/query.rb +99 -8
- data/lib/intermine/results.rb +32 -23
- data/lib/intermine/version.rb +1 -1
- metadata +4 -4
data/Rakefile
CHANGED
@@ -52,10 +52,17 @@ end
|
|
52
52
|
|
53
53
|
Rake::TestTask.new(:live_tests) do |t|
|
54
54
|
t.libs << "test"
|
55
|
-
t.test_files = FileList['test/live_test.rb']
|
55
|
+
t.test_files = FileList['test/live_test.rb'] << FileList['test/live_summary_test.rb']
|
56
56
|
t.verbose = true
|
57
57
|
end
|
58
58
|
|
59
|
+
Rake::TestTask.new(:live_summary) do |t|
|
60
|
+
t.libs << "test"
|
61
|
+
t.test_files = FileList['test/live_summary_test.rb']
|
62
|
+
t.verbose = true
|
63
|
+
end
|
64
|
+
|
65
|
+
|
59
66
|
Rake::RDocTask.new do |t|
|
60
67
|
t.title = 'InterMine Webservice Client Documentation'
|
61
68
|
t.rdoc_files.include 'README.rdoc'
|
data/lib/intermine/model.rb
CHANGED
@@ -27,6 +27,10 @@ module Metadata
|
|
27
27
|
#
|
28
28
|
class Model
|
29
29
|
|
30
|
+
FLOAT_TYPES = ["Float", "Double", "float", "double"]
|
31
|
+
INT_TYPES = ["Integer", "int", "long", "Long", "short", "Short"]
|
32
|
+
BOOL_TYPES = ["Boolean", "boolean"]
|
33
|
+
NUMERIC_TYPES = FLOAT_TYPES | INT_TYPES
|
30
34
|
|
31
35
|
# The name of the model
|
32
36
|
attr_reader :name
|
@@ -497,9 +501,9 @@ module Metadata
|
|
497
501
|
#
|
498
502
|
def to_module
|
499
503
|
if @module.nil?
|
500
|
-
nums =
|
501
|
-
ints =
|
502
|
-
bools =
|
504
|
+
nums = Model::FLOAT_TYPES
|
505
|
+
ints = Model::INT_TYPES
|
506
|
+
bools = Model::BOOL_TYPES
|
503
507
|
|
504
508
|
supers = @extends.map { |x| @model.get_cd(x).to_module }
|
505
509
|
|
data/lib/intermine/query.rb
CHANGED
@@ -276,6 +276,12 @@ module InterMine::PathQuery
|
|
276
276
|
# URLs for internal consumption.
|
277
277
|
attr_reader :list_upload_uri, :list_append_uri
|
278
278
|
|
279
|
+
# The number of rows to return - defaults to nil (all rows)
|
280
|
+
attr_accessor :size
|
281
|
+
|
282
|
+
# The index of the first row to return - defaults to 0 (first row)
|
283
|
+
attr_accessor :start
|
284
|
+
|
279
285
|
# Construct a new query object. You should not use this directly.
|
280
286
|
# Instead use the factory methods in Service.
|
281
287
|
#
|
@@ -290,6 +296,8 @@ module InterMine::PathQuery
|
|
290
296
|
if root
|
291
297
|
@root = InterMine::Metadata::Path.new(root, model).rootClass
|
292
298
|
end
|
299
|
+
@size = nil
|
300
|
+
@start = 0
|
293
301
|
@constraints = []
|
294
302
|
@joins = []
|
295
303
|
@views = []
|
@@ -377,6 +385,38 @@ module InterMine::PathQuery
|
|
377
385
|
return Results::ResultsReader.new(@url, self, start, size)
|
378
386
|
end
|
379
387
|
|
388
|
+
# Set the maximum number of rows this query will return.
|
389
|
+
#
|
390
|
+
# This method can be used to set a default maximum size for
|
391
|
+
# a query. Set to nil for all rows. The value given here
|
392
|
+
# will be overridden by any value supplied by #each_row
|
393
|
+
# or #each_result, unless that value is nil, in which
|
394
|
+
# case this value will be used. If unset, the query will return all results.
|
395
|
+
#
|
396
|
+
# Returns self for method chaining.
|
397
|
+
#
|
398
|
+
# See also #size= and #offset
|
399
|
+
#
|
400
|
+
def limit(size)
|
401
|
+
@size = size
|
402
|
+
return self
|
403
|
+
end
|
404
|
+
|
405
|
+
# Set the index of the first row of results this query will return.
|
406
|
+
#
|
407
|
+
# This method can be used to set a value for the query offset.
|
408
|
+
# The value given here will be overridden by any value supplied by #each_row
|
409
|
+
# or #each_result. If unset, results will start from the first row.
|
410
|
+
#
|
411
|
+
# Returns self for method chaining.
|
412
|
+
#
|
413
|
+
# See also #start= and #limit
|
414
|
+
#
|
415
|
+
def offset(start)
|
416
|
+
@start = start
|
417
|
+
return self
|
418
|
+
end
|
419
|
+
|
380
420
|
# Iterate over the results of this query one row at a time.
|
381
421
|
#
|
382
422
|
# Rows support both array-like index based access as well as
|
@@ -390,7 +430,9 @@ module InterMine::PathQuery
|
|
390
430
|
# puts r.to_h # Materialize the row an a Hash
|
391
431
|
# end
|
392
432
|
#
|
393
|
-
def each_row(start=
|
433
|
+
def each_row(start=nil, size=nil)
|
434
|
+
start = start.nil? ? @start : start
|
435
|
+
size = size.nil? ? @size : size
|
394
436
|
results_reader(start, size).each_row {|row|
|
395
437
|
yield row
|
396
438
|
}
|
@@ -405,7 +447,9 @@ module InterMine::PathQuery
|
|
405
447
|
# end
|
406
448
|
# end
|
407
449
|
#
|
408
|
-
def each_result(start=
|
450
|
+
def each_result(start=nil, size=nil)
|
451
|
+
start = start.nil? ? @start : start
|
452
|
+
size = size.nil? ? @size : size
|
409
453
|
results_reader(start, size).each_result {|row|
|
410
454
|
yield row
|
411
455
|
}
|
@@ -430,7 +474,9 @@ module InterMine::PathQuery
|
|
430
474
|
# rows.last["symbol"]
|
431
475
|
# => "eve"
|
432
476
|
#
|
433
|
-
def rows(start=
|
477
|
+
def rows(start=nil, size=nil)
|
478
|
+
start = start.nil? ? @start : start
|
479
|
+
size = size.nil? ? @size : size
|
434
480
|
res = []
|
435
481
|
results_reader(start, size).each_row {|row|
|
436
482
|
res << row
|
@@ -445,7 +491,9 @@ module InterMine::PathQuery
|
|
445
491
|
# genes.last.symbol
|
446
492
|
# => "eve"
|
447
493
|
#
|
448
|
-
def results(start=
|
494
|
+
def results(start=nil, size=nil)
|
495
|
+
start = start.nil? ? @start : start
|
496
|
+
size = size.nil? ? @size : size
|
449
497
|
res = []
|
450
498
|
results_reader(start, size).each_result {|row|
|
451
499
|
res << row
|
@@ -453,6 +501,43 @@ module InterMine::PathQuery
|
|
453
501
|
res
|
454
502
|
end
|
455
503
|
|
504
|
+
def summary_items(summary_path, start=0, size=nil)
|
505
|
+
q = self.clone
|
506
|
+
q.add_views(summary_path)
|
507
|
+
rr = q.results_reader(start, size)
|
508
|
+
if block_given?
|
509
|
+
rr.each_summary(summary_path) {|summary|
|
510
|
+
yield summary
|
511
|
+
}
|
512
|
+
else
|
513
|
+
ret = []
|
514
|
+
rr.each_summary(summary_path) {|summary|
|
515
|
+
ret << summary
|
516
|
+
}
|
517
|
+
return ret
|
518
|
+
end
|
519
|
+
end
|
520
|
+
|
521
|
+
def summarise(summary_path, start=0, size=nil)
|
522
|
+
path = make_path(add_prefix(summary_path))
|
523
|
+
q = self.clone
|
524
|
+
q.add_views(summary_path)
|
525
|
+
rr = q.results_reader(start, size)
|
526
|
+
if InterMine::Metadata::Model::NUMERIC_TYPES.include? path.end_type
|
527
|
+
h = {}
|
528
|
+
rr.each_summary(summary_path) { |summary|
|
529
|
+
h = Hash[summary.map {|k, v| [k, v.to_f]}]
|
530
|
+
}
|
531
|
+
return h
|
532
|
+
else
|
533
|
+
h = {}
|
534
|
+
rr.each_summary(summary_path) {|summary|
|
535
|
+
h[summary["item"]] = summary["count"]
|
536
|
+
}
|
537
|
+
return h
|
538
|
+
end
|
539
|
+
end
|
540
|
+
|
456
541
|
# Return all result record objects returned by running this query.
|
457
542
|
def all
|
458
543
|
return self.results
|
@@ -525,12 +610,14 @@ module InterMine::PathQuery
|
|
525
610
|
y = add_prefix(x)
|
526
611
|
if y.end_with?("*")
|
527
612
|
prefix = y.chomp(".*")
|
528
|
-
path =
|
529
|
-
attrs = path.end_cd.attributes.map {|x|
|
613
|
+
path = make_path(prefix)
|
614
|
+
attrs = path.end_cd.attributes.map {|x|
|
615
|
+
prefix + "." + x.name
|
616
|
+
}
|
530
617
|
add_views(attrs)
|
531
618
|
else
|
532
|
-
path =
|
533
|
-
path =
|
619
|
+
path = make_path(y)
|
620
|
+
path = make_path(y.to_s + ".id") unless path.is_attribute?
|
534
621
|
if @root.nil?
|
535
622
|
@root = path.rootClass
|
536
623
|
end
|
@@ -540,6 +627,10 @@ module InterMine::PathQuery
|
|
540
627
|
return self
|
541
628
|
end
|
542
629
|
|
630
|
+
def make_path(path)
|
631
|
+
return InterMine::Metadata::Path.new(path, @model, subclasses)
|
632
|
+
end
|
633
|
+
|
543
634
|
alias add_to_select add_views
|
544
635
|
|
545
636
|
# Replace any currently existing views with the given view list.
|
data/lib/intermine/results.rb
CHANGED
@@ -251,20 +251,10 @@ module InterMine::Results
|
|
251
251
|
|
252
252
|
# Iterate over the result set one ResultsRow at a time
|
253
253
|
def each_row
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
row = ResultsRow.new(line.chomp("," + $/), @query.views)
|
259
|
-
rescue => e
|
260
|
-
raise ServiceError, "Error parsing #{line}: #{e.message}"
|
261
|
-
end
|
262
|
-
yield row
|
263
|
-
else
|
264
|
-
container << line
|
265
|
-
end
|
266
|
-
end
|
267
|
-
check_result_set(container)
|
254
|
+
processor = lambda {|x| ResultsRow.new(x.chomp("," + $/), @query.views) }
|
255
|
+
read_result_set(params("jsonrows"), processor) {|x|
|
256
|
+
yield x
|
257
|
+
}
|
268
258
|
end
|
269
259
|
|
270
260
|
# Iterate over the resultset, one object at a time, where the
|
@@ -284,21 +274,40 @@ module InterMine::Results
|
|
284
274
|
#
|
285
275
|
def each_result
|
286
276
|
model = @query.model
|
277
|
+
processor = lambda {|x| model.make_new(JSON.parse(x.chomp("," + $/)))}
|
278
|
+
read_result_set(params("jsonobjects"), processor) {|x|
|
279
|
+
yield x
|
280
|
+
}
|
281
|
+
end
|
282
|
+
|
283
|
+
def each_summary(summary_path)
|
284
|
+
extra = {"summaryPath" => @query.add_prefix(summary_path)}
|
285
|
+
p = params("jsonrows").merge(extra)
|
286
|
+
processor = lambda {|x| JSON.parse(x.chomp("," + $/)) }
|
287
|
+
read_result_set(p, processor) {|x|
|
288
|
+
yield x
|
289
|
+
}
|
290
|
+
end
|
291
|
+
|
292
|
+
def read_result_set(parameters, processor)
|
287
293
|
container = ''
|
288
|
-
|
289
|
-
|
290
|
-
if line.start_with?("
|
294
|
+
in_results = false
|
295
|
+
each_line(parameters) do |line|
|
296
|
+
if line.start_with?("]")
|
297
|
+
in_results = false
|
298
|
+
end
|
299
|
+
if in_results
|
291
300
|
begin
|
292
|
-
|
293
|
-
result = model.make_new(data)
|
294
|
-
rescue JSON::ParserError => e
|
295
|
-
raise ServiceError, "Error parsing #{line}: #{e.message}"
|
301
|
+
row = processor.call(line)
|
296
302
|
rescue => e
|
297
|
-
raise ServiceError, "
|
303
|
+
raise ServiceError, "Error parsing #{line}: #{e.message}"
|
298
304
|
end
|
299
|
-
yield
|
305
|
+
yield row
|
300
306
|
else
|
301
307
|
container << line
|
308
|
+
if line.chomp($/).end_with?("[")
|
309
|
+
in_results = true
|
310
|
+
end
|
302
311
|
end
|
303
312
|
end
|
304
313
|
check_result_set(container)
|
data/lib/intermine/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: intermine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 391
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 98
|
9
|
-
-
|
10
|
-
version: 0.98.
|
9
|
+
- 8
|
10
|
+
version: 0.98.08
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Alex Kalderimis
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-10-26 00:00:00 +01:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|