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