bark 0.0.2
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.
- checksums.yaml +7 -0
- data/.gitignore +43 -0
- data/.travis.yml +3 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +45 -0
- data/LICENSE.txt +4 -0
- data/README.md +96 -0
- data/Rakefile +10 -0
- data/bark.gemspec +39 -0
- data/lib/bark.rb +109 -0
- data/lib/bark/request.rb +77 -0
- data/lib/bark/request/graph_of_life.rb +76 -0
- data/lib/bark/request/studies.rb +82 -0
- data/lib/bark/request/taxonomy.rb +78 -0
- data/lib/bark/request/tnrs.rb +75 -0
- data/lib/bark/request/tree_of_life.rb +91 -0
- data/lib/bark/response.rb +51 -0
- data/lib/bark/version.rb +3 -0
- data/spec/lib/bark_spec.rb +87 -0
- data/spec/lib/request/graph_of_life_spec.rb +44 -0
- data/spec/lib/request/studies_spec.rb +74 -0
- data/spec/lib/request/taxonomy_spec.rb +44 -0
- data/spec/lib/request/tnrs_spec.rb +44 -0
- data/spec/lib/request/tree_of_life_spec.rb +44 -0
- data/spec/lib/request_spec.rb +20 -0
- data/spec/lib/response_spec.rb +22 -0
- data/spec/lib/shared_tests_spec.rb +29 -0
- data/spec/shared_tests.rb +87 -0
- data/spec/shared_tests_helper.rb +115 -0
- data/spec/spec_helper.rb +23 -0
- metadata +184 -0
@@ -0,0 +1,76 @@
|
|
1
|
+
class Bark::Request::GraphOfLife < Bark::Request
|
2
|
+
|
3
|
+
API_VERSION = 'v2'
|
4
|
+
SEARCH_BASE = [Bark::Request::BASE_URL, API_VERSION, 'graph'].join("/")
|
5
|
+
|
6
|
+
# Method: {parameters}
|
7
|
+
METHODS = {
|
8
|
+
gol_about: %i{},
|
9
|
+
gol_source_tree: %i{},
|
10
|
+
gol_node_info: %i{}, # tree_id "is superflous and can be ignored"
|
11
|
+
}
|
12
|
+
|
13
|
+
# node_ids or ott_ids are required in some cases, so this
|
14
|
+
# will have to be cased
|
15
|
+
REQUIRED_PARAMS = {
|
16
|
+
}
|
17
|
+
|
18
|
+
mrp = {}
|
19
|
+
|
20
|
+
REQUIRED_PARAMS.each do |k,v|
|
21
|
+
v.each do |m|
|
22
|
+
mrp[m].push(k) if mrp[m]
|
23
|
+
mrp[m] ||= [k]
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
METHODS_REQUIRED_PARAMS = mrp
|
28
|
+
|
29
|
+
def initialize(method: :tol_about, params: {})
|
30
|
+
assign_options(method: method, params: params)
|
31
|
+
build_uri if valid?
|
32
|
+
end
|
33
|
+
|
34
|
+
def assign_options(method: method, params: params)
|
35
|
+
@method = method
|
36
|
+
@params = params
|
37
|
+
@params ||= {}
|
38
|
+
end
|
39
|
+
|
40
|
+
def valid?
|
41
|
+
raise "Method #{@method} not recognized." if @method && !self.class::METHODS.keys.include?(@method)
|
42
|
+
!@method.nil? && params_are_supported? && has_required_params?
|
43
|
+
end
|
44
|
+
|
45
|
+
def has_required_params?
|
46
|
+
case @method
|
47
|
+
when :gol_of_life
|
48
|
+
end
|
49
|
+
return true
|
50
|
+
end
|
51
|
+
|
52
|
+
def json_payload
|
53
|
+
JSON.generate(@params)
|
54
|
+
end
|
55
|
+
|
56
|
+
private
|
57
|
+
|
58
|
+
# TODO: this doesn't feel right (or could be generalized out to superclass)
|
59
|
+
def build_uri
|
60
|
+
@uri = URI( SEARCH_BASE + '/' + send("#{@method}_url") )
|
61
|
+
end
|
62
|
+
|
63
|
+
def gol_about_url
|
64
|
+
'about'
|
65
|
+
end
|
66
|
+
|
67
|
+
def gol_source_tree_url
|
68
|
+
'source_tree'
|
69
|
+
end
|
70
|
+
|
71
|
+
def gol_node_info_url
|
72
|
+
'node_info'
|
73
|
+
end
|
74
|
+
|
75
|
+
|
76
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
class Bark::Request::Studies < Bark::Request
|
2
|
+
|
3
|
+
API_VERSION = 'v2'
|
4
|
+
FORMAT = 'json'
|
5
|
+
SEARCH_BASE = [Bark::Request::BASE_URL, API_VERSION].join("/")
|
6
|
+
|
7
|
+
# Studies methods are slightly different because of the API differences
|
8
|
+
METHODS = {
|
9
|
+
studies_find_studies: %i{property value exact verbose},
|
10
|
+
studies_find_trees: %i{property value exact verbose},
|
11
|
+
studies_properties: %i{},
|
12
|
+
get_study: %i{study_id}, # GET, not post
|
13
|
+
get_study_tree: %i{study_id tree_id}, # GET, not post
|
14
|
+
}
|
15
|
+
|
16
|
+
REQUIRED_PARAMS = {
|
17
|
+
study_id: %i{study get_study_tree},
|
18
|
+
tree_id: %i{get_study_tree},
|
19
|
+
property: %i{studies_find_trees},
|
20
|
+
value: %i{studies_find_trees}
|
21
|
+
}
|
22
|
+
|
23
|
+
mrp = {}
|
24
|
+
|
25
|
+
REQUIRED_PARAMS.each do |k,v|
|
26
|
+
v.each do |m|
|
27
|
+
mrp[m].push(k) if mrp[m]
|
28
|
+
mrp[m] ||= [k]
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
METHODS_REQUIRED_PARAMS = mrp
|
33
|
+
|
34
|
+
# Only studies takes a method parameter
|
35
|
+
attr_accessor :method
|
36
|
+
|
37
|
+
def initialize(method: :study_list, params: {})
|
38
|
+
assign_options(method: method, params: params)
|
39
|
+
build_uri if valid?
|
40
|
+
end
|
41
|
+
|
42
|
+
def assign_options(method: method, params: params)
|
43
|
+
@method = method.to_sym
|
44
|
+
@params = params
|
45
|
+
end
|
46
|
+
|
47
|
+
def valid?
|
48
|
+
raise "Method #{@method} not recognized." if @method && !Bark::Request::Studies::METHODS.keys.include?(@method)
|
49
|
+
!@method.nil? && params_are_supported? && has_required_params?
|
50
|
+
end
|
51
|
+
|
52
|
+
def json_payload
|
53
|
+
JSON.generate(@params)
|
54
|
+
end
|
55
|
+
|
56
|
+
private
|
57
|
+
|
58
|
+
# TODO: this doesn't feel right
|
59
|
+
def build_uri
|
60
|
+
@uri = URI( SEARCH_BASE + send("#{@method}_url") )
|
61
|
+
end
|
62
|
+
|
63
|
+
def studies_find_studies_url
|
64
|
+
'/studies/find_studies'
|
65
|
+
end
|
66
|
+
|
67
|
+
def studies_find_trees_url
|
68
|
+
'/studies/find_trees'
|
69
|
+
end
|
70
|
+
|
71
|
+
def studies_properties_url
|
72
|
+
'/studies/properties'
|
73
|
+
end
|
74
|
+
|
75
|
+
def get_study_tree_url
|
76
|
+
"/study/#{@params[:study_id]}/tree/#{@params[:tree_id]}"
|
77
|
+
end
|
78
|
+
|
79
|
+
def get_study_url
|
80
|
+
'/study/' + @params[:study_id].to_s
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
class Bark::Request::Taxonomy < Bark::Request
|
2
|
+
|
3
|
+
API_VERSION = 'v2'
|
4
|
+
SEARCH_BASE = [Bark::Request::BASE_URL, API_VERSION, 'taxonomy'].join("/")
|
5
|
+
|
6
|
+
# Method: {parameters}
|
7
|
+
METHODS = {
|
8
|
+
taxonomy_about: %i{},
|
9
|
+
taxonomy_lica: %i{},
|
10
|
+
taxonomy_subtree: %i{},
|
11
|
+
taxonomy_taxon: %i{},
|
12
|
+
}
|
13
|
+
|
14
|
+
REQUIRED_PARAMS = {
|
15
|
+
}
|
16
|
+
|
17
|
+
mrp = {}
|
18
|
+
|
19
|
+
REQUIRED_PARAMS.each do |k,v|
|
20
|
+
v.each do |m|
|
21
|
+
mrp[m].push(k) if mrp[m]
|
22
|
+
mrp[m] ||= [k]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
METHODS_REQUIRED_PARAMS = mrp
|
27
|
+
|
28
|
+
def initialize(method: :tol_about, params: {})
|
29
|
+
assign_options(method: method, params: params)
|
30
|
+
build_uri if valid?
|
31
|
+
end
|
32
|
+
|
33
|
+
def assign_options(method: method, params: params)
|
34
|
+
@method = method
|
35
|
+
@params = params
|
36
|
+
@params ||= {}
|
37
|
+
end
|
38
|
+
|
39
|
+
def valid?
|
40
|
+
raise "Method #{@method} not recognized." if @method && !self.class::METHODS.keys.include?(@method)
|
41
|
+
!@method.nil? && params_are_supported? && has_required_params?
|
42
|
+
end
|
43
|
+
|
44
|
+
def has_required_params?
|
45
|
+
case @method
|
46
|
+
when :taxonomy_about
|
47
|
+
end
|
48
|
+
return true
|
49
|
+
end
|
50
|
+
|
51
|
+
def json_payload
|
52
|
+
JSON.generate(@params)
|
53
|
+
end
|
54
|
+
|
55
|
+
private
|
56
|
+
|
57
|
+
# TODO: this doesn't feel right (or could be generalized out to superclass)
|
58
|
+
def build_uri
|
59
|
+
@uri = URI( SEARCH_BASE + '/' + send("#{@method}_url") )
|
60
|
+
end
|
61
|
+
|
62
|
+
def taxonomy_about_url
|
63
|
+
'about'
|
64
|
+
end
|
65
|
+
|
66
|
+
def taxonomy_lica_url
|
67
|
+
'lica'
|
68
|
+
end
|
69
|
+
|
70
|
+
def taxonomy_subtree_url
|
71
|
+
'subtree'
|
72
|
+
end
|
73
|
+
|
74
|
+
def taxonomy_taxon_url
|
75
|
+
'taxon'
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
class Bark::Request::Tnrs < Bark::Request
|
2
|
+
|
3
|
+
API_VERSION = 'v2'
|
4
|
+
SEARCH_BASE = [Bark::Request::BASE_URL, API_VERSION, 'tnrs'].join("/")
|
5
|
+
|
6
|
+
# Method: {parameters}
|
7
|
+
METHODS = {
|
8
|
+
tnrs_match_names: %i{},
|
9
|
+
tnrs_contexts: %i{},
|
10
|
+
tnrs_infer_context: %i{},
|
11
|
+
}
|
12
|
+
|
13
|
+
# node_ids or ott_ids are required in some cases, so this
|
14
|
+
# will have to be cased
|
15
|
+
REQUIRED_PARAMS = {
|
16
|
+
}
|
17
|
+
|
18
|
+
mrp = {}
|
19
|
+
|
20
|
+
REQUIRED_PARAMS.each do |k,v|
|
21
|
+
v.each do |m|
|
22
|
+
mrp[m].push(k) if mrp[m]
|
23
|
+
mrp[m] ||= [k]
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
METHODS_REQUIRED_PARAMS = mrp
|
28
|
+
|
29
|
+
def initialize(method: :tol_about, params: {})
|
30
|
+
assign_options(method: method, params: params)
|
31
|
+
build_uri if valid?
|
32
|
+
end
|
33
|
+
|
34
|
+
def assign_options(method: method, params: params)
|
35
|
+
@method = method
|
36
|
+
@params = params
|
37
|
+
@params ||= {}
|
38
|
+
end
|
39
|
+
|
40
|
+
def valid?
|
41
|
+
raise "Method #{@method} not recognized." if @method && !self.class::METHODS.keys.include?(@method)
|
42
|
+
!@method.nil? && params_are_supported? && has_required_params?
|
43
|
+
end
|
44
|
+
|
45
|
+
def has_required_params?
|
46
|
+
#case @method
|
47
|
+
#when :foo
|
48
|
+
#end
|
49
|
+
return true
|
50
|
+
end
|
51
|
+
|
52
|
+
def json_payload
|
53
|
+
JSON.generate(@params)
|
54
|
+
end
|
55
|
+
|
56
|
+
private
|
57
|
+
|
58
|
+
# TODO: this doesn't feel right (or could be generalized out to superclass)
|
59
|
+
def build_uri
|
60
|
+
@uri = URI( SEARCH_BASE + '/' + send("#{@method}_url") )
|
61
|
+
end
|
62
|
+
|
63
|
+
def tnrs_match_names_url
|
64
|
+
'match_names'
|
65
|
+
end
|
66
|
+
|
67
|
+
def tnrs_contexts_url
|
68
|
+
'contexts'
|
69
|
+
end
|
70
|
+
|
71
|
+
def tnrs_infer_context_url
|
72
|
+
'infer_context'
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
class Bark::Request::TreeOfLife < Bark::Request
|
2
|
+
|
3
|
+
API_VERSION = 'v2'
|
4
|
+
SEARCH_BASE = [Bark::Request::BASE_URL, API_VERSION, 'tree_of_life'].join("/")
|
5
|
+
|
6
|
+
# Method: {parameters}
|
7
|
+
METHODS = {
|
8
|
+
tol_about: %i{},
|
9
|
+
tol_mrca: %i{node_ids ott_ids},
|
10
|
+
tol_subtree: %i{node_id ott_id}, # tree_id "is superflous and can be ignored"
|
11
|
+
tol_induced_subtree: %i{node_ids ott_ids},
|
12
|
+
}
|
13
|
+
|
14
|
+
# node_ids or ott_ids are required in some cases, so this
|
15
|
+
# will have to be cased
|
16
|
+
REQUIRED_PARAMS = {
|
17
|
+
}
|
18
|
+
|
19
|
+
mrp = {}
|
20
|
+
|
21
|
+
REQUIRED_PARAMS.each do |k,v|
|
22
|
+
v.each do |m|
|
23
|
+
mrp[m].push(k) if mrp[m]
|
24
|
+
mrp[m] ||= [k]
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
METHODS_REQUIRED_PARAMS = mrp
|
29
|
+
|
30
|
+
def initialize(method: :tol_about, params: {})
|
31
|
+
assign_options(method: method, params: params)
|
32
|
+
build_uri if valid?
|
33
|
+
end
|
34
|
+
|
35
|
+
def assign_options(method: method, params: params)
|
36
|
+
@method = method
|
37
|
+
@params = params
|
38
|
+
@params ||= {}
|
39
|
+
end
|
40
|
+
|
41
|
+
def valid?
|
42
|
+
raise "Method #{@method} not recognized." if @method && !self.class::METHODS.keys.include?(@method)
|
43
|
+
!@method.nil? && params_are_supported? && has_required_params?
|
44
|
+
end
|
45
|
+
|
46
|
+
def has_required_params?
|
47
|
+
case @method
|
48
|
+
when :tol_mrca, :tol_induced_subtree
|
49
|
+
return false if @params == {}
|
50
|
+
# Both empty
|
51
|
+
return false if ((@params[:node_ids] == []) || @params[:node_ids].nil?) && ((@params[:ott_ids] == []) || @params[:ott_ids].nil?)
|
52
|
+
when :tol_subtree
|
53
|
+
# Both provided
|
54
|
+
return false if !@params[:node_id].nil? && !@params[:ott_id].nil?
|
55
|
+
# Neither provided
|
56
|
+
return false unless !@params[:node_id].nil? || !@params[:ott_id].nil?
|
57
|
+
when :tol_about
|
58
|
+
else
|
59
|
+
raise "Curious, #{@method} is not a method."
|
60
|
+
end
|
61
|
+
return true
|
62
|
+
end
|
63
|
+
|
64
|
+
def json_payload
|
65
|
+
JSON.generate(@params)
|
66
|
+
end
|
67
|
+
|
68
|
+
private
|
69
|
+
|
70
|
+
# TODO: this doesn't feel right (or could be generalized out to superclass)
|
71
|
+
def build_uri
|
72
|
+
@uri = URI( SEARCH_BASE + '/' + send("#{@method}_url") )
|
73
|
+
end
|
74
|
+
|
75
|
+
def tol_about_url
|
76
|
+
'about'
|
77
|
+
end
|
78
|
+
|
79
|
+
def tol_mrca_url
|
80
|
+
'mrca'
|
81
|
+
end
|
82
|
+
|
83
|
+
def tol_subtree_url
|
84
|
+
'subtree'
|
85
|
+
end
|
86
|
+
|
87
|
+
def tol_induced_subtree_url
|
88
|
+
'induced_subtree'
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
class Bark
|
2
|
+
class Response
|
3
|
+
|
4
|
+
# All OT responses are in json format. The json is stored here as a hash (dictionary).
|
5
|
+
attr_reader :json
|
6
|
+
|
7
|
+
def initialize(request: {})
|
8
|
+
raise 'No request passed' if request == {} || request.nil?
|
9
|
+
# warn Bark::Error, 'Warning request is not valid, making it anyway.' if !request.valid?
|
10
|
+
|
11
|
+
@json = {}
|
12
|
+
|
13
|
+
|
14
|
+
if [:get_study, :get_study_tree ].include?( request.method )
|
15
|
+
req = Net::HTTP::Get.new(request.uri)
|
16
|
+
else
|
17
|
+
req = Net::HTTP::Post.new(request.uri, initheader = {'Content-Type' =>'application/json'})
|
18
|
+
end
|
19
|
+
|
20
|
+
res = Net::HTTP.start(request.uri.hostname, request.uri.port) do |http|
|
21
|
+
req.body = request.json_payload
|
22
|
+
http.request(req)
|
23
|
+
end
|
24
|
+
|
25
|
+
parse_json(res.body)
|
26
|
+
end
|
27
|
+
|
28
|
+
# Parse the json, and store it in @json.
|
29
|
+
def parse_json(string)
|
30
|
+
begin
|
31
|
+
@json = JSON.parse(string)
|
32
|
+
rescue JSON::ParserError => e
|
33
|
+
puts e.message
|
34
|
+
ap request
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def request_succeeded?
|
39
|
+
!@json['exception'] && !@json['error']
|
40
|
+
end
|
41
|
+
|
42
|
+
def request_failure_message
|
43
|
+
@json['message']
|
44
|
+
end
|
45
|
+
|
46
|
+
def result
|
47
|
+
@json
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|